Seedance is Volcengine's video generation model, supporting text-to-video, image-to-video, and video-to-video modes.
Available models
Supported unified parameters
| Unified field | Supported | Description |
|---|---|---|
model | Yes | model |
prompt | Yes | content[] → { type: "text", text } |
image | Yes | content[] → image_url entries |
video | Yes | content[] → video_url entries |
audio | Yes | content[] → audio_url entries |
ratio | Yes | ratio: 16:9, 4:3, 1:1, 3:4, 9:16, 21:9, adaptive |
resolution | Yes | resolution: 480p, 720p (all models); 1080p (not supported by Seedance 2.0 Fast / Mini); 4k (Seedance 2.0 only) |
headers | Yes | Custom HTTP headers |
upstream_options for Seedance
| Option | Type | Supported models | Description |
|---|---|---|---|
callback_url | string | All | Callback URL for task status change notifications. Ark will POST to this URL when the task status changes |
return_last_frame | boolean | All | Whether to return the last frame image (PNG, no watermark). Useful for chained generation: use the last frame as the first frame of the next task |
service_tier | 'default' | 'flex' | All | Service tier: default for online inference (lower quota, low latency); flex for offline inference (higher quota, 50% price) |
execution_expires_after | number | All | Task timeout in seconds from creation time. Default 172800 (48h), range [3600, 259200] |
generate_audio | boolean | All | Whether to generate synchronized audio (voice, sound effects, background music). Put dialogue in quotes for better results |
draft | boolean | All | Whether to enable draft mode. true generates a preview video with fewer tokens at lower cost for quick validation |
tools | Array<{ type: string }> | Seedance 2.0 series only | Tool definitions, e.g. web search: [{ "type": "web_search" }] |
safety_identifier | string | All | Unique end-user identifier (≤64 chars) to assist with abuse detection. Hash the value before passing |
priority | number | All | Execution priority, 0–9. Higher values get queued ahead of lower-priority requests on the same endpoint |
duration | number | All | Video duration in seconds: 1.0 Pro / 1.0 Pro Fast: [2, 12]; 1.5 Pro: [4, 12] or -1; 2.0 series: [4, 15] or -1 |
frames | number | All | Frame count, [29, 289], must satisfy 25+4n (n = positive integer). Frames = duration × 24 |
seed | number | All | Random seed, [-1, 2^32-1]. Same seed produces similar results (not guaranteed identical); -1 for random |
camera_fixed | boolean | All | Whether to fix the camera. true appends a fixed-camera instruction to the prompt (best-effort) |
watermark | boolean | All | Whether to include a watermark. false = no watermark; true = "AI-generated" watermark in bottom-right |
Media input mapping
Media input parameter handling:
| User input | Result |
|---|---|
image: "https://..." | { "type": "image_url", "image_url": { "url": "..." }, "role": "reference_image" } |
image: { "type": "first_frame", "url": "..." } | { "type": "image_url", "image_url": { "url": "..." }, "role": "first_frame" } |
video: "https://..." | { "type": "video_url", "video_url": { "url": "..." }, "role": "reference_video" } |
video: { "type": "reference_video", "url": "..." } | { "type": "video_url", "video_url": { "url": "..." }, "role": "reference_video" } |
audio: "https://..." | { "type": "audio_url", "audio_url": { "url": "..." }, "role": "reference_audio" } |
audio: { "type": "reference_audio", "url": "..." } | { "type": "audio_url", "audio_url": { "url": "..." }, "role": "reference_audio" } |
Arrays are expanded per entry. Strings use the default role. Objects use their type field as the role.
Example: Text-to-video
curl -X POST https://ai.win10030.com/video/v1/generations \
-H 'Authorization: Bearer sk-xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao-seedance-1-0-pro-250528",
"prompt": "A golden retriever running on the beach, sunset backlight, slow motion",
"resolution": "720p",
"ratio": "16:9",
"upstream_options": {
"duration": 5,
"watermark": false,
"service_tier": "default"
}
}'
Example: Video input
curl -X POST https://ai.win10030.com/video/v1/generations \
-H 'Authorization: Bearer sk-xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao-seedance-1-0-pro-250528",
"prompt": "Generate a sequel based on the reference video, keep characters and setting consistent",
"video": { "type": "reference_video", "url": "https://example.com/reference.mp4" },
"resolution": "720p",
"upstream_options": { "duration": 5 }
}'
Example: Multi-modal (image + video + audio)
curl -X POST https://ai.win10030.com/video/v1/generations \
-H 'Authorization: Bearer sk-xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"model": "doubao-seedance-1-0-pro-250528",
"prompt": "Generate a commercial based on the first frame, reference video, and background music",
"image": { "type": "first_frame", "url": "https://example.com/first.jpg" },
"video": "https://example.com/reference.mp4",
"audio": "https://example.com/bgm.mp3",
"resolution": "1080p",
"ratio": "16:9",
"upstream_options": {
"duration": 8,
"generate_audio": true,
"watermark": false
}
}'
Billing
Seedance uses billingMethod: "modality_tokens":
Request has video input | Customer price field | Usage field |
|---|---|---|
| No | output_tokens_pricing | usage.output_tokens |
| Yes | input_video_output_tokens_pricing | usage.output_tokens |
has_input_video is determined solely by the video field in the request body: any non-empty string, non-empty URL object, or valid video entry in an array counts as true.