Introduction
Wan 2.5 Text to video generates a 5- or 10-second clip with sound from a written prompt alone. prompt is the only required field, up to 1,500 characters; everything else has a default: 16:9, 720p, five seconds, prompt expansion off. Use it when no approved still exists yet and the setting, action and camera all have to come from the text. When you already have the opening frame, the image-led endpoint keeps that frame's subject and proportions instead.
Choose a Wan 2.5 mode by starting material
| What you have at the start | Mode |
|---|---|
| a written scene or script | Wan 2.5 Text to video |
| an approved opening image | Wan 2.5 Image to video |
Key features & highlights
Picture and sound in one pass
The clip comes back with audio already in the file: ambience, effects and voices are generated alongside the picture, so a closing line such as "Audio: gulls, a splash, her breath" is worth writing. To make movement and mouth shapes follow a take you already have, pass audio_url, a WAV or MP3 of 3 to 30 seconds and up to 15 MB. A track longer than the clip is cut at the end; a shorter one leaves the rest of the clip silent.
Five shapes, three resolutions, two lengths
aspect_ratio accepts 16:9, 9:16, 1:1, 4:3 and 3:4, and resolution accepts 480p, 720p and 1080p. The two interact: at 480p only landscape, portrait and square frames render, so 4:3 and 3:4 need 720p or above. duration_seconds is exactly 5 or 10, and a value such as 7 is rejected rather than rounded. Resolution also sets the per-second rate and how long the task takes to return.
Exclusions and controlled comparisons
negative_prompt holds up to 500 characters and is where captions, logos, extra people or a recurring colour belong. seed (0 to 2147483647) keeps the random source steady while you change one field at a time, without promising an identical frame. enable_prompt_expansion is off by default; switched on, it rewrites a short brief into a fuller one before generation.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | The shot itself: who, one action, one camera move, then light and sound. A clear verb moves the result more than a stack of adjectives. at least 1 characters · at most 1500 characters |
negative_prompt | No | Things that must stay out: captions, logos, extra people, a colour you keep getting. This is the only place exclusions work reliably. at most 500 characters |
aspect_ratio | No | 16:9, 9:16, 1:1, 4:3 or 3:4, default 16:9. 4:3 and 3:4 are not available on the lowest resolution tier. |
resolution | No | 480p, 720p or 1080p, default 720p. It sets the per-second rate and how long the task takes; the lowest tier offers only landscape, portrait and square shapes. |
duration_seconds | No | Exactly 5 or 10. Anything else is rejected rather than rounded. |
audio_url | No | A voice line or music cue for the clip to follow. Mouth shapes and movement pace themselves to this file. at least 1 characters |
enable_prompt_expansion | No | Off by default. When on, a short brief is rewritten into a fuller one before generation; leave it off once your prompt is a precise shot description. Default: |
seed | No | 0 to 2147483647. Hold it while comparing one change at a time; for variety, leave the field out rather than sending 0. |
Pricing
| Specification | Price |
|---|---|
| $0.045 / second |
| $0.09 / second |
| $0.135 / second |
Use cases
Vertical clips with the soundtrack inside
Set aspect_ratio to 9:16 and keep five seconds for a feed draft that needs no separate audio pass. The published record-shop example goes further: ten seconds at 1080p in 9:16, a slow tilt from a crate of vinyl up to the man's face, and a negative prompt of "text on screen, logos, extra people" so no captions or passers-by appear.
Checking sound against a visible action
The saxophone example asks for ten seconds at 1080p in 16:9, with the horn's sound matching the fingering. Tying the audio to something you can see (keys, a splash, a turntable crackle) gives you a concrete check on playback instead of judging ambience alone.
A spoken line on your own timing
Record the line, pass it as audio_url, and describe who is speaking and where. Movement and mouth shapes follow the file's timing, so the review can focus on the performance. When the speaker has to be a specific face or product, text alone will not hold that likeness between runs; start from a still on the image-to-video endpoint.
Prompt guide & pro tips
Write the shot in a fixed order
Subject, one action, one camera move, light, then a line about sound. A clear verb changes the result more than a stack of adjectives. Keep exclusions out of the prompt and list them in negative_prompt, and leave enable_prompt_expansion off once your prompt is already a precise shot description, so the wording is used as written.
Adapt the included example
The published harbour example runs at aspect_ratio 16:9, duration_seconds 5 and resolution 720p. Keep its structure when you swap in your own subject and location.
Early morning at a stone harbour wall. An adult woman in a navy one-piece swimsuit and a white swim cap stands at the edge, shakes out her arms, then dives cleanly into flat green water and surfaces laughing, pushing her goggles up. Gulls lift off the wall behind her. Low handheld camera at water level, soft pink dawn light, mist on the water. Audio: gulls, a splash, her breath and a short laugh, distant boat engine.
One action and one camera position, with the sound written out so the splash and laugh land on the right frames.
Iterate at five seconds and 720p
Fix seed and compare one change at a time: the verb, the camera move, the sound line. When the take works, rerender it at 10 seconds or at 1080p. If a 4:3 or 3:4 request is rejected, check the resolution first, because those shapes are not available at 480p.
Review the whole clip with sound on
Play the clip from start to finish with audio: does the action read at normal speed, do effects land on their visible source, and do hands and hair hold together? Longer clips drift more in hands, hair and fine detail, so compare a 10-second take against the 5-second version before delivery.
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-2.5/text-to-video",
"input": {
"aspect_ratio": "16:9",
"duration_seconds": 5,
"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.




























