WaveSpeedAI Alibaba Wan 2.5 Image Edit
Instruction-based image editing, hosted — Wan 2.5's edit model on a URL
- client
- output_image
"Change the shirt to red," "put it on a beach at sunset," "remove the text" - instruction-based editing is the workflow Kontext made famous and Qwen-Image-Edit made free. Wan 2.5's edit model is the API-only follow-up in that same lineage, and this node is your door into it. You feed it an image and a sentence, you get back the edited image. That's the whole pitch, and honestly it's a good one when you don't want to run a 12B+ editor locally.
Two things to know before you get excited. First, it's from razvanmatei-sf/razv-wavespeed, the pack that wraps the paid WaveSpeed AI API - every edit is a billable API call. Second, the images in and out are handled in a ComfyUI-friendly way: you supply URLs, and the node hands you back a real IMAGE tensor, so you can wire the result straight into SaveImage or PreviewImage and keep the whole thing inside your graph.
How it works
The node takes your prompt and image URL(s), POSTs to the /api/v3/alibaba/wan-2.5/image-edit endpoint, and - depending on enable_sync_mode - either reads the completed output straight from the response or polls a task ID until the job lands. The output URLs are fetched and converted to a torch IMAGE tensor on the spot, which is why the output type is IMAGE and not a string. That conversion is what makes this node feel native instead of like a thin curl wrapper.
The interesting extra here is multi-image editing. image_1 is required, but image_2 is optional - and the tooltip says it's there for multi-image editing. So you can pass two reference shots and ask for something that combines or transforms both, which is more than the single-image edit nodes in this pack can do.
The inputs that matter
- image_1 - the primary image URL. Required.
- prompt - describe the edit in plain language. This model rewards a clear before→after sentence.
- size - 11 choices from
1024x1024 (1:1)up to1936x1089 (16:9 HD), plus a Custom option that unlockscustom_width/custom_height(384–5000px, step 8). If your target isn't in the preset list, pick Custom. - seed - -1 for random, set it to reproduce a result.
image_2 and the two custom dimension sliders round out the optional side. Sync mode defaults to on; leave it unless you're batch-queuing.
Install
Shared pack, one install:
cd ComfyUI/custom_nodes
git clone https://github.com/razvanmatei-sf/razv-wavespeed
# restart ComfyUI
Or ComfyUI Manager → search "razv-wavespeed" → Install. You'll also need a WaveSpeed AI API key from wavespeed.ai - paste it into the WaveSpeedAI Client node, or set it in config.ini (copy from config.ini.tmp, key under [API]), or export WAVESPEED_API_KEY.
Common issues
- It's a paid API. Editing is per-call billing, and multi-image + HD sizes cost more than a basic 1:1 edit. Check the WaveSpeed pricing page before you burn through a batch.
- No upload node exists. The tooltips say to connect from an "Upload Image node," but the current build doesn't register one - paste public URLs for both images.
- Image URLs must be reachable by WaveSpeed's servers, not just your browser. A
localhostURL won't work; use a real hosted URL. - Custom size gotcha: the Custom presets only kick in when
sizeis set toCustom. Leave it on a preset and your custom sliders are silently ignored. - Wan 2.5 has no local weights, so if you were hoping this is a thin wrapper over something you could also download - it isn't. The API is the only route to this specific model.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| client | WAVESPEED_AI_API_CLIENT | — | |
| prompt | STRING | Positive prompt describing desired adjustments to the image | |
| image_1 | STRING | First input image URL (required - connect from Upload Image node) | |
| size | COMBO | 1024x1024 (1:1) | The output resolution and aspect ratio |
| seed | INT | -1-1–2147483647 | Random seed for reproducible results. -1 for random seed |
| enable_sync_mode | BOOLEAN | true | Wait for generation to complete before returning |
| image_2opt | STRING | Second input image URL (optional - for multi-image editing) | |
| custom_widthopt | INT | 1024384–5000 | Custom width (384-5000px, used when Custom is selected) |
| custom_heightopt | INT | 1024384–5000 | Custom height (384-5000px, used when Custom is selected) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output_image | IMAGE | — |