Begin exactly from Image 1 and finish on Image 2. Create one continuous four-second locked-camera time-lapse in the same desert courtyard. The sun rises from low morning to solar noon, shortening the terracotta sundial's shadow smoothly toward the gnomon while the existing flowers open in place. Preserve the exact sundial, unlettered dial lines, stone plinth, adobe wall, doorway, garden-bed geometry, mountains, plant locations, camera position, crop, and material colors. Only illumination, shadow length, and flower openness may change. Keep shadows physically consistent and settle precisely into the noon frame. Synchronized audio: a restrained desert breeze and faint dry leaves, with no music. No cuts, no people, no animals, no new objects, no numbers, no readable text, no logos, no brands, no products, no advertising, no watermark.
Seedance 2.0 Fast Image-to-Video
seedance-2.0-fast/image-to-videoSeedance 2.0 Fast Image-to-Video animates one required start frame and an optional end frame into a 4–15 second clip. Describe subject and camera motion separately; the frame determines composition, the aspect ratio stays Auto, and Fast output is 480p or 720p.
Input
A start frame is required; the end frame is never promoted automatically.
AutoAdvanced
Generate audio
Ask the model to generate an audio track with the video.
Return last frame
Keep the video result and request the final frame as an additional file.
Web search
Send the optional web-assisted generation field.
Output
IdleYour generated files will appear here
Set the inputs, choose a duration, then run the asynchronous video task.
Continue with
Examples
REST API
Quick Start
Authenticate, submit the smallest valid Image-to-Video request, then retrieve the asynchronous video result.
Connect to the Vidgo API
Create an API key, store it only on your server, and send it as a Bearer header.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Send the exact model ID and required mode fields; success immediately returns task_id.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "seedance-2.0-fast/image-to-video",
"callback_url": "https://httpbin.org/post",
"input": {
"prompt": "Begin exactly from Image 1 and finish on Image 2. Create one continuous four-second locked-camera time-lapse in the same desert courtyard. The sun rises from low morning to solar noon, shortening the terracotta sundial's shadow smoothly toward the gnomon while the existing flowers open in place. Preserve the exact sundial, unlettered dial lines, stone plinth, adobe wall, doorway, garden-bed geometry, mountains, plant locations, camera position, crop, and material colors. Only illumination, shadow length, and flower openness may change. Keep shadows physically consistent and settle precisely into the noon frame. Synchronized audio: a restrained desert breeze and faint dry leaves, with no music. No cuts, no people, no animals, no new objects, no numbers, no readable text, no logos, no brands, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "480p",
"aspect_ratio": "auto",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-fast/image-to-video/v1/input-start-frame.png",
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-fast/image-to-video/v1/input-end-frame.png"
],
"generate_audio": true,
"seed": 26082704
}
}'Wait for the result
Poll only not_started or running, or receive the flat terminal object at callback_url.
Track status
GET https://api.vidgo.ai/api/generate/status/LC37CJUEOZD1IHL3Begin near a 2 second polling interval, back off for long tasks, and enforce a timeout. finished and failed are terminal. Handle network failure, request timeout, and task failure separately; callback_url uses the same request contract.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "LC37CJUEOZD1IHL3",
"status": "running",
"created_time": "2026-08-27T14:25:24"
}
}{
"code": 200,
"data": {
"task_id": "LC37CJUEOZD1IHL3",
"status": "finished",
"progress": 100,
"created_time": "2026-08-27T14:25:24",
"error_message": null,
"files": [
{
"file_type": "video",
"file_url": "https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-fast/image-to-video/v1/output.mp4"
}
]
}
}Complete runnable example
The example checks HTTP and business codes, task_id, backoff, timeout, terminal states, and result files.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "seedance-2.0-fast/image-to-video",
"callback_url": "https://httpbin.org/post",
"input": {
"prompt": "Begin exactly from Image 1 and finish on Image 2. Create one continuous four-second locked-camera time-lapse in the same desert courtyard. The sun rises from low morning to solar noon, shortening the terracotta sundial's shadow smoothly toward the gnomon while the existing flowers open in place. Preserve the exact sundial, unlettered dial lines, stone plinth, adobe wall, doorway, garden-bed geometry, mountains, plant locations, camera position, crop, and material colors. Only illumination, shadow length, and flower openness may change. Keep shadows physically consistent and settle precisely into the noon frame. Synchronized audio: a restrained desert breeze and faint dry leaves, with no music. No cuts, no people, no animals, no new objects, no numbers, no readable text, no logos, no brands, no products, no advertising, no watermark.",
"duration": 4,
"resolution": "480p",
"aspect_ratio": "auto",
"image_urls": [
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-fast/image-to-video/v1/input-start-frame.png",
"https://cdn.vidgo.ai/apis/models/bytedance/seedance-2.0-fast/image-to-video/v1/input-end-frame.png"
],
"generate_audio": true,
"seed": 26082704
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/LC37CJUEOZD1IHL3" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
model and optional callback_url are top-level; generation fields belong in input, and unsupported media is rejected.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Must equal seedance-2.0-fast/image-to-video. |
| callback_url | string (URL) | No | — | Public HTTP(S) endpoint for the terminal task object. |
| input | object | Yes | — | Contains only fields public for this mode. |
| input.prompt | string | Required | — | Trimmed length 1–20,000; the Playground supplies a mode-specific example. |
| input.duration | integer | Required | — | Any integer from 4 through 15 inclusive; Playground default 5. |
| input.resolution | string | Required | 720p | 480p, 720p; Playground default 720p. |
| input.aspect_ratio | string | Required | auto | Must be explicitly set to auto. |
| input.image_urls | string[] | Required | — | One or two public HTTP(S) image URLs ordered as required start frame, optional end frame. |
| input.generate_audio | boolean | Optional | true | Boolean. The Playground explicitly sends true by default. |
| input.return_last_frame | boolean | Optional | false | Boolean. The Playground explicitly sends false by default. |
| input.web_search | boolean | Optional | false | Boolean. The Playground explicitly sends false by default. |
| input.seed | integer | Optional | — | Integer with no published range; omitted when empty. |
| Rejected media fields | — | — | — | start_image_url, end_image_url, reference_*_urls, video_url, video_urls |
Response Fields
Submission identifies the task; status adds progress, every result file, or failure detail.
| Field | Type | Description |
|---|---|---|
| code | integer | Business code; success accepts 0 or 200. |
| message | string | Optional response or error message. |
| data.task_id | string | Task ID used by the status endpoint. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Task creation timestamp. |
| data.progress | integer | Reported completion percentage. |
| data.files[] | array | All result files in returned order. |
| data.files[].file_url | string | Direct result URL. |
| data.files[].file_type | string | Public type such as video or image. |
| data.files[].watermark_url | string | null | Watermarked URL when returned by the status service. |
| data.error_message | string | null | Failure detail for a failed task. |
Task Lifecycle
not_started and running are non-terminal; finished and failed are terminal.
not_startedAccepted and waiting to begin.
runningGeneration is active; continue polling with backoff.
finishedSuccessful terminal state; read every file.
failedFailed terminal state; read error_message and stop.
Polling and Errors
- Authentication401 means the Bearer key is missing or invalid; correct it before retrying.
- Validation400 means the payload violates this endpoint contract; fix the named field.
- Insufficient balanceTreat balance errors separately and show required credits and USD.
- Polling and timeoutBegin around 2 seconds and back off; network failure and client timeout are not task failed.
- Terminal states and callbackStop on finished or failed; callback_url can receive the same task as a flat terminal object.
Model Specifications
| Specification | Value | Details |
|---|---|---|
| Input mode | 1–2 images | Required start frame, optional end frame. |
| Output | Asynchronous video task | May return multiple files, all preserved in order. |
| Resolution | 480p / 720p | Fast rejects 1080p and 4K. |
| Duration | 4–15 whole seconds | Inclusive boundaries. |
| Aspect ratio | auto | Image mode accepts only auto. |
| Billing basis | Output seconds | 480p: 14 credits ($0.070)/s; 720p: 28 credits ($0.140)/s |
Seedance 2.0 Fast Image-to-Video
Seedance 2.0 Fast Image-to-Video animates one required start frame and an optional end frame into a 4–15 second clip. Describe subject and camera motion separately; the frame determines composition, the aspect ratio stays Auto, and Fast output is 480p or 720p.
Why Choose This?
Ordered frame control.A required start frame and optional end frame preserve the intended array order.
Lower current rates.Use 480p or 720p for cost-conscious iteration and repeated trials.
Continuous duration control.Select any whole-second duration from 4 through 15 instead of a short preset list.
Explicit advanced controls.Request audio, a returned last frame, web assistance, and an optional integer seed.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | Trimmed length 1–20,000; the Playground supplies a mode-specific example. |
| duration | Required | Any integer from 4 through 15 inclusive; Playground default 5. |
| resolution | Required | 480p, 720p; Playground default 720p. Default 720p480p |
| aspect_ratio | Required | Must be explicitly set to auto. Default auto |
| image_urls | Required | One or two public HTTP(S) image URLs ordered as required start frame, optional end frame. |
| generate_audio | Optional | Boolean. The Playground explicitly sends true by default. Default true |
| return_last_frame | Optional | Boolean. The Playground explicitly sends false by default. Default false |
| web_search | Optional | Boolean. The Playground explicitly sends false by default. Default false |
| seed | Optional | Integer with no published range; omitted when empty. |
How to Use
Add the start frameUpload the required start frame, then add an optional end frame without changing their order.
Direct the movementUse concrete verbs and separate subject motion from camera motion.
Set the outputChoose 480p, 720p, a 4–15 second duration, and the applicable composition.
Review advanced controlsConfirm audio, last-frame, web-assistance, and seed choices.
Submit and trackRun the request, then poll the task ID or process its terminal callback.
Pricing
One credit equals $0.005. Credits equal output duration times the selected resolution rate. Advanced options, image count, and audio count do not change the current formula.
| Usage | Rate | Details |
|---|---|---|
| 480p output | 14 credits / output second | $0.070/s; 5 seconds uses 70 credits ($0.350). |
| 720p output | 28 credits / output second | $0.140/s; 5 seconds uses 140 credits ($0.700). |
Best Use Cases
Product image animationTurn a product start frame into a short asset with deliberate camera movement.
Character shotsUse a source frame while describing expression, pose, and camera change.
Keyframe transitionsUse start and end frames to constrain a readable change of state.
Static ad motionConvert an existing still into a 4–15 second motion version.
Pro Tips
- Order the prompt as subject and setting, action, camera, light and mood, then sound intent.
- Describe what happens after the image instead of repeating visible static details.
- Use concrete motion verbs and separate subject movement from camera movement.
- Choose composition before describing where the subject sits in frame.
- When timing matters, describe an opening, development, and final beat.
Notes
- Send only image_urls in start/end order; aspect_ratio must be auto.
- resolution is required by the public OpenAPI, so examples and the Playground always send it explicitly.
- Playground upload limits are 30 MB images, 50 MB videos, and 15 MB audio; they are not the complete upstream file contract.
- Fast accepts only 480p and 720p, not 1080p or 4K.
- Tasks are asynchronous; poll only while status is not_started or running.
Related Models
Frequently Asked Questions about Seedance 2.0 Fast Image-to-Video API
What is the Seedance 2.0 Fast Image-to-Video API?
Seedance 2.0 Fast is a ByteDance Seedance model. This Image-to-Video endpoint accepts a prompt, a required start frame, and an optional end frame, then returns an asynchronous video-generation task through the documented REST request contract.
How do I call the Seedance 2.0 Fast Image-to-Video API?
Send POST /api/generate/submit with Authorization: Bearer VIDGO_API_KEY. A successful response includes task_id for the unified status endpoint.
How much does the Seedance 2.0 Fast Image-to-Video API cost?
Multiply output seconds by the selected resolution rate. 480p: 14 credits ($0.070)/s; 720p: 28 credits ($0.140)/s.
What inputs does the Seedance 2.0 Fast Image-to-Video API accept?
It accepts a 1–20,000 character prompt, 4–15 whole seconds, 480p, 720p, and one or two image_urls ordered as start then optional end; aspect_ratio must be auto.
How do I get the generated video?
Poll GET /api/generate/status/{task_id}, or submit callback_url. Continue only for not_started or running; read every data.files[].file_url after finished, and stop with the error after failed.
Which Seedance 2.0 endpoint should I choose?
Choose Text with no source asset, Image for a start or start/end frame, and Reference for image, video, or audio guidance. Standard offers resolutions through 4K; Fast is limited to 480p/720p at lower current rates.


