Introduction
Seedance 2.5 Video extend continues a clip you already have. Send it as video_url with a prompt for what happens next. The platform takes the last 30 seconds of your clip at most (the whole clip, if it is shorter) and hands them to Seedance 2.5 reference-to-video as reference footage. The model generates a new segment of 4 to 30 seconds that carries the scene on, and the two are joined into one MP4: your full original first, then the continuation. 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 footage, not from a single frame. Seedance reads the ending of your clip, its movement, camera direction and sound, as context, so speed and direction carry over better than when a model only sees one still. The first new frame is generated rather than copied from your last one, so describe the motion you want to continue and keep the camera language consistent.
You pay for what the model reads and what it makes. The price is Seedance 2.5 reference-to-video's per-second rate with reference video, applied to the reference seconds plus the new seconds. The reference is capped at 30 seconds, so a 60-second source bills 30 reference seconds; everything earlier is only read and joined back on. Reference seconds round up to whole seconds, and Seedance's own minimum applies: a 5-second segment bills at least 4 reference seconds.
One file back, plus the new piece on its own. The joined file keeps your clip’s frame rate and its framing, with no black bars, and is encoded as H.264 MP4 with AAC sound. To line the seam up, the picture may be trimmed or adjusted by a few percent at the edges. If the model returns a noticeably different shape, the new segment is scaled to fill your frame and centered, cropping what spills over. Sound from your source stays, sound generated for the new segment follows it with a short fade at the seam, and a silent side is padded with silence. The second asset in the output is the new segment alone.
Everything else is Seedance 2.5 reference-to-video. The new segment runs on the same routes with the same content range as that 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. A source shorter than 2 seconds is too short to continue from and is turned down.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Required. Describe what happens next: the action that follows, the camera move and the sound. |
video_url | Yes | The clip to continue: MP4, MOV or WebM, 2 to 60 seconds. at least 1 characters |
resolution | No | Size of the new segment: 480p, 720p or 1080p, default 720p. It only sets the quality of the new segment, so match your source. |
duration_seconds | No | Length of the new segment: any whole number from 4 to 30, default 5. |
generate_audio | No | On by default, so the new segment comes with generated sound that follows the reference. Default: |
enable_web_search | No | Off by default. Switched on, the model may search the web for information related to your prompt before it renders the new segment. Default: |
seed | No | 0 to 2147483647. Hold it steady to compare one changed field at a time; drop it for variety. |
watermark | No | Off by default. When on, the new segment carries an AI-generated watermark; your source is not touched. Default: |
Pricing
Billed per second for the reference footage plus the new segment, at Seedance 2.5 reference-to-video's rate with reference video for your resolution and sound setting. The reference is the last 30 seconds of your clip at most, rounded up to whole seconds, and Seedance's minimum applies (a 5-second segment bills at least 4 reference seconds). Earlier parts of your clip are not billed. For a link we cannot measure up front, 30 reference seconds are held and the unused part is released when the job settles.
| Resolution | With video: Yes | With video: No |
|---|---|---|
| $0.0738 / second | $0.1234 / second |
| $0.1659 / second | $0.2773 / second |
| $0.4082 / second | $0.6823 / second |
Use cases
Lengthen a shot that ended too early: a dance that stops mid-move, a tracking shot that cuts before the subject reaches the door, a product spin that stops before the label faces the camera. Extend it and describe the remaining action.
Build a longer sequence step by step. Generate a first shot, extend it, then extend the joined result again. Each step bills the reference it reads (30 seconds at most) plus the seconds it adds. Sources are limited to 60 seconds, so for a long chain extend the latest segment rather than the whole joined clip.
Prompt guide & pro tips
Describe the next beat, not the whole scene. The reference already shows who and where, so spend the prompt on the action that follows, the camera move and the sound. Repeat the camera language your clip ended on, such as a slow push-in or a handheld follow, so the seam reads as one take.
End your source where you want to continue. Seedance leans on the closing seconds of the reference; a clip that ends mid-cut, on a fade or on a different shot pulls the continuation the wrong way. Trim first. Sources of 2 to 60 seconds are accepted as MP4, MOV or WebM.
Keep the resolution consistent. Resolution only sets the quality of the new segment, so a 480p segment after a 1080p source looks softer than the original. Match the resolution of your source, and set duration_seconds to the length you actually need: it adds to the reference seconds on the bill.
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.5/video-extend",
"input": {
"duration_seconds": 5,
"generate_audio": true,
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"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.









