Qwen-Image-Edit
Describe the change, skip the mask
- referenceImages
- lora
- ultralytics
- acceleratorOptions
- advancedFeatures.watermark.image
- image
Qwen-Image-Edit is where a huge class of image work stopped needing masks. It's the open instruction editor from Alibaba's Qwen team: you hand it a picture and a sentence - "remove the person in the background," "swap the jacket to leather," "make it golden hour" - and the change just happens. Apache 2.0, uncensored by policy, and good enough that by 2026 it had absorbed the jobs that used to take a mask plus a ControlNet plus an IP-Adapter. Its own LoRA library is the secret weapon: pose, angle, next-scene, and expression LoRAs trained specifically on the editor, and they don't work on the base Qwen-Image model at all.
The honest limit, and its own users say it first: the model re-emits the whole frame, so pixels nobody asked about can drift, and faces degrade across a chain of edits. The standard fix is bolting a mask back on around it. But for a single clean instruction edit, nothing in the open world is easier.
What you set
referenceImages(required) - the image you're editing, wired in as anIMAGE. One or more; more refs means more context for consistency.positivePrompt(required) - the instruction, in natural language. This is not a tags box; write "turn the car red" as a sentence.width/height(128–2048, step 16) - the output canvas; keep it near the source image's resolution.steps- defaults to 8. Qwen-Edit wants far fewer steps than SD-era editing; don't crank it.CFGScale- off by default; the editor runs near-distilled guidance.settings.trueCFGScaleis there if you genuinely need more adherence.lorasocket - this is where Qwen-Edit's LoRA library plugs in. Pose LoRA to re-pose a character, next-scene LoRA for sequence continuation, etc.negativePrompt(ignored at CFGScale ≤ 1),seed,scheduler,numberResults(up to 20),outputFormat,outputQuality.
Output is image (IMAGE).
How it works
Like every node in the Runware pack: it builds a request with the model AIR and taskType, sends it over REST through the Runware SDK, and downloads the result as a native IMAGE. The edit happens entirely in the cloud on Qwen's hardware - no 20B model download, no local VAE dance. The node prints cost on the title bar; edit runs are short, so it's cheap to iterate. One thing to remember: because Qwen re-emits the whole frame, each edit is a fresh generation - chain edits one at a time and check between them rather than piling all your changes into one prompt.
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. API key via Settings → Runware API key, RUNWARE_API_KEY, or runware auth login.
Troubleshooting
Missing key error first, as always. If edits look "floaty" or unrelated pixels shift, that's the re-emission behavior - keep instructions surgical, or add a mask in a workflow that crops the region. If nothing changes at all, check referenceImages is actually wired (it's required for a reason). And if you need heavy structural changes across many steps, that's what the Edit-Plus node is for.
Inputs (30)
| Name | Type | Default | Description |
|---|---|---|---|
| referenceImages | IMAGE | — | |
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| 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). | |
| widthopt | INT | 1024128–2048 | Width of the generated media in pixels. |
| heightopt | INT | 1024128–2048 | Height of the generated media in pixels. |
| 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 | 81–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 | 1.001–20 | Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt. |
| 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 | — |