Black Forest Labs Flux 3 Image To Video Draft API Documentation

Black Forest Labs Flux 3 Image To Video Draft API Documentation

Playground

Try it on WaveSpeedAI!

FLUX 3 Image-to-Video Draft quickly animates a required reference image into a draft clip with prompt-guided motion, optional synchronized audio, and flexible 5-20 second duration for rapid visual iteration.

Features

FLUX 3 Draft Image-to-Video quickly animates a required reference image into a draft video. Use the image to anchor the subject, character, product, scene, or visual style, then test different actions, camera directions, pacing, and atmosphere before moving to a final-quality workflow.


Why Choose This?

  • Image-to-video draft generation
    Animate a reference image into a fast motion preview.

  • Reference-image consistency
    Use the input image to preserve the subject, composition, character, product, scene, or visual style.

  • Fast motion testing
    Quickly test subject movement, camera paths, scene atmosphere, and visual continuity.

  • Optional synchronized audio
    Generate matching audio for early ambience, effects, music, or dialogue tests.

  • Flexible duration
    Choose a draft video duration from 5 to 20 seconds.

  • Multiple aspect ratios
    Supports landscape, portrait, square, and cinematic formats.


Parameters

ParameterRequiredDescription
promptYesDescribe the desired action, motion, environment, camera movement, timing, mood, lighting, and style.
imageYesReference image used as the visual starting point. Supports PNG, JPEG, or WebP URLs.
aspect_ratioNoOutput aspect ratio. Options: 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, or 9:16.
durationNoDraft video duration in seconds. Range: 5–20. Default: 5.
generate_audioNoGenerate synchronized audio for the draft video. Default: true.

How to Use

  1. Upload a reference image — Provide a clear image with the subject, composition, or style you want to animate.
  2. Write the prompt — Describe the motion, action, camera path, environment, timing, lighting, and mood.
  3. Choose aspect ratio — Select the output format that matches your target use case.
  4. Set duration — Choose a draft duration from 5 to 20 seconds.
  5. Configure audio optional — Enable generate_audio when you want to test ambience, effects, music, or dialogue.
  6. Submit — Generate the draft image-to-video preview.

Pricing

Pricing is based on billed video duration.

Billed duration is rounded up to the next whole second and capped at 20 seconds. The API accepts durations from 5 to 20 seconds. Audio generation does not add a separate charge.

Billing UnitPrice
Per 5s$0.30
Per second$0.06

Example Costs

DurationBilled DurationCost
5s5s$0.30
10s10s$0.60
15s15s$0.90
20s20s$1.20

Best Use Cases

  • Portrait animation tests — Quickly test motion from a character or portrait image.
  • Product video concepts — Turn product stills into short draft motion previews.
  • Character motion exploration — Test poses, gestures, expressions, and movement directions.
  • Illustration animation — Animate concept art, stylized characters, or visual designs.
  • Social content ideation — Generate quick draft videos for vertical, square, or widescreen content.
  • Style testing — Compare different actions, camera paths, and atmospheres from the same reference image.

Pro Tips

  • Use a clear reference image with the main subject visible.
  • State what should remain consistent from the image and what should change through motion.
  • Use specific action words such as turning, walking, rotating, opening, flowing, or drifting.
  • Add camera language such as slow push-in, tracking shot, orbit, handheld movement, or fixed frame.
  • Start with a simple motion direction, then add more detail after the first draft is stable.
  • Use shorter durations for quick iteration and longer durations when the action needs more time to develop.

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",
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "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/image-to-video-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
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-The text prompt describing the video you want to generate.
imagestringYes-URL of the image the video starts from (PNG, JPEG, or WebP)..
aspect_ratiostringNo-21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16The aspect ratio of the generated media.
durationintegerNo55 ~ 20Video length in seconds (5-20).
generate_audiobooleanNotrue-Whether to generate audio for the video.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<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.urlsobjectObject containing related API endpoints
data.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.