Introduction
Vidu Q3 Turbo is the fast tier of Vidu's Q3 line, available as image-to-video and video-extend endpoints; this page covers image-to-video. An opening frame in image_url sets the subject and the output shape, a required prompt directs the movement, camera and sound, and clips run 1 to 16 whole seconds at 540p or 720p, with 720p as the default. Audio is generated in the same pass and stays on unless you set generate_audio to false. The tier is set up for trying many movements from one still before you commit to a delivery take.
Key features & highlights
A draft value and a delivery value
resolution takes 540p or 720p, and 720p is both the default and the ceiling on this endpoint. The two values work as a pair: 540p for passes where the movement is still being decided, 720p for the take you deliver. Because resolution is a single field, moving between them leaves the prompt, the frame and the seed untouched.
Short variants from one frame
The duration range is 1 to 16 whole seconds, and one to four seconds is the practical range for variant passes. Run a batch of short takes from the same still, each with a different single movement, and keep the ones that read well instead of writing one elaborate brief and hoping it lands.
The still settles subject and shape
Subject, wardrobe, styling, framing and output shape come from the image, not the prompt, so two runs from one frame differ in movement rather than in who is on screen. movement_amplitude sets the overall amount of movement; the prompt decides what moves. Text that argues with the still produces a clip that negotiates between the two, so keep the prompt consistent with what the frame shows.
Request parameters
| Parameter | Required | Description |
|---|---|---|
image_url | Yes | Required. It fixes subject, look and output shape - export the still at the shape you want back. |
prompt | Yes | Required. Describe the movement, camera and sound only; do not re-describe the frame. at least 1 characters |
movement_amplitude | No | How much things in the frame move: |
duration_seconds | No | Whole seconds, 1 to 16. One to four is the practical range for variant passes. |
resolution | No | 540p or 720p. Draft at 540p while the motion is still moving, then raise it once for the take you intend to deliver. |
generate_audio | No | On by default. Set it false when the cut goes under an existing mix. Default: |
bgm | No | Adds a background music bed that fits the scene’s mood. On by default; switch it off when the clip goes under your own music or should carry only the scene’s own sound. Default: |
seed | No | Makes two runs comparable when you change one variable. Not a frame-identical guarantee. |
Pricing
| Specification | Price |
|---|---|
| $0.042 / second |
| $0.066 / second |
Use cases
Character reaction sets
One costume still becomes a curtsy, a wink, a wave and a head tilt – four requests, same frame, four prompts. Because the image fixes identity, the set stays consistent enough to cut together in a feed.
Square and vertical social cuts
Output shape comes from the still, so a 9:16 portrait and a 1:1 square are two exports from the image pass, not two different video settings. Each animates into a 720p clip with sound already in sync.
Camera-move tests on a single still
The push-in example asks for one move and nothing else: the frame tightens by degrees until it holds only her shoulder. Use the same pattern to see whether a subject holds together as the crop closes, before you write a longer brief.
Uncensored loops from your own stills
Uncensored source frames animate as supplied, and the one-to-four-second range suits building a set of short variants from a few stills. Vidu Q3 Spicy from the same line is the LoRA-tuned, uncensored variant.
Prompt guide & pro tips
Export the still at the deliverable's shape
Crop to the shape you want back – square for a square clip, vertical for a vertical one – and keep the ratio between 1:4 and 4:1. Wardrobe, styling and framing are settled at this stage, because the video pass will not change them.
Write one sequence per request
Keep the prompt to the movement, the camera and the sound, and do not re-describe the frame. The published café example runs 5 seconds at 720p with generate_audio on, from a square still of a character in a cat-ear headband holding a tray.
She walks two steps toward camera balancing the tray, does a small curtsy, winks and mouths a silent greeting, the cat-ear headband bobbing. Handheld follow that stays with her, bright café chatter and an espresso machine behind.
Five seconds at 720p from one square still. The walk, the curtsy and the wink are written; the costume and the 1:1 frame came from the image.
Ask for timing and detail in words
Slow motion has no field, so write it into the prompt. The poolside example asks for slow motion and a slow push-in as she lifts herself out onto the pool edge, and the part to watch is the wet hair swept back with both hands: strands that clump and separate correctly are what separates a take from a moving photograph. Changes in distance work the same way – in the bed-end example the camera stays put while she crawls one step closer, so the focus has to shift with her.
Finish the chosen take at 720p
Once a 540p draft reads well, change resolution to 720p and keep the prompt, the frame and seed. The seed keeps the comparison fair but is not a frame-identical guarantee, so review the delivery take on its own. Leave generate_audio on for a clip that is usable as delivered, or set it to false when the cut goes under an existing mix.
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": "vidu/q3-turbo/image-to-video",
"input": {
"duration_seconds": 5,
"image_url": "https://example.com/reference.png",
"movement_amplitude": "auto",
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"resolution": "720p"
}
}'
# 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.







