Introduction
FLUX 3 Video extend continues a clip you already have. It takes an MP4 of up to 15 seconds, starts from its last frame and generates 5 to 20 new seconds with synchronized sound. The result is the new segment only; your source is not included.
Choose a mode by starting material
| What you have | Mode |
|---|---|
| a written brief | FLUX 3 Text to video |
| a still to animate, with an optional last frame | FLUX 3 Image to video |
| a clip to continue | FLUX 3 Video extend |
| a clip to enlarge | FLUX 3 Video upscale |
Key features & highlights
Picks up from the last frame
The new segment begins where your clip ended, with the same person, place and light. In our test it opened with a short dissolve before the next action began.
New segment only
You receive just the added seconds, so the final cut is assembled in your editor with the original clip.
Billed on the new seconds
Price follows the length of the new segment and the tier. Per second it costs more than text to video.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Up to 5,000 characters. Describe what happens next: the action, the camera and a Sound: line that continue the clip. at least 1 characters ยท at most 5000 characters |
video_url | Yes | The clip to continue, an MP4 of up to 15 seconds. The new segment picks up from its last frame. at least 1 characters |
aspect_ratio | No | One of 16:9, 9:16, 1:1, 4:3, 3:4, 21:9 or 2:1. Leave it out to keep the shape of the source clip. |
quality | No | standard (default) renders at the resolution you choose; draft is a fast, lower-cost preview that is always 720p. It changes the price: draft is the lowest tier. |
resolution | No | 720p (default) or 1080p. 1080p costs more. |
duration_seconds | No | Length of the new segment in whole seconds, 5 to 20; 5 by default. The result contains only this segment, not your source clip. |
generate_audio | No | Generate synchronized sound with the picture. On by default; off gives a silent file. Default: |
Pricing
Billed per second of the new segment only, by tier (draft lowest, then standard 720p, then standard 1080p). Extending costs more per second than text to video. Sound on or off costs the same, and refused and failed requests are not charged.
| Resolution | Quality: Draft | Quality: Standard |
|---|---|---|
| $0.12 / second | $0.53 / second |
| $0.12 / second | $0.41 / second |
Use cases
Lengthening a good clip
Take a six-second shot you like and carry the scene on.
Building sequences
Chain several extensions, each with one clear action.
Fixing an ending
Keep a strong first half and write a new continuation.
Prompt guide & pro tips
Write the next action
Describe what happens after the last frame, not what the clip already shows. In our tests, asking for a pull-back or a new angle cut to a different shot partway through; keeping the camera on the same framing gave one continuous take.
Move in small steps
The model can skip an in-between move, such as walking to a new spot, so ask for the destination action directly.
Expect a short blend at the start
The first fraction of a second can show a dissolve with some ghosting; trim it in the edit if it bothers you.
Match the shape
Leave the aspect ratio out to keep the source shape.
Check the sound
Add a Sound: line so the new segment matches the old.
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": "black-forest-labs/flux-3/video-extend",
"input": {
"duration_seconds": 5,
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"quality": "standard",
"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.


























