Qwen-Image ControlNet img2img ⚡
One node that talks to every Qwen-Image ControlNet format
- model
- clip
- vae
- images
- qwen_control
- control_image
- mask
- model
- positive
- negative
- latent
- denoise
Qwen-Image's ControlNet story is a mess of formats, and this node is the broom. The ecosystem circles three different attachment mechanisms - InstantX/Union checkpoints, Qwen-Image-Fun, and DiffSynth patches - and each wires into ComfyUI differently: some attach to conditioning like a classic ControlNet, some patch the model directly. The pack's Qwen-Image ControlNet Loader figures out which format you loaded and hands you a QWEN_IMAGE_CONTROL token. This node does the attaching, so you never have to know or care which mechanism your file needs.
It's everything Qwen-Image img2img does - prompt encoding, VAE-encoding your source photo, building the init latent - plus control attachment, plus (when connected) a mask for inpaint checkpoints. For DiffSynth patches it clones the MODEL and applies the patch; for InstantX/Union/Fun it stamps the control hint onto your CONDITIONING the same way stock ControlNetApplyAdvanced does. Outputs are model, positive, negative, latent, denoise straight into a stock KSampler.
The inputs that matter
qwen_control- the loaded checkpoint token from Qwen-Image ControlNet Loader. Ignored without it.images- your init photo(s) for img2img, and in the auto modes the source the control map is derived from. Leave unconnected for txt2img.control_mode- picks howcontrol_imageis produced, since nothing in the file says what preprocess it wants:manual(default, connect your own map - required for inpaint),auto_canny(plain cv2 edges, no download),auto_depth(Depth Anything V2, auto-downloads weights), ornone(skip control for this call even ifqwen_controlis connected). Explicitcontrol_imagealways overrides.control_strength(default 1.0) - how hard the condition bites.mask- for inpaint checkpoints, the region to fix. Note the tooltip truth:maskonly refines the region, it doesn't replace the control image - you still needcontrol_imageeven for inpaint.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf
Restart, drop your Qwen-Image model (GGUF or safetensors), Qwen3 encoder, VAE and ControlNet checkpoint in the usual folders. The nodes sit under 🤖 CCTech/Qwen-Image. Preprocessors beyond canny/depth (normal, soft edge, pose) come from the separate ComfyUI-ControlNet-Nodes package - wire their output into control_image with control_mode=manual.
Gotchas
Same guard rails as its Krea2 sibling: qwen_control with nothing usable to attach (outside none mode) raises rather than sampling a half-configured model, and control_image with no qwen_control is ignored with a warning. Qwen-Image spans more control types than the pack can auto-detect from the file, so the auto modes are genuinely best-effort - for a pose checkpoint, manual with a real preprocessor is the reliable path.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| strength | FLOAT | 0.600–1 | img2img only. How much of the init image(s) to discard. Ignored without images. |
| batch_size | INT | 11–4096 | — |
| width | INT | 102416–16384 | Output size. With init or control image(s) this resizes them. |
| height | INT | 102416–16384 | — |
| imagesopt | IMAGE | One or more init images for img2img (batch-aware - a batch of N becomes N independent img2img generations), and (in auto_canny/auto_depth modes) the source photo the control image is derived from. Leave unconnected for txt2img. | |
| qwen_controlopt | QWEN_IMAGE_CONTROL | From QwenImageControlNetLoader. | |
| control_modeopt | COMBO | manual | manual: connect control_image yourself. auto_canny/auto_depth: derive it from `images` automatically - pick whichever matches the loaded checkpoint. none: skip control attachment entirely even if qwen_control is connected - for toggling control off without rewiring. Ignored without qwen_control. |
| depth_ckpt_nameopt | COMBO | depth_anything_v2_vitb.pth | auto_depth mode only. Downloads on first use if not already in models/depth_anything_v2. |
| control_imageopt | IMAGE | Control map matching qwen_control - a canny/depth/etc map. Overrides auto_canny/auto_depth when connected. Required in manual mode. | |
| maskopt | MASK | For an inpaint checkpoint - the region to inpaint. Not derivable automatically. | |
| control_strengthopt | FLOAT | 1.00-10–10 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| denoise | FLOAT | — |