Introduction
Seedance 2.0 Fast Video extend continues a clip you already have. Send it as video_url, and add a prompt for what happens next if you want to steer it. The final frame of your clip becomes the opening frame of a new Seedance 2.0 Fast image-to-video shot of 4 to 15 seconds, and the two are joined into one MP4: your original first, then the continuation, with the repeated seam frame removed. The new segment also comes back as its own file, so you can keep extending or edit the pieces separately.
Key features & highlights
Continuity comes from the last frame. Wardrobe, set, light and where everyone stands carry over because the new segment literally starts on your final frame. Motion does not carry over the same way: the model sees one still, not the whole clip, so describe the movement you want to continue instead of assuming it will keep its speed or direction.
You choose how it ends. last_image_url is optional: give it and the new segment lands on that image, leave it out and the model decides. The prompt is optional too, so a one-click extend works without writing a word.
One file back, plus the new piece on its own. The first output asset is the joined clip (role video) and the second is the new segment alone (role segment), ready for another extend or for an editor. Sound from your source stays; sound generated for the new segment follows it; a silent side is padded with silence so picture and sound stay in step at the seam.
Everything else is Seedance 2.0 Fast image-to-video. The new segment runs on the same routes, with the same content range and the same per-second prices by resolution and sound setting as the image-to-video endpoint, and a failed generation is refunded the same way. If the generation succeeds but the join itself cannot be built, the task fails and the charge is refunded.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | No | Optional, but worth writing: what happens next, meaning the action that follows, the camera move and the sound. at least 1 characters |
video_url | Yes | The clip to continue: MP4, MOV or WebM, up to 60 seconds. Its final frame becomes the opening frame of the new segment, so cut it on a clean, sharp frame. at least 1 characters |
last_image_url | No | Optional closing frame: the new segment lands on this image, which is how you set where the shot ends, such as a transition, a before-and-after pair or a settled pose. |
resolution | No | Resolution of the new segment: 480p or 720p, default 720p. It sets the price. |
duration_seconds | No | Length of the new segment in whole seconds, 4 to 15, default 5. Pass -1 to let the model choose: 15 seconds are held up front and the charge settles on the length delivered. |
generate_audio | No | On by default, so the new segment comes with a soundtrack synchronised to the picture; switching it off does not lower the price in this tier. Default: |
seed | No | Integer seed; omit it and each run draws its own. Fix it with everything else held constant to judge what a prompt edit actually changed. |
bitrate_mode | No | Encoding bitrate of the delivered file: |
watermark | No | Adds the model’s own visible "AI generated" watermark to the video. Off by default; switch it on when the place you publish requires AI-made footage to be labelled. Default: |
Pricing
Billed per second of the new segment at the resolution and sound setting you choose; the source clip you send is not billed.
| Specification | Price |
|---|---|
| $0.04499712 / second |
| $0.096768 / second |
Use cases
Lengthen a shot that ended too early: a product turntable that stops before the label faces camera, or a walk that cuts before the subject reaches the door. Extend it by a few seconds and describe only the remaining motion.
Build a longer sequence step by step. Generate a first shot, extend it, then extend the joined result again; each step bills only the seconds it adds. Because every step starts from a single frame, watch each seam before stacking the next one.
Prompt guide & pro tips
Describe the next beat, not the whole scene. The frame already fixes who and where, so spend the prompt on the action that follows and the camera move, and name the sound you want. Repeat the camera language your clip ended on, such as a slow push in or a locked shot, so the seam reads as one take.
Trim before you extend. The last frame is the only thing the model sees, so a blurred, mid-cut or heavily compressed ending carries straight into the continuation. Cut your source on a clean, sharp frame first. Sources of up to 60 seconds are accepted as MP4, MOV or WebM.
Match the resolution of your source and set duration_seconds to the length you actually need: the charge follows the new segment only. The framing of the new segment follows the last frame of your clip, so there is no aspect ratio to choose; expect a close match to the source, not a pixel-exact one. If the model returns a noticeably different shape, the new segment is scaled to fill your frame and centered, cropping what spills over.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "bytedance/seedance-2.0-fast/video-extend",
"input": {
"bitrate_mode": "standard",
"duration_seconds": 5,
"generate_audio": true,
"resolution": "720p",
"video_url": "https://example.com/reference.mp4"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.









