Wan 2.5 · Text to Video
Text in, ten seconds of video with sound out
- audio_url
- video
- task id
A prompt, a shape, a length, and a clip that arrives with audio already baked in. Five or ten seconds, 480p to 1080p, five aspect ratios including vertical. From $0.045 per second - a ten-second 720p take lands around forty-five cents.
The interesting question with any Wan 2.5+ node isn't "is this better than 2.2" so much as "is this better than 2.2 plus a sound model plus a video model plus stitching." For short social-format shots, generated dialogue and ambience that match the picture is a lot of pipeline you didn't have to build.
Why this is a hosted-only model
Wan 2.2 is the last open Wan - 2.5 arrived as a cloud preview that promised open weights and never shipped them, and everything after it stayed API-only. There is no local Wan 2.5 to download, whatever a content farm says; those pages are fabricated and their links are dead.
So the fair comparison is against the open path: Wan 2.2 locally with fine-tunes and LoRAs, a separate audio model, and edits to line them up. That's free after the electricity but it's a weekend of assembly, and it isn't ten seconds at 1080p. If your job is a talking shot with sound and you're on a laptop, paying here is the whole point of the exercise.
What the node does under the hood
It uploads nothing (there's no input media), posts the job, polls until the file URLs exist, downloads the MP4 and hands it back as a standard ComfyUI VIDEO. If you wire in an audio_url, that clip is uploaded first and the model follows it for lip sync and pacing. The whole pack installs as pure Python - no weights, no compiled extras, no GPU.
The inputs
prompt is the shot: subject, action, camera, light, pacing. Be specific about movement, because motion is what Wan is good at and generic prompts waste that. negative_prompt is worth ten seconds of your time - list what must not appear.
aspect_ratio covers 16:9, 9:16, 1:1, 4:3 and 3:4, which is more freedom than most video endpoints give you. resolution is 480p, 720p or 1080p. duration_seconds is 5 or 10 - nothing in between, so plan your shot around one of the two.
audio_url is the optional AUDIO socket: connect an audio node and the clip is generated to follow it. If you're doing a music sync or a spoken line, this is the difference between "close enough" and "on the beat."
enable_prompt_expansion is off by default. It's useful when you have a vague brief and want the service to invent detail; it's harmful when your prompt contains something precise you care about. seed repeats a draw exactly - the whole trick to comparing two prompt phrasings without wondering whether the dice moved.
Outputs: video → Save Video or downstream video nodes; task id → a string you can log for support.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart, then paste a key from spicyapi.ai/console/keys into Settings > SpicyAPI - or find the pack in ComfyUI Manager by searching "SpicyAPI". Restart once after adding the key so the node list comes from your account's catalogue. The key is stored in the ComfyUI user folder rather than as a node widget, so it can't leak through a shared workflow or an image's metadata; on a remote box, set SPICY_API_KEY.
Cost and failure modes
The badge on the node shows a rate, never a total - video is priced per output second, so the real number is the rate times the length you pick. Set Max cost per run in the SpicyAPI settings and anything quoted above it stops before the charge. Leave the seed's control after generate on fixed unless you intend to pay for a new take; flipping it to randomize re-bills every queue.
Cancelling doesn't refund. The job finishes on the server and is charged if it succeeds, so check your console (results live there for 14 days) before re-running.
Error codes are specific enough to act on: 40004 means that option combination has no deployment and the message names the parameter to change; 40310 means your account's email isn't verified; 50302 means the run failed upstream and was refunded, so just queue it again; No SpicyAPI key is set means what it says.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, action, camera, light, pacing, and boundaries for the shot. | |
| negative_prompt | STRING | List what must not appear in the shot. | |
| aspect_ratio | COMBO | 16:9 | Output aspect ratio. |
| resolution | COMBO | 720p | Output resolution. |
| duration_seconds | COMBO | 5 | Requested output length in seconds. |
| enable_prompt_expansion | BOOLEAN | false | Allow the service to expand the submitted creative brief before generation. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
| audio_urlopt | AUDIO | Audio track that drives lip sync or pacing. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |