{
  "schemaVersion": "1.0",
  "item": {
    "slug": "seedance-video-generation-byteplus",
    "name": "Seedance Video Generation BytePlus",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/JackyCSer/seedance-video-generation-byteplus",
    "canonicalUrl": "https://clawhub.ai/JackyCSer/seedance-video-generation-byteplus",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/seedance-video-generation-byteplus",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=seedance-video-generation-byteplus",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "how_to_send_video_via_feishu_app.md",
      "CHANGELOG.md",
      "seedance_byteplus.py",
      "README.md",
      "SKILL.md",
      "LICENSE.txt"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/seedance-video-generation-byteplus"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/seedance-video-generation-byteplus",
    "agentPageUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Seedance Video Generation (BytePlus International)",
        "body": "Generate AI videos using ByteDance Seedance models via the BytePlus Ark API (International version)."
      },
      {
        "title": "Prerequisites",
        "body": "The user must set the ARK_API_KEY environment variable with a BytePlus API Key. You can set it by running:\n\nexport ARK_API_KEY=\"your-byteplus-api-key-here\"\n\nGet your API Key from the BytePlus API Key Management page.\n\nBase URL: https://ark.ap-southeast.bytepluses.com/api/v3"
      },
      {
        "title": "Supported Models",
        "body": "ModelModel IDCapabilitiesSeedance 1.5 Proseedance-1-5-pro-251215Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft modeSeedance 1.0 Proseedance-1-0-pro-250428Text-to-video, Image-to-video (first frame, first+last frame)Seedance 1.0 Pro Fastseedance-1-0-pro-fast-250528Text-to-video, Image-to-video (first frame only)Seedance 1.0 Lite T2Vseedance-1-0-lite-t2v-250219Text-to-video onlySeedance 1.0 Lite I2Vseedance-1-0-lite-i2v-250219Image-to-video (first frame, first+last frame, reference images 1-4)\n\nDefault model: seedance-1-5-pro-251215 (latest, supports audio)"
      },
      {
        "title": "Execution (Recommended: Python CLI Tool)",
        "body": "A Python CLI tool is provided at ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py for robust execution with proper error handling, automatic polling, and local image base64 conversion. Prefer using this tool over raw curl commands."
      },
      {
        "title": "Quick Examples with Python CLI",
        "body": "# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"A kitten yawning at the camera\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"The person slowly turns and smiles\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"The landscape slowly zooms in\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"A flower blooming from bud to full bloom\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V only)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"[Image 1] person is dancing\" --ref-images ref1.jpg ref2.jpg --model seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"City night scene time-lapse\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview, Seedance 1.5 Pro only)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"Waves crashing on the beach\" --draft true --wait --download ~/Desktop\n\n# Generate final video from a draft\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py delete <TASK_ID>"
      },
      {
        "title": "Step 1: Create Video Generation Task",
        "body": "Determine the generation mode based on user input, then call the API.\n\nMode A: Text-to-Video\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode 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\nWith image URL:\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nWith local image file (convert to base64):\n\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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode 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\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)\n\nProvide 1-4 reference images. Use [Image 1], [Image 2] in prompt to reference specific images.\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"seedance-1-0-lite-i2v-250219\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"A boy from [Image 1] and a corgi from [Image 2], sitting on the lawn\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_1\" },\n        \"role\": \"reference_image\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_2\" },\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\""
      },
      {
        "title": "Step 2: Poll for Task Completion",
        "body": "Video generation is asynchronous. Poll the task status until it completes.\n\necho \"Waiting for video generation to complete...\"\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \"https://ark.ap-southeast.bytepluses.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"
      },
      {
        "title": "Step 3: Download and Open Video",
        "body": "OUTPUT_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\""
      },
      {
        "title": "Optional Parameters Reference",
        "body": "ParameterTypeDefaultDescriptionmodelstringseedance-1-5-pro-251215Model ID to useratiostring16:9 (t2v) / adaptive (i2v)Aspect ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptivedurationinteger5Video duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set -1 for auto (1.5 Pro only)resolutionstring720pResolution: 480p, 720p, 1080pseedinteger-1Random seed for reproducibility. -1 = randomcamera_fixedbooleanfalseFix camera positionwatermarkbooleanfalseAdd watermark to videogenerate_audiobooleantrueGenerate synchronized audio (Seedance 1.5 Pro only)draftbooleanfalseGenerate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p)return_last_framebooleanfalseReturn last frame image URL (for chaining consecutive videos)service_tierstringdefaultdefault (online) or flex (offline, 50% cheaper, slower)execution_expires_afterinteger172800Task timeout in seconds (3600-259200)"
      },
      {
        "title": "Query Task Status",
        "body": "curl -s -X GET \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool"
      },
      {
        "title": "List Tasks",
        "body": "# List all tasks (paginated)\ncurl -s -X GET \"https://ark.ap-southeast.bytepluses.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.ap-southeast.bytepluses.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"
      },
      {
        "title": "Cancel or Delete Task",
        "body": "curl -s -X DELETE \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\"\n\nNote: queued tasks will be cancelled; succeeded/failed/expired tasks will be deleted from history. running and cancelled tasks cannot be deleted."
      },
      {
        "title": "Generate Consecutive Videos (Using Last Frame)",
        "body": "Set 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# Get last frame URL from completed task\nLAST_FRAME_URL=$(curl -s -X GET \"https://ark.ap-southeast.bytepluses.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)"
      },
      {
        "title": "Draft Mode (Seedance 1.5 Pro only)",
        "body": "Generate a cheap preview first, then produce the final video if satisfied:\n\n# Step 1: Create draft (forces 480p)\nDRAFT_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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  }')"
      },
      {
        "title": "Image Requirements",
        "body": "Formats: JPEG, PNG, WebP, BMP, TIFF, GIF (Seedance 1.5 Pro also supports HEIC, HEIF)\nAspect ratio (width/height): between 0.4 and 2.5\nShorter side must be > 300 pixels, longer side must be < 6000 pixels\nMax file size: 30 MB"
      },
      {
        "title": "Resolution and Aspect Ratio Pixel Values",
        "body": "ResolutionRatioSeedance 1.0 Series (W x H)Seedance 1.5 Pro (W x H)480p16:9864x480864x496480p1:1640x640640x640480p9:16480x864496x864720p16:91248x7041280x720720p1:1960x960960x960720p9:16704x1248720x12801080p16:91920x10881920x10801080p1:11440x14401440x14401080p9:161088x19201080x1920"
      },
      {
        "title": "Sending Videos via Feishu App (OpenClaw)",
        "body": "See how_to_send_video_via_feishu_app.md"
      },
      {
        "title": "Rules",
        "body": "Always check that ARK_API_KEY is set before making API calls: [ -z \"$ARK_API_KEY\" ] && echo \"Error: ARK_API_KEY not set\" && exit 1\nDefault to Seedance 1.5 Pro (seedance-1-5-pro-251215) unless user requests a specific model.\nDefault to 720p, 16:9, 5 seconds, with audio for text-to-video.\nDefault to adaptive ratio for image-to-video (auto-adapts to the input image).\nPoll interval: 15 seconds between status checks.\nVideo URLs expire in 24 hours - always download immediately after generation.\nTask history is kept for 7 days only.\nFor local image files, convert to base64 data URL format before sending.\nAlways show the user the task ID so they can check status later.\nWhen generation fails, display the error message clearly and suggest possible fixes."
      }
    ],
    "body": "Seedance Video Generation (BytePlus International)\n\nGenerate AI videos using ByteDance Seedance models via the BytePlus Ark API (International version).\n\nPrerequisites\n\nThe user must set the ARK_API_KEY environment variable with a BytePlus API Key. You can set it by running:\n\nexport ARK_API_KEY=\"your-byteplus-api-key-here\"\n\n\nGet your API Key from the BytePlus API Key Management page.\n\nBase URL: https://ark.ap-southeast.bytepluses.com/api/v3\n\nSupported Models\nModel\tModel ID\tCapabilities\nSeedance 1.5 Pro\tseedance-1-5-pro-251215\tText-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode\nSeedance 1.0 Pro\tseedance-1-0-pro-250428\tText-to-video, Image-to-video (first frame, first+last frame)\nSeedance 1.0 Pro Fast\tseedance-1-0-pro-fast-250528\tText-to-video, Image-to-video (first frame only)\nSeedance 1.0 Lite T2V\tseedance-1-0-lite-t2v-250219\tText-to-video only\nSeedance 1.0 Lite I2V\tseedance-1-0-lite-i2v-250219\tImage-to-video (first frame, first+last frame, reference images 1-4)\n\nDefault model: seedance-1-5-pro-251215 (latest, supports audio)\n\nExecution (Recommended: Python CLI Tool)\n\nA Python CLI tool is provided at ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py for robust execution with proper error handling, automatic polling, and local image base64 conversion. Prefer using this tool over raw curl commands.\n\nQuick Examples with Python CLI\n# Text-to-video (create + wait + download)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"A kitten yawning at the camera\" --wait --download ~/Desktop\n\n# Image-to-video from local file\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"The person slowly turns and smiles\" --image /path/to/photo.jpg --wait --download ~/Desktop\n\n# Image-to-video from URL\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"The landscape slowly zooms in\" --image \"https://example.com/image.jpg\" --wait --download ~/Desktop\n\n# First + last frame\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"A flower blooming from bud to full bloom\" --image first.jpg --last-frame last.jpg --wait --download ~/Desktop\n\n# Reference images (Lite I2V only)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"[Image 1] person is dancing\" --ref-images ref1.jpg ref2.jpg --model seedance-1-0-lite-i2v-250219 --wait --download ~/Desktop\n\n# Custom parameters\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"City night scene time-lapse\" --ratio 21:9 --duration 8 --resolution 1080p --generate-audio false --wait --download ~/Desktop\n\n# Draft mode (cheaper preview, Seedance 1.5 Pro only)\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt \"Waves crashing on the beach\" --draft true --wait --download ~/Desktop\n\n# Generate final video from a draft\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop\n\n# Query task status\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py status <TASK_ID>\n\n# Wait for an existing task\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py wait <TASK_ID> --download ~/Desktop\n\n# List tasks\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py list --status succeeded\n\n# Delete/cancel task\npython3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py delete <TASK_ID>\n\nAlternative: Raw curl Commands\nStep 1: Create Video Generation Task\n\nDetermine the generation mode based on user input, then call the API.\n\nMode A: Text-to-Video\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode 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\nWith image URL:\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nWith local image file (convert to base64):\n\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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode 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\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nMode D: Reference Image-to-Video (Seedance 1.0 Lite I2V only)\n\nProvide 1-4 reference images. Use [Image 1], [Image 2] in prompt to reference specific images.\n\nTASK_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"seedance-1-0-lite-i2v-250219\",\n    \"content\": [\n      {\n        \"type\": \"text\",\n        \"text\": \"A boy from [Image 1] and a corgi from [Image 2], sitting on the lawn\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_1\" },\n        \"role\": \"reference_image\"\n      },\n      {\n        \"type\": \"image_url\",\n        \"image_url\": { \"url\": \"REF_IMAGE_URL_2\" },\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\nStep 2: Poll for Task Completion\n\nVideo generation is asynchronous. Poll the task status until it completes.\n\necho \"Waiting for video generation to complete...\"\nwhile true; do\n  STATUS_RESULT=$(curl -s -X GET \"https://ark.ap-southeast.bytepluses.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\nStep 3: Download and Open Video\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\nOptional Parameters Reference\nParameter\tType\tDefault\tDescription\nmodel\tstring\tseedance-1-5-pro-251215\tModel ID to use\nratio\tstring\t16:9 (t2v) / adaptive (i2v)\tAspect ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive\nduration\tinteger\t5\tVideo duration in seconds (4-12 for 1.5 Pro, 2-12 for others). Set -1 for auto (1.5 Pro only)\nresolution\tstring\t720p\tResolution: 480p, 720p, 1080p\nseed\tinteger\t-1\tRandom seed for reproducibility. -1 = random\ncamera_fixed\tboolean\tfalse\tFix camera position\nwatermark\tboolean\tfalse\tAdd watermark to video\ngenerate_audio\tboolean\ttrue\tGenerate synchronized audio (Seedance 1.5 Pro only)\ndraft\tboolean\tfalse\tGenerate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p)\nreturn_last_frame\tboolean\tfalse\tReturn last frame image URL (for chaining consecutive videos)\nservice_tier\tstring\tdefault\tdefault (online) or flex (offline, 50% cheaper, slower)\nexecution_expires_after\tinteger\t172800\tTask timeout in seconds (3600-259200)\nAdditional Operations\nQuery Task Status\ncurl -s -X GET \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" | python3 -m json.tool\n\nList Tasks\n# List all tasks (paginated)\ncurl -s -X GET \"https://ark.ap-southeast.bytepluses.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.ap-southeast.bytepluses.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\nCancel or Delete Task\ncurl -s -X DELETE \"https://ark.ap-southeast.bytepluses.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. running and cancelled tasks cannot be deleted.\n\nGenerate 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# Get last frame URL from completed task\nLAST_FRAME_URL=$(curl -s -X GET \"https://ark.ap-southeast.bytepluses.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\nDraft Mode (Seedance 1.5 Pro only)\n\nGenerate a cheap preview first, then produce the final video if satisfied:\n\n# Step 1: Create draft (forces 480p)\nDRAFT_RESULT=$(curl -s -X POST \"https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer $ARK_API_KEY\" \\\n  -d '{\n    \"model\": \"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\nImage Requirements\nFormats: JPEG, PNG, WebP, BMP, TIFF, GIF (Seedance 1.5 Pro also supports HEIC, HEIF)\nAspect ratio (width/height): between 0.4 and 2.5\nShorter side must be > 300 pixels, longer side must be < 6000 pixels\nMax file size: 30 MB\nResolution and Aspect Ratio Pixel Values\nResolution\tRatio\tSeedance 1.0 Series (W x H)\tSeedance 1.5 Pro (W x H)\n480p\t16:9\t864x480\t864x496\n480p\t1:1\t640x640\t640x640\n480p\t9:16\t480x864\t496x864\n720p\t16:9\t1248x704\t1280x720\n720p\t1:1\t960x960\t960x960\n720p\t9:16\t704x1248\t720x1280\n1080p\t16:9\t1920x1088\t1920x1080\n1080p\t1:1\t1440x1440\t1440x1440\n1080p\t9:16\t1088x1920\t1080x1920\nSending Videos via Feishu App (OpenClaw)\n\nSee how_to_send_video_via_feishu_app.md\n\nRules\nAlways check that ARK_API_KEY is set before making API calls: [ -z \"$ARK_API_KEY\" ] && echo \"Error: ARK_API_KEY not set\" && exit 1\nDefault to Seedance 1.5 Pro (seedance-1-5-pro-251215) unless user requests a specific model.\nDefault to 720p, 16:9, 5 seconds, with audio for text-to-video.\nDefault to adaptive ratio for image-to-video (auto-adapts to the input image).\nPoll interval: 15 seconds between status checks.\nVideo URLs expire in 24 hours - always download immediately after generation.\nTask history is kept for 7 days only.\nFor local image files, convert to base64 data URL format before sending.\nAlways show the user the task ID so they can check status later.\nWhen generation fails, display the error message clearly and suggest possible fixes."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/JackyCSer/seedance-video-generation-byteplus",
    "publisherUrl": "https://clawhub.ai/JackyCSer/seedance-video-generation-byteplus",
    "owner": "JackyCSer",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus",
    "downloadUrl": "https://openagent3.xyz/downloads/seedance-video-generation-byteplus",
    "agentUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/seedance-video-generation-byteplus/agent.md"
  }
}