Qwen Image
Qwen Image — the 20B model nobody runs, called from a node instead
- images
- provider
- image
- images
- text
- thought
Qwen-Image is the open model people admire and don't run. A 20B MMDiT with best-in-class text rendering, Apache 2.0, and a local footprint that makes most cards sweat - the Edit line built on it is what actually gets used. So the hosted Qwen Image models are the pragmatic shortcut: same family, no download, and access to the versions Alibaba stopped open-sourcing. Qwen-Image-2.0, released February 2026, is API-only with no weights at all. This node is the door.
Reach for it for typography and layout-heavy images, for prompt-driven edits with reference images, and for hitting a model version you can't run - Qwen Image 3.0 Pro, 3.0, 2.0 Pro, plus a Custom model entry for anything newer. Generation and editing are the same node; hand it reference images and it becomes an editor.
How it works
The node builds a request and dispatches it through a route resolved from the connected provider. Its default is Alibaba DashScope; Qwen Image 3.0 Pro and 3.0 also have an OpenRouter route, which is handy if you already keep an OpenRouter balance. Connect a provider that doesn't offer the model and the error names the ones that do, so there's no ambiguity about which key you need. If provider is left unconnected, 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- the thing you're generating or the instruction you're giving the editor.model- Qwen Image 3.0 Pro, 3.0, or 2.0 Pro. Picking one reveals that version's own fields beneath the dropdown, which is where output size lives (presets like1024*1024and1664*928, orCustomwith your own width and height), along with a negative prompt and a prompt-extend toggle that lets the service rewrite your prompt before it draws. That last one defaults on, and if you've written a careful prompt, turning it off is the single most useful thing you can do.n- 1 to 6. Every image is another billed generation, so 6 is a budget decision, not a batch convenience.seed- sent when the model supports it, and changing it forces a re-run.0lets the API pick.watermark- off. Leave it off.images- optional reference images, up to 3, with new slots appearing as you connect them and batches expanded. This is the editing path, and for most people it's the reason to be here at all: the 2026 answer to character consistency isn't an adapter any more, it's feeding a good reference image to an instruction editor and letting it work.extra- a JSON object merged into the request for parameters not yet exposed as widgets.retry_count- total attempts, with a pause between them and the underlying failure reported if all of them lose.system_promptandproviderare optional; both are advanced, and the second one is the provider node.
Outputs: image (all returned images as one batch - only the first if the sizes differ), images (a proper list), plus text and thought for any text the service sends back. Wire image to a Save or preview node; the rest you can ignore most days.
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, then find it under YogurtNodes/LLM/Image. Runtime display names carry the pack's " (Yogurt Nodes)" suffix. Key:
# custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/api_key.json
{ "dashscope": "sk-..." }
There are no model files to download, which is the point - but run that pip line anyway; the pack needs openai and requests.
Where people get burned
DashScope keys are region-scoped, and the matching base URL is not the default one: mainland China uses dashscope.aliyuncs.com, the international endpoint is dashscope-intl.aliyuncs.com. A key from one against the other fails in ways that look like a bad key. Set it through the provider node's base_url, or the "dashscope_base_url" key in api_key.json.
Two other predictable ones: exceeding the 3-reference limit raises an error rather than quietly dropping images, and size has real limits - total area between 512×512 and 2560×2560, aspect ratio no wider than 8:1 or taller than 1:8. And the standing objection to the whole category applies here too: this is metered, your prompts and reference images leave the machine, and Alibaba's filters apply. It's the right call when the model you want has no weights; it's the wrong call for a job your local checkpoint already does.
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–6 | 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 3. | |
| 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 | — |