Nodes/ComfyUI-Apt_Preset/pre_qwenModelPatch_CN
ComfyUI Node

pre_qwenModelPatch_CN

Stack up to three ControlNets on Qwen-Image in one node

By cardenluo·Created 2 years ago·Updated 18 days ago· 309
pre_qwenModelPatch_CN
  • context
  • image1
  • image2
  • image3
  • latent_image
  • latent_mask
  • context
  • model
  • positive
  • negative
  • latent
controlnet1
strength10.80
controlnet2
strength20.80
controlnet3
strength30.80

Its internal display name is pre_qwenModelPatch_CN, which is the more honest description: this is a Qwen-Image ControlNet loader-and-stacker rolled into one node, patching your model with up to three ControlNet conditions at once instead of you wiring three separate ControlNetApply chains by hand. Qwen-Image got a union ControlNet fast by community standards - InstantX shipped theirs (canny, soft edge, depth, pose) just 16 days after the base model released - and this node is built around stacking conditions from that kind of union checkpoint, or any Qwen-compatible ControlNet you point it at.

Multi-ControlNet stacking is a real, common pattern: canny plus depth for structure and spatial arrangement together, or lineart plus a reference-style condition. Each unit in a proper multi-ControlNet setup gets its own weight and step range, and this node gives you three independent image/model/strength triplets to do exactly that, in one place, feeding a single patched model out.

The inputs and outputs that matter

  • context (required) - the pack's run-context bundle; the model this node patches comes from here.
  • image1/image2/image3 (optional) - the conditioning image for each ControlNet slot (a canny map, a depth map, whatever your preprocessor produced).
  • controlnet1/controlnet2/controlnet3 (optional, dropdown) - which ControlNet checkpoint each slot loads. Populated from whatever's in your models/controlnet folder.
  • strength1/strength2/strength3 (default 0.8, range 0–2) - per-condition control weight. That 0.8 default lands right in the range the InstantX Qwen-Image union itself recommends (0.8–1.0) - don't reflexively push these to 1.5 or 2 the way you might have on an old SD 1.5 ControlNet; modern unions are tuned to need less.
  • latent_image/latent_mask (optional) - feed these if you're combining the ControlNet pass with an inpaint-style masked region.
  • Outputs: context passthrough, model (the patched model), positive/negative (CONDITIONING), and latent - everything you need to wire straight into a KSampler.

You don't have to use all three slots - leave image2/image3 disconnected and only the first condition applies.

How to install it

Search ComfyUI-Apt_Preset in ComfyUI Manager, or clone it directly:

cd ComfyUI/custom_nodes
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git

install.bat covers dependencies on Windows; on Linux or Mac, read what it runs and pip-install those yourself, or let Manager fill gaps on first load. This node needs the actual Qwen-Image ControlNet checkpoint(s) downloaded separately and dropped in ComfyUI/models/controlnet - the node loads whatever's there, it doesn't fetch anything itself. InstantX's Qwen-Image-ControlNet-Union on HuggingFace is the standard choice if you don't already have one.

Common issues & troubleshooting

A controlnet dropdown only shows "None." That means ComfyUI didn't find any Qwen-compatible ControlNet checkpoint in models/controlnet. Download one and restart - the dropdown populates from disk at startup, not live.

Stacking two or three conditions and results look overcooked. This is the same trap as the old SD 1.5/SDXL habit of running ControlNet at 1.0+ by default. Modern union checkpoints publish lower recommended weights for a reason - start around 0.6–0.8 per slot when stacking more than one condition, since their effects compound.

You only need one condition, not three. Just wire image1/controlnet1/strength1 and leave the other two slots empty - the node handles a partially-filled stack fine.

latent_mask seems to do nothing without latent_image. Both are meant to be used together for a masked/inpaint-style pass; wiring only one leaves the node with an incomplete picture of what to protect versus regenerate.

CategoryApt_Preset/chx_tool/controlnet

Inputs (12)

NameTypeDefaultDescription
contextRUN_CONTEXT
image1optIMAGE
controlnet1optCOMBO1 options: None
strength1optFLOAT0.800–2
image2optIMAGE
controlnet2optCOMBO1 options: None
strength2optFLOAT0.800–2
image3optIMAGE
controlnet3optCOMBO1 options: None
strength3optFLOAT0.800–2
latent_imageoptIMAGE
latent_maskoptMASK

Outputs (5)

NameTypeDescription
contextRUN_CONTEXT
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT