Gen2 Load QwenImage ControlNet (outdated)
The loader for VideoX-style Qwen ControlNets
- controlnet
This node is the first piece of the pack's original purpose: a self-contained QwenImage ControlNet pipeline. The "(outdated)" in the name is the author's own honesty - these nodes were the pack's reason to exist, and they're kept around for backward compatibility while the pack moved on to other things. If you're starting fresh and just want Qwen-Image editing, you don't need this; the model's Edit line plus native ComfyUI workflows will get you further with less setup. But if you've got VideoX-Fun-style QwenImage ControlNet weights and a workflow built around this pack, here's how the loader behaves.
What it does
It's a loader in the standard ComfyUI sense: pick a file, get a controlnet object. The one input is controlnet_name, an enum populated from your controlnet folder plus any model_patches folder files whose names contain "controlnet" or "qwen" (that's where VideoX-Fun often drops them). The output is a controlnet of type GEN2_CONTROLNET.
Under the hood it loads the weights and constructs a control model with VideoX's expected configuration - control layers at [0, 12, 24, 36, 48], control_in_dim = 132, inner dim 3072, 24 heads - filtering state dict keys that start with control_. This matches the diffusers QwenImageControlPipeline architecture, which is the whole point: the pack's QwenImage section reproduces VideoX-Fun's diffusers output so the same ControlNet files work here. On the DiT architectures like Qwen-Image, ControlNet is injected at attention/MLP layers rather than a copied encoder - see the KB's controlnet essay for why that means each architecture needs its own weights.
Installation and the honest warning
This is where the pack stops being zero-config. The QwenImage section needs, from the README:
- VideoX-Fun cloned as a ComfyUI custom node (the code literally adds
custom_nodes/videox-funtosys.pathand imports from it), - diffusers available in your Python environment,
- optionally ComfyUI-GGUF for quantized models.
Install the pack itself via ComfyUI Manager (search "ComfyUI-gen2") or:
cd ComfyUI/custom_nodes
git clone https://github.com/petmycat/ComfyUI-gen2
cd ComfyUI-gen2
pip install -r requirements.txt
If the VideoX-Fun path isn't found, you'll see [Gen2] QwenImage nodes not available: ... on startup while the rest of the pack loads fine - the sections are independent.
Common issues
- The dropdown says "No ControlNet files found". The enum falls back to that placeholder when neither
controlnetnormodel_patchesyields candidate files. Put your.safetensorsinComfyUI/models/controlnet(ormodel_patcheswith "controlnet"/"qwen" in the name) and restart. - Load succeeds but Apply fails later. If the state dict didn't come from VideoX-style QwenImage ControlNet training, keys won't match and you'll see "Missing keys" in the console. The strict=False load tolerates it, but the downstream Apply node will produce garbage. The weights must be QwenImage ControlNet weights, not SD/Flux ones.
- Missing diffusers. The loader raises "diffusers is required for QwenImage ControlNet" - install diffusers in your ComfyUI environment.
Reality check: this whole section is flagged outdated, so weigh the setup cost against what you're getting. If you have a working VideoX-Fun stack, the Load → Apply → Sampler chain here is self-contained and matches diffusers output - which is a real virtue for reproducing results. If you don't, native Qwen-Image workflows will almost certainly serve you better.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| controlnet_name | COMBO | 1 options: No ControlNet files found |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| controlnet | GEN2_CONTROLNET | — |