Select ControlNet
Select ControlNet – ComfyUI Node Guide
- CONTROL_NET
- control_net_name
What it is
If you've ever built a workflow that needs to A/B test a few different ControlNets - or just wanted to preload your five most-used ones and flip between them without disconnecting and reconnecting wires every time - you've hit the problem this node solves. It's the author's modification of ComfyRoll's well-known "CR Select Model" pattern, retargeted to load ControlNets instead of checkpoints: preload up to five ControlNet files into named slots, then pick which one actually feeds your graph with a single integer.
Reach for it in any workflow where you're switching ControlNets frequently - comparing canny vs. depth vs. lineart on the same generation, or organizing a big workflow so swapping conditioning types is a one-widget change instead of a rewiring job.
How it works
Five enum dropdowns, each populated from your ComfyUI ControlNet models folder, let you preload up to five specific files. A separate integer widget, select_controlnet, picks which of the five slots actually gets loaded and passed downstream that run. Nothing about the ControlNet itself changes - this node only handles which file gets loaded, not applying it. You'll still need the standard ControlNet Apply / Apply Advanced node downstream to actually condition your generation, and the appropriate preprocessor (canny, depth, OpenPose, whatever matches the ControlNet you picked) upstream feeding it a conditioning image.
Inputs that matter
- control_net_name1 through control_net_name5 – five enum pickers, each showing the ControlNet files available in your setup. Preload your regulars here.
- select_controlnet (INT, 1–5, default 1) – which of the five slots is actually active this run. This is the one widget you touch to switch conditioning types.
Outputs
- CONTROL_NET – the loaded ControlNet, ready for a ControlNet Apply node.
- control_net_name – a STRING echoing back which file got selected. Handy for stamping into a filename or label so your saved outputs record which ControlNet produced them - this pack's own Round Float to String or Save Image to Folder nodes are natural places to use it.
Installing it
Comes with the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Shadetail/ComfyUI_Eagleshadow
Or search "Eagleshadow Custom Nodes" in ComfyUI Manager. No extra dependencies to worry about - this node just loads files you already have.
Common issues
It only loads a file - it doesn't apply it. People new to this style of "select" node sometimes wire the CONTROL_NET output straight into their sampler expecting it to just work. It needs a ControlNet Apply node (with a strength, a conditioning image from a preprocessor, and start/end step range) between this node and your KSampler.
Slots show "None" until you have ControlNets installed. The dropdowns populate from whatever's actually in your ControlNet models folder - if you see nothing to pick, the fix is downloading a ControlNet, not this node.
Match the ControlNet to your base model's architecture. SD 1.5-era ControlNet files don't load on SDXL, Flux, or other newer architectures - every base model generation needs its own ControlNet trained for it. If a load fails or produces nonsense, check that the file you picked was actually built for the checkpoint you're running, not just that it's a valid ControlNet file in general. Also worth knowing: the modern union ControlNets for newer architectures typically cover fewer conditioning types than the old SDXL unions did, so if a type you relied on (segmentation, normal maps, reference) seems to be missing for your architecture, that's often the ecosystem, not a setup mistake on your end.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| control_net_name1 | COMBO | 1 options: None | |
| control_net_name2 | COMBO | 1 options: None | |
| control_net_name3 | COMBO | 1 options: None | |
| control_net_name4 | COMBO | 1 options: None | |
| control_net_name5 | COMBO | 1 options: None | |
| select_controlnet | INT | 11–5 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| CONTROL_NET | CONTROL_NET | — |
| control_net_name | STRING | — |