WaveSpeedAI WAN 2.5 Text-to-Video Fast
Wan 2.5 video you can't run locally (unless you pay for it)
- client
- video_url
Here's the thing about Wan 2.5: there are no weights. Alibaba took the numbered Wan series API-only after 2.2, and the 2.5 text-to-video tier never shipped anything you can download. So every "Wan 2.5" video you see on the internet was made on somebody's rented cloud GPU - or through a hosted API like this. That's what this node is: a paid, hosted Wan 2.5 text-to-video call wrapped up in a ComfyUI node so it feels like local generation, minus the 24GB of VRAM and the three-hour first run.
It's from razvanmatei-sf/razv-wavespeed ("ComfyUI Razv WaveSpeed Nodes"), a pack that wraps the WaveSpeed AI API. Every node in the pack talks to that cloud API and bills you per generation. The "Fast" in the name is a real thing - it's the fast tier of the hosted Wan 2.5 service, so your clip comes back faster (and likely cheaper) than the standard tier.
How it works
You wire in a WaveSpeedAI Client node (the pack's one required connection for everything), give it a prompt, and the node POSTs to the /api/v3/alibaba/wan-2.5/text-to-video-fast endpoint with your API key in the auth header.
The interesting bit is sync vs async, which trips people up. In async mode (default), the node submits the job, gets back a task ID, then polls the API every 2 seconds for up to 30 minutes until the video is done. Sync mode waits on the API's response directly. Either way you end up with the same thing: a video_url string, which is the only output. Nothing is saved for you - grab that URL and download it, or feed it into a save/URL-download node you already have.
The inputs that matter
You'll actually touch four things:
- prompt - the video description. Multiline, so take your time.
- size -
1280*720,720*1280,1920*1080, or1080*1920. This is the one beginners get wrong:1280*720is landscape,720*1280is portrait. Check the order. - duration - 5 or 10 seconds. Only two choices.
- audio - optional, and worth knowing about: a URL to a wav/mp3 (3–30 seconds, max 15MB) that guides the video. This is the audio-prompting mode, not the final soundtrack.
Also there: negative_prompt, enable_prompt_expansion (the API rewrites/expands your prompt for you - handy when your prompt is vague), seed (-1 for random), and enable_sync_mode. Keep sync mode off until you're debugging; async gives you a running task ID in the console instead of a frozen graph.
Install
It's a shared pack, so it's one install for all twenty-plus nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or use ComfyUI Manager and search for "razv-wavespeed". Then you need an API key from wavespeed.ai. Copy config.ini.tmp to config.ini inside the pack folder and paste the key under [API], or skip the file and type the key into the WaveSpeedAI Client node, or set a WAVESPEED_API_KEY env var. The node checks the field first, then config.ini, then the env var.
Common issues
- It costs money. There's no free tier doing this for you; every clip is a paid API call. Don't build a 500-clip batch and walk away.
- Name confusion: "WaveSpeed" in ComfyUI land usually means the acceleration pack (first-block cache) that speeds up local Flux/LTX/Hunyuan. That's a totally different project from the WaveSpeed AI API these nodes call. You're reading about the API one.
- Missing nodes after install: the pack's
requirements.txtis suspiciously bare (requests, pillow, numpy, torch), but the code also pulls inav,torchaudio,pydantic, andcomfy_apiat load time. ComfyUI usually ships those. If no WaveSpeed node shows up at all, that silent import failure is your suspect - check they're importable in your Python env. - Timeouts: the fast tier is fast, but queueing happens. If it throws after 30 minutes, that's the API's cap, not your network.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Text description for video generation | |
| size | COMBO | 1280*720 | Video resolution (width*height) |
| 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 | — |