Generate AI videos using BytePlus Seedance API (International). 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 & draft mode), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install seedance-video-generation-byteplus或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install seedance-video-generation-byteplus⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/seedance-video-generation-byteplus/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: seedance-video-byteplus description: "Generate AI videos using BytePlus Seedance API (International). 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 & draft mode), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models." version: 1.0.0 category: file-generation argument-hint: "[text prompt or task ID]" ---
Generate AI videos using ByteDance Seedance models via the BytePlus Ark API (International version).
The user must set the ARK_API_KEY environment variable with a BytePlus API Key. You can set it by running:
export ARK_API_KEY="your-byteplus-api-key-here"
Get your API Key from the BytePlus API Key Management page.
Base URL: https://ark.ap-southeast.bytepluses.com/api/v3
| Model | Model ID | Capabilities | |-------|----------|-------------| | Seedance 1.5 Pro | seedance-1-5-pro-251215 | Text-to-video, Image-to-video (first frame, first+last frame), Audio support, Draft mode | | Seedance 1.0 Pro | seedance-1-0-pro-250428 | Text-to-video, Image-to-video (first frame, first+last frame) | | Seedance 1.0 Pro Fast | seedance-1-0-pro-fast-250528 | Text-to-video, Image-to-video (first frame only) | | Seedance 1.0 Lite T2V | seedance-1-0-lite-t2v-250219 | Text-to-video only | | Seedance 1.0 Lite I2V | seedance-1-0-lite-i2v-250219 | Image-to-video (first frame, first+last frame, reference images 1-4) |
Default model: seedance-1-5-pro-251215 (latest, supports audio)
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.
# Text-to-video (create + wait + download)
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "A kitten yawning at the camera" --wait --download ~/Desktop
# Image-to-video from local file
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "The person slowly turns and smiles" --image /path/to/photo.jpg --wait --download ~/Desktop
# Image-to-video from URL
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "The landscape slowly zooms in" --image "https://example.com/image.jpg" --wait --download ~/Desktop
# First + last frame
python3 ~/.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
# Reference images (Lite I2V only)
python3 ~/.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
# Custom parameters
python3 ~/.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
# Draft mode (cheaper preview, Seedance 1.5 Pro only)
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --prompt "Waves crashing on the beach" --draft true --wait --download ~/Desktop
# Generate final video from a draft
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py create --draft-task-id <DRAFT_TASK_ID> --resolution 720p --wait --download ~/Desktop
# Query task status
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py status <TASK_ID>
# Wait for an existing task
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py wait <TASK_ID> --download ~/Desktop
# List tasks
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py list --status succeeded
# Delete/cancel task
python3 ~/.claude/skills/seedance-video-byteplus/seedance_byteplus.py delete <TASK_ID>
Determine the generation mode based on user input, then call the API.
TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "YOUR_PROMPT_HERE"
}
],
"ratio": "16:9",
"duration": 5,
"resolution": "720p",
"generate_audio": true
}')
TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"
The user provides one image as the first frame. The image can be a URL or local file path (convert to base64).
With image URL:
TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "YOUR_PROMPT_HERE"
},
{
"type": "image_url",
"image_url": { "url": "IMAGE_URL_HERE" },
"role": "first_frame"
}
],
"ratio": "adaptive",
"duration": 5,
"resolution": "720p",
"generate_audio": true
}')
TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"
With local image file (convert to base64):
IMG_PATH="/path/to/image.png"
IMG_EXT="${IMG_PATH##*.}"
IMG_EXT_LOWER=$(echo "$IMG_EXT" | tr '[:upper:]' '[:lower:]')
IMG_BASE64=$(base64 < "$IMG_PATH" | tr -d '\n')
IMG_DATA_URL="data:image/${IMG_EXT_LOWER};base64,${IMG_BASE64}"
TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "YOUR_PROMPT_HERE"
},
{
"type": "image_url",
"image_url": { "url": "'"$IMG_DATA_URL"'" },
"role": "first_frame"
}
],
"ratio": "adaptive",
"duration": 5,
"resolution": "720p",
"generate_audio": true
}')
TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"
Requires two images. Supported by: Seedance 1.5 Pro, 1.0 Pro, 1.0 Lite I2V.
TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "text",
"text": "YOUR_PROMPT_HERE"
},
{
"type": "image_url",
"image_url": { "url": "FIRST_FRAME_IMAGE_URL" },
"role": "first_frame"
},
{
"type": "image_url",
"image_url": { "url": "LAST_FRAME_IMAGE_URL" },
"role": "last_frame"
}
],
"ratio": "adaptive",
"duration": 5,
"resolution": "720p",
"generate_audio": true
}')
TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"
Provide 1-4 reference images. Use [Image 1], [Image 2] in prompt to reference specific images.
TASK_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-0-lite-i2v-250219",
"content": [
{
"type": "text",
"text": "A boy from [Image 1] and a corgi from [Image 2], sitting on the lawn"
},
{
"type": "image_url",
"image_url": { "url": "REF_IMAGE_URL_1" },
"role": "reference_image"
},
{
"type": "image_url",
"image_url": { "url": "REF_IMAGE_URL_2" },
"role": "reference_image"
}
],
"ratio": "16:9",
"duration": 5,
"resolution": "720p"
}')
TASK_ID=$(echo "$TASK_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Task created: $TASK_ID"
Video generation is asynchronous. Poll the task status until it completes.
echo "Waiting for video generation to complete..."
while true; do
STATUS_RESULT=$(curl -s -X GET "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}" \
-H "Authorization: Bearer $ARK_API_KEY")
STATUS=$(echo "$STATUS_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['status'])")
if [ "$STATUS" = "succeeded" ]; then
echo "Video generation succeeded!"
VIDEO_URL=$(echo "$STATUS_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['content']['video_url'])")
echo "Video URL: $VIDEO_URL"
break
elif [ "$STATUS" = "failed" ]; then
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")
echo "Video generation failed: $ERROR_MSG"
break
elif [ "$STATUS" = "expired" ]; then
echo "Video generation task expired."
break
else
echo "Status: $STATUS - still processing..."
sleep 15
fi
done
OUTPUT_PATH="$HOME/Desktop/seedance_video_$(date +%Y%m%d_%H%M%S).mp4"
curl -s -o "$OUTPUT_PATH" "$VIDEO_URL"
echo "Video saved to: $OUTPUT_PATH"
open "$OUTPUT_PATH"
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | model | string | seedance-1-5-pro-251215 | Model ID to use | | ratio | string | 16:9 (t2v) / adaptive (i2v) | Aspect ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive | | 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) | | resolution | string | 720p | Resolution: 480p, 720p, 1080p | | seed | integer | -1 | Random seed for reproducibility. -1 = random | | camera_fixed | boolean | false | Fix camera position | | watermark | boolean | false | Add watermark to video | | generate_audio | boolean | true | Generate synchronized audio (Seedance 1.5 Pro only) | | draft | boolean | false | Generate draft/preview video at lower cost (Seedance 1.5 Pro only, forces 480p) | | return_last_frame | boolean | false | Return last frame image URL (for chaining consecutive videos) | | service_tier | string | default | default (online) or flex (offline, 50% cheaper, slower) | | execution_expires_after | integer | 172800 | Task timeout in seconds (3600-259200) |
curl -s -X GET "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}" \
-H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool
# List all tasks (paginated)
curl -s -X GET "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks?page_num=1&page_size=10" \
-H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool
# Filter by status
curl -s -X GET "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks?page_num=1&page_size=10&filter.status=succeeded" \
-H "Authorization: Bearer $ARK_API_KEY" | python3 -m json.tool
curl -s -X DELETE "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}" \
-H "Authorization: Bearer $ARK_API_KEY"
Note: queued tasks will be cancelled; succeeded/failed/expired tasks will be deleted from history. running and cancelled tasks cannot be deleted.
Set return_last_frame: true on the first task, then use the returned last_frame_url as the first frame of the next task.
# Get last frame URL from completed task
LAST_FRAME_URL=$(curl -s -X GET "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks/${TASK_ID}" \
-H "Authorization: Bearer $ARK_API_KEY" | python3 -c "import sys,json; print(json.load(sys.stdin)['content']['last_frame_url'])")
# Use it as first frame for the next video
# ... (use Mode B with LAST_FRAME_URL as the image URL)
Generate a cheap preview first, then produce the final video if satisfied:
# Step 1: Create draft (forces 480p)
DRAFT_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{ "type": "text", "text": "YOUR_PROMPT_HERE" }
],
"draft": true,
"resolution": "480p"
}')
DRAFT_TASK_ID=$(echo "$DRAFT_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
# Step 2: After draft succeeds, generate final video from draft
FINAL_RESULT=$(curl -s -X POST "https://ark.ap-southeast.bytepluses.com/api/v3/contents/generations/tasks" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ARK_API_KEY" \
-d '{
"model": "seedance-1-5-pro-251215",
"content": [
{
"type": "draft_task",
"draft_task": { "id": "'"$DRAFT_TASK_ID"'" }
}
],
"resolution": "720p"
}')
| Resolution | Ratio | Seedance 1.0 Series (W x H) | Seedance 1.5 Pro (W x H) | |-----------|-------|------------------------------|---------------------------| | 480p | 16:9 | 864x480 | 864x496 | | 480p | 1:1 | 640x640 | 640x640 | | 480p | 9:16 | 480x864 | 496x864 | | 720p | 16:9 | 1248x704 | 1280x720 | | 720p | 1:1 | 960x960 | 960x960 | | 720p | 9:16 | 704x1248 | 720x1280 | | 1080p | 16:9 | 1920x1088 | 1920x1080 | | 1080p | 1:1 | 1440x1440 | 1440x1440 | | 1080p | 9:16 | 1088x1920 | 1080x1920 |
See how_to_send_video_via_feishu_app.md
ARK_API_KEY is set before making API calls: [ -z "$ARK_API_KEY" ] && echo "Error: ARK_API_KEY not set" && exit 1seedance-1-5-pro-251215) unless user requests a specific model.安装 Seedance Video Generation BytePlus 后,可以对 AI 说这些话来触发它
Help me get started with Seedance Video Generation BytePlus
Explains what Seedance Video Generation BytePlus does, walks through the setup, and runs a quick demo based on your current project
Use Seedance Video Generation BytePlus to generate AI videos using BytePlus Seedance API (International)
Invokes Seedance Video Generation BytePlus with the right parameters and returns the result directly in the conversation
What can I do with Seedance Video Generation BytePlus in my design & creative workflow?
Lists the top use cases for Seedance Video Generation BytePlus, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/seedance-video-generation-byteplus/ 目录(个人级,所有项目可用),或 .claude/skills/seedance-video-generation-byteplus/(项目级)。重启 AI 客户端后,用 /seedance-video-generation-byteplus 主动调用,或让 AI 根据上下文自动发现并使用。
Seedance Video Generation BytePlus 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Seedance Video Generation BytePlus 可免费安装使用。请查阅仓库了解许可证信息。
Generate AI videos using BytePlus Seedance API (International). 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 & draft mode), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models.
Automate my design & creative tasks using Seedance Video Generation BytePlus
Identifies repetitive steps in your workflow and sets up Seedance Video Generation BytePlus to handle them automatically
Seedance Video Generation BytePlus 属于「Design & Creative」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。