Eric Qwen-Image ControlNet Loader
The one loader behind all of Qwen-Image's structure control
- controlnet
Eric Qwen-Image ControlNet Loader is the gatekeeper for every ControlNet feature in the generation half of this pack. It loads one of InstantX's Qwen-Image ControlNet models and hands it out as a QWEN_IMAGE_CONTROLNET wire that Eric Qwen-Image UltraGen CN and Eric Qwen-Image Harmonize both consume. No ControlNet loader, no structure-guided generation - so this is where that whole feature area starts.
The models it supports are the two InstantX Qwen-Image ControlNets from HuggingFace:
- InstantX/Qwen-Image-ControlNet-Union (~2.3 GB) - the one you want for generation. A single union model covering Canny, SoftEdge, Depth, and Pose modes. The KB's controlnet doc confirms the landscape: the union recipe arrived ~2 weeks after Qwen-Image itself, and InstantX is the go-to supplier for this architecture.
- InstantX/Qwen-Image-ControlNet-Inpainting - mask-based inpainting/outpainting. The README flags this whole inpainting branch as experimental - the ControlNet inpaint nodes exist but the author says they produce halos and ghosting at mask boundaries, and the alternative Qwen-Edit inpaint approach currently works better. Download it if you want to play; don't build production work on it yet.
The input that matters
model_path- HuggingFace model ID or a local path. The default is the Union model ID (InstantX/Qwen-Image-ControlNet-Union), and on first load the node downloads it from HuggingFace into your HF cache. You can also download it manually and point at the folder. The tooltip accepts either Union or Inpainting paths.precision-bf16(default),float16,float32. bf16 is right.device-cudadefault; the node keeps the model on CPU and moves it to GPU on demand when UltraGen CN calls it, so a CPU-resident ControlNet doesn't eat your VRAM between runs.keep_in_vram(True) - cache between runs.
Output is controlnet (QWEN_IMAGE_CONTROLNET), which is only understood by this pack's own generation nodes - you can't feed it into a stock ComfyUI ControlNet-apply node, and vice versa. The pack uses the diffusers loading path, not ComfyUI's ControlNet abstraction, so keep all the CN wiring inside this pack's nodes.
Practical notes
- The CN type (canny vs pose vs depth vs soft_edge) is not chosen here - you pick it on the UltraGen CN node's
cn_typeinput. The loader just loads the model; the type selector is downstream. A common first-run confusion. - You only need one loader for all four modes, since the Union model handles canny/soft_edge/depth/pose. Load once, use everywhere.
- If you're using Harmonize (composite harmonization), it wants the Union model too, and can generate its control maps automatically (auto-Canny) - so the loader + Harmonize pair replaces manual map extraction for that workflow.
Install is the shared pack route: ComfyUI Manager search "Eric Qwen Edit", or git clone https://github.com/EricRollei/Eric_Qwen_Edit_Experiments into custom_nodes/ and restart. First run pulls ~2.3 GB from HuggingFace, so have disk and patience ready. And don't forget the pack's diffusers/transformers version pins - an upgraded diffusers elsewhere can break these from_pretrained loads.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | STRING | Path to ControlNet model directory. Supports InstantX/Qwen-Image-ControlNet-Union (canny, soft edge, depth, pose) and InstantX/Qwen-Image-ControlNet-Inpainting (mask-based inpainting and outpainting). Both use QwenImageControlNetModel. | |
| precisionopt | COMBO | bf16 | Model precision (bf16 recommended) |
| deviceopt | COMBO | cuda | Device to load model on |
| keep_in_vramopt | BOOLEAN | true | Cache model between runs |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| controlnet | QWEN_IMAGE_CONTROLNET | — |