{"id":"95eed16d-2377-4f58-a236-ef2c774d87d1","entityType":"agent","slug":"clawhub-lovensky1992-wk-seedance-video-gen","name":"Seedance Video","canonicalUrl":"https://www.xpersona.co/agent/clawhub-lovensky1992-wk-seedance-video-gen","canonicalPath":"/agent/clawhub-lovensky1992-wk-seedance-video-gen","generatedAt":"2026-10-10T09:49:48.150Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T07:05:53.019Z","emptyReason":null},"description":"使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求... Skill: Seedance Video Owner: lovensky1992-wk Summary: 使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-05-06T06:29:11.655Z | user Weekly sync v1.0.2 | 2026-04-26T12:31:02.704Z | user Weekly sync v1.0.1 | 2026-04-19T04:03:01.106Z | user Daily sync v0.1.3 | 20","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17dsprt4znvnqphy9hhy68va983nsqs:seedance-video-gen","sourceUrl":"https://clawhub.ai/lovensky1992-wk/seedance-video-gen","homepage":"https://clawhub.ai/lovensky1992-wk/skills/seedance-video-gen","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/lovensky1992-wk/seedance-video-gen","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/lovensky1992-wk/skills/seedance-video-gen","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":49,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:05:53.019Z","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-10T07:05:53.019Z","emptyReason":null},"stars":null,"forks":null,"downloads":1601,"packageName":null,"latestVersion":"1.0.3","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:05:53.018Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T07:05:53.019Z","lastCrawledAt":"2026-10-10T07:05:53.018Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T07:05:53.018Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.3","createdAt":"2026-05-06T06:29:11.655Z","changelog":"Weekly sync","fileCount":10,"zipByteSize":17906},{"version":"1.0.2","createdAt":"2026-04-26T12:31:02.704Z","changelog":"Weekly sync","fileCount":9,"zipByteSize":16499},{"version":"1.0.1","createdAt":"2026-04-19T04:03:01.106Z","changelog":"Daily sync","fileCount":8,"zipByteSize":17019},{"version":"0.1.3","createdAt":"2026-04-12T04:38:38.648Z","changelog":"Daily sync","fileCount":8,"zipByteSize":17019},{"version":"0.1.2","createdAt":"2026-04-10T02:23:42.872Z","changelog":"Daily sync","fileCount":8,"zipByteSize":17018},{"version":"0.1.1","createdAt":"2026-03-22T04:32:49.343Z","changelog":"Daily sync","fileCount":8,"zipByteSize":16573},{"version":"0.1.0","createdAt":"2026-03-17T06:46:56.500Z","changelog":"Daily sync","fileCount":8,"zipByteSize":16573},{"version":"1.0.0","createdAt":"2026-03-16T08:14:03.535Z","changelog":"Initial release: AI video generation using ByteDance Seedance models","fileCount":8,"zipByteSize":16573}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17dsprt4znvnqphy9hhy68va983nsqs:seedance-video-gen","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"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-lovensky1992-wk-seedance-video-gen/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/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-10T09:49:48.142Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-lovensky1992-wk-seedance-video-gen/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":"high","updatedAt":"2026-10-10T07:05:53.019Z","emptyReason":null},"readme":"Skill: Seedance Video\n\nOwner: lovensky1992-wk\n\nSummary: 使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求...\n\nTags: latest:1.0.3\n\nVersion history:\n\nv1.0.3 | 2026-05-06T06:29:11.655Z | user\n\nWeekly sync\n\nv1.0.2 | 2026-04-26T12:31:02.704Z | user\n\nWeekly sync\n\nv1.0.1 | 2026-04-19T04:03:01.106Z | user\n\nDaily sync\n\nv0.1.3 | 2026-04-12T04:38:38.648Z | user\n\nDaily sync\n\nv0.1.2 | 2026-04-10T02:23:42.872Z | user\n\nDaily sync\n\nv0.1.1 | 2026-03-22T04:32:49.343Z | user\n\nDaily sync\n\nv0.1.0 | 2026-03-17T06:46:56.500Z | user\n\nDaily sync\n\nv1.0.0 | 2026-03-16T08:14:03.535Z | user\n\nInitial release: AI video generation using ByteDance Seedance models\n\nArchive index:\n\nArchive v1.0.3: 10 files, 17906 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), references/curl-api-reference.md (3142b), seedance.py (13274b), skill-card.md (2625b), SKILL.md (6265b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\n使用字节跳动 Seedance 模型通过火山引擎 Ark API 生成 AI 视频。\n\n## Step 0: 前置检查\n\n1. **API Key**：确认 `ARK_API_KEY` 环境变量已设置\n   ```bash\n   echo $ARK_API_KEY | head -c 8  # 只显示前 8 位确认存在\n   ```\n   未设置 → 提示用户在 [火山引擎控制台](https://console.volcengine.com/) 获取\n2. **Python CLI 工具**：确认 `{baseDir}/seedance.py` 存在\n   - 不存在 → 降级用 curl（见 `references/curl-api-reference.md`）\n\n## Step 1: 需求分类\n\n| 用户意图 | 模式 | 跳转 |\n|----------|------|------|\n| \"帮我生成一段视频\" / 纯文字描述 | **文生视频** | → Step 2，Mode text |\n| \"用这张图生成视频\" / 给了一张图 | **图生视频（首帧）** | → Step 2，Mode image |\n| 给了两张图（开头和结尾） | **首尾帧视频** | → Step 2，Mode first-last |\n| \"参考这几张图\" / 给了多张参考图 | **参考图视频** | → Step 2，Mode ref |\n| \"查下之前那个视频任务\" / 给了 task ID | **任务查询** | → Step 4 |\n\n## Step 2: 确认参数\n\n**必须在调 API 前跟用户确认以下内容：**\n\n1. **Prompt**：向用户展示将使用的 prompt，确认后再提交\n2. **模型选择**（根据场景推荐）：\n\n| 场景 | 推荐模型 | 理由 |\n|------|---------|------|\n| 日常文/图生视频 | Seedance 1.5 Pro（默认） | 稳定，支持音频 |\n| 需要最高质量 | Seedance 2.0 | 多模态，最强效果 |\n| 快速预览/测试 | Seedance 2.0 Fast | 生成快，质量略低 |\n| 预算有限 | 1.5 Pro + Draft mode | 先低成本预览 |\n| 纯文生视频、低成本 | 1.0 Lite T2V | 最便宜 |\n| 多参考图 | 1.0 Lite I2V | 支持 1-4 张参考图 |\n\n3. **默认参数**（用户不指定则用默认值）：\n   - 分辨率：720p | 比例：16:9（文生）/ adaptive（图生）| 时长：5秒 | 音频：开\n\n## Step 3: 执行生成\n\n所有模式统一用 Python CLI：\n\n```bash\n# 文生视频\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述文字\" \\\n  --ratio 16:9 --duration 5 --resolution 720p \\\n  --wait --download ~/Desktop\n\n# 图生视频（首帧）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"动作描述\" --image /path/to/photo.jpg \\\n  --wait --download ~/Desktop\n\n# 首尾帧\npython3 {baseDir}/seedance.py create \\\n  --prompt \"过渡描述\" --image first.jpg --last-frame last.jpg \\\n  --wait --download ~/Desktop\n\n# 参考图（1-4张，Lite I2V）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg \\\n  --model doubao-seedance-1-0-lite-i2v-250428 \\\n  --wait --download ~/Desktop\n\n# Draft 模式（便宜预览）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述\" --draft true --wait --download ~/Desktop\n\n# 从 Draft 生成正式版\npython3 {baseDir}/seedance.py create \\\n  --draft-task-id <DRAFT_TASK_ID> --resolution 720p \\\n  --wait --download ~/Desktop\n```\n\n**`--wait --download` 会自动轮询等待 + 下载，无需手动轮询。**\n\n### 超时保护\n- `--wait` 默认超时 10 分钟\n- 超时后展示 task ID 给用户，可后续用 `status` 查询\n- 正常生成时间：文生 1-3 分钟，图生 2-5 分钟\n\n## Step 4: 任务管理\n\n```bash\n# 查询状态\npython3 {baseDir}/seedance.py status <TASK_ID>\n\n# 等待并下载已有任务\npython3 {baseDir}/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# 列出任务\npython3 {baseDir}/seedance.py list --status succeeded\n\n# 取消/删除\npython3 {baseDir}/seedance.py delete <TASK_ID>\n```\n\n## Step 5: 验证与交付\n\n1. 确认视频文件已下载：`ls -lh ~/Desktop/seedance_video_*.mp4`\n2. 用 `MEDIA:<path>` 发送视频给用户\n3. **展示 task ID**：方便用户后续查询或重新下载\n4. 询问是否满意，不满意 → 调整 prompt 重新生成\n\n## 边界条件\n\n| 情况 | 处理 |\n|------|------|\n| ARK_API_KEY 未设置 | 停止，引导用户获取 |\n| 图片格式不支持 | 支持 jpeg/png/webp/bmp/tiff/gif（1.5 Pro 额外支持 heic） |\n| 图片尺寸不合规 | 宽高比 0.4-2.5，单边 300-6000px，≤30MB |\n| 生成失败（API 错误） | 展示错误信息 + 建议：prompt 含违规词→修改；配额不足→换模型或稍后重试 |\n| 视频 URL 过期 | 24 小时过期！生成后立即下载。过期 → 用 task ID 查询是否还能重新获取 |\n| 任务历史过期 | 7 天后无法查询 |\n| seedance.py 不存在 | 降级用 curl，见 `references/curl-api-reference.md` |\n| 网络超时 | 重试 1 次，仍失败 → 建议用 flex tier（离线队列，便宜 50%） |\n\n## 参数速查\n\n| 参数 | 默认值 | 可选值 |\n|------|--------|--------|\n| ratio | 16:9 / adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |\n| duration | 5 | 4-12 秒（1.5 Pro），2-12（其他）|\n| resolution | 720p | 480p, 720p, 1080p |\n| generate_audio | true | true/false（仅 1.5 Pro） |\n| draft | false | true/false（仅 1.5 Pro） |\n| service_tier | default | default（在线）, flex（离线，半价） |\n\n## 模型 ID 速查\n\n| 模型 | ID |\n|------|-----|\n| Seedance 2.0 | `doubao-seedance-2-0-260128` |\n| Seedance 2.0 Fast | `doubao-seedance-2-0-fast-260128` |\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250528` |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-251015` |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250428` |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250428` |\n\nFile v1.0.3:README.md\n\n# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1778048951655\n}\n\nFile v1.0.3:references/curl-api-reference.md\n\n# Seedance curl API 参考\n\n> 完整 curl 命令参考。日常使用推荐 Python CLI（`{baseDir}/seedance.py`），此文件仅供调试或 CLI 不可用时参考。\n\n## Base URL\n\n```\nhttps://ark.cn-beijing.volces.com/api/v3\n```\n\n## 创建任务\n\n### Mode A: 文生视频\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [{\"type\": \"text\", \"text\": \"YOUR_PROMPT\"}],\n    \"ratio\": \"16:9\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }')\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n```\n\n### Mode B: 图生视频（首帧）\n\n**URL 图片：**\n```bash\ncurl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n      {\"type\": \"image_url\", \"image_url\": {\"url\": \"IMAGE_URL\"}, \"role\": \"first_frame\"}\n    ],\n    \"ratio\": \"adaptive\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }'\n```\n\n**本地图片（base64）：**\n```bash\nIMG_BASE64=$(base64 < /path/to/image.png | tr -d '\\n')\nIMG_DATA_URL=\"data:image/png;base64,${IMG_BASE64}\"\n# 用 IMG_DATA_URL 替换上面的 IMAGE_URL\n```\n\n### Mode C: 首尾帧\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"FIRST_URL\"}, \"role\": \"first_frame\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"LAST_URL\"}, \"role\": \"last_frame\"}\n]\n```\n\n### Mode D: 参考图（Lite I2V）\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"[图1]的人物在跳舞\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"REF_URL\"}, \"role\": \"reference_image\"}\n]\n# model 必须用 doubao-seedance-1-0-lite-i2v-250428\n```\n\n## 轮询任务状态\n\n```bash\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\")\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n  [ \"$STATUS\" = \"succeeded\" ] && break\n  [ \"$STATUS\" = \"failed\" ] || [ \"$STATUS\" = \"expired\" ] && break\n  sleep 15\ndone\n```\n\n## 其他操作\n\n```bash\n# 查询任务\ncurl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 列表（分页）\ncurl -s -X GET \".../tasks?page_num=1&page_size=10\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 删除/取消\ncurl -s -X DELETE \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\n## Draft Mode（Seedance 1.5 Pro）\n\n```bash\n# 1. 创建草稿（便宜预览）\n\"draft\": true, \"resolution\": \"480p\"\n\n# 2. 从草稿生成正式视频\n\"content\": [{\"type\": \"draft_task\", \"draft_task\": {\"id\": \"DRAFT_TASK_ID\"}}],\n\"resolution\": \"720p\"\n```\n\n## 连续视频（用尾帧串接）\n\n```bash\n# 第一段设置 \"return_last_frame\": true\n# 完成后获取 last_frame_url，作为下一段的 first_frame\n```\n\nFile v1.0.3:CHANGELOG.md\n\n# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例\n\nFile v1.0.3:evals/results/text2video-with-skill.md\n\n# Eval: text-to-video (WITH skill)\n\n## 执行计划摘要\n- 模型：Seedance 1.5 Pro（doubao-seedance-1-5-pro-251215）\n- 调用方式：Python CLI seedance.py（优先）+ curl 备选\n- 参数：ratio 16:9, duration 5, resolution 720p, generate_audio true\n- 轮询：每15秒，CLI --wait 自动轮询\n- 下载：--download ~/Desktop，URL 24小时过期需立即下载\n- 异常处理：失败展示 error.message，建议修改 prompt\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | Seedance 1.5 Pro + 选择理由 |\n| api-endpoint | 正确的 API 端点 | ✅ | ark.cn-beijing.volces.com/api/v3/contents/generations/tasks |\n| request-body | 请求体参数正确 | ✅ | 完整JSON结构含model/content/ratio/duration/resolution/generate_audio |\n| polling | 知道如何查询任务状态 | ✅ | GET /tasks/{task_id}，每15秒轮询 |\n| result-download | 获取结果视频 | ✅ | content.video_url → curl下载，24h过期提醒 |\n\n**Pass rate: 5/5 (100%)**\n\n## 对比 Without-skill\n- WITH 知道 CLI 工具 seedance.py（Skill 推荐优先使用），WITHOUT 只猜 curl\n- WITH 参数完整准确（ratio/duration/resolution/generate_audio），WITHOUT 全猜\n- WITH 知道轮询间隔(15s)和URL过期(24h)，WITHOUT 不知道\n- WITHOUT 自己承认\"首次调用很可能需要调试\"\n\nFile v1.0.3:evals/results/text2video-without-skill.md\n\n# Eval: text-to-video (WITHOUT skill)\n\n## 执行计划摘要\n- 模型选择：Seedance 1.5 Pro（从 TOOLS.md 获取）\n- API：知道接入点ID和API Key（TOOLS.md），但请求体结构全靠猜\n- 自己承认：\"API 调用参数是基于有限信息的推断\"\n- 不确定：JSON结构、duration字段名、轮询端点、prompt语言偏好\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | 选了 Seedance 1.5 Pro |\n| api-endpoint | 正确的 API 端点 | ⚠️ | 猜了个端点，不确定对不对 |\n| request-body | 请求体参数正确 | ❌ | JSON结构完全是猜的 |\n| polling | 知道如何查询任务状态 | ❌ | 推断为 /tasks/{task_id}，不确定 |\n| result-download | 获取结果视频 | ❌ | 不知道具体下载方式 |\n\n**Pass rate: 1.5/5 (30%)**\n\nFile v1.0.3:skill-card.md\n\n## Description:\n\nGenerates AI videos with ByteDance Seedance models through the Volcengine Ark API, supporting text-to-video, image-to-video, first/last frame generation, reference images, and asynchronous task status management.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[lovensky1992-wk](https://clawhub.ai/user/lovensky1992-wk)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, creators, and OpenClaw users use this skill to ask an agent to create, poll, download, list, or delete Seedance video generation tasks from text prompts or image inputs.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts and image inputs may be sent to Volcengine/ByteDance during video generation.\n\nMitigation: Use only non-sensitive prompts and images that the user is authorized to upload.\n\nRisk: Credential handling can expose ARK_API_KEY if commands or environment checks are displayed carelessly.\n\nMitigation: Do not print API keys or include secrets in logs, prompts, screenshots, or shared output.\n\nRisk: The security scan reports a macOS auto-open command-injection bug in download-path handling.\n\nMitigation: Avoid macOS auto-open behavior and choose simple trusted download paths until the bug is fixed.\n\nRisk: Delete actions are destructive and can cancel or remove the wrong task.\n\nMitigation: Confirm the exact task ID and user intent before running delete operations.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/lovensky1992-wk/skills/seedance-video-gen)\n- [Publisher Profile](https://clawhub.ai/user/lovensky1992-wk)\n- [Seedance curl API reference](references/curl-api-reference.md)\n- [Volcengine Console](https://console.volcengine.com/)\n- [Volcengine Ark API base URL](https://ark.cn-beijing.volces.com/api/v3)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands, CLI usage, JSON API responses, task IDs, and downloaded video file paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce API requests to Volcengine Ark, upload local images as data URLs, poll asynchronous tasks, download MP4 files, and perform destructive delete actions when requested.]\n\n## Skill Version(s):\n\n1.0.3 (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\nFile v1.0.3:LICENSE.txt\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nArchive v1.0.2: 9 files, 16499 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), references/curl-api-reference.md (3142b), seedance.py (13274b), SKILL.md (6265b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\n使用字节跳动 Seedance 模型通过火山引擎 Ark API 生成 AI 视频。\n\n## Step 0: 前置检查\n\n1. **API Key**：确认 `ARK_API_KEY` 环境变量已设置\n   ```bash\n   echo $ARK_API_KEY | head -c 8  # 只显示前 8 位确认存在\n   ```\n   未设置 → 提示用户在 [火山引擎控制台](https://console.volcengine.com/) 获取\n2. **Python CLI 工具**：确认 `{baseDir}/seedance.py` 存在\n   - 不存在 → 降级用 curl（见 `references/curl-api-reference.md`）\n\n## Step 1: 需求分类\n\n| 用户意图 | 模式 | 跳转 |\n|----------|------|------|\n| \"帮我生成一段视频\" / 纯文字描述 | **文生视频** | → Step 2，Mode text |\n| \"用这张图生成视频\" / 给了一张图 | **图生视频（首帧）** | → Step 2，Mode image |\n| 给了两张图（开头和结尾） | **首尾帧视频** | → Step 2，Mode first-last |\n| \"参考这几张图\" / 给了多张参考图 | **参考图视频** | → Step 2，Mode ref |\n| \"查下之前那个视频任务\" / 给了 task ID | **任务查询** | → Step 4 |\n\n## Step 2: 确认参数\n\n**必须在调 API 前跟用户确认以下内容：**\n\n1. **Prompt**：向用户展示将使用的 prompt，确认后再提交\n2. **模型选择**（根据场景推荐）：\n\n| 场景 | 推荐模型 | 理由 |\n|------|---------|------|\n| 日常文/图生视频 | Seedance 1.5 Pro（默认） | 稳定，支持音频 |\n| 需要最高质量 | Seedance 2.0 | 多模态，最强效果 |\n| 快速预览/测试 | Seedance 2.0 Fast | 生成快，质量略低 |\n| 预算有限 | 1.5 Pro + Draft mode | 先低成本预览 |\n| 纯文生视频、低成本 | 1.0 Lite T2V | 最便宜 |\n| 多参考图 | 1.0 Lite I2V | 支持 1-4 张参考图 |\n\n3. **默认参数**（用户不指定则用默认值）：\n   - 分辨率：720p | 比例：16:9（文生）/ adaptive（图生）| 时长：5秒 | 音频：开\n\n## Step 3: 执行生成\n\n所有模式统一用 Python CLI：\n\n```bash\n# 文生视频\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述文字\" \\\n  --ratio 16:9 --duration 5 --resolution 720p \\\n  --wait --download ~/Desktop\n\n# 图生视频（首帧）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"动作描述\" --image /path/to/photo.jpg \\\n  --wait --download ~/Desktop\n\n# 首尾帧\npython3 {baseDir}/seedance.py create \\\n  --prompt \"过渡描述\" --image first.jpg --last-frame last.jpg \\\n  --wait --download ~/Desktop\n\n# 参考图（1-4张，Lite I2V）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg \\\n  --model doubao-seedance-1-0-lite-i2v-250428 \\\n  --wait --download ~/Desktop\n\n# Draft 模式（便宜预览）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述\" --draft true --wait --download ~/Desktop\n\n# 从 Draft 生成正式版\npython3 {baseDir}/seedance.py create \\\n  --draft-task-id <DRAFT_TASK_ID> --resolution 720p \\\n  --wait --download ~/Desktop\n```\n\n**`--wait --download` 会自动轮询等待 + 下载，无需手动轮询。**\n\n### 超时保护\n- `--wait` 默认超时 10 分钟\n- 超时后展示 task ID 给用户，可后续用 `status` 查询\n- 正常生成时间：文生 1-3 分钟，图生 2-5 分钟\n\n## Step 4: 任务管理\n\n```bash\n# 查询状态\npython3 {baseDir}/seedance.py status <TASK_ID>\n\n# 等待并下载已有任务\npython3 {baseDir}/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# 列出任务\npython3 {baseDir}/seedance.py list --status succeeded\n\n# 取消/删除\npython3 {baseDir}/seedance.py delete <TASK_ID>\n```\n\n## Step 5: 验证与交付\n\n1. 确认视频文件已下载：`ls -lh ~/Desktop/seedance_video_*.mp4`\n2. 用 `MEDIA:<path>` 发送视频给用户\n3. **展示 task ID**：方便用户后续查询或重新下载\n4. 询问是否满意，不满意 → 调整 prompt 重新生成\n\n## 边界条件\n\n| 情况 | 处理 |\n|------|------|\n| ARK_API_KEY 未设置 | 停止，引导用户获取 |\n| 图片格式不支持 | 支持 jpeg/png/webp/bmp/tiff/gif（1.5 Pro 额外支持 heic） |\n| 图片尺寸不合规 | 宽高比 0.4-2.5，单边 300-6000px，≤30MB |\n| 生成失败（API 错误） | 展示错误信息 + 建议：prompt 含违规词→修改；配额不足→换模型或稍后重试 |\n| 视频 URL 过期 | 24 小时过期！生成后立即下载。过期 → 用 task ID 查询是否还能重新获取 |\n| 任务历史过期 | 7 天后无法查询 |\n| seedance.py 不存在 | 降级用 curl，见 `references/curl-api-reference.md` |\n| 网络超时 | 重试 1 次，仍失败 → 建议用 flex tier（离线队列，便宜 50%） |\n\n## 参数速查\n\n| 参数 | 默认值 | 可选值 |\n|------|--------|--------|\n| ratio | 16:9 / adaptive | 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |\n| duration | 5 | 4-12 秒（1.5 Pro），2-12（其他）|\n| resolution | 720p | 480p, 720p, 1080p |\n| generate_audio | true | true/false（仅 1.5 Pro） |\n| draft | false | true/false（仅 1.5 Pro） |\n| service_tier | default | default（在线）, flex（离线，半价） |\n\n## 模型 ID 速查\n\n| 模型 | ID |\n|------|-----|\n| Seedance 2.0 | `doubao-seedance-2-0-260128` |\n| Seedance 2.0 Fast | `doubao-seedance-2-0-fast-260128` |\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250528` |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-251015` |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250428` |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250428` |\n\nFile v1.0.2:README.md\n\n# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1777206662704\n}\n\nFile v1.0.2:references/curl-api-reference.md\n\n# Seedance curl API 参考\n\n> 完整 curl 命令参考。日常使用推荐 Python CLI（`{baseDir}/seedance.py`），此文件仅供调试或 CLI 不可用时参考。\n\n## Base URL\n\n```\nhttps://ark.cn-beijing.volces.com/api/v3\n```\n\n## 创建任务\n\n### Mode A: 文生视频\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [{\"type\": \"text\", \"text\": \"YOUR_PROMPT\"}],\n    \"ratio\": \"16:9\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }')\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n```\n\n### Mode B: 图生视频（首帧）\n\n**URL 图片：**\n```bash\ncurl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n      {\"type\": \"image_url\", \"image_url\": {\"url\": \"IMAGE_URL\"}, \"role\": \"first_frame\"}\n    ],\n    \"ratio\": \"adaptive\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }'\n```\n\n**本地图片（base64）：**\n```bash\nIMG_BASE64=$(base64 < /path/to/image.png | tr -d '\\n')\nIMG_DATA_URL=\"data:image/png;base64,${IMG_BASE64}\"\n# 用 IMG_DATA_URL 替换上面的 IMAGE_URL\n```\n\n### Mode C: 首尾帧\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"FIRST_URL\"}, \"role\": \"first_frame\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"LAST_URL\"}, \"role\": \"last_frame\"}\n]\n```\n\n### Mode D: 参考图（Lite I2V）\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"[图1]的人物在跳舞\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"REF_URL\"}, \"role\": \"reference_image\"}\n]\n# model 必须用 doubao-seedance-1-0-lite-i2v-250428\n```\n\n## 轮询任务状态\n\n```bash\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\")\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n  [ \"$STATUS\" = \"succeeded\" ] && break\n  [ \"$STATUS\" = \"failed\" ] || [ \"$STATUS\" = \"expired\" ] && break\n  sleep 15\ndone\n```\n\n## 其他操作\n\n```bash\n# 查询任务\ncurl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 列表（分页）\ncurl -s -X GET \".../tasks?page_num=1&page_size=10\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 删除/取消\ncurl -s -X DELETE \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\n## Draft Mode（Seedance 1.5 Pro）\n\n```bash\n# 1. 创建草稿（便宜预览）\n\"draft\": true, \"resolution\": \"480p\"\n\n# 2. 从草稿生成正式视频\n\"content\": [{\"type\": \"draft_task\", \"draft_task\": {\"id\": \"DRAFT_TASK_ID\"}}],\n\"resolution\": \"720p\"\n```\n\n## 连续视频（用尾帧串接）\n\n```bash\n# 第一段设置 \"return_last_frame\": true\n# 完成后获取 last_frame_url，作为下一段的 first_frame\n```\n\nFile v1.0.2:CHANGELOG.md\n\n# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例\n\nFile v1.0.2:evals/results/text2video-with-skill.md\n\n# Eval: text-to-video (WITH skill)\n\n## 执行计划摘要\n- 模型：Seedance 1.5 Pro（doubao-seedance-1-5-pro-251215）\n- 调用方式：Python CLI seedance.py（优先）+ curl 备选\n- 参数：ratio 16:9, duration 5, resolution 720p, generate_audio true\n- 轮询：每15秒，CLI --wait 自动轮询\n- 下载：--download ~/Desktop，URL 24小时过期需立即下载\n- 异常处理：失败展示 error.message，建议修改 prompt\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | Seedance 1.5 Pro + 选择理由 |\n| api-endpoint | 正确的 API 端点 | ✅ | ark.cn-beijing.volces.com/api/v3/contents/generations/tasks |\n| request-body | 请求体参数正确 | ✅ | 完整JSON结构含model/content/ratio/duration/resolution/generate_audio |\n| polling | 知道如何查询任务状态 | ✅ | GET /tasks/{task_id}，每15秒轮询 |\n| result-download | 获取结果视频 | ✅ | content.video_url → curl下载，24h过期提醒 |\n\n**Pass rate: 5/5 (100%)**\n\n## 对比 Without-skill\n- WITH 知道 CLI 工具 seedance.py（Skill 推荐优先使用），WITHOUT 只猜 curl\n- WITH 参数完整准确（ratio/duration/resolution/generate_audio），WITHOUT 全猜\n- WITH 知道轮询间隔(15s)和URL过期(24h)，WITHOUT 不知道\n- WITHOUT 自己承认\"首次调用很可能需要调试\"\n\nFile v1.0.2:evals/results/text2video-without-skill.md\n\n# Eval: text-to-video (WITHOUT skill)\n\n## 执行计划摘要\n- 模型选择：Seedance 1.5 Pro（从 TOOLS.md 获取）\n- API：知道接入点ID和API Key（TOOLS.md），但请求体结构全靠猜\n- 自己承认：\"API 调用参数是基于有限信息的推断\"\n- 不确定：JSON结构、duration字段名、轮询端点、prompt语言偏好\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | 选了 Seedance 1.5 Pro |\n| api-endpoint | 正确的 API 端点 | ⚠️ | 猜了个端点，不确定对不对 |\n| request-body | 请求体参数正确 | ❌ | JSON结构完全是猜的 |\n| polling | 知道如何查询任务状态 | ❌ | 推断为 /tasks/{task_id}，不确定 |\n| result-download | 获取结果视频 | ❌ | 不知道具体下载方式 |\n\n**Pass rate: 1.5/5 (30%)**\n\nFile v1.0.2:LICENSE.txt\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nArchive v1.0.1: 8 files, 17019 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (15329b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\nGenerate AI videos using ByteDance Seedance models via the Volcengine Ark API.\n\n## Prerequisites\n\nSet the `ARK_API_KEY` environment variable before making API calls (the API rejects unauthenticated requests):\n\n```bash\nexport ARK_API_KEY=\"your-api-key-here\"\n```\n\n**Base URL**: `https://ark.cn-beijing.volces.com/api/v3`\n\n## Supported Models\n\n| Model | Model ID | Capabilities |\n|-------|----------|-------------|\n| **Seedance 2.0** | `doubao-seedance-2-0-260128` | **Multimodal input (text+image+video+audio), Video extension, Video editing** |\n| Seedance 2.0 Fast | `doubao-seedance-2-0-fast-260128` | Same as 2.0, faster generation |\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` | Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250528` | Text-to-video, Image-to-video (first frame, first+last frame) |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-251015` | Text-to-video, Image-to-video (first frame only) |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250428` | Text-to-video only |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250428` | Image-to-video (first frame, first+last frame, reference images 1-4) |\n\n**Default model**: `doubao-seedance-1-5-pro-251215` (stable, supports audio)\n\n> 💡 Seedance 2.0 (`doubao-seedance-2-0-260128`) 已上线但需在方舟控制台激活，激活后改 seedance.py 的 DEFAULT_MODEL 即可切换。\n\n## Execution (Recommended: Python CLI Tool)\n\nA Python CLI tool is provided at `~/.claude/skills/seedance-video/seedance.py` for robust execution with proper error handling, automatic retries, and local image base64 conversion. **Prefer using this tool over raw curl commands.**\n\n### Quick Examples with Python CLI\n\n```bash\n# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"小猫对着镜头打哈欠\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"人物缓缓转头微笑\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"风景画面缓缓推进\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"花朵从含苞到盛开\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg --model doubao-seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"城市夜景延时摄影\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"海浪拍打沙滩\" --draft true --wait --download ~/Desktop\n\n# Generate final video from draft\npython3 ~/.claude/skills/seedance-video/seedance.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video/seedance.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video/seedance.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video/seedance.py delete <TASK_ID>\n```\n\n## Alternative: Raw curl Commands\n\n### Step 1: Create Video Generation Task\n\nDetermine the generation mode based on user input, then call the API.\n\n#### Mode A: Text-to-Video\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode B: Image-to-Video (First Frame)\n\nThe user provides one image as the first frame. The image can be a URL or local file path (convert to base64).\n\n**With image URL:**\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"IMAGE_URL_HERE\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n**With local image file (convert to base64):**\n```bash\nIMG_PATH=\"/path/to/image.png\"\nIMG_EXT=\"${IMG_PATH##*.}\"\nIMG_EXT_LOWER=$(echo \"$IMG_EXT\" | tr '[:upper:]' '[:lower:]')\nIMG_BASE64=$(base64 < \"$IMG_PATH\" | tr -d '\\n')\nIMG_DATA_URL=\"data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}\"\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"'\"$IMG_DATA_URL\"'\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode C: Image-to-Video (First + Last Frame)\n\nRequires two images. Supported by: Seedance 1.5 Pro, 1.0 Pro, 1.0 Lite I2V.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"FIRST_FRAME_IMAGE_URL\" },\n        \"role\": \"first_frame\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"LAST_FRAME_IMAGE_URL\" },\n        \"role\": \"last_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)\n\nProvide 1-4 reference images. Use `[图1]`, `[图2]` in prompt to reference specific images.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-0-lite-i2v-250219\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"[图1]的人物在跳舞\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_1\" },\n        \"role\": \"reference_image\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\"\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n### Step 2: Poll for Task Completion\n\nVideo generation is asynchronous. Poll the task status until it completes.\n\n```bash\necho \"Waiting for video generation to complete...\"\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n    -H \"Authorization: Bearer $ARK_API_KEY\")\n\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n\n  if [ \"$STATUS\" = \"succeeded\" ]; then\n    echo \"Video generation succeeded!\"\n    VIDEO_URL=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['video_url'])\")\n    echo \"Video URL: $VIDEO_URL\"\n    break\n  elif [ \"$STATUS\" = \"failed\" ]; then\n    ERROR_MSG=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message','Unknown error'))\" 2>/dev/null || echo \"Unknown error\")\n    echo \"Video generation failed: $ERROR_MSG\"\n    break\n  elif [ \"$STATUS\" = \"expired\" ]; then\n    echo \"Video generation task expired.\"\n    break\n  else\n    echo \"Status: $STATUS - still processing...\"\n    sleep 15\n  fi\ndone\n```\n\n### Step 3: Download and Open Video\n\n```bash\nOUTPUT_PATH=\"$HOME/Desktop/seedance_video_$(date +%Y%m%d_%H%M%S).mp4\"\ncurl -s -o \"$OUTPUT_PATH\" \"$VIDEO_URL\"\necho \"Video saved to: $OUTPUT_PATH\"\nopen \"$OUTPUT_PATH\"\n```\n\n## Optional Parameters Reference\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | string | `doubao-seedance-1-5-pro-251215` | Model ID to use |\n| `ratio` | string | `16:9` (text2vid) / `adaptive` (img2vid) | Aspect ratio: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive` |\n| `duration` | integer | `5` | Video duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set `-1` for auto (1.5 Pro only) |\n| `resolution` | string | `720p` | Resolution: `480p`, `720p`, `1080p` |\n| `seed` | integer | `-1` | Random seed for reproducibility. -1 = random |\n| `camera_fixed` | boolean | `false` | Fix camera position |\n| `watermark` | boolean | `false` | Add watermark to video |\n| `generate_audio` | boolean | `true` | Generate synchronized audio (Seedance 1.5 Pro only) |\n| `draft` | boolean | `false` | Generate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p) |\n| `return_last_frame` | boolean | `false` | Return last frame image URL (for chaining consecutive videos) |\n| `service_tier` | string | `default` | `default` (online) or `flex` (offline, 50% cheaper, slower) |\n| `execution_expires_after` | integer | `172800` | Task timeout in seconds (3600-259200) |\n\n## Additional Operations\n\n### Query Task Status\n\n```bash\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### List Tasks\n\n```bash\n# List all tasks (paginated)\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n\n# Filter by status\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10&filter.status=succeeded\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### Cancel or Delete Task\n\n```bash\ncurl -s -X DELETE \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\nNote: `queued` tasks will be cancelled; `succeeded`/`failed`/`expired` tasks will be deleted from history.\n\n### Generate Consecutive Videos (Using Last Frame)\n\nSet `return_last_frame: true` on the first task, then use the returned `last_frame_url` as the first frame of the next task.\n\n```bash\n# Get last frame URL from completed task\nLAST_FRAME_URL=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['last_frame_url'])\")\n\n# Use it as first frame for the next video\n# ... (use Mode B with LAST_FRAME_URL as the image URL)\n```\n\n### Draft Mode (Seedance 1.5 Pro)\n\nGenerate a cheap preview first, then produce the final video if satisfied:\n\n```bash\n# Step 1: Create draft\nDRAFT_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      { \"type\": \"text\", \"text\": \"YOUR_PROMPT_HERE\" }\n    ],\n    \"draft\": true,\n    \"resolution\": \"480p\"\n  }')\nDRAFT_TASK_ID=$(echo \"$DRAFT_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n\n# Step 2: After draft succeeds, generate final video from draft\nFINAL_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"draft_task\",\n        \"draft_task\": { \"id\": \"'\"$DRAFT_TASK_ID\"'\" }\n      }\n    ],\n    \"resolution\": \"720p\"\n  }')\n```\n\n## Image Requirements\n\n- Formats: jpeg, png, webp, bmp, tiff, gif (1.5 Pro also supports heic, heif)\n- Aspect ratio (width/height): between 0.4 and 2.5\n- Dimensions: 300-6000 px per side\n- Max file size: 30 MB\n\n## 通过飞书发送视频文件（OpenClaw）\n\n详见 [how_to_send_video_via_feishu_app.md](how_to_send_video_via_feishu_app.md)\n\n## Rules\n\n1. **检查 API Key**：调用前验证 `ARK_API_KEY` 已设置 — API 会直接拒绝未认证请求\n2. **默认模型**：Seedance 1.5 Pro (`doubao-seedance-1-5-pro-251215`)，除非用户指定其他模型\n3. **文生视频默认参数**：720p, 16:9, 5 秒, 带音频\n4. **图生视频默认参数**：自适应比例（根据输入图片自动适配）\n5. **轮询间隔**：每 15 秒检查一次任务状态\n6. **视频 URL 24 小时过期** — 生成后立即下载，否则链接会失效需要重新生成\n7. **任务历史保留 7 天** — 超期后无法查询\n8. 本地图片文件需转为 base64 data URL 格式后再发送\n9. 展示 task ID 给用户，方便后续查询状态\n10. 生成失败时清晰展示错误信息并建议修复方案\n\nFile v1.0.1:README.md\n\n# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1776571381106\n}\n\nFile v1.0.1:CHANGELOG.md\n\n# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例\n\nFile v1.0.1:evals/results/text2video-with-skill.md\n\n# Eval: text-to-video (WITH skill)\n\n## 执行计划摘要\n- 模型：Seedance 1.5 Pro（doubao-seedance-1-5-pro-251215）\n- 调用方式：Python CLI seedance.py（优先）+ curl 备选\n- 参数：ratio 16:9, duration 5, resolution 720p, generate_audio true\n- 轮询：每15秒，CLI --wait 自动轮询\n- 下载：--download ~/Desktop，URL 24小时过期需立即下载\n- 异常处理：失败展示 error.message，建议修改 prompt\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | Seedance 1.5 Pro + 选择理由 |\n| api-endpoint | 正确的 API 端点 | ✅ | ark.cn-beijing.volces.com/api/v3/contents/generations/tasks |\n| request-body | 请求体参数正确 | ✅ | 完整JSON结构含model/content/ratio/duration/resolution/generate_audio |\n| polling | 知道如何查询任务状态 | ✅ | GET /tasks/{task_id}，每15秒轮询 |\n| result-download | 获取结果视频 | ✅ | content.video_url → curl下载，24h过期提醒 |\n\n**Pass rate: 5/5 (100%)**\n\n## 对比 Without-skill\n- WITH 知道 CLI 工具 seedance.py（Skill 推荐优先使用），WITHOUT 只猜 curl\n- WITH 参数完整准确（ratio/duration/resolution/generate_audio），WITHOUT 全猜\n- WITH 知道轮询间隔(15s)和URL过期(24h)，WITHOUT 不知道\n- WITHOUT 自己承认\"首次调用很可能需要调试\"\n\nFile v1.0.1:evals/results/text2video-without-skill.md\n\n# Eval: text-to-video (WITHOUT skill)\n\n## 执行计划摘要\n- 模型选择：Seedance 1.5 Pro（从 TOOLS.md 获取）\n- API：知道接入点ID和API Key（TOOLS.md），但请求体结构全靠猜\n- 自己承认：\"API 调用参数是基于有限信息的推断\"\n- 不确定：JSON结构、duration字段名、轮询端点、prompt语言偏好\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | 选了 Seedance 1.5 Pro |\n| api-endpoint | 正确的 API 端点 | ⚠️ | 猜了个端点，不确定对不对 |\n| request-body | 请求体参数正确 | ❌ | JSON结构完全是猜的 |\n| polling | 知道如何查询任务状态 | ❌ | 推断为 /tasks/{task_id}，不确定 |\n| result-download | 获取结果视频 | ❌ | 不知道具体下载方式 |\n\n**Pass rate: 1.5/5 (30%)**\n\nFile v1.0.1:LICENSE.txt\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nArchive v0.1.3: 8 files, 17019 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (15329b)\n\nFile v0.1.3:SKILL.md\n\n---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\nGenerate AI videos using ByteDance Seedance models via the Volcengine Ark API.\n\n## Prerequisites\n\nSet the `ARK_API_KEY` environment variable before making API calls (the API rejects unauthenticated requests):\n\n```bash\nexport ARK_API_KEY=\"your-api-key-here\"\n```\n\n**Base URL**: `https://ark.cn-beijing.volces.com/api/v3`\n\n## Supported Models\n\n| Model | Model ID | Capabilities |\n|-------|----------|-------------|\n| **Seedance 2.0** | `doubao-seedance-2-0-260128` | **Multimodal input (text+image+video+audio), Video extension, Video editing** |\n| Seedance 2.0 Fast | `doubao-seedance-2-0-fast-260128` | Same as 2.0, faster generation |\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` | Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250528` | Text-to-video, Image-to-video (first frame, first+last frame) |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-251015` | Text-to-video, Image-to-video (first frame only) |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250428` | Text-to-video only |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250428` | Image-to-video (first frame, first+last frame, reference images 1-4) |\n\n**Default model**: `doubao-seedance-1-5-pro-251215` (stable, supports audio)\n\n> 💡 Seedance 2.0 (`doubao-seedance-2-0-260128`) 已上线但需在方舟控制台激活，激活后改 seedance.py 的 DEFAULT_MODEL 即可切换。\n\n## Execution (Recommended: Python CLI Tool)\n\nA Python CLI tool is provided at `~/.claude/skills/seedance-video/seedance.py` for robust execution with proper error handling, automatic retries, and local image base64 conversion. **Prefer using this tool over raw curl commands.**\n\n### Quick Examples with Python CLI\n\n```bash\n# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"小猫对着镜头打哈欠\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"人物缓缓转头微笑\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"风景画面缓缓推进\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"花朵从含苞到盛开\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg --model doubao-seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"城市夜景延时摄影\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"海浪拍打沙滩\" --draft true --wait --download ~/Desktop\n\n# Generate final video from draft\npython3 ~/.claude/skills/seedance-video/seedance.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video/seedance.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video/seedance.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video/seedance.py delete <TASK_ID>\n```\n\n## Alternative: Raw curl Commands\n\n### Step 1: Create Video Generation Task\n\nDetermine the generation mode based on user input, then call the API.\n\n#### Mode A: Text-to-Video\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode B: Image-to-Video (First Frame)\n\nThe user provides one image as the first frame. The image can be a URL or local file path (convert to base64).\n\n**With image URL:**\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"IMAGE_URL_HERE\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n**With local image file (convert to base64):**\n```bash\nIMG_PATH=\"/path/to/image.png\"\nIMG_EXT=\"${IMG_PATH##*.}\"\nIMG_EXT_LOWER=$(echo \"$IMG_EXT\" | tr '[:upper:]' '[:lower:]')\nIMG_BASE64=$(base64 < \"$IMG_PATH\" | tr -d '\\n')\nIMG_DATA_URL=\"data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}\"\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"'\"$IMG_DATA_URL\"'\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode C: Image-to-Video (First + Last Frame)\n\nRequires two images. Supported by: Seedance 1.5 Pro, 1.0 Pro, 1.0 Lite I2V.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"FIRST_FRAME_IMAGE_URL\" },\n        \"role\": \"first_frame\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"LAST_FRAME_IMAGE_URL\" },\n        \"role\": \"last_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)\n\nProvide 1-4 reference images. Use `[图1]`, `[图2]` in prompt to reference specific images.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-0-lite-i2v-250219\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"[图1]的人物在跳舞\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_1\" },\n        \"role\": \"reference_image\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\"\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n### Step 2: Poll for Task Completion\n\nVideo generation is asynchronous. Poll the task status until it completes.\n\n```bash\necho \"Waiting for video generation to complete...\"\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n    -H \"Authorization: Bearer $ARK_API_KEY\")\n\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n\n  if [ \"$STATUS\" = \"succeeded\" ]; then\n    echo \"Video generation succeeded!\"\n    VIDEO_URL=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['video_url'])\")\n    echo \"Video URL: $VIDEO_URL\"\n    break\n  elif [ \"$STATUS\" = \"failed\" ]; then\n    ERROR_MSG=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message','Unknown error'))\" 2>/dev/null || echo \"Unknown error\")\n    echo \"Video generation failed: $ERROR_MSG\"\n    break\n  elif [ \"$STATUS\" = \"expired\" ]; then\n    echo \"Video generation task expired.\"\n    break\n  else\n    echo \"Status: $STATUS - still processing...\"\n    sleep 15\n  fi\ndone\n```\n\n### Step 3: Download and Open Video\n\n```bash\nOUTPUT_PATH=\"$HOME/Desktop/seedance_video_$(date +%Y%m%d_%H%M%S).mp4\"\ncurl -s -o \"$OUTPUT_PATH\" \"$VIDEO_URL\"\necho \"Video saved to: $OUTPUT_PATH\"\nopen \"$OUTPUT_PATH\"\n```\n\n## Optional Parameters Reference\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | string | `doubao-seedance-1-5-pro-251215` | Model ID to use |\n| `ratio` | string | `16:9` (text2vid) / `adaptive` (img2vid) | Aspect ratio: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive` |\n| `duration` | integer | `5` | Video duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set `-1` for auto (1.5 Pro only) |\n| `resolution` | string | `720p` | Resolution: `480p`, `720p`, `1080p` |\n| `seed` | integer | `-1` | Random seed for reproducibility. -1 = random |\n| `camera_fixed` | boolean | `false` | Fix camera position |\n| `watermark` | boolean | `false` | Add watermark to video |\n| `generate_audio` | boolean | `true` | Generate synchronized audio (Seedance 1.5 Pro only) |\n| `draft` | boolean | `false` | Generate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p) |\n| `return_last_frame` | boolean | `false` | Return last frame image URL (for chaining consecutive videos) |\n| `service_tier` | string | `default` | `default` (online) or `flex` (offline, 50% cheaper, slower) |\n| `execution_expires_after` | integer | `172800` | Task timeout in seconds (3600-259200) |\n\n## Additional Operations\n\n### Query Task Status\n\n```bash\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### List Tasks\n\n```bash\n# List all tasks (paginated)\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n\n# Filter by status\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10&filter.status=succeeded\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### Cancel or Delete Task\n\n```bash\ncurl -s -X DELETE \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\nNote: `queued` tasks will be cancelled; `succeeded`/`failed`/`expired` tasks will be deleted from history.\n\n### Generate Consecutive Videos (Using Last Frame)\n\nSet `return_last_frame: true` on the first task, then use the returned `last_frame_url` as the first frame of the next task.\n\n```bash\n# Get last frame URL from completed task\nLAST_FRAME_URL=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['last_frame_url'])\")\n\n# Use it as first frame for the next video\n# ... (use Mode B with LAST_FRAME_URL as the image URL)\n```\n\n### Draft Mode (Seedance 1.5 Pro)\n\nGenerate a cheap preview first, then produce the final video if satisfied:\n\n```bash\n# Step 1: Create draft\nDRAFT_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      { \"type\": \"text\", \"text\": \"YOUR_PROMPT_HERE\" }\n    ],\n    \"draft\": true,\n    \"resolution\": \"480p\"\n  }')\nDRAFT_TASK_ID=$(echo \"$DRAFT_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n\n# Step 2: After draft succeeds, generate final video from draft\nFINAL_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"draft_task\",\n        \"draft_task\": { \"id\": \"'\"$DRAFT_TASK_ID\"'\" }\n      }\n    ],\n    \"resolution\": \"720p\"\n  }')\n```\n\n## Image Requirements\n\n- Formats: jpeg, png, webp, bmp, tiff, gif (1.5 Pro also supports heic, heif)\n- Aspect ratio (width/height): between 0.4 and 2.5\n- Dimensions: 300-6000 px per side\n- Max file size: 30 MB\n\n## 通过飞书发送视频文件（OpenClaw）\n\n详见 [how_to_send_video_via_feishu_app.md](how_to_send_video_via_feishu_app.md)\n\n## Rules\n\n1. **检查 API Key**：调用前验证 `ARK_API_KEY` 已设置 — API 会直接拒绝未认证请求\n2. **默认模型**：Seedance 1.5 Pro (`doubao-seedance-1-5-pro-251215`)，除非用户指定其他模型\n3. **文生视频默认参数**：720p, 16:9, 5 秒, 带音频\n4. **图生视频默认参数**：自适应比例（根据输入图片自动适配）\n5. **轮询间隔**：每 15 秒检查一次任务状态\n6. **视频 URL 24 小时过期** — 生成后立即下载，否则链接会失效需要重新生成\n7. **任务历史保留 7 天** — 超期后无法查询\n8. 本地图片文件需转为 base64 data URL 格式后再发送\n9. 展示 task ID 给用户，方便后续查询状态\n10. 生成失败时清晰展示错误信息并建议修复方案\n\nFile v0.1.3:README.md\n\n# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file\n\nFile v0.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"0.1.3\",\n  \"publishedAt\": 1775968718648\n}\n\nFile v0.1.3:CHANGELOG.md\n\n# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例\n\nFile v0.1.3:evals/results/text2video-with-skill.md\n\n# Eval: text-to-video (WITH skill)\n\n## 执行计划摘要\n- 模型：Seedance 1.5 Pro（doubao-seedance-1-5-pro-251215）\n- 调用方式：Python CLI seedance.py（优先）+ curl 备选\n- 参数：ratio 16:9, duration 5, resolution 720p, generate_audio true\n- 轮询：每15秒，CLI --wait 自动轮询\n- 下载：--download ~/Desktop，URL 24小时过期需立即下载\n- 异常处理：失败展示 error.message，建议修改 prompt\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | Seedance 1.5 Pro + 选择理由 |\n| api-endpoint | 正确的 API 端点 | ✅ | ark.cn-beijing.volces.com/api/v3/contents/generations/tasks |\n| request-body | 请求体参数正确 | ✅ | 完整JSON结构含model/content/ratio/duration/resolution/generate_audio |\n| polling | 知道如何查询任务状态 | ✅ | GET /tasks/{task_id}，每15秒轮询 |\n| result-download | 获取结果视频 | ✅ | content.video_url → curl下载，24h过期提醒 |\n\n**Pass rate: 5/5 (100%)**\n\n## 对比 Without-skill\n- WITH 知道 CLI 工具 seedance.py（Skill 推荐优先使用），WITHOUT 只猜 curl\n- WITH 参数完整准确（ratio/duration/resolution/generate_audio），WITHOUT 全猜\n- WITH 知道轮询间隔(15s)和URL过期(24h)，WITHOUT 不知道\n- WITHOUT 自己承认\"首次调用很可能需要调试\"\n\nFile v0.1.3:evals/results/text2video-without-skill.md\n\n# Eval: text-to-video (WITHOUT skill)\n\n## 执行计划摘要\n- 模型选择：Seedance 1.5 Pro（从 TOOLS.md 获取）\n- API：知道接入点ID和API Key（TOOLS.md），但请求体结构全靠猜\n- 自己承认：\"API 调用参数是基于有限信息的推断\"\n- 不确定：JSON结构、duration字段名、轮询端点、prompt语言偏好\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | 选了 Seedance 1.5 Pro |\n| api-endpoint | 正确的 API 端点 | ⚠️ | 猜了个端点，不确定对不对 |\n| request-body | 请求体参数正确 | ❌ | JSON结构完全是猜的 |\n| polling | 知道如何查询任务状态 | ❌ | 推断为 /tasks/{task_id}，不确定 |\n| result-download | 获取结果视频 | ❌ | 不知道具体下载方式 |\n\n**Pass rate: 1.5/5 (30%)**\n\nFile v0.1.3:LICENSE.txt\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nArchive v0.1.2: 8 files, 17018 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (15329b)\n\nFile v0.1.2:SKILL.md\n\n---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\nGenerate AI videos using ByteDance Seedance models via the Volcengine Ark API.\n\n## Prerequisites\n\nSet the `ARK_API_KEY` environment variable before making API calls (the API rejects unauthenticated requests):\n\n```bash\nexport ARK_API_KEY=\"your-api-key-here\"\n```\n\n**Base URL**: `https://ark.cn-beijing.volces.com/api/v3`\n\n## Supported Models\n\n| Model | Model ID | Capabilities |\n|-------|----------|-------------|\n| **Seedance 2.0** | `doubao-seedance-2-0-260128` | **Multimodal input (text+image+video+audio), Video extension, Video editing** |\n| Seedance 2.0 Fast | `doubao-seedance-2-0-fast-260128` | Same as 2.0, faster generation |\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` | Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250528` | Text-to-video, Image-to-video (first frame, first+last frame) |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-251015` | Text-to-video, Image-to-video (first frame only) |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250428` | Text-to-video only |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250428` | Image-to-video (first frame, first+last frame, reference images 1-4) |\n\n**Default model**: `doubao-seedance-1-5-pro-251215` (stable, supports audio)\n\n> 💡 Seedance 2.0 (`doubao-seedance-2-0-260128`) 已上线但需在方舟控制台激活，激活后改 seedance.py 的 DEFAULT_MODEL 即可切换。\n\n## Execution (Recommended: Python CLI Tool)\n\nA Python CLI tool is provided at `~/.claude/skills/seedance-video/seedance.py` for robust execution with proper error handling, automatic retries, and local image base64 conversion. **Prefer using this tool over raw curl commands.**\n\n### Quick Examples with Python CLI\n\n```bash\n# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"小猫对着镜头打哈欠\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"人物缓缓转头微笑\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"风景画面缓缓推进\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"花朵从含苞到盛开\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg --model doubao-seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"城市夜景延时摄影\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"海浪拍打沙滩\" --draft true --wait --download ~/Desktop\n\n# Generate final video from draft\npython3 ~/.claude/skills/seedance-video/seedance.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video/seedance.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video/seedance.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video/seedance.py delete <TASK_ID>\n```\n\n## Alternative: Raw curl Commands\n\n### Step 1: Create Video Generation Task\n\nDetermine the generation mode based on user input, then call the API.\n\n#### Mode A: Text-to-Video\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode B: Image-to-Video (First Frame)\n\nThe user provides one image as the first frame. The image can be a URL or local file path (convert to base64).\n\n**With image URL:**\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"IMAGE_URL_HERE\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n**With local image file (convert to base64):**\n```bash\nIMG_PATH=\"/path/to/image.png\"\nIMG_EXT=\"${IMG_PATH##*.}\"\nIMG_EXT_LOWER=$(echo \"$IMG_EXT\" | tr '[:upper:]' '[:lower:]')\nIMG_BASE64=$(base64 < \"$IMG_PATH\" | tr -d '\\n')\nIMG_DATA_URL=\"data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}\"\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"'\"$IMG_DATA_URL\"'\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode C: Image-to-Video (First + Last Frame)\n\nRequires two images. Supported by: Seedance 1.5 Pro, 1.0 Pro, 1.0 Lite I2V.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"FIRST_FRAME_IMAGE_URL\" },\n        \"role\": \"first_frame\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"LAST_FRAME_IMAGE_URL\" },\n        \"role\": \"last_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)\n\nProvide 1-4 reference images. Use `[图1]`, `[图2]` in prompt to reference specific images.\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-0-lite-i2v-250219\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"[图1]的人物在跳舞\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_1\" },\n        \"role\": \"reference_image\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\"\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n### Step 2: Poll for Task Completion\n\nVideo generation is asynchronous. Poll the task status until it completes.\n\n```bash\necho \"Waiting for video generation to complete...\"\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n    -H \"Authorization: Bearer $ARK_API_KEY\")\n\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n\n  if [ \"$STATUS\" = \"succeeded\" ]; then\n    echo \"Video generation succeeded!\"\n    VIDEO_URL=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['video_url'])\")\n    echo \"Video URL: $VIDEO_URL\"\n    break\n  elif [ \"$STATUS\" = \"failed\" ]; then\n    ERROR_MSG=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message','Unknown error'))\" 2>/dev/null || echo \"Unknown error\")\n    echo \"Video generation failed: $ERROR_MSG\"\n    break\n  elif [ \"$STATUS\" = \"expired\" ]; then\n    echo \"Video generation task expired.\"\n    break\n  else\n    echo \"Status: $STATUS - still processing...\"\n    sleep 15\n  fi\ndone\n```\n\n### Step 3: Download and Open Video\n\n```bash\nOUTPUT_PATH=\"$HOME/Desktop/seedance_video_$(date +%Y%m%d_%H%M%S).mp4\"\ncurl -s -o \"$OUTPUT_PATH\" \"$VIDEO_URL\"\necho \"Video saved to: $OUTPUT_PATH\"\nopen \"$OUTPUT_PATH\"\n```\n\n## Optional Parameters Reference\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `model` | string | `doubao-seedance-1-5-pro-251215` | Model ID to use |\n| `ratio` | string | `16:9` (text2vid) / `adaptive` (img2vid) | Aspect ratio: `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive` |\n| `duration` | integer | `5` | Video duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set `-1` for auto (1.5 Pro only) |\n| `resolution` | string | `720p` | Resolution: `480p`, `720p`, `1080p` |\n| `seed` | integer | `-1` | Random seed for reproducibility. -1 = random |\n| `camera_fixed` | boolean | `false` | Fix camera position |\n| `watermark` | boolean | `false` | Add watermark to video |\n| `generate_audio` | boolean | `true` | Generate synchronized audio (Seedance 1.5 Pro only) |\n| `draft` | boolean | `false` | Generate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p) |\n| `return_last_frame` | boolean | `false` | Return last frame image URL (for chaining consecutive videos) |\n| `service_tier` | string | `default` | `default` (online) or `flex` (offline, 50% cheaper, slower) |\n| `execution_expires_after` | integer | `172800` | Task timeout in seconds (3600-259200) |\n\n## Additional Operations\n\n### Query Task Status\n\n```bash\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### List Tasks\n\n```bash\n# List all tasks (paginated)\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n\n# Filter by status\ncurl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks?page_num=1&page_size=10&filter.status=succeeded\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n```\n\n### Cancel or Delete Task\n\n```bash\ncurl -s -X DELETE \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\nNote: `queued` tasks will be cancelled; `succeeded`/`failed`/`expired` tasks will be deleted from history.\n\n### Generate Consecutive Videos (Using Last Frame)\n\nSet `return_last_frame: true` on the first task, then use the returned `last_frame_url` as the first frame of the next task.\n\n```bash\n# Get last frame URL from completed task\nLAST_FRAME_URL=$(curl -s -X GET \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['content']['last_frame_url'])\")\n\n# Use it as first frame for the next video\n# ... (use Mode B with LAST_FRAME_URL as the image URL)\n```\n\n### Draft Mode (Seedance 1.5 Pro)\n\nGenerate a cheap preview first, then produce the final video if satisfied:\n\n```bash\n# Step 1: Create draft\nDRAFT_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      { \"type\": \"text\", \"text\": \"YOUR_PROMPT_HERE\" }\n    ],\n    \"draft\": true,\n    \"resolution\": \"480p\"\n  }')\nDRAFT_TASK_ID=$(echo \"$DRAFT_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n\n# Step 2: After draft succeeds, generate final video from draft\nFINAL_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"draft_task\",\n        \"draft_task\": { \"id\": \"'\"$DRAFT_TASK_ID\"'\" }\n      }\n    ],\n    \"resolution\": \"720p\"\n  }')\n```\n\n## Image Requirements\n\n- Formats: jpeg, png, webp, bmp, tiff, gif (1.5 Pro also supports heic, heif)\n- Aspect ratio (width/height): between 0.4 and 2.5\n- Dimensions: 300-6000 px per side\n- Max file size: 30 MB\n\n## 通过飞书发送视频文件（OpenClaw）\n\n详见 [how_to_send_video_via_feishu_app.md](how_to_send_video_via_feishu_app.md)\n\n## Rules\n\n1. **检查 API Key**：调用前验证 `ARK_API_KEY` 已设置 — API 会直接拒绝未认证请求\n2. **默认模型**：Seedance 1.5 Pro (`doubao-seedance-1-5-pro-251215`)，除非用户指定其他模型\n3. **文生视频默认参数**：720p, 16:9, 5 秒, 带音频\n4. **图生视频默认参数**：自适应比例（根据输入图片自动适配）\n5. **轮询间隔**：每 15 秒检查一次任务状态\n6. **视频 URL 24 小时过期** — 生成后立即下载，否则链接会失效需要重新生成\n7. **任务历史保留 7 天** — 超期后无法查询\n8. 本地图片文件需转为 base64 data URL 格式后再发送\n9. 展示 task ID 给用户，方便后续查询状态\n10. 生成失败时清晰展示错误信息并建议修复方案\n\nFile v0.1.2:README.md\n\n# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file\n\nFile v0.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"0.1.2\",\n  \"publishedAt\": 1775787822872\n}\n\nFile v0.1.2:CHANGELOG.md\n\n# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例\n\nFile v0.1.2:evals/results/text2video-with-skill.md\n\n# Eval: text-to-video (WITH skill)\n\n## 执行计划摘要\n- 模型：Seedance 1.5 Pro（doubao-seedance-1-5-pro-251215）\n- 调用方式：Python CLI seedance.py（优先）+ curl 备选\n- 参数：ratio 16:9, duration 5, resolution 720p, generate_audio true\n- 轮询：每15秒，CLI --wait 自动轮询\n- 下载：--download ~/Desktop，URL 24小时过期需立即下载\n- 异常处理：失败展示 error.message，建议修改 prompt\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | Seedance 1.5 Pro + 选择理由 |\n| api-endpoint | 正确的 API 端点 | ✅ | ark.cn-beijing.volces.com/api/v3/contents/generations/tasks |\n| request-body | 请求体参数正确 | ✅ | 完整JSON结构含model/content/ratio/duration/resolution/generate_audio |\n| polling | 知道如何查询任务状态 | ✅ | GET /tasks/{task_id}，每15秒轮询 |\n| result-download | 获取结果视频 | ✅ | content.video_url → curl下载，24h过期提醒 |\n\n**Pass rate: 5/5 (100%)**\n\n## 对比 Without-skill\n- WITH 知道 CLI 工具 seedance.py（Skill 推荐优先使用），WITHOUT 只猜 curl\n- WITH 参数完整准确（ratio/duration/resolution/generate_audio），WITHOUT 全猜\n- WITH 知道轮询间隔(15s)和URL过期(24h)，WITHOUT 不知道\n- WITHOUT 自己承认\"首次调用很可能需要调试\"\n\nFile v0.1.2:evals/results/text2video-without-skill.md\n\n# Eval: text-to-video (WITHOUT skill)\n\n## 执行计划摘要\n- 模型选择：Seedance 1.5 Pro（从 TOOLS.md 获取）\n- API：知道接入点ID和API Key（TOOLS.md），但请求体结构全靠猜\n- 自己承认：\"API 调用参数是基于有限信息的推断\"\n- 不确定：JSON结构、duration字段名、轮询端点、prompt语言偏好\n\n## Assertion 评分\n\n| ID | Assertion | Pass | Evidence |\n|---|---|---|---|\n| model-selection | 选择合适的模型 | ✅ | 选了 Seedance 1.5 Pro |\n| api-endpoint | 正确的 API 端点 | ⚠️ | 猜了个端点，不确定对不对 |\n| request-body | 请求体参数正确 | ❌ | JSON结构完全是猜的 |\n| polling | 知道如何查询任务状态 | ❌ | 推断为 /tasks/{task_id}，不确定 |\n| result-download | 获取结果视频 | ❌ | 不知道具体下载方式 |\n\n**Pass rate: 1.5/5 (30%)**\n\nFile v0.1.2:LICENSE.txt\n\nApache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\nArchive v0.1.1: 8 files, 16573 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (14622b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: seedance-video\ndescription: \"Generate AI videos using ByteDance Seedance. Use when the user wants to: (1) generate videos from text prompts, (2) generate videos from images (first frame, first+last frame, reference images), or (3) query/manage video generation tasks. Supports Seedance 1.5 Pro (with audio), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models.\"\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\nGenerate AI videos using ByteDance Seedance models via the Volcengine Ark API.\n\n## Prerequisites\n\nSet the `ARK_API_KEY` environment variable before making API calls (the API rejects unauthenticated requests):\n\n```bash\nexport ARK_API_KEY=\"your-api-key-here\"\n```\n\n**Base URL**: `https://ark.cn-beijing.volces.com/api/v3`\n\n## Supported Models\n\n| Model | Model ID | Capabilities |\n|-------|----------|-------------|\n| Seedance 1.5 Pro | `doubao-seedance-1-5-pro-251215` | Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode |\n| Seedance 1.0 Pro | `doubao-seedance-1-0-pro-250428` | Text-to-video, Image-to-video (first frame, first+last frame) |\n| Seedance 1.0 Pro Fast | `doubao-seedance-1-0-pro-fast-250528` | Text-to-video, Image-to-video (first frame only) |\n| Seedance 1.0 Lite T2V | `doubao-seedance-1-0-lite-t2v-250219` | Text-to-video only |\n| Seedance 1.0 Lite I2V | `doubao-seedance-1-0-lite-i2v-250219` | Image-to-video (first frame, first+last frame, reference images 1-4) |\n\n**Default model**: `doubao-seedance-1-5-pro-251215` (latest, supports audio)\n\n## Execution (Recommended: Python CLI Tool)\n\nA Python CLI tool is provided at `~/.claude/skills/seedance-video/seedance.py` for robust execution with proper error handling, automatic retries, and local image base64 conversion. **Prefer using this tool over raw curl commands.**\n\n### Quick Examples with Python CLI\n\n```bash\n# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"小猫对着镜头打哈欠\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"人物缓缓转头微笑\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"风景画面缓缓推进\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"花朵从含苞到盛开\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg --model doubao-seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"城市夜景延时摄影\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview)\npython3 ~/.claude/skills/seedance-video/seedance.py create --prompt \"海浪拍打沙滩\" --draft true --wait --download ~/Desktop\n\n# Generate final video from draft\npython3 ~/.claude/skills/seedance-video/seedance.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video/seedance.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video/seedance.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video/seedance.py delete <TASK_ID>\n```\n\n## Alternative: Raw curl Commands\n\n### Step 1: Create Video Generation Task\n\nDetermine the generation mode based on user input, then call the API.\n\n#### Mode A: Text-to-Video\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      }\n    ],\n    \"ratio\": \"16:9\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n#### Mode B: Image-to-Video (First Frame)\n\nThe user provides one image as the first frame. The image can be a URL or local file path (convert to base64).\n\n**With image URL:**\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"IMAGE_URL_HERE\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"generate_audio\": true\n  }')\n\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\necho \"Task created: $TASK_ID\"\n```\n\n**With local image file (convert to base64):**\n```bash\nIMG_PATH=\"/path/to/image.png\"\nIMG_EXT=\"${IMG_PATH##*.}\"\nIMG_EXT_LOWER=$(echo \"$IMG_EXT\" | tr '[:upper:]' '[:lower:]')\nIMG_BASE64=$(base64 < \"$IMG_PATH\" | tr -d '\\n')\nIMG_DATA_URL=\"data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}\"\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"YOUR_PROMPT_HERE\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"'\"$IMG_DATA_URL\"'\" },\n        \"role\": \"first_frame\"\n      }\n    ],\n    \"ratio\": \"adaptive\",\n    \"duration\": 5,\n    \"resolution\": \"720p\",\n    \"gener\n\nArchive v0.1.0: 8 files, 16573 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (14622b)\n\nArchive v1.0.0: 8 files, 16573 bytes\n\nFiles: _meta.json (137b), CHANGELOG.md (873b), evals/results/text2video-with-skill.md (1378b), evals/results/text2video-without-skill.md (860b), LICENSE.txt (11357b), README.md (1247b), seedance.py (13274b), SKILL.md (14622b)","readmeExcerpt":"Skill: Seedance Video Owner: lovensky1992-wk Summary: 使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-05-06T06:29:11.655Z | user Weekly sync v1.0.2 | 2026-04-26T12:31:02.704Z | user Weekly sync v1.0.1 | 2026-04-19T04:03:01.106Z | user Daily sync v0.1.3 | 20","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"echo $ARK_API_KEY | head -c 8  # 只显示前 8 位确认存在"},{"language":"bash","snippet":"# 文生视频\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述文字\" \\\n  --ratio 16:9 --duration 5 --resolution 720p \\\n  --wait --download ~/Desktop\n\n# 图生视频（首帧）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"动作描述\" --image /path/to/photo.jpg \\\n  --wait --download ~/Desktop\n\n# 首尾帧\npython3 {baseDir}/seedance.py create \\\n  --prompt \"过渡描述\" --image first.jpg --last-frame last.jpg \\\n  --wait --download ~/Desktop\n\n# 参考图（1-4张，Lite I2V）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg \\\n  --model doubao-seedance-1-0-lite-i2v-250428 \\\n  --wait --download ~/Desktop\n\n# Draft 模式（便宜预览）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述\" --draft true --wait --download ~/Desktop\n\n# 从 Draft 生成正式版\npython3 {baseDir}/seedance.py create \\\n  --draft-task-id <DRAFT_TASK_ID> --resolution 720p \\\n  --wait --download ~/Desktop"},{"language":"bash","snippet":"# 查询状态\npython3 {baseDir}/seedance.py status <TASK_ID>\n\n# 等待并下载已有任务\npython3 {baseDir}/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# 列出任务\npython3 {baseDir}/seedance.py list --status succeeded\n\n# 取消/删除\npython3 {baseDir}/seedance.py delete <TASK_ID>"},{"language":"bash","snippet":"clawhub install seedance-video"},{"language":"bash","snippet":"export ARK_API_KEY=\"your-api-key-here\""},{"language":"text","snippet":"生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: seedance-video\ndescription: >\n  使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、\n  异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。\n  Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\",\n  (2) 用户要求根据图片生成视频/动画/\"图生视频\"/\"image to video\",\n  (3) 用户提到 Seedance/字节视频生成,\n  (4) 用户说\"帮我做段视频\"/\"生成一段动画\"。\n  NOT for: 从已有视频中抽帧/截图（用 video-frames）、\n  视频剪辑/转码/格式转换（用 ffmpeg 直接操作）、实拍视频处理。\nversion: 1.0.0\ncategory: file-generation\nargument-hint: \"[text prompt or task ID]\"\n---\n\n# Seedance Video Generation\n\n使用字节跳动 Seedance 模型通过火山引擎 Ark API 生成 AI 视频。\n\n## Step 0: 前置检查\n\n1. **API Key**：确认 `ARK_API_KEY` 环境变量已设置\n   ```bash\n   echo $ARK_API_KEY | head -c 8  # 只显示前 8 位确认存在\n   ```\n   未设置 → 提示用户在 [火山引擎控制台](https://console.volcengine.com/) 获取\n2. **Python CLI 工具**：确认 `{baseDir}/seedance.py` 存在\n   - 不存在 → 降级用 curl（见 `references/curl-api-reference.md`）\n\n## Step 1: 需求分类\n\n| 用户意图 | 模式 | 跳转 |\n|----------|------|------|\n| \"帮我生成一段视频\" / 纯文字描述 | **文生视频** | → Step 2，Mode text |\n| \"用这张图生成视频\" / 给了一张图 | **图生视频（首帧）** | → Step 2，Mode image |\n| 给了两张图（开头和结尾） | **首尾帧视频** | → Step 2，Mode first-last |\n| \"参考这几张图\" / 给了多张参考图 | **参考图视频** | → Step 2，Mode ref |\n| \"查下之前那个视频任务\" / 给了 task ID | **任务查询** | → Step 4 |\n\n## Step 2: 确认参数\n\n**必须在调 API 前跟用户确认以下内容：**\n\n1. **Prompt**：向用户展示将使用的 prompt，确认后再提交\n2. **模型选择**（根据场景推荐）：\n\n| 场景 | 推荐模型 | 理由 |\n|------|---------|------|\n| 日常文/图生视频 | Seedance 1.5 Pro（默认） | 稳定，支持音频 |\n| 需要最高质量 | Seedance 2.0 | 多模态，最强效果 |\n| 快速预览/测试 | Seedance 2.0 Fast | 生成快，质量略低 |\n| 预算有限 | 1.5 Pro + Draft mode | 先低成本预览 |\n| 纯文生视频、低成本 | 1.0 Lite T2V | 最便宜 |\n| 多参考图 | 1.0 Lite I2V | 支持 1-4 张参考图 |\n\n3. **默认参数**（用户不指定则用默认值）：\n   - 分辨率：720p | 比例：16:9（文生）/ adaptive（图生）| 时长：5秒 | 音频：开\n\n## Step 3: 执行生成\n\n所有模式统一用 Python CLI：\n\n```bash\n# 文生视频\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述文字\" \\\n  --ratio 16:9 --duration 5 --resolution 720p \\\n  --wait --download ~/Desktop\n\n# 图生视频（首帧）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"动作描述\" --image /path/to/photo.jpg \\\n  --wait --download ~/Desktop\n\n# 首尾帧\npython3 {baseDir}/seedance.py create \\\n  --prompt \"过渡描述\" --image first.jpg --last-frame last.jpg \\\n  --wait --download ~/Desktop\n\n# 参考图（1-4张，Lite I2V）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"[图1]的人物在跳舞\" --ref-images ref1.jpg ref2.jpg \\\n  --model doubao-seedance-1-0-lite-i2v-250428 \\\n  --wait --download ~/Desktop\n\n# Draft 模式（便宜预览）\npython3 {baseDir}/seedance.py create \\\n  --prompt \"描述\" --draft true --wait --download ~/Desktop\n\n# 从 Draft 生成正式版\npython3 {baseDir}/seedance.py create \\\n  --draft-task-id <DRAFT_TASK_ID> --resolution 720p \\\n  --wait --download ~/Desktop\n```\n\n**`--wait --download` 会自动轮询等待 + 下载，无需手动轮询。**\n\n### 超时保护\n- `--wait` 默认超时 10 分钟\n- 超时后展示 task ID 给用户，可后续用 `status` 查询\n- 正常生成时间：文生 1-3 分钟，图生 2-5 分钟\n\n## Step 4: 任务管理\n\n```bash\n# 查询状态\npython3 {baseDir}/seedance.py status <TASK_ID>\n\n# 等待并下载已有任务\npython3 {baseDir}/seedance.py wait <TASK_ID> --download ~/Desktop\n\n# 列出任务\npython3 {baseDir}/seedance.py list --status succeeded\n\n# 取消/删除\npython3 {baseDir}/seedance.py delete <TASK_ID>\n```\n\n## Step 5: 验证与交付\n\n1. "},{"path":"README.md","content":"# Seedance Video\n\nGenerate AI videos using ByteDance Seedance models for OpenClaw.\n\n## Features\n\n- 🎬 **Text-to-Video**: Generate videos from text prompts\n- 🖼️ **Image-to-Video**: Animate from first frame or first+last frame\n- 🎵 **Audio Support**: Generate videos with audio (Seedance 1.5 Pro)\n- 🎨 **Draft Mode**: Quick preview generation\n- 📊 **Task Management**: Query status and retrieve generated videos\n\n## Prerequisites\n\n- OpenClaw agent environment\n- Python 3.8+\n- Volcengine Ark API key\n\n## Installation\n\n### Via ClawHub (Recommended)\n\n```bash\nclawhub install seedance-video\n```\n\n### Manual Installation\n\n1. Clone to `~/.openclaw/skills/seedance-video`\n2. Set your API key:\n   ```bash\n   export ARK_API_KEY=\"your-api-key-here\"\n   ```\n\n## Usage\n\nTalk to your OpenClaw agent:\n\n```\n生成一个视频：海边日落，浪花拍打礁石\nGenerate a video from this prompt: a cat playing piano\n查询视频生成任务状态: task-id-here\n```\n\n## Supported Models\n\n- **Seedance 1.5 Pro**: Text/image to video with audio\n- **Seedance 1.0 Pro**: Text/image to video\n- **Seedance 1.0 Pro Fast**: Faster generation\n- **Seedance 1.0 Lite**: Budget-friendly text-to-video\n\n## License\n\nMIT License - see [LICENSE.txt](LICENSE.txt) file"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7cy12yzara9p2s370vsanfe9824vnm\",\n  \"slug\": \"seedance-video-gen\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1778048951655\n}"},{"path":"references/curl-api-reference.md","content":"# Seedance curl API 参考\n\n> 完整 curl 命令参考。日常使用推荐 Python CLI（`{baseDir}/seedance.py`），此文件仅供调试或 CLI 不可用时参考。\n\n## Base URL\n\n```\nhttps://ark.cn-beijing.volces.com/api/v3\n```\n\n## 创建任务\n\n### Mode A: 文生视频\n\n```bash\nTASK_RESULT=$(curl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [{\"type\": \"text\", \"text\": \"YOUR_PROMPT\"}],\n    \"ratio\": \"16:9\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }')\nTASK_ID=$(echo \"$TASK_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['id'])\")\n```\n\n### Mode B: 图生视频（首帧）\n\n**URL 图片：**\n```bash\ncurl -s -X POST \"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"doubao-seedance-1-5-pro-251215\",\n    \"content\": [\n      {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n      {\"type\": \"image_url\", \"image_url\": {\"url\": \"IMAGE_URL\"}, \"role\": \"first_frame\"}\n    ],\n    \"ratio\": \"adaptive\", \"duration\": 5, \"resolution\": \"720p\", \"generate_audio\": true\n  }'\n```\n\n**本地图片（base64）：**\n```bash\nIMG_BASE64=$(base64 < /path/to/image.png | tr -d '\\n')\nIMG_DATA_URL=\"data:image/png;base64,${IMG_BASE64}\"\n# 用 IMG_DATA_URL 替换上面的 IMAGE_URL\n```\n\n### Mode C: 首尾帧\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"YOUR_PROMPT\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"FIRST_URL\"}, \"role\": \"first_frame\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"LAST_URL\"}, \"role\": \"last_frame\"}\n]\n```\n\n### Mode D: 参考图（Lite I2V）\n\n```bash\n\"content\": [\n  {\"type\": \"text\", \"text\": \"[图1]的人物在跳舞\"},\n  {\"type\": \"image_url\", \"image_url\": {\"url\": \"REF_URL\"}, \"role\": \"reference_image\"}\n]\n# model 必须用 doubao-seedance-1-0-lite-i2v-250428\n```\n\n## 轮询任务状态\n\n```bash\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\")\n  STATUS=$(echo \"$STATUS_RESULT\" | python3 -c \"import sys,json; print(json.load(sys.stdin)['status'])\")\n  [ \"$STATUS\" = \"succeeded\" ] && break\n  [ \"$STATUS\" = \"failed\" ] || [ \"$STATUS\" = \"expired\" ] && break\n  sleep 15\ndone\n```\n\n## 其他操作\n\n```bash\n# 查询任务\ncurl -s -X GET \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 列表（分页）\ncurl -s -X GET \".../tasks?page_num=1&page_size=10\" -H \"Authorization: Bearer $ARK_API_KEY\"\n\n# 删除/取消\ncurl -s -X DELETE \".../tasks/${TASK_ID}\" -H \"Authorization: Bearer $ARK_API_KEY\"\n```\n\n## Draft Mode（Seedance 1.5 Pro）\n\n```bash\n# 1. 创建草稿（便宜预览）\n\"draft\": true, \"resolution\": \"480p\"\n\n# 2. 从草稿生成正式视频\n\"content\": [{\"type\": \"draft_task\", \"draft_task\": {\"id\": \"DRAFT_TASK_ID\"}}],\n\"resolution\": \"720p\"\n```\n\n## 连续视频（用尾帧串接）\n\n```bash\n# 第一段设置 \"return_last_frame\": true\n# 完成后获取 last_frame_url，作为下一段的 first_frame\n```"},{"path":"CHANGELOG.md","content":"# 更新日志\n\n## v1.1.0 (2026-02-12)\n\n### 新增功能\n\n- **飞书视频发送指南**：新增 `how_to_send_video_via_feishu_app.md` 文档，详细说明如何在 OpenClaw 中将生成的视频通过飞书 App 发送到聊天中。\n  - 完整的操作步骤：生成视频 → 本地保存 → message 工具发送 → 飞书 API 上传 → 飞书分发\n  - 包含 message 工具调用示例\n  - 飞书 Open API 调用细节（上传凭证、CDN 上传、消息发送）\n  - 权限认证说明（ARK_API_KEY、飞书 app_access_token）\n  - 关键技术细节（文件大小限制、支持格式、超时处理、速率限制）\n\n## v1.0.0\n\n- 初始版本\n- 支持 Seedance 1.5 Pro、1.0 Pro、1.0 Pro Fast、1.0 Lite 模型\n- 文本生成视频、图片生成视频（首帧、首尾帧、参考图）\n- Python CLI 工具 (`seedance.py`)\n- 完整的 curl 命令示例"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求... Skill: Seedance Video Owner: lovensky1992-wk Summary: 使用字节跳动 Seedance 生成 AI 视频：文生视频、图生视频（首帧/首尾帧/参考图）、 异步任务查询。支持 Seedance 2.0（多模态输入、视频续生、视频编辑）等多个模型。 Use when: (1) 用户说\"生成视频\"/\"做个视频\"/\"AI视频\"/\"text to video\", (2) 用户要求... Tags: latest:1.0.3 Version history: v1.0.3 | 2026-05-06T06:29:11.655Z | user Weekly sync v1.0.2 | 2026-04-26T12:31:02.704Z | user Weekly sync v1.0.1 | 2026-04-19T04:03:01.106Z | user Daily sync v0.1.3 | 20","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":690,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T07:05:53.019Z","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-10T07:05:53.019Z","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-10T09:49:48.150Z","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"}]}}}