Vidu Image To Video Q2 Turbo

Vidu Image To Video Q2 Turbo

Playground

Try it on WaveSpeedAI!

Vidu Q2 Turbo Image-to-Video turns a single image into smooth, cinematic motion with fast, high-quality output. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Vidu Q2 Turbo Image-to-Video turns a single reference image into a smooth, cinematic video. Turbo accelerates generation for faster turnaround while keeping motion clean and stable — great for transitions, product demos, and quick storytelling.


Why Choose This?

  • Turbo-optimized pipeline Faster generation than Pro at the same settings, perfect for quick iteration.

  • Temporal smoothing Cuts flicker and popping while keeping faces, hands, hair, and thin details intact.

  • Depth-aware motion Respects occlusion and parallax for natural foreground/background separation.

  • Cinematic camera paths Subtle pans, push-ins, and dollies without rubbery warps.

  • Optional background music Auto-generate BGM for social-ready clips.


Parameters

ParameterRequiredDescription
imageYesReference image to animate (upload or URL)
promptYesDescribe desired motion, mood, and camera movement
durationNoVideo length in seconds (1–10, default: 4)
resolutionNoOutput resolution: 540p, 720p, or 1080p
movement_amplitudeNoMotion intensity: auto, small, medium, or large
bgmNoEnable background music generation
seedNoRandom seed for reproducibility (-1 for random)

How to Use

  1. Upload your image — ensure the URL is accessible for preview.
  2. Write a prompt — describe desired motion, mood, and camera movement.
  3. Set duration — choose video length from 1 to 10 seconds.
  4. Select resolution — 540p, 720p, or 1080p based on quality needs.
  5. Adjust movement amplitude (optional) — control motion intensity.
  6. Enable BGM (optional) — add background music automatically.
  7. Set seed (optional) — use for reproducible results.
  8. Run — submit and download your video.

Pricing

ResolutionDurationPrice
540p1s$0.03
540p2s$0.04
540p3s$0.05
540p4s$0.06
540p5s$0.07
540p6s$0.08
540p7s$0.09
540p8s$0.10
540p9s$0.20
540p10s$0.30
720p1s$0.04
720p2s$0.05
720p3s$0.10
720p4s$0.15
720p5s$0.20
720p6s$0.25
720p7s$0.30
720p8s$0.35
720p9s$0.45
720p10s$0.50
1080p1s$0.175
1080p2s$0.225
1080p3s$0.275
1080p4s$0.325
1080p5s$0.375
1080p6s$0.425
1080p7s$0.475
1080p8s$0.525
1080p9s$0.625
1080p10s$0.725

Billing Rules

540p: $0.03 for 1s, +$0.01/s up to 8s, then $0.20 for 9s, $0.30 for 10s

720p: $0.04 for 1s, $0.05 for 2s, then +$0.05/s from 3s

1080p: $0.175 for 1s, then +$0.05/s up to 8s, then +$0.10/s for 9s-10s


Best Use Cases

  • Quick Iterations — Faster than Pro for rapid creative exploration.
  • Social Media Content — Create engaging video clips from photos.
  • Product Demos — Animate product images with cinematic motion.
  • Transitions — Generate smooth video transitions from key frames.
  • Storytelling — Transform story moments into dynamic video.

Pro Tips

  • Use high-quality, well-lit images for best results.
  • Be specific in your prompt about camera movement (pan, zoom, dolly).
  • Start with “auto” amplitude, then adjust if motion is too subtle or strong.
  • Turbo is generally faster than Pro at the same settings.
  • Use smaller amplitude for portraits to avoid unnatural distortion.

Notes

  • Maximum duration is 10 seconds per generation.
  • Actual runtime depends on resolution, duration, movement amplitude, and queue load.
  • Ensure you have the right to use the uploaded image in your project.
  • Image URL must be accessible for preview to display correctly.

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",
  "duration": 5,
  "resolution": "720p",
  "bgm": true,
  "movement_amplitude": "auto",
  "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/vidu/image-to-video-q2-turbo" \
  -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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-The positive prompt for the generation.
imagestringYes-The start image for generating the output.
durationintegerNo51, 2, 3, 4, 5, 6, 7, 8, 9, 10The duration of the generated media in seconds.
resolutionstringNo720p540p, 720p, 1080pVideo resolution.
bgmbooleanNotrue-The background music for generating the output.
movement_amplitudestringNoautoauto, small, medium, largeThe movement amplitude of objects in the frame. Defaults to auto, accepted value: auto small medium large.
seedintegerNo-1-The random seed to use for the generation. -1 means a random seed will be used.

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.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
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.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
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.