Qwen3 Image to Image
The Qwen node that takes a negative prompt
- image_urls
- image
- url
- all_urls_json
- task_id
- raw_json
- credits_consumed
- credits_left
What it is
KIE's Qwen3 image-to-image endpoint as a ComfyUI node: images plus a prompt, edited image out. It sits in the same folder as the Qwen 2.1 and Qwen2 nodes, and if you're squinting at three near-identical Qwen edit nodes wondering which one to use, here's the short version.
This one is the most ComfyUI-native of the three. It has a negative prompt - rare in this pack's image nodes - plus an explicit resolution, an image_size ratio list, and prompt extension on by default. It takes image batches. If you're porting an SDXL-style workflow where you're used to having a negative box, this is the node that won't make you rewire your thinking.
How it works
The node is generated from KIE's request schema for the endpoint. image_urls is a native IMAGE socket, so a batch of images gets uploaded to KIE's storage and the returned URLs go into the request - no manual hosting. The edit runs as a task and the node polls it, up to timeout_seconds (1200 by default), then pulls the finished image back as a ComfyUI IMAGE.
This is instruction editing: the model re-renders the frame according to your sentence rather than compositing pixels. The tell is that you get a whole image back, with everything that implies about unrequested areas shifting - the known structural behaviour of this model family, documented for the open weights too in kg/entities/qwen-image-edit.json.
Inputs and outputs
Required:
- image_urls (IMAGE) - one or more inputs. Batch works; more references generally means more to keep consistent.
- prompt (STRING) - the edit instruction. Chinese and English both supported.
Optional:
- negative_prompt (STRING, defaults to
blurry, low quality, distorted) - describe what you don't want. Having this at all is the differentiator here; the Qwen 2.1 and Qwen2 nodes in this pack don't offer one. - prompt_extend (
trueby default) - the model rewrites your positive prompt before generating. The tooltip claims it "significantly improves results for simple descriptions", which matches how prompt rewriting behaves generally: great for a five-word idea, unnecessary once you've written a tight paragraph. - resolution -
1Kor2K. - image_size - output ratio,
1:1by default, up to21:9. - output_format -
pngorjpeg. - seed - 0 to 2147483647, default 1. Fixed seed, stable results.
- nsfw_checker -
falseby default, meaning filtering is off and results go straight back to you. - timeout_seconds, callback_url.
Outputs: image, url, all_urls_json, task_id, raw_json, credits_consumed, credits_left. all_urls_json is worth knowing about if a request ever returns more than one image - it's the complete list, not just the first.
Install
Manager: search KIE-Nodes-Next, install, restart ComfyUI. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
Then paste your KIE.ai key once in Settings → KIE.ai Nodes Next → Connection. It's validated against KIE before the save replaces a working key, and you'll see a masked fingerprint, a ✅ CONNECTED status and your balance. KIE_API_KEY in the environment also works and wins over the saved key. Requirements are only requests, Pillow, numpy, PyYAML.
Where people get burned
prompt_extend and your carefully crafted prompt. With extension on, the model gets a rewritten version of what you typed, not what you typed. If a prompt that "should" work keeps drifting, turn it off and compare - you're testing two different prompts until you do.
Negative prompts are weaker than they look. A hosted model that re-emits the frame doesn't obey negatives the way a local sampler with CFG does. Treat it as a nudge, not a guarantee.
Ratio and resolution both matter. 1K at 21:9 is a long, thin, low-pixel-count image. Decide what you actually need before you queue.
Face consistency is the honest limit of the whole family. Face identity is the one thing reviewers consistently say Qwen's editor does better than everything else open, and it still drifts once you stack edits - the model re-emits the whole frame every time, so nothing pins the pixels nobody asked about (kg/entities/qwen-image-edit.json). If identity has to hold across a chain, plan for small edits and a mask, or budget for retries.
Credits, always. credits_consumed and credits_left come back on every run; nothing stops you from queueing forty times.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image_urls | IMAGE | — | |
| prompt | STRING | Turn the input image into a cinematic watercolor illustration. | The positive prompt that describes the image content, style, and composition you want to generate or edit. Both Chinese and English are supported. |
| resolutionopt | COMBO | 1K | The output image resolution. |
| image_sizeopt | COMBO | 1:1 | The output image size. |
| output_formatopt | COMBO | png | The generated image format. |
| prompt_extendopt | BOOLEAN | true | Whether to enable intelligent prompt rewriting. Default: true (recommended). When enabled, the model optimizes the positive prompt, which significantly improves results for simple descriptions. |
| nsfw_checkeropt | BOOLEAN | false | Whether to enable content filtering. Optional. Defaults to false. When set to false, content filtering is disabled and all results are returned directly by the model. Note: Content filtering cannot guarantee that all inappropriate content will be detected. If the filtering results do not meet your requirements, you must implement additional content moderation measures. |
| negative_promptopt | STRING | blurry, low quality, distorted | The negative prompt that describes content you do not want to appear in the image. |
| seedopt | INT | 10–2147483647 | The random seed. Value range: [0, 2147483647]. A fixed seed helps maintain relatively stable results. |
| timeout_secondsopt | INT | 120030–7200 | — |
| callback_urlopt | STRING | Optional KIE callback URL. Leave empty for normal ComfyUI use. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| url | STRING | — |
| all_urls_json | STRING | — |
| task_id | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |