Continue the same shot: the violinist keeps playing as the camera dolly moves slowly forward, dust motes drifting in the same light shafts. Preserve the same performer, cathedral, lighting, and camera momentum. Native audio: the violin melody continues with the same stone-room reverb. No logos, no readable text, no products, no packaging, no prices, no CTA, no advertising, no watermark, no brand marks.
FLUX 3 Extend Video API
blackforestlabs/flux-3/extend-videoFLUX 3 Extend Video continues action seamlessly from the final frame of an existing clip, generating 5–20 seconds of extended footage with momentum and native audio continuity. Preserve physical velocity, subject state, and acoustic ambience across multi-shot sequences.
Required. Upload one source video, or provide a public HTTP(S) video URL in JSON.
Your generated video will appear here
Add your prompt and required media, review the settings, then click Run.
Examples
REST API
Quick Start
Supply a source video URL and retrieve the extended video using the task ID.
Connect to the Vidgo API
Create an API key, store securely on your server, and include Authorization: Bearer VIDGO_API_KEY.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Fill parameters with source video URL and prompt, submit, and save task_id for progress queries.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "blackforestlabs/flux-3/extend-video",
"input": {
"prompt": "Continue the same shot: the violinist keeps playing as the camera dolly moves slowly forward, dust motes drifting in the same light shafts. Preserve the same performer, cathedral, lighting, and camera momentum. Native audio: the violin melody continues with the same stone-room reverb. No logos, no readable text, no products, no packaging, no prices, no CTA, no advertising, no watermark, no brand marks.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "auto",
"sound": true,
"video_url": "https://cdn.vidgo.ai/apis/models/blackforestlabs/flux-3/text-to-video/v1/01/output.mp4"
}
}
JSON
)
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")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Wait for the result
Poll with task_id while running, stop on finished or failed. On success, download data.files[].file_url.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll status with a 2-second base interval. Continue querying while not_started or running, and stop on finished or failed. You can also supply callback_url in the request to receive webhook notifications.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-flux3-ext-...",
"status": "running",
"created_time": "2026-09-16T10:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete runnable example
Expand for an end-to-end integration script with response checks, polling loops, and error boundaries.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "blackforestlabs/flux-3/extend-video",
"input": {
"prompt": "Continue the same shot: the violinist keeps playing as the camera dolly moves slowly forward, dust motes drifting in the same light shafts. Preserve the same performer, cathedral, lighting, and camera momentum. Native audio: the violin melody continues with the same stone-room reverb. No logos, no readable text, no products, no packaging, no prices, no CTA, no advertising, no watermark, no brand marks.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "auto",
"sound": true,
"video_url": "https://cdn.vidgo.ai/apis/models/blackforestlabs/flux-3/text-to-video/v1/01/output.mp4"
}
}
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')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
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 "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneInput parameters
The table lists available input parameters, types, and defaults. Request examples also include the required top-level model field. Prepare inputs and configure output specifications.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Describes continuation motion, camera trajectory, and audio cues. |
| video_url | string | Yes | — | Provide a publicly accessible HTTP(S) source video URL. |
| duration | integer | No | 5 | Extension duration in seconds from 5 to 20. |
| resolution | string | No | 720p | Output resolution, 720p or 1080p. |
| aspect_ratio | string | No | auto | Framing ratio: auto, 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, or 9:16. |
| sound | boolean | No | true | Whether to generate native synchronized audio. |
Response Fields
A successful submission returns a task ID. Status queries provide progress, output files, and error details when a task fails.
| Field | Type | Description |
|---|---|---|
| code | integer | Application result code; successful responses use 0 or 200. |
| message | string | Human-readable message or error detail when present. |
| data.task_id | string | Task identifier used for querying generation status. |
| data.status | string | not_started, running, finished, or failed. |
| data.created_time | string | Task creation timestamp in date-time format. |
| data.progress | integer | Progress percentage reported from 0 to 100. |
| data.files[] | array | Array of output files generated upon task completion. |
| data.files[].file_url | string | Public URL for the generated video file. |
| data.files[].file_type | string | Output file MIME category, such as video. |
| data.error_message | string | null | Failure details when status is failed. |
Task Lifecycle
Continue querying while status is not_started or running. End polling at finished or failed, then process output files or error details respectively.
not_startedThe task was accepted and is waiting in the queue.
runningGeneration is in progress. Continue polling the task_id.
finishedGeneration succeeded. Read video URLs from data.files[].file_url.
failedGeneration failed. Read data.error_message and halt polling.
Polling and Errors
- AuthenticationOn 401 response, verify the Bearer API key in the Authorization header and retry.
- ValidationFor a 400 response, check prompt, the HTTP(S) video_url, output duration of 5–20 seconds, resolution, aspect ratio, and boolean parameters.
- Network and timeoutIf status polling encounters network interruptions, retain task_id and retry status queries.
- Polling intervalPoll status with a 2-second base interval, extending intervals for longer renders.
- Terminal statesContinue polling only on not_started or running. Stop immediately once finished or failed.
- Callback optionProvide callback_url in request top level to receive final task payloads via webhook.
Endpoint limits
| Specification | Value | Details |
|---|---|---|
| Input mode | 1 source video + Prompt | Provide a publicly accessible HTTP(S) source video URL. |
| Output | Extended video with native audio | Returns asynchronous task ID yielding standard MP4 video. |
| Extension duration | 5–20 seconds | Integer range for new video length, default 5 seconds. |
| Resolution | 720p / 1080p | Default is 720p. |
| Aspect ratio | 8 options (including auto) | auto, 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16, default auto. |
| Billing basis | New duration × Resolution rate | 82 credits/sec for 720p, 106 credits/sec for 1080p. |
FLUX 3 Extend Video
FLUX 3 Extend Video broadens narrative scope by continuing motion from the closing frame of an existing clip. Using the closing motion, subject pose, and sound of the source clip as context, it generates 5–20 seconds of subsequent action at 720p or 1080p to develop the next part of the scene.
Why Choose This?
Seamless momentum inheritanceUses the source video's closing motion and subject pose to guide the continuation.
Acoustic trajectory continuitySynthesizes native audio that builds upon previous soundscapes, connecting ambient room tones and action foley across takes.
Multi-shot scene chainingUse output clips as inputs for recursive extensions, stitching complex episodic sequences and multi-angle camera progressions.
Extended 5–20 second additionsAdds 5 to 20 seconds of new cinematic material in a single render, providing ample runway to unfold the next story beat.
Prompt-directed story beatsSteer subsequent actions, environmental shifts, or camera trajectories via prompt while keeping core scene logic grounded.
High-definition 720p and 1080p outputProvides matched 720p and 1080p tiers to support visual continuity between new segments and original source materials.
Parameters
| Parameter | Requirement | Description |
|---|---|---|
| prompt | Required | String. Directs ongoing action, new camera movement, and audio cues developing from the final frame of the source video. |
| video_url | Required | Provide a publicly accessible HTTP(S) source video URL. |
| duration | Optional | Integer. Sets extension length in seconds from 5 to 20; the Playground preselects 5 seconds. Default 5 |
| resolution | Optional | String. Sets output resolution to 720p or 1080p; the Playground preselects 720p. Default 720p1080p |
| aspect_ratio | Optional | String. Controls framing ratio, supporting auto and standard formats; the Playground preselects auto. Default auto21:92:116:94:31:13:49:16 |
| sound | Optional | Boolean. Controls whether native synchronized audio is generated alongside video; default is true. Default truefalse |
How to Use
Provide a source video URLProvide a publicly accessible HTTP(S) source video URL.
Direct the next narrative beatIn prompt, describe how the action continues from the last frame, guiding new camera angles and sound effects.
Set extension durationChoose how many seconds to add (between 5 and 20); default is 5 seconds.
Select resolution and framingPick 720p or 1080p and leave aspect ratio on auto to inherit framing from the source video.
Configure audio continuityKeep sound set to true to synthesize matching acoustic continuation, or select false for silent output.
Run and inspect extended takeCheck the estimated credits, click Run, and download the seamless extended video once generation finishes.
Pricing
Billed per new output second by resolution tier, including native synchronized audio. Source video input does not add billable seconds. 1 credit = $0.005.
| Usage | Rate | Details |
|---|---|---|
| 720p | 82 credits / sec ($0.41 / sec) | Default 5s at 720p is 410 credits ($2.05). |
| 1080p | 106 credits / sec ($0.53 / sec) | 5s at 1080p is 530 credits ($2.65). |
Best Use Cases
Extending dynamic shotsLengthen impactful micro-clips to allow actions to play out fully without having to re-render from scratch.
Sequential multi-shot progressionGuide continuous character actions through consecutive doorways, turns, or landscape reveals across sequential passes.
In-depth product feature explorationContinue from a general product exterior shot into an extreme close-up detailing material craftsmanship.
High-velocity tracking continuationPreserve established speed and directional momentum during running, driving, or aerial chase sequences.
Pro Tips
- Choose source video clips with clear terminal motion and steady subjects to give the model clean velocity vectors.
- Use connective language in prompt like 'continue forward trajectory, smoothly arcing camera upward toward the sky'.
- To redirect camera gaze, describe gradual pans or tilting transitions rather than abrupt perspective jumps.
- Provide a publicly accessible HTTP(S) source video URL.
- Include acoustic cues that match evolving visual settings, such as 'footsteps transition from gravel to stone pavement'.
Notes
- Provide a publicly accessible HTTP(S) source video URL.
- Billing applies strictly to newly generated output seconds (duration); source input video is not billed.
- Upon submitting via API, retain task_id to poll generation status and download the extended MP4 file.
- Output media is delivered in standard MP4 video format with an integrated native audio track when sound is enabled.
Related Endpoints
FLUX 3 Extend Video API frequently asked questions
What is the FLUX 3 Extend Video API?
FLUX 3 Extend Video is a Black Forest Labs model for extending existing video clips seamlessly from their final frame. Using the closing motion, subject pose, and lighting of the source clip as context, it generates 5 to 20 seconds of subsequent footage up to 1080p resolution with matching native audio continuity. It supports multi-shot storytelling through successive clip extensions. You can call it programmatically or try it from the playground above.
What are the source video requirements for FLUX 3 Extend Video?
Provide a publicly accessible HTTP(S) source video URL.
How do prompts ensure smooth motion and camera continuation?
The closing motion of the source clip provides context for the continuation. Using connective prompt instructions (such as 'continue accelerating along the path while the camera slowly tilts upward') helps the engine maintain velocity and natural locomotion.
How does FLUX 3 Extend Video handle audio continuity?
When sound is set to true, the model evaluates the acoustic environment in the source clip alongside newly described actions to synthesize seamless ambient and foley audio across the transition cut.
Can I perform recursive video extensions with FLUX 3 Extend Video?
You can pass a generated video as video_url in another extension request. Each request is billed for the selected output duration.
How is billing calculated for FLUX 3 Extend Video?
Billing is based entirely on newly generated output seconds (duration) at the chosen resolution tier: 82 credits/sec for 720p and 106 credits/sec for 1080p. The input video is used for validation and context without incurring billed seconds.
How do I introduce a scene change during video extension?
Describe a transitional action in the prompt, such as 'the character pushes open the door, transitioning from the dark interior into the sunlit garden'. Explicitly detailing the transitional beat enables the model to render a natural viewpoint shift.



