Introduction
Wan 3.0 Pro Prime Image to video animates an opening frame on the Prime render and delivers it at 1080p, 2K or 4K for 2 to 30 seconds. image_url is required and becomes the exact first frame; the prompt is optional and should describe motion and camera; last_image_url optionally fixes the final frame. The fields match Wan 3.0 Pro Image to video exactly, so a request built for that endpoint runs here with only the model name changed.
Choose a Wan 3.0 Pro Prime mode by starting material
| What you have at the start | Mode |
|---|---|
| a written scene or script | Wan 3.0 Pro Prime Text to video |
| an approved opening image | Wan 3.0 Pro Prime Image to video |
| separate visual, motion, or sound references | Wan 3.0 Pro Prime Reference to video |
Key features & highlights
Two-frame instructions such as focus pulls
A focus pull is two frames by nature, which is what last_image_url is for. The bloom example opens sharp on a flower bud and closes on a supplied frame that is sharp on an unbuttoned shirt behind it, 6 seconds at 4k; the prompt only says when the transfer happens. Very shallow depth of field leaves the render little latitude to land on the right plane without a pinned ending.
The source sets the ceiling, not the tier
Resolution governs the render, not the input. The 2k and 4k tiers are enlarged from a native 1080p render, so feed the sharpest still you have: JPEG, PNG without transparency, BMP or WEBP, 240 to 8000 pixels per side, up to 20 MB and no wider than 8:1.
Holds for scored edits
The alley-light-hold example is a 4-second hold at 2k with audio and prompt expansion both off: "Nobody moves. Only the neon tube above her stutters and the rain keeps falling, dragging its reflection across the wet plastic. Locked camera." It is the request shape for a shot that will be scored in the edit instead of carrying its own sound.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | No | Optional here. Use it for motion and camera; restating what is already visible in the frame invites the model to redraw it. at least 1 characters · at most 20000 characters |
image_url | Yes | The opening frame, used exactly as the first frame, and the real quality ceiling of the shot. at least 1 characters |
last_image_url | No | Optional, and only together with |
resolution | No | 1080p, 2k or 4k, default 1080p. |
aspect_ratio | No | adaptive follows the opening frame. Pin a ratio only when the delivery format demands it. |
duration_seconds | No | Any whole number from 2 to 30, default 5, or -1 for smart duration, where the model picks the length: the 30-second maximum is reserved up front and the charge settles on the le… |
generate_audio | No | On by default. Sound is generated with the picture and arrives inside the same file. Default: |
enable_prompt_expansion | No | On by default on this family. It fills out thin briefs and rewrites detailed ones, so turn it off once your prompt is a precise shot description. Default: |
seed | No | 0 to 2147483647. Fix it while you tune resolution or duration, otherwise every rerun changes two things at once. |
Pricing
| Specification | Price |
|---|---|
| $0.234 / second |
| $0.252 / second |
| $0.279 / second |
Use cases
Environmental change around a still subject
The neon-alley example opens on a plate that already carries the alley, the rain and the transparent slicker, so the prompt says only what changes: the rain coming down harder, a neon tube stuttering once, steam surging from a vent, and the subject holding the lens through all of it. Its audio line names each source — rain on steel, a buzzing tube, a hissing vent.
Close detail with a fixed end
The shirt example reuses the same two frames as the bloom example at 1080p for 4 seconds: a hand draws an open shirt slowly aside under raking gold light and lets it fall back, while the bud between the folds opens a little. Pinning both ends keeps a very shallow depth of field landing on the intended plane.
Prompt guide & pro tips
Leave what is visible out of the prompt
Restating what is already in the frame invites the model to redraw it. Use the prompt for motion and camera only, and keep aspect_ratio on adaptive so the clip follows the frame's own shape; pin a ratio only when the delivery format demands it.
Approve at 1080p, deliver at 2K or 4K
Settle the motion at 5 seconds and 1080p with seed held, then re-send the body at 2k or 4k. Every rerun that changes both resolution and seed changes two things at once, so one of them has to stay fixed while you judge the other.
Turn off expansion for exact motion
enable_prompt_expansion is true by default on this family. It helps a two-word idea and rewrites a precise motion brief; the alley-light-hold example switches it off so its three short sentences run as written. Any whole duration from 2 to 30 seconds is accepted, and -1 hands the choice of length to the model.
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": "alibaba/wan-3.0-pro-prime/image-to-video",
"input": {
"aspect_ratio": "adaptive",
"duration_seconds": 5,
"image_url": "https://example.com/reference.png",
"resolution": "1080p"
}
}'
# 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.



























