Qwen Image 3.0 · Text to Image
Qwen Image 3.0 · Text to Image — the sensible tier of Alibaba's type machine
- images
- task id
Readable signs, no 40GB download
This is the standard Qwen Image 3.0 text-to-image node, one rung below the Pro variant and identical to it in every way that shows on the canvas. Same widget list, same schema, same outputs. What you're actually choosing between Pro and this is detail fidelity versus price: the node's own description frames plain 3.0 around readable signs and headlines, Pro around lifelike skin, fabric and glass. If your image needs a legible shopfront, a poster, a book cover - the cheap one does the job.
Why bother with a cloud node at all for Qwen-Image? Because the family's 20B MMDiT was never a comfortable local citizen, and the line has been API-first since Qwen-Image-2.0 shipped without weights in early 2026. The pack wraps that as a normal node: prompt in, IMAGE out, straight into your existing graph next to the upscaler and the sampler you already trust.
How it works
Each model in this pack gets a generated ComfyUI node whose inputs mirror the model's own published schema - no invented sliders, no hidden magic. On queue, the node quotes the job, submits it to PopNow with an idempotency key (so a network retry never bills you twice), polls, then downloads the returned images and decodes them into a ComfyUI image batch. Everything heavy, including the 20B transformer, lives on their side, which is why this works on a laptop with no discrete GPU.
Progress shows up as text on the node - the estimate, the queue, the elapsed time - and when it lands, the final charge. The seed defaults to fixed, so re-queueing an unchanged graph returns the first result instead of quietly buying you a second one.
The inputs that matter
prompt, aspect_ratio, and the two switches around prompt rewriting are the whole game here.
Write prompts as sentences. Qwen-Image's text encoder is Qwen2.5-VL, an LLM, so "a weathered enamel sign that reads 'FRESH BREAD - BAKED DAILY' hanging above a narrow bakery door, morning light raking across the letters" lands much better than a comma pile. This is also the one family where putting the words you want in the image into the prompt with quotes is a real technique, not wishful thinking.
enable_prompt_expansion is on by default and it will rewrite you. For realistic scenes that's usually a gift. For anything where the wording has to be exact - a logo, a headline, a typo you're deliberately drawing - switch it off, or spend your run finding out what the optimiser thought you meant. prompt_optimization_mode controls how far that rewrite goes when it's enabled: direct is a single pass, agent runs a multi-step rewrite. Use agent on a lazy prompt, never on a precise one.
resolution is 1k or 2k, aspect_ratio covers 1:1 through 21:9, num_outputs buys you multiple rolls, negative_prompt excludes what you don't want, and seed plus control-after-generate decides whether a re-queue is a copy or a new take. Outputs are images (an IMAGE batch) and task id, the string PopNow's console uses to find the run.
Installing it
Manager > Custom Nodes Manager, search PopNow, install, restart. Or the terminal route:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Add a key from popnow.ai/api/console/keys under Settings > PopNow, or export POPNOW_API_KEY on a server. Restart after saving the key - the pack builds its node list from your account's catalog at startup, and that's also why a node you expected can be missing on first boot. No weights, no extra pip packages, nothing to put in models/.
Where it goes wrong
If text comes back as plausible-looking gibberish, you probably asked for more type than the model could fit at that resolution - go 2k and cut the word count. If the whole image ignores your instructions, expansion is the suspect. PopNow 40201 is an empty wallet, PopNow 401 is a dead key, PopNow content_rejected is the model declining (refunded, not charged), and a 400 naming a field means the service refused that specific value - the error text names which one.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the subject, composition, lighting, and any text to render. | |
| aspect_ratio | COMBO | 1:1 | Output aspect ratio. |
| resolution | COMBO | 2k | Output image resolution tier. |
| num_outputs | INT | 11–1 | Number of output images. |
| enable_prompt_expansion | BOOLEAN | true | Let the service rewrite and expand the prompt before generation. |
| negative_prompt | STRING | Describe elements to exclude from the image. | |
| prompt_optimization_mode | COMBO | direct | How prompt expansion rewrites the brief: a single-pass rewrite. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |