WaveSpeedAI WAN 2.5 Image-to-Video Fast
WAN 2.5 is API-only — this node is your fastest ComfyUI on-ramp
- client
- video_url
Here's the thing nobody tells you about WAN 2.5: there are no weights. The 2.1 and 2.2 checkpoints you can actually download are where open Wan stopped; 2.5 shipped cloud-only and never became local. So if you want WAN 2.5's output, your options are the API or nothing - and this node is the API wearing a ComfyUI badge. It's the "Fast" variant of the pack's WAN 2.5 image-to-video node, and it's about as close as you'll get to plug-and-play video generation without renting a datacenter.
What it is
An image-to-video node that animates a still image into a short clip using WAN 2.5 hosted on WaveSpeed AI. "Fast" here means the faster variant of the model on their side, not anything happening on your GPU. It's the better default of the two WAN 2.5 i2v nodes because the required input set is smaller - you must supply image, prompt, and resolution, and everything else has a sane default.
How it works
Same pack-wide pattern: the client comes from the WaveSpeedAI Client node (your API key), the image is a public URL, and the node POSTs to the WAN 2.5 image-to-video endpoint, then returns a video_url string. Whether it blocks until done or hands back a task ID depends on enable_sync_mode (default off, meaning it polls up to 30 minutes). Nothing runs locally beyond the request itself.
The inputs that matter
The required trio - image, prompt, resolution (720p or 1080p) - gets you a working render immediately. Then the optional set is where this node gets interesting:
- negative_prompt - tell it what not to do. WAN responds well to negatives like "blurry, distorted hands."
- audio - a URL to an audio clip (3–30s, wav/mp3, ≤15MB) that guides the video. If you have a voice-over or soundtrack you want the motion to sync to, this is the WAN 2.5 feature that makes the API version worth paying for.
- duration - 5 or 10 seconds.
- enable_prompt_expansion - let the API rewrite and enrich your prompt. Nice for lazy prompting, mildly unpredictable for exact control.
- seed - -1 for random, or fix it to reproduce a result.
Output is video_url (STRING) - a URL, not a file, so plan a download step.
Install & setup
Standard pack install, once:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed.git
cd razv-wavespeed
pip install -r requirements.txt
or via ComfyUI Manager (search "razv-wavespeed"), then restart. You'll need a WaveSpeed AI API key in config.ini, the Client node, or WAVESPEED_API_KEY. No models to download; deps are just requests, pillow, numpy<2.0.0, torch.
Common issues
- 401 Unauthorized - the key. Check it, top up credit.
- Video never finishes / "No output received" - the 30-minute task ceiling or an unreachable image URL. Upload images to a host that returns a public URL first.
- "Fast" expectations - it's faster than the non-Fast WAN 2.5 node on WaveSpeed's side, but you're still waiting on a remote job plus polling. This is not local-inference speed, and it isn't the "WaveSpeed" fast-inference plugin you've seen praised on Reddit - that's a different project.
One honest caveat: you can run WAN 2.2 locally for free, and for most hobby work that's the value play. Reach for this node when you specifically want 2.5 or you'd rather pay a few cents than babysit a 14B model.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| image | STRING | Image URL to animate (connect from Upload Image node) | |
| prompt | STRING | Text description for video animation | |
| resolution | COMBO | 720p | Video output resolution |
| negative_promptopt | STRING | Describe what you don't want in the video | |
| audioopt | STRING | Audio URL to guide video generation (3-30 seconds, wav/mp3, ≤15MB) | |
| durationopt | COMBO | 5 | Video duration in seconds |
| enable_prompt_expansionopt | BOOLEAN | false | Automatically expand and enhance the prompt |
| seedopt | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
| enable_sync_modeopt | BOOLEAN | false | Wait for generation to complete before returning |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |