{"id":"6bb5fdc4-ecf3-43d9-8e02-b667c762abd8","entityType":"agent","slug":"clawhub-eeoeofl-digen-ai-free","name":"Digen Ai Free","canonicalUrl":"https://www.xpersona.co/agent/clawhub-eeoeofl-digen-ai-free","canonicalPath":"/agent/clawhub-eeoeofl-digen-ai-free","generatedAt":"2026-10-12T05:21:32.340Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":null},"description":"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Trigg...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 961 downloads reported by the source. Last updated 10/12/2026.","installCommand":"clawhub skill install s1733vk1gkgydfttxc14pwzyk584xpk8:digen-ai-free","sourceUrl":"https://clawhub.ai/eeoeofl/digen-ai-free","homepage":"https://clawhub.ai/eeoeofl/skills/digen-ai-free","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/eeoeofl/digen-ai-free","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/eeoeofl/skills/digen-ai-free","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Digen Ai Free technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":null},"stars":null,"forks":null,"downloads":961,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.3.0","tractionLabel":"961 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:31:26.294Z","emptyReason":null},"lastUpdatedAt":"2026-10-12T01:31:26.520Z","lastCrawledAt":"2026-10-12T01:31:26.294Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-13T01:31:26.294Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.0","createdAt":"2026-04-24T10:43:39.156Z","changelog":"Added video_url_short field with TinyURL shortening for long S3 URLs.","fileCount":15,"zipByteSize":32334},{"version":"1.2.2","createdAt":"2026-04-24T10:25:18.993Z","changelog":"Updated Discord invite link to permanent URL.","fileCount":14,"zipByteSize":30889},{"version":"1.2.1","createdAt":"2026-04-24T10:22:47.855Z","changelog":"Image-to-video works with model=turbo. Updated landing page. Text-to-video note added.","fileCount":14,"zipByteSize":30880},{"version":"1.2.0","createdAt":"2026-04-24T10:22:10.776Z","changelog":"Video: use model=turbo. Image-to-video works. Text-to-video may fail with some keys.","fileCount":14,"zipByteSize":30829},{"version":"1.1.3","createdAt":"2026-04-15T12:28:24.787Z","changelog":"Removed api.cowork.digen.ai from client script (NEW_API_BASE now generic). Full sweep: no test.cowork.digen.ai or portal URLs remain anywhere in the bundle.","fileCount":9,"zipByteSize":23627},{"version":"1.1.2","createdAt":"2026-04-15T12:24:24.900Z","changelog":"Removed all test.cowork.digen.ai and api.cowork.digen.ai references from public SKILL.md and internal docs. API endpoints now genericized.","fileCount":9,"zipByteSize":23633},{"version":"1.1.1","createdAt":"2026-04-15T12:13:27.656Z","changelog":"Security cleanup: removed discord-send-messages.py (hardcoded token), telegram-bot.py (default token), .env. Deleted both bot scripts from bundle - client-only package now. SKILL.md description simplified.","fileCount":9,"zipByteSize":23648},{"version":"1.1.0","createdAt":"2026-04-15T12:10:02.947Z","changelog":"Removed model names and parameters from public-facing SKILL.md and landing page. Hidden: model names (flux2-klein/wan/turbo/2.6), aspect ratios, resolution details. External mystery preserved.","fileCount":11,"zipByteSize":29184}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1733vk1gkgydfttxc14pwzyk584xpk8:digen-ai-free","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1733vk1gkgydfttxc14pwzyk584xpk8:digen-ai-free` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/eeoeofl/digen-ai-free before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T05:21:32.337Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-eeoeofl-digen-ai-free/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":null},"readme":"Skill: Digen Ai Free\n\nOwner: eeoeofl\n\nSummary: DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Trigg...\n\nTags: ai:1.1.3, digen:1.1.3, discord:1.0.6, free:1.1.3, image-generation:1.1.3, latest:1.3.0, telegram:1.0.6, video-generation:1.1.3\n\nVersion history:\n\nv1.3.0 | 2026-04-24T10:43:39.156Z | user\n\nAdded video_url_short field with TinyURL shortening for long S3 URLs.\n\nv1.2.2 | 2026-04-24T10:25:18.993Z | user\n\nUpdated Discord invite link to permanent URL.\n\nv1.2.1 | 2026-04-24T10:22:47.855Z | user\n\nImage-to-video works with model=turbo. Updated landing page. Text-to-video note added.\n\nv1.2.0 | 2026-04-24T10:22:10.776Z | user\n\nVideo: use model=turbo. Image-to-video works. Text-to-video may fail with some keys.\n\nv1.1.3 | 2026-04-15T12:28:24.787Z | user\n\nRemoved api.cowork.digen.ai from client script (NEW_API_BASE now generic). Full sweep: no test.cowork.digen.ai or portal URLs remain anywhere in the bundle.\n\nv1.1.2 | 2026-04-15T12:24:24.900Z | user\n\nRemoved all test.cowork.digen.ai and api.cowork.digen.ai references from public SKILL.md and internal docs. API endpoints now genericized.\n\nv1.1.1 | 2026-04-15T12:13:27.656Z | user\n\nSecurity cleanup: removed discord-send-messages.py (hardcoded token), telegram-bot.py (default token), .env. Deleted both bot scripts from bundle - client-only package now. SKILL.md description simplified.\n\nv1.1.0 | 2026-04-15T12:10:02.947Z | user\n\nRemoved model names and parameters from public-facing SKILL.md and landing page. Hidden: model names (flux2-klein/wan/turbo/2.6), aspect ratios, resolution details. External mystery preserved.\n\nv1.0.6 | 2026-04-15T09:53:22.515Z | user\n\nAdded Discord back alongside Telegram: Hero section now shows both TG Bot and Discord buttons; Community section has both Telegram and Discord links.\n\nv1.0.5 | 2026-04-15T09:47:04.788Z | user\n\nFixed install command in landing page: clawhub install digen-ai-free\n\nv1.0.4 | 2026-04-15T09:44:23.019Z | user\n\nAPI key channel changed from Discord to Telegram bot @digen_skill_bot (send /key in DM or !key in group). Updated SKILL.md, client, and landing page.\n\nv1.0.3 | 2026-04-15T09:17:51.286Z | user\n\nFixed: unified API key instructions to Discord only (removed portal URL); cleaned up DIGENAI_TOKEN fallback; removed portal-link CSS; landing page now consistently points to Discord #api-key channel\n\nv1.0.2 | 2026-04-15T08:58:46.039Z | user\n\nFull English SKILL.md; API key instructions updated to Discord #api-key channel (https://discord.gg/4shAQahd)\n\nv1.0.1 | 2026-04-15T08:50:03.099Z | user\n\nClean bundle: removed Discord bot files, updated to new API (video) + old API (image) architecture, added API key management endpoints\n\nv1.0.0 | 2026-04-15T08:45:56.669Z | auto\n\n- Initial release of DigenAI integration for OpenClaw, enabling image and video generation via DigenAI APIs.\n- Supports image generation through the old API (requires DIGEN_TOKEN and DIGEN_SESSION_ID).\n- Enables video generation via the new API (requires free Bearer API key obtained from https://test.cowork.digen.ai/b/portal).\n- Provides Python client scripts for both image and video generation, including sync/async support and batch tools.\n- Detailed documentation includes available models, usage examples, error handling, and environment variable setup.\n\nArchive index:\n\nArchive v1.3.0: 15 files, 32334 bytes\n\nFiles: _meta.json (132b), assets/discord-bot.py (8352b), assets/discord-server-messages.md (3122b), assets/landing-page.html (41258b), assets/logo.svg (2025b), assets/run-discord.sh (293b), assets/run-telegram-bot.sh (264b), assets/run-tg.sh (264b), assets/telegram-bot.py (8792b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (20333b), scripts/wait_batch.py (2825b), skill-card.md (2357b), SKILL.md (5911b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available at https://claw.digen.ai or via Discord/Telegram.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key (starts with `ak_`).**\n\n### How to Get Your API Key\n\n1. **Visit:** https://claw.digen.ai\n2. **Or join Discord:** https://discord.gg/SRhbTt9hwp\n3. **Or contact Telegram:** @digen_skill_bot\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n**Note:** The API uses `https://api.cowork.digen.ai` as the base URL.\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### ⚠️ Important: Use `model=\"turbo\"`\n\nThe video generation API requires `model=\"turbo\"` parameter (not `default`).\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `turbo` | Fast and high quality generation | 10s |\n\n### Video Types\n- **Image-to-Video**: ✅ Works - requires `image_url` + `prompt`\n- **Text-to-Video**: ⚠️ May not work with all API keys (depends on credits)\n\n### Example: Image-to-Video (Recommended)\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video (May Not Work)\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"turbo\",\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n    # Note: Text-to-Video may fail if your API key only has image-to-video credits\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\n\nGet your free API key:\n- Visit: https://claw.digen.ai\n- Or join Discord: https://discord.gg/SRhbTt9hwp\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n- `assets/telegram-bot.py` - Telegram bot for API key distribution\n- `assets/discord-bot.py` - Discord bot for API key distribution\n\n## Tips\n\n- **Video model**: Always use `model=\"turbo\"` (not `default` or `seedance-2.0`)\n- **Image-to-Video**: Requires `image_url` parameter\n- **Text-to-Video**: May not work with all API keys\n- Video generation: poll every 5 seconds, timeout 300s\n- Image generation: poll every 3 seconds, timeout 120s\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1777027419156\n}\n\nFile v1.3.0:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.3.0:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"ak_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nFile v1.3.0:skill-card.md\n\n## Description:\n\nDigenAI image and video generation for OpenClaw, supporting text-to-image, image-to-video, and text-to-video requests through DigenAI APIs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[eeoeofl](https://clawhub.ai/user/eeoeofl)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and OpenClaw users use this skill to call DigenAI services for image generation, video generation, media upload, job polling, and batch image workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The release evidence reports exposed bot and master credentials plus unsafe API-key distribution code.\n\nMitigation: Do not install in sensitive environments until the publisher removes and rotates exposed credentials and separates key provisioning from the generation client.\n\nRisk: The release evidence reports unsafe secret delivery and storage behavior.\n\nMitigation: Use isolated test credentials, avoid sharing generated keys publicly, and review any persisted key files before deployment.\n\nRisk: The release evidence reports disabled TLS verification and automatic TinyURL shortening.\n\nMitigation: Require TLS verification and make URL shortening opt-in with clear disclosure before production use.\n\n## Reference(s):\n\n- [DigenAI API Reference](references/api.md)\n- [DigenAI API key portal](https://claw.digen.ai)\n- [DigenAI video API base](https://api.cowork.digen.ai)\n- [DigenAI image API base](https://api.digen.ai)\n- [ClawHub skill page](https://clawhub.ai/eeoeofl/skills/digen-ai-free)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with Python and shell examples; Python helpers return dictionaries and JSON files containing generated media URLs, status values, errors, and task metadata.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Generated media is returned as URLs; video status polling can include shortened video URLs.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.2.2: 14 files, 30889 bytes\n\nFiles: _meta.json (132b), assets/discord-bot.py (8352b), assets/discord-server-messages.md (3122b), assets/landing-page.html (41258b), assets/logo.svg (2025b), assets/run-discord.sh (293b), assets/run-telegram-bot.sh (264b), assets/run-tg.sh (264b), assets/telegram-bot.py (8792b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19703b), scripts/wait_batch.py (2825b), SKILL.md (5911b)\n\nFile v1.2.2:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available at https://claw.digen.ai or via Discord/Telegram.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key (starts with `ak_`).**\n\n### How to Get Your API Key\n\n1. **Visit:** https://claw.digen.ai\n2. **Or join Discord:** https://discord.gg/SRhbTt9hwp\n3. **Or contact Telegram:** @digen_skill_bot\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n**Note:** The API uses `https://api.cowork.digen.ai` as the base URL.\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### ⚠️ Important: Use `model=\"turbo\"`\n\nThe video generation API requires `model=\"turbo\"` parameter (not `default`).\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `turbo` | Fast and high quality generation | 10s |\n\n### Video Types\n- **Image-to-Video**: ✅ Works - requires `image_url` + `prompt`\n- **Text-to-Video**: ⚠️ May not work with all API keys (depends on credits)\n\n### Example: Image-to-Video (Recommended)\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video (May Not Work)\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"turbo\",\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n    # Note: Text-to-Video may fail if your API key only has image-to-video credits\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\n\nGet your free API key:\n- Visit: https://claw.digen.ai\n- Or join Discord: https://discord.gg/SRhbTt9hwp\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n- `assets/telegram-bot.py` - Telegram bot for API key distribution\n- `assets/discord-bot.py` - Discord bot for API key distribution\n\n## Tips\n\n- **Video model**: Always use `model=\"turbo\"` (not `default` or `seedance-2.0`)\n- **Image-to-Video**: Requires `image_url` parameter\n- **Text-to-Video**: May not work with all API keys\n- Video generation: poll every 5 seconds, timeout 300s\n- Image generation: poll every 3 seconds, timeout 120s\n\nFile v1.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.2.2\",\n  \"publishedAt\": 1777026318993\n}\n\nFile v1.2.2:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.2.2:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"ak_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.2.1: 14 files, 30880 bytes\n\nFiles: _meta.json (132b), assets/discord-bot.py (8352b), assets/discord-server-messages.md (3122b), assets/landing-page.html (41254b), assets/logo.svg (2025b), assets/run-discord.sh (293b), assets/run-telegram-bot.sh (264b), assets/run-tg.sh (264b), assets/telegram-bot.py (8792b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19701b), scripts/wait_batch.py (2825b), SKILL.md (5907b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available at https://claw.digen.ai or via Discord/Telegram.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key (starts with `ak_`).**\n\n### How to Get Your API Key\n\n1. **Visit:** https://claw.digen.ai\n2. **Or join Discord:** https://discord.gg/4shAQahd\n3. **Or contact Telegram:** @digen_skill_bot\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n**Note:** The API uses `https://api.cowork.digen.ai` as the base URL.\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### ⚠️ Important: Use `model=\"turbo\"`\n\nThe video generation API requires `model=\"turbo\"` parameter (not `default`).\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `turbo` | Fast and high quality generation | 10s |\n\n### Video Types\n- **Image-to-Video**: ✅ Works - requires `image_url` + `prompt`\n- **Text-to-Video**: ⚠️ May not work with all API keys (depends on credits)\n\n### Example: Image-to-Video (Recommended)\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video (May Not Work)\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"turbo\",\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n    # Note: Text-to-Video may fail if your API key only has image-to-video credits\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\n\nGet your free API key:\n- Visit: https://claw.digen.ai\n- Or join Discord: https://discord.gg/4shAQahd\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n- `assets/telegram-bot.py` - Telegram bot for API key distribution\n- `assets/discord-bot.py` - Discord bot for API key distribution\n\n## Tips\n\n- **Video model**: Always use `model=\"turbo\"` (not `default` or `seedance-2.0`)\n- **Image-to-Video**: Requires `image_url` parameter\n- **Text-to-Video**: May not work with all API keys\n- Video generation: poll every 5 seconds, timeout 300s\n- Image generation: poll every 3 seconds, timeout 120s\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1777026167855\n}\n\nFile v1.2.1:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.2.1:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"ak_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.2.0: 14 files, 30829 bytes\n\nFiles: _meta.json (132b), assets/discord-bot.py (8352b), assets/discord-server-messages.md (3122b), assets/landing-page.html (41201b), assets/logo.svg (2025b), assets/run-discord.sh (293b), assets/run-telegram-bot.sh (264b), assets/run-tg.sh (264b), assets/telegram-bot.py (8792b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19701b), scripts/wait_batch.py (2825b), SKILL.md (5907b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available at https://claw.digen.ai or via Discord/Telegram.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key (starts with `ak_`).**\n\n### How to Get Your API Key\n\n1. **Visit:** https://claw.digen.ai\n2. **Or join Discord:** https://discord.gg/4shAQahd\n3. **Or contact Telegram:** @digen_skill_bot\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n**Note:** The API uses `https://api.cowork.digen.ai` as the base URL.\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### ⚠️ Important: Use `model=\"turbo\"`\n\nThe video generation API requires `model=\"turbo\"` parameter (not `default`).\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `turbo` | Fast and high quality generation | 10s |\n\n### Video Types\n- **Image-to-Video**: ✅ Works - requires `image_url` + `prompt`\n- **Text-to-Video**: ⚠️ May not work with all API keys (depends on credits)\n\n### Example: Image-to-Video (Recommended)\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video (May Not Work)\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"turbo\",\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n    # Note: Text-to-Video may fail if your API key only has image-to-video credits\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\n\nGet your free API key:\n- Visit: https://claw.digen.ai\n- Or join Discord: https://discord.gg/4shAQahd\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n- `assets/telegram-bot.py` - Telegram bot for API key distribution\n- `assets/discord-bot.py` - Discord bot for API key distribution\n\n## Tips\n\n- **Video model**: Always use `model=\"turbo\"` (not `default` or `seedance-2.0`)\n- **Image-to-Video**: Requires `image_url` parameter\n- **Text-to-Video**: May not work with all API keys\n- Video generation: poll every 5 seconds, timeout 300s\n- Image generation: poll every 3 seconds, timeout 120s\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1777026130776\n}\n\nFile v1.2.0:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.2.0:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"ak_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.1.3: 9 files, 23627 bytes\n\nFiles: _meta.json (132b), assets/discord-server-messages.md (3122b), assets/landing-page.html (40917b), assets/logo.svg (2025b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19609b), scripts/wait_batch.py (2825b), SKILL.md (5337b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports text-to-image, image-to-video, and text-to-video. Image generation via api.digen.ai; video generation via new API with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available via Telegram bot @digen_skill_bot (send /key).\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| Multiple | Standard resolutions supported |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### Available Models\n| `default` | High quality, fast generation | 10s |\n\n### Modes\n- **Text-to-Video**: text prompt only\n- **Image-to-Video**: image URL with optional motion prompt\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `[New API endpoint]`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Resolution: 720p or 1080p\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1776256104787\n}\n\nFile v1.1.3:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.1.3:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"dg_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.1.2: 9 files, 23633 bytes\n\nFiles: _meta.json (132b), assets/discord-server-messages.md (3122b), assets/landing-page.html (40917b), assets/logo.svg (2025b), references/api.md (5563b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19634b), scripts/wait_batch.py (2825b), SKILL.md (5337b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports text-to-image, image-to-video, and text-to-video. Image generation via api.digen.ai; video generation via new API with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available via Telegram bot @digen_skill_bot (send /key).\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| Multiple | Standard resolutions supported |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### Available Models\n| `default` | High quality, fast generation | 10s |\n\n### Modes\n- **Text-to-Video**: text prompt only\n- **Image-to-Video**: image URL with optional motion prompt\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `[New API endpoint]`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Resolution: 720p or 1080p\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1776255864900\n}\n\nFile v1.1.2:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"[NEW_API_BASE]/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"[NEW_API_BASE]/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"[NEW_API_BASE]/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.1.2:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"dg_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.1.1: 9 files, 23648 bytes\n\nFiles: assets/discord-server-messages.md (3169b), assets/landing-page.html (40917b), assets/logo.svg (2025b), references/api.md (5625b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19634b), scripts/wait_batch.py (2825b), SKILL.md (5372b), _meta.json (132b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports text-to-image, image-to-video, and text-to-video. Image generation via api.digen.ai; video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available via Telegram bot @digen_skill_bot (send /key).\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| Multiple | Standard resolutions supported |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses `api.cowork.digen.ai` with Bearer API Key**\n\n### Available Models\n| `default` | High quality, fast generation | 10s |\n\n### Modes\n- **Text-to-Video**: text prompt only\n- **Image-to-Video**: image URL with optional motion prompt\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Resolution: 720p or 1080p\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1776255207656\n}\n\nFile v1.1.1:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation (api.cowork.digen.ai)\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\nhttps://api.cowork.digen.ai\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"https://api.cowork.digen.ai/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"https://api.cowork.digen.ai/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"https://api.cowork.digen.ai/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.1.1:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"dg_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n- Portal: https://test.cowork.digen.ai/b/portal\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.1.0: 11 files, 29184 bytes\n\nFiles: assets/discord-send-messages.py (3844b), assets/discord-server-messages.md (3169b), assets/landing-page.html (40917b), assets/logo.svg (2025b), assets/telegram-bot.py (8620b), references/api.md (5625b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19634b), scripts/wait_batch.py (2825b), SKILL.md (5458b), _meta.json (132b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Image generation via old API (api.digen.ai) with DIGEN_TOKEN + DIGEN_SESSION_ID; video generation via new API (api.cowork.digen.ai) with Bearer API Key. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. IMPORTANT: Free API key for video generation is available via our Telegram bot @digen_skill_bot (send /key). Image generation uses old API credentials.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| Multiple | Standard resolutions supported |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses `api.cowork.digen.ai` with Bearer API Key**\n\n### Available Models\n| `default` | High quality, fast generation | 10s |\n\n### Modes\n- **Text-to-Video**: text prompt only\n- **Image-to-Video**: image URL with optional motion prompt\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"default\",\n    duration=5,\n    aspect_ratio=\"1:1\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Resolution: 720p or 1080p\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1776255002947\n}\n\nFile v1.1.0:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation (api.cowork.digen.ai)\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\nhttps://api.cowork.digen.ai\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"https://api.cowork.digen.ai/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"https://api.cowork.digen.ai/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"https://api.cowork.digen.ai/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nFile v1.1.0:assets/discord-server-messages.md\n\n# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"dg_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n- Portal: https://test.cowork.digen.ai/b/portal\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\"\n\nArchive v1.0.6: 9 files, 25495 bytes\n\nFiles: assets/landing-page.html (40933b), assets/logo.svg (2025b), assets/telegram-bot.py (8620b), references/api.md (5625b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19635b), scripts/wait_batch.py (2825b), SKILL.md (5895b), _meta.json (132b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Image generation via old API (api.digen.ai) with DIGEN_TOKEN + DIGEN_SESSION_ID; video generation via new API (api.cowork.digen.ai) with Bearer API Key. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. IMPORTANT: Free API key for video generation is available via our Telegram bot @digen_skill_bot (send /key). Image generation uses old API credentials.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `flux2-klein` | High quality, versatile (default) |\n| `image_motion` | Good for images with motion effects |\n| `zimage` | Artistic style |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| `1:1` | 1024x1024 |\n| `16:9` | 1024x576 |\n| `9:16` | 576x1024 (portrait) |\n| `4:3` | 1024x768 |\n| `3:4` | 768x1024 |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"flux2-klein\",\n    resolution=\"16:9\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses `api.cowork.digen.ai` with Bearer API Key**\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `wan` | Wan2.1 - Default, fast and high quality | 10s |\n| `turbo` | Fastest generation | 10s |\n| `2.6` | Enhanced quality | 10s |\n\n### Modes\n- **Text-to-Video**: `prompt` only\n- **Image-to-Video**: `image_url` (with optional `prompt` for motion description)\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"wan\",\n    duration=5,\n    aspect_ratio=\"16:9\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"wan\",\n    duration=5,\n    aspect_ratio=\"16:9\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Video supports: 16:9, 9:16, 1:1 aspect ratios\n- Video duration: 5 or 10 seconds\n- Resolution: 720p or 1080p\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1776246802515\n}\n\nFile v1.0.6:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation (api.cowork.digen.ai)\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\nhttps://api.cowork.digen.ai\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"https://api.cowork.digen.ai/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"https://api.cowork.digen.ai/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"https://api.cowork.digen.ai/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```\n\nArchive v1.0.5: 9 files, 25440 bytes\n\nFiles: assets/landing-page.html (40639b), assets/logo.svg (2025b), assets/telegram-bot.py (8620b), references/api.md (5625b), scripts/batch_generate.py (1947b), scripts/digen_ai_client.py (19635b), scripts/wait_batch.py (2825b), SKILL.md (5895b), _meta.json (132b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Image generation via old API (api.digen.ai) with DIGEN_TOKEN + DIGEN_SESSION_ID; video generation via new API (api.cowork.digen.ai) with Bearer API Key. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. IMPORTANT: Free API key for video generation is available via our Telegram bot @digen_skill_bot (send /key). Image generation uses old API credentials.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images or text via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key.**\n\n### How to Get Your API Key\n\n1. Open our Telegram bot: **https://t.me/digen_skill_bot**\n2. Send the command: `/key`\n3. Copy your API key (starts with `dg_`)\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Image generation (old API) — requires DIGEN_TOKEN + DIGEN_SESSION_ID\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\n# Video generation (new API) — requires API Key\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `flux2-klein` | High quality, versatile (default) |\n| `image_motion` | Good for images with motion effects |\n| `zimage` | Artistic style |\n\n### Resolutions\n| Ratio | Size |\n|-------|------|\n| `1:1` | 1024x1024 |\n| `16:9` | 1024x576 |\n| `9:16` | 576x1024 (portrait) |\n| `4:3` | 1024x768 |\n| `3:4` | 768x1024 |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_digen_token\",\n    old_api_session=\"your_digen_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"flux2-klein\",\n    resolution=\"16:9\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses `api.cowork.digen.ai` with Bearer API Key**\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `wan` | Wan2.1 - Default, fast and high quality | 10s |\n| `turbo` | Fastest generation | 10s |\n| `2.6` | Enhanced quality | 10s |\n\n### Modes\n- **Text-to-Video**: `prompt` only\n- **Image-to-Video**: `image_url` (with optional `prompt` for motion description)\n\n### Example: Image-to-Video\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"wan\",\n    duration=5,\n    aspect_ratio=\"16:9\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"wan\",\n    duration=5,\n    aspect_ratio=\"16:9\"\n)\n```\n\n---\n\n## API Key Management (New API)\n\n### Check API Key Info\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}\n```\n\n### Upload Image\n\n```python\nresult = client.upload_image(file_path=\"/path/to/image.jpg\")\nif result[\"success\"]:\n    print(f\"Image URL: {result['url']}\")\n```\n\n---\n\n## Configuration\n\n### Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DIGEN_TOKEN` | Old API token for image generation |\n| `DIGEN_SESSION_ID` | Old API session ID for image generation |\n| `DIGEN_API_KEY` | New API key (ak_xxx) for video generation |\n\n### Setup\n\n```bash\n# Image generation (old API)\nexport DIGEN_TOKEN=\"your_token\"\nexport DIGEN_SESSION_ID=\"your_session\"\n\n# Video generation (new API)\nexport DIGEN_API_KEY=\"ak_xxxxxxxxxxxxxxxxxxxx\"\n```\n\n---\n\n## Error Handling\n\n### No API Key Error (Video)\n\n```\n❌ API Key Not Found!\nJoin our Discord: https://discord.gg/4shAQahd\nGo to #api-key channel → send !key\n```\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\n---\n\n## API Reference\n\n### New API Endpoints (Video)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/b/v1/api-key` | Get API key info |\n| `POST` | `/b/v1/upload` | Upload image file |\n| `POST` | `/b/v1/video/generate` | Generate video |\n| `GET` | `/b/v1/video/{id}` | Get video status |\n\nBase URL: `https://api.cowork.digen.ai`\n\n### Old API Endpoints (Image)\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `/v2/tools/text_to_image` | Generate image |\n| `POST` | `/v6/video/get_task_v2` | Get image status |\n\nBase URL: `https://api.digen.ai`\n\n---\n\n## Scripts\n\n- `scripts/digen_ai_client.py` - Python client with sync/async support\n- `scripts/batch_generate.py` - Batch image generation utility\n\n## Tips\n\n- Image generation: poll every 3 seconds, timeout 120s\n- Video generation: poll every 5 seconds, timeout 300s\n- Video supports: 16:9, 9:16, 1:1 aspect ratios\n- Video duration: 5 or 10 seconds\n- Resolution: 720p or 1080p\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1776246424788\n}\n\nFile v1.0.5:references/api.md\n\n# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation (api.cowork.digen.ai)\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\nhttps://api.cowork.digen.ai\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 402 | insufficient_credits | Not enough credits |\n| 404 | not_found | Resource not found |\n| 500 | internal_error | Internal server error |\n\nError format:\n```json\n{\n  \"error\": {\n    \"message\": \"Invalid API Key\",\n    \"code\": \"invalid_api_key\"\n  }\n}\n```\n\n---\n\n## 🖼️ Old API — Image Generation (api.digen.ai)\n\n**Auth: `DIGEN-Token` + `DIGEN-SessionID` headers**\n\n### Base URL\n```\nhttps://api.digen.ai\n```\n\n### Image Generation (Text-to-Image)\n\n```\nPOST /v2/tools/text_to_image\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `prompt` | string | ✅ | Positive prompt |\n| `mode` | string | ✅ | Always `\"text_to_image\"` |\n| `aspect_ratio` | string | ✅ | Resolution ratio |\n| `image_size` | string | ✅ | Calculated size |\n| `model` | string | ✅ | `flux2-klein`, `image_motion`, `zimage` |\n| `batch_size` | int | ❌ | Number of images (default 1) |\n| `negative_prompt` | string | ❌ | Things to avoid |\n\n### Image Size Mapping\n\n| aspect_ratio | image_size |\n|--------------|------------|\n| `1:1` | `1024x1024` |\n| `16:9` | `1024x576` |\n| `9:16` | `576x1024` |\n| `4:3` | `1024x768` |\n| `3:4` | `768x1024` |\n| `3:2` | `1024x683` |\n| `2:3` | `683x1024` |\n| `5:4` | `1024x819` |\n| `4:5` | `819x1024` |\n| `21:9` | `1280x512` |\n\n### Poll Image Status\n\n```\nPOST /v6/video/get_task_v2\n```\n\nRequest: `{\"jobID\": \"<job_id>\"}`\n\nResponse:\n```json\n{\n  \"errCode\": 0,\n  \"data\": {\n    \"status\": 4,\n    \"resource_urls\": [\"https://...\"]\n  }\n}\n```\n\n**Status:** 1=new, 2=running, 4=completed, 5=failed\n\n---\n\n### Error Codes (Old API)\n\n| errCode | Meaning |\n|---------|---------|\n| `0` | Success |\n| `-1` | Network error |\n\nError format:\n```json\n{\n  \"errCode\": -1,\n  \"errMsg\": \"error description\"\n}\n```\n\n---\n\n## Quick Test Commands\n\n```bash\n# New API - Check key info\ncurl \"https://api.cowork.digen.ai/b/v1/api-key\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# New API - Generate video\ncurl -X POST \"https://api.cowork.digen.ai/b/v1/video/generate\" \\\n  -H \"Authorization: Bearer YOUR_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"A cat playing piano\",\"model\":\"wan\",\"duration\":5}'\n\n# New API - Check video status\ncurl \"https://api.cowork.digen.ai/b/v1/video/12345\" \\\n  -H \"Authorization: Bearer YOUR_KEY\"\n\n# Old API - Generate image\ncurl -X POST \"https://api.digen.ai/v2/tools/text_to_image\" \\\n  -H \"DIGEN-Token: YOUR_TOKEN\" \\\n  -H \"DIGEN-SessionID: YOUR_SESSION\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"prompt\":\"a cat\",\"mode\":\"text_to_image\",\"aspect_ratio\":\"1:1\",\"image_size\":\"1024x1024\",\"model\":\"flux2-klein\"}'\n```","readmeExcerpt":"Skill: Digen Ai Free Owner: eeoeofl Summary: DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Trigg... Tags: ai:1.1.3, digen:1.1.3, discord:1.0.6, free:1.1.3, image-generation:1.1.3, latest:1.3.0, telegram:1.0.6, video-generation:1.1.3 Version history: v1.3.0 | 2026-04-24T10:43:39.156Z | user Added video_url_short f","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"Authorization: Bearer YOUR_API_KEY"},{"language":"python","snippet":"from digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")"},{"language":"python","snippet":"from digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")"},{"language":"python","snippet":"from digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")"},{"language":"python","snippet":"client = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"turbo\",\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n    # Note: Text-to-Video may fail if your API key only has image-to-video credits"},{"language":"python","snippet":"client = DigenAIClient(api_key=\"ak_xxx\")\ninfo = client.get_api_key_info()\nprint(info)\n# {'success': True, 'data': {'api_key': 'ak_xxx', 'status': 1, 'created_at': '...'}}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: digen-ai\ndescription: \"DigenAI image and video generation for OpenClaw. Supports image-to-video and text-to-image. Video generation via api.cowork.digen.ai with Bearer token. Triggers on: generate image, generate video, Digen AI, text to image, image to video, text to video. API key available at https://claw.digen.ai or via Discord/Telegram.\"\n---\n\n# DigenAI Skill\n\nGenerate images from text prompts and videos from images via DigenAI API.\n\n## ⚠️ First Time Users: Get Your Free API Key\n\n**Video generation requires a free API key (starts with `ak_`).**\n\n### How to Get Your API Key\n\n1. **Visit:** https://claw.digen.ai\n2. **Or join Discord:** https://discord.gg/SRhbTt9hwp\n3. **Or contact Telegram:** @digen_skill_bot\n\nYour API key is used as:\n```\nAuthorization: Bearer YOUR_API_KEY\n```\n\n**Note:** The API uses `https://api.cowork.digen.ai` as the base URL.\n\n---\n\n## Quick Start\n\n```python\nfrom digen_ai_client import DigenAIClient\n\n# Video generation — requires API Key (ak_xxx)\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n```\n\n---\n\n## Image Generation (Old API)\n\n**Uses `api.digen.ai` with DIGEN_TOKEN + DIGEN_SESSION_ID**\n\n### Available Models\n| Model | Description |\n|-------|-------------|\n| `default` | High quality model |\n\n### Example\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(\n    old_api_token=\"your_token\",\n    old_api_session=\"your_session\"\n)\n\nresult = client.generate_image_sync(\n    prompt=\"futuristic cyberpunk city at night, neon lights, rainy streets, highly detailed, 8K\",\n    model=\"default\",\n    resolution=\"1:1\"\n)\n\nif result[\"success\"]:\n    print(f\"✅ Image: {result['images'][0]}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n---\n\n## Video Generation (New API)\n\n**Uses new API with Bearer API Key**\n\n### ⚠️ Important: Use `model=\"turbo\"`\n\nThe video generation API requires `model=\"turbo\"` parameter (not `default`).\n\n### Available Models\n| Model | Description | Max Duration |\n|-------|-------------|--------------|\n| `turbo` | Fast and high quality generation | 10s |\n\n### Video Types\n- **Image-to-Video**: ✅ Works - requires `image_url` + `prompt`\n- **Text-to-Video**: ⚠️ May not work with all API keys (depends on credits)\n\n### Example: Image-to-Video (Recommended)\n\n```python\nfrom digen_ai_client import DigenAIClient\n\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    image_url=\"https://your-image.jpg\",\n    prompt=\"gentle camera pan left, neon lights twinkling\",\n    model=\"turbo\",  # IMPORTANT: use \"turbo\", not \"default\"\n    duration=5\n)\n\nif result[\"success\"]:\n    print(f\"✅ Video: {result['video_url']}\")\n    print(f\"   Thumbnail: {result['thumbnail_url']}\")\nelse:\n    print(f\"❌ Error: {result.get('error')}\")\n```\n\n### Example: Text-to-Video (May Not Work)\n\n```python\nclient = DigenAIClient(api_key=\"ak_xxxxxxxxxxxxxxxxxxxx\")\n\nresult = client.generate_video_sync(\n    prompt=\"A cute cat playing piano in a cozy room, soft lighting\",\n    model=\"tur"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn781etftesg8fbmqzz2nq5w7h84w280\",\n  \"slug\": \"digen-ai-free\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1777027419156\n}"},{"path":"references/api.md","content":"# DigenAI API Reference\n\n> **Last updated: 2026-04-15** - New API (video) and Old API (image) separated\n\n---\n\n## 📺 New API — Video Generation ([New API])\n\n**Auth: `Authorization: Bearer <API_KEY>`**\n\n### Base URL\n```\n[NEW_API_BASE]\n```\n\n---\n\n### Get API Key Info\n\n```\nGET /b/v1/api-key\n```\n\nResponse:\n```json\n{\n  \"api_key\": \"ak_xxxxxxxxxxxxxxxx\",\n  \"api_secret\": \"as_xxxxx...\",\n  \"callback_url\": \"https://your-domain.com/webhook\",\n  \"status\": 1,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Upload Image\n\n```\nPOST /b/v1/upload\n```\n\nContent-Type: `multipart/form-data`\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `file` | file | ✅ | Image file (jpg, png, gif, webp) |\n\nResponse:\n```json\n{\n  \"url\": \"https://s3.us-west-1.wasabisys.com/...\",\n  \"width\": 1920,\n  \"height\": 1080\n}\n```\n\n---\n\n### Generate Video\n\n```\nPOST /b/v1/video/generate\n```\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `model` | string | ❌ | `wan` (default), `turbo`, `2.6` |\n| `prompt` | string | ⚠️ | Text prompt (* Either prompt or image_url required) |\n| `image_url` | string | ⚠️ | Input image URL (* Either prompt or image_url required) |\n| `image_end_url` | string | ❌ | End frame image URL |\n| `aspect_ratio` | string | ❌ | `16:9`, `9:16`, `1:1` (default: `16:9`) |\n| `duration` | integer | ❌ | `5` or `10` seconds (default: `5`) |\n| `resolution` | string | ❌ | `720p` or `1080p` |\n| `webhook_url` | string | ❌ | Completion callback URL |\n\nResponse:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"pending\",\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\n---\n\n### Get Video Status\n\n```\nGET /b/v1/video/{id}\n```\n\n**Status values:** `pending` → `processing` → `completed` / `failed`\n\nProcessing:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"processing\",\n  \"progress\": 50,\n  \"created_at\": \"2026-04-09T10:30:00Z\"\n}\n```\n\nCompleted:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"progress\": 100,\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"created_at\": \"2026-04-09T10:30:00Z\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\nFailed:\n```json\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Webhook Events\n\nWhen a video completes, POST to your `webhook_url`:\n\n```json\n// Completed\n{\n  \"id\": \"12345\",\n  \"status\": \"completed\",\n  \"output\": {\n    \"video_url\": \"https://cdn.example.com/video.mp4\",\n    \"thumbnail_url\": \"https://cdn.example.com/thumb.jpg\"\n  },\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n\n// Failed\n{\n  \"id\": \"12345\",\n  \"status\": \"failed\",\n  \"error\": \"Content policy violation\",\n  \"completed_at\": \"2026-04-09T10:35:00Z\"\n}\n```\n\n---\n\n### Error Codes (New API)\n\n| HTTP Code | Error Code | Description |\n|-----------|------------|-------------|\n| 400 | invalid_request | Invalid or missing parameters |\n| 401 | invalid_api_key | Invalid or missing API key |\n| 4"},{"path":"assets/discord-server-messages.md","content":"# DigenAI Discord 服务器 - 欢迎词 & 规则\n\n## 📌 在 #welcome 频道发布：\n\n---\n👋 **Welcome to DigenAI!** 🎉\n\nFree AI image & video generation — permanently no charge.\n\n**🚀 Get started in 3 steps:**\n\n**1️⃣ Get your free API Key**\n→ Type `!key` in any channel to get it instantly\n\n**2️⃣ Install the Skill**\n```\nclawhub install digen-ai-free\n```\n\n**3️⃣ Set your key**\n```\nexport DIGEN_API_KEY=\"your_key_here\"\n```\n\n**📖 Skill Page:** https://clawhub.ai/eeoeofl/digen-ai-free\n\n---\n\n**🤖 Bot Commands:**\n| Command | Description |\n|---------|------------|\n| `!key` | Get your free API key |\n| `!mykey` | View your current key |\n| `!quota` | Check daily usage |\n| `!help` | Show help |\n\n---\n\n**❓ Questions?**\nCheck #help channel or ask in this server!\n---\n\n## 📌 在 #rules 频道发布：\n\n---\n🛡️ **Community Rules**\n\n1️⃣ **Be respectful** — Keep it civil, no harassment or hate speech\n\n2️⃣ **No spam** — Don't flood channels with repeated messages\n\n3️⃣ **Share keys privately** — Never post your API key in public channels. Use `!mykey` to check your own key\n\n4️⃣ **English in #general** — Use English so everyone can follow along\n\n5️⃣ **One account per person** — Multiple accounts to farm keys = ban\n\n6️⃣ **Keep it legal** — No illegal content generation\n\n---\n\n⚠️ **Violations may result in key revocation or server ban.**\n\nQuestions? DM a moderator or ask in #help.\n---\n\n## 📌 在 #api-key 频道发布：\n\n---\n🔑 **API Key Channel**\n\nSend `!key` here to receive your personal free API key.\n\n**⚠️ Important:**\n- Your key is personal — do NOT share it publicly\n- Daily quota: 50 requests/day\n- Quota resets daily at UTC 00:00\n\n**📖 Usage:**\n```bash\nexport DIGEN_API_KEY=\"ak_xxxxx_your_key\"\nclawhub install digen-ai-free\n```\n\n**🧪 Test your key:**\n```python\nfrom digen_ai_client import DigenAIClient\nclient = DigenAIClient(api_key=os.getenv(\"DIGEN_API_KEY\"))\nresult = client.generate_image_sync(\n    prompt=\"a beautiful sunset over the ocean\",\n    resolution=\"16:9\"\n)\n```\n\nNeed help? → `!help` or ask in #help\n---\n\n## 📌 在 #help 频道发布：\n\n---\n❓ **Help Channel**\n\n**How do I get started?**\n1. Send `!key` anywhere to get your free API key\n2. Run `clawhub install digen-ai-free`\n3. Set: `export DIGEN_API_KEY=\"your_key\"`\n4. Use the Python client to generate images/videos!\n\n**📖 Resources:**\n- Skill page: https://clawhub.ai/eeoeofl/digen-ai-free\n\n\n**💬 Still stuck?**\nAsk your question here and someone will help!\n---\n\n## 📌 在 #showcase 频道发布：\n\n---\n🎨 **Showcase Channel**\n\nShare your AI-generated images and videos here!\n\n**Post format:**\n- What did you create?\n- What prompt did you use? (optional)\n- Which model/duration?\n\n**💡 Tips:**\n- Image: try `flux2-klein`, `image_motion`, `zimage` models\n- Video: try `wan` (default), `turbo`, `2.6` models\n- Aspect ratios: 1:1, 16:9, 9:16\n\nHave questions about prompts? → #help channel\n---\n\n## 📌 更新 Bot 的在线状态/游戏状态\n\n在 Bot 设置中，设置：\n- **Playing**: \"!key to get free API · clawhub install digen-ai-free\""},{"path":"skill-card.md","content":"## Description:\n\nDigenAI image and video generation for OpenClaw, supporting text-to-image, image-to-video, and text-to-video requests through DigenAI APIs.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[eeoeofl](https://clawhub.ai/user/eeoeofl)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and OpenClaw users use this skill to call DigenAI services for image generation, video generation, media upload, job polling, and batch image workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The release evidence reports exposed bot and master credentials plus unsafe API-key distribution code.\n\nMitigation: Do not install in sensitive environments until the publisher removes and rotates exposed credentials and separates key provisioning from the generation client.\n\nRisk: The release evidence reports unsafe secret delivery and storage behavior.\n\nMitigation: Use isolated test credentials, avoid sharing generated keys publicly, and review any persisted key files before deployment.\n\nRisk: The release evidence reports disabled TLS verification and automatic TinyURL shortening.\n\nMitigation: Require TLS verification and make URL shortening opt-in with clear disclosure before production use.\n\n## Reference(s):\n\n- [DigenAI API Reference](references/api.md)\n- [DigenAI API key portal](https://claw.digen.ai)\n- [DigenAI video API base](https://api.cowork.digen.ai)\n- [DigenAI image API base](https://api.digen.ai)\n- [ClawHub skill page](https://clawhub.ai/eeoeofl/skills/digen-ai-free)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with Python and shell examples; Python helpers return dictionaries and JSON files containing generated media URLs, status values, errors, and task metadata.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Generated media is returned as URLs; video status polling can include shortened video URLs.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1445,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-12T01:31:26.520Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T05:21:32.340Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}