Qwen Image 3.0 · Text to Image
The node you use when the image needs readable text in it
- images
- task id
Text rendering is the thing the Qwen-Image line is famous for, and it's the one capability that still separates these models from the local favourites people reach for by default. Try to get "CLOSED" onto a shop door in most open image models and you get six letters arranged in a plausible font-shaped hallucination. The Qwen family does signage, headlines and packaging copy as actual readable text - its Chinese rendering was the headline claim at launch, English followed close behind.
Qwen Image 3.0 is the tier that leans into this. Quoted signage and headlines come back legible, especially at the 2k tier, and the node takes a 5,000-character prompt plus a separate negative prompt, at 1k or 2k across eight aspect ratios. Around $0.03 an image.
The inputs, in the order they matter
prompt- subject, composition, lighting, and any text to render. Put the text you want in quotes so the model treats it as copy rather than description.resolution-1kor2k, defaulting to2k. For typography work, stay at 2k; that's where the glyphs hold up.aspect_ratio- default 1:1, eight shapes. Pick it before you prompt, because a headline that fits a square rarely fits a 21:9.prompt_optimization_mode- defaultdirect. This is how prompt expansion rewrites your brief: a single pass, or a multi-step agent rewrite. If you want your words followed literally,directplus expansion off is the combination.enable_prompt_expansion- on by default, so the service rewrites and expands your prompt before generating. Great for "a lighthouse at dusk". Dangerous when your prompt contains exactly the string you need rendered.negative_prompt- "describe elements to exclude". Which is unusual for a 2026 model: on most newer architectures the negative box is inert because there's no CFG to steer, and the honest advice is to restate constraints positively instead of pasting a forty-keyword block. Here it's a real model input, so a handful of specific exclusions is worth trying - but don't inherit the SDXL ritual.num_outputs- pinned between 1 and 1. It exists so you don't have to wonder: one image per request.seed- same seed and settings, same result. Fixed after generate by default because every run is billed.
Outputs
images and task id. IMAGE type, so Save Image or a detailer follows; the task id is the SpicyAPI job handle you keep for support.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI, then add a key from spicyapi.ai/console/keys in Settings > SpicyAPI and restart once more so the node list is read from your account's catalogue. Nothing else gets installed - no weights, no Python packages, no GPU requirement. On a headless box use SPICY_API_KEY instead of the settings panel; the key is stored outside the workflow either way, so sharing a graph or a PNG doesn't leak it.
Getting good results without burning money
Expansion and quoted text fight each other. You can't reliably have "the model follows my prompt word for word" and "the service rewrites my prompt" in the same run. For typography work, turn enable_prompt_expansion off.
Iterate at 1k to find the layout, then commit at 2k. It's the same shape and a fraction of the cost, and the composition problems are visible either way.
Set a ceiling. Settings > SpicyAPI > Max cost per run makes every run quote before it submits and abort above your limit with nothing charged. It's around three cents an image here, which is cheap until it's a 200-image batch.
Cancelling stops the wait, not the job. The task finishes on SpicyAPI and is charged if it succeeds; the result stays in your console for up to 14 days. Failures return a task id - send that to support. 40310 means your email isn't verified, 40004 means no deployment serves the parameter combination you chose.
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: single pass, or a multi-step agent 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 SpicyAPI task id, for the console logs or support. |