Black Forest Labs Flux 3 Video Extend Draft API Documentation
Playground
Try it on WaveSpeedAI!FLUX 3 Video Extend Draft quickly continues a required input video into a draft clip with prompt-guided next-scene motion, optional synchronized audio, and flexible 5-20 second duration for rapid iteration.
Features
FLUX 3 Draft Video Extend quickly continues a required input video into a draft extension guided by your prompt. Use it to test what should happen next, how the camera should move, and how the visual style should continue before moving to a final-quality workflow.
Why Choose This?
-
Video extension draft generation
Continue an existing video with a prompt-guided draft extension. -
Fast continuation testing
Test next-scene action, visual continuity, subject behavior, camera movement, pacing, and atmosphere. -
Prompt-guided scene development
Describe how the video should continue after the source clip ends. -
Optional synchronized audio
Generate matching audio for early ambience, effects, music, or dialogue tests. -
Flexible duration
Choose a draft extension duration from5to20seconds. -
Multiple aspect ratios
Supports landscape, portrait, square, and cinematic formats.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Describe the next action, scene development, camera movement, mood, lighting, and visual continuity. |
| video | Yes | Input MP4 video used as the starting point. The source must be under 50 MB and under 15 seconds. |
| aspect_ratio | No | Output aspect ratio. Options: 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, or 9:16. |
| duration | No | Duration of the draft extension in seconds. Range: 5–20. Default: 5. |
| generate_audio | No | Generate synchronized audio for the draft extension. Default: true. |
How to Use
- Upload the source video — Provide an MP4 video under 50 MB and under 15 seconds.
- Write the prompt — Describe the next event, action, camera movement, lighting, mood, and continuity direction.
- Choose aspect ratio — Select the output format that matches your target use case.
- Set duration — Choose a draft extension duration from
5to20seconds. - Configure audio optional — Enable
generate_audiowhen you want to test ambience, effects, music, or dialogue. - Submit — Generate the draft continuation and review the extended result.
Pricing
Pricing is based on billed extension duration.
Billed duration is rounded up to the next whole second and capped at 20 seconds. Audio generation does not add a separate charge.
| Billing Unit | Price |
|---|---|
| Per 5s | $0.60 |
| Per second | $0.12 |
Example Costs
| Duration | Billed Duration | Cost |
|---|---|---|
| 5s | 5s | $0.60 |
| 10s | 10s | $1.20 |
| 15s | 15s | $1.80 |
| 20s | 20s | $2.40 |
Best Use Cases
- Next-scene testing — Explore different continuations after an existing clip ends.
- Alternative endings — Generate multiple draft endings from the same source video.
- Product demo extension — Continue product motion, camera movement, or feature reveals.
- Character action continuation — Extend character movement, gestures, reactions, or performance.
- Advertising drafts — Test campaign ideas, transitions, and pacing from existing footage.
- Social video concepts — Extend short clips into draft vertical, square, or widescreen content.
Pro Tips
- Begin with the next visible action instead of repeating the entire source video.
- State continuity requirements such as lighting, subject appearance, environment, camera movement, and mood.
- Describe what should happen immediately after the source video ends.
- Keep the draft prompt focused on one clear continuation event.
- Use shorter durations for quick tests and longer durations when the continuation needs more time to develop.
- Use a clean source video with a clear ending moment for smoother continuation.
Related Models
- FLUX 3 Draft Start-End-to-Video — Generate a draft transition between a start image and an end image.
- FLUX 3 Draft Image-to-Video — Animate a reference image into a draft video.
- FLUX 3 Draft Text-to-Video — Generate draft videos directly from text prompts.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"aspect_ratio": "21:9",
"duration": 5,
"generate_audio": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/black-forest-labs/flux-3/video-extend-draft" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The text prompt describing the video you want to generate. | |
| video | string | Yes | - | URL of the input video. MP4, under 50 MB and under 15 seconds. | |
| aspect_ratio | string | No | - | 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16 | The aspect ratio of the generated media. |
| duration | integer | No | 5 | 5 ~ 20 | Video length in seconds (5-20). |
| generate_audio | boolean | No | true | - | Whether to generate audio for the video. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |