Qwen-Image-2512
Alibaba's text-rendering flagship in the cloud
- seedImage
- maskImage
- outpaint
- lora
- ultralytics
- acceleratorOptions
- advancedFeatures.watermark.image
- image
Qwen-Image-2512 is the big one in Alibaba's Qwen-Image family - a 20B model whose whole claim to fame is that it renders text inside images without mangling it. Logos, signage, UI mockups, multi-language captions: this is the model you reach for when you need words in the picture and they need to be spelled right. It also handles fine-grained spatial prompts better than most, which makes it a favorite for structured compositions where "the blue box on the left with 'STORE' above it" has to come out exactly like that.
You can't run the 20B stack comfortably on most consumer cards, which is precisely why the Runware pack version is appealing. No 40GB of VRAM, no fp8 shaving, no download - it runs on Runware's machines and comes back as a native IMAGE.
What you set
Required: positivePrompt, width, height (256–2048, step 16 - Qwen is pickier about dimensions than FLUX, and multiples of 16 keep it happy).
The one thing to know before anything else: Qwen runs near-distilled guidance, so CFGScale defaults off and you rarely turn it on. There's also settings.trueCFGScale for when you need real guidance - same split as FLUX, same advice: start at default.
steps- defaults to 3. Three. That's not a typo; Qwen is guidance-distilled and wants few steps. If you set this to 30 you'll spend money for worse results.seedImageandmaskImage- drop an image in and Qwen becomes an editor. Combined with the prompt ("change the shirt to blue"), this covers a huge chunk of image-editing work without a separate edit model.negativePrompt- set it, but remember it's ignored when CFGScale ≤ 1.numberResults- up to 20 variations per run.scheduler,outputFormat(JPG/PNG/WEBP),outputQuality- standard.
Output is image (IMAGE). That's it - wire it to Preview Image or Save Image.
How it works
Standard pack mechanics: the node composes a request with the model AIR (runware:... for Qwen-Image-2512) and taskType, sends it over REST through the Runware SDK, and downloads the rendered image back as a tensor. The interesting part is the LLM-encoder architecture - Qwen conditions on text the way a language model does, which is what makes the text rendering and spatial obedience work. Your node never touches the model weights; it just brokers the call and reports cost on the title bar.
Installing
ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
No model downloads; dependencies are runware-sdk, pillow, soundfile. You need a Runware API key: Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Troubleshooting
Missing key error first, always. The bigger trap is steps: people used to 20-30 step diffusion set steps high on Qwen and get muddy, over-processed results - trust the default of 3. And if you're using seedImage for edits, keep the prompt focused; Qwen edits by re-emission, so unrelated pixels can drift if you ask for too much at once.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| width | INT | 1024256–2048 | Width of the generated media in pixels. |
| height | INT | 1024256–2048 | Height of the generated media in pixels. |
| seedImageopt | IMAGE | — | |
| maskImageopt | IMAGE | — | |
| outpaintopt | RUNWARE_OUTPAINT | — | |
| loraopt | RUNWARE_LORA | — | |
| ultralyticsopt | RUNWARE_ULTRALYTICS | — | |
| acceleratorOptionsopt | RUNWARE_ACCELERATOROPTIONS | — | |
| advancedFeatures.watermark.imageopt | IMAGE | — | |
| negativePromptopt | STRING | Prompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1). | |
| seedopt | INT | 00–9223372036854776000 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | INT | 31–50 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| scheduleropt | COMBO | (default) | Scheduler to use for the diffusion process. |
| CFGScaleopt | BOOLEAN | false | Enable to set CFGScale. Off uses the model's default. |
| CFGScale_valueopt | FLOAT | 0.00 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| strengthopt | BOOLEAN | false | Enable to set strength. This setting has usage rules in this model, so it is off unless you enable it. |
| strength_valueopt | FLOAT | 0.800–1 | Strength of the transformation. Lower values result in more influence from the original input. |
| maskMarginopt | BOOLEAN | false | Enable to set maskMargin. Off uses the model's default. |
| maskMargin_valueopt | INT | 3232–128 | Extra context pixels around the masked region during inpainting. The model zooms into the masked area with these additional pixels for better integration. |
| numberResultsopt | INT | 11–20 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| advancedFeatures.watermark.bgColoropt | STRING | Background color in hex format. | |
| advancedFeatures.watermark.displayPositionopt | COMBO | (default) | Watermark position. |
| advancedFeatures.watermark.fontColoropt | STRING | Text color in hex format. | |
| advancedFeatures.watermark.opacityopt | BOOLEAN | false | Enable to set advancedFeatures.watermark.opacity. Off uses the model's default. |
| advancedFeatures.watermark.opacity_valueopt | FLOAT | 0.100.1–1 | Watermark opacity. |
| advancedFeatures.watermark.textopt | STRING | Watermark text. | |
| safetyopt | BOOLEAN | false | Enable to set safety. Off uses the model's default. |
| safety.checkContentopt | BOOLEAN | false | Enable or disable content safety checking. |
| settings.trueCFGScaleopt | BOOLEAN | false | Enable to set settings.trueCFGScale. Off uses the model's default. |
| settings.trueCFGScale_valueopt | FLOAT | 0.00 | True Classifier-Free Guidance scale. Higher values increase prompt adherence at the cost of quality. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | JPG | File format for the generated image. |
| outputQualityopt | INT | 9520–99 | Compression quality of the output. Higher values preserve quality but increase file size. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |