SF WaveSpeed Wan 2.5 Text to Image
Wan 2.5 text-to-image over the API, straight into your graph as a tensor
- client
- output_image
Wan 2.5 is one of those models you can't just download - Alibaba froze the open Wan line at 2.2 and took 2.5+ behind an API. So if you want Wan 2.5's image quality without hunting down a leaked checkpoint that doesn't exist, this node is the honest route: it calls the model where it lives, on WaveSpeed's servers, and drops the result into your ComfyUI graph as a proper image tensor.
The pack's video nodes all hand you a URL string and call it a day. This one is different - it fetches the image the API returns and converts it to a real IMAGE tensor, so it plugs straight into a Save Image node, an upscaler, a VAE encode, whatever your workflow needs next. For a text-to-image node that's the right call, and it makes this the easiest node in the pack to actually complete a workflow with.
How it works
Wire an SF WaveSpeed Client into client, write your prompt, and the node POSTs to /api/v3/alibaba/wan-2.5/text-to-image, then polls until the image is ready. When it lands, the node downloads it and converts it locally to an IMAGE tensor - that's the output_image output you wire onward. No local model weights, no VRAM; the only "local" work is the final fetch-and-convert step.
The inputs that matter
- prompt - the description. This is the whole creative input.
- size - a plain string in
width*heightformat, defaulting to1024*1024. The API keeps each dimension in the 768–1440 range, so don't ask for 3000px wide; it'll be rejected or clamped. - negative_prompt - what to avoid; leave blank if you're not fighting something specific.
- enable_prompt_expansion - off by default. Flip it on and the API expands/enhances your prompt before generating. Handy if you're lazy with prompts, but it means what you wrote isn't quite what ran.
- seed and enable_sync_mode - seed -1 for random, and sync mode just changes the API path; the node waits for the result either way.
Output: output_image, an IMAGE tensor.
Installing it
ComfyUI Manager, search comfyui-stillfront, install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/comfyui-stillfront.git
cd comfyui-stillfront
pip install -r requirements.txt
You'll need a WaveSpeed API key from wavespeed.ai: paste it into config.ini (copy config.ini.tmp to config.ini first), set WAVESPEED_API_KEY, or type it into the SF WaveSpeed Client's api_key widget. Note the README's clone URL still says stillfront/... - that's outdated; the repo lives at razvanmatei-sf/comfyui-stillfront.
Where people get burned
This node's helper code imports PyAV (av) and the comfy_api package at load time, and neither is in the pack's requirements.txt. If the node is missing and your console shows Failed to load wavespeed_wan25_text_to_image, that's the cause - pip install av (plus comfyui-api if it's still complaining) sorts it. The URL-output nodes in the pack don't hit this code path.
Beyond that, the usual service gotchas apply: it's pay-per-generation, a bad key throws Unauthorized immediately, and the size string must respect the API's 768–1440 range per dimension. Test small, then spend on the big render.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Text description for image generation | |
| sizeopt | STRING | 1024*1024 | Image resolution (width*height). Range: 768~1440 pixels per dimension |
| negative_promptopt | STRING | Describe what you don't want in the image | |
| 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 |
|---|---|---|
| output_image | IMAGE | — |