Wan Image
Wan Image — nine reference images, and a model you can't download
- images
- provider
- image
- images
- text
- thought
If "Wan" means a local video model to you, that's the right instinct and the wrong decade. Alibaba stopped shipping open weights after Wan 2.2; 2.5, 2.6 and 2.7 are API-only. So the local picture - Wan 2.2 as the base, with Bernini and SCAIL-2 built on top of it - and the hosted picture split apart in 2026. This node is the hosted side, for image generation and editing.
Wan Image runs the Wan 2.7 Image model (or a custom model id, if the family exposes one) through DashScope, Alibaba's API. Reaching for it makes most sense for one specific thing: up to 9 reference images on a single request. That's a lot of input material for holding a character, a product, or a style steady across variations, and it's the practical answer to the most-asked unsolved question in this space - the community doesn't solve consistency any more, it routes around it, and editing with references is where it routes to.
How it works
The node assembles the request, sends it to whichever provider you connect, and converts the returned images into ComfyUI tensors. Unlike the Qwen Image node, there is no OpenRouter route here: DashScope only. If you wire in another provider, you get an error listing the providers that do work - read it as "use DashScope", because that is what it means. With no provider connected, the official API is used with the key from api_key.json ("dashscope", "qwen" or "wan") or DASHSCOPE_API_KEY.
The inputs and outputs
prompt- what to generate, or what to change if you've attached reference images.model- Wan 2.7 Image. Selecting it reveals the version's own fields below the dropdown: output size as a resolution tier (auto,1K,2K) orCustomwith your own width and height (256 to 4096, in steps of 16), a negative prompt, a thinking mode toggle - default on, which means the service reasons about your prompt before drawing, and turning it off is the standard way to make it faster - and enable sequential, off by default, for generating a related set of images rather than one.n- 1 to 4 images per request.seed- sent when the model supports it; changing it forces a re-run, and0means "let the API pick".watermark- off, and I'd leave it off.images- the reason to be here. Optional reference images, up to 9, with slots appearing as you connect more and batches expanded automatically. Prompts that refer to "the second image" are talking about this order, so keep the wiring deliberate.extra- a JSON object merged into the request, for anything DashScope adds that the node doesn't show yet.retry_count- total attempts on failure.system_promptandprovider- optional; you'll rarely touch the first, and the second is the provider node.
Outputs: image (a batch - but only the first image if the returned sizes differ), images as a list, plus text and thought for whatever text comes back alongside. Feed image into a Save or preview node; if you're generating variants, images is the one you want to iterate over.
Installing
ComfyUI Manager, search the pack title; or:
cd ComfyUI/custom_nodes
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
cd ComfyUI-YogurtNodes && pip install -r requirements.txt
Restart. The node lives under YogurtNodes/LLM/Image, and runtime display names carry a " (Yogurt Nodes)" suffix. Key file:
# custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json
{ "dashscope": "sk-..." }
No weights, no VRAM, nothing to download - just the pack's Python dependencies.
Where people get burned
Region is the first snag. DashScope defaults to the mainland endpoint; if your key came from the international side, point the provider at https://dashscope-intl.aliyuncs.com/api/v1 via its base_url, or the "dashscope_base_url" key in api_key.json. A mismatched pair fails in a way that reads like an invalid key and isn't.
Then the sizing arithmetic: Custom width and height are clamped between 256 and 4096 in 16-pixel steps, so a number off the grid gets refused rather than rounded quietly. And if you're feeding references, remember every call is metered - a 9-reference edit at n = 4 is one expensive request, not a cheap experiment. Batch your probing at n = 1 until the prompt is right.
One expectation to leave at the door: this isn't a substitute for local control. Your reference images leave the machine, Alibaba's content policy applies, and there's no checkpoint to fine-tune or abliterate. It's a capability you can't have at home, priced per call - which is exactly the case where an API node earns its place in a graph, and the only case.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Prompt sent to the model. | |
| model | COMBO | Model version; the inputs below change with the selected model. | |
| n | INT | 11–4 | Number of images to generate. |
| seed | INT | 00–2147483647 | Sent to the API when the model supports it; changing it also forces a re-run. 0 lets the API pick a random seed. |
| watermark | BOOLEAN | false | Add a watermark. |
| extra | STRING | Optional JSON object merged into the request (for parameters not exposed as inputs). | |
| images | COMFY_AUTOGROW_V3 | Optional reference image(s); batches are expanded. Up to 9. | |
| retry_count | INT | 11–10 | Total attempts on failure. |
| system_promptopt | STRING | System instruction sent with the request. | |
| provideropt | YOGURT_LLM_PROVIDER | Provider node. When unconnected, the official API is used with keys from api_key.json or environment variables. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | All images as one batch (first image only if sizes differ). |
| images | IMAGE | — |
| text | STRING | — |
| thought | STRING | — |