π CR ControlNet Input Switch
Swap between two loaded ControlNets by number
- control_net1
- control_net2
- control_net1
- control_net2
- CONTROL_NET
- show_help
You've got two ControlNets loaded - say a depth model and a Canny model - and you want to flip between them in the same graph without rebuilding it each time. This node does that. Two CONTROL_NET inputs in, one number to pick, one ControlNet out.
It's a Comfyroll Studio logic node (Suzie1 / RockOfFire), the ControlNet-typed member of the pack's input-switch family. It selects a loaded ControlNet model - the thing a ControlNet loader hands you - not a control image and not the applied conditioning. So it lives upstream, between your loaders and the apply node.
How it works
A ControlNet is a trained sidecar to your base model that reads a control map (a depth map, a pose skeleton, an edge map) and steers generation toward that structure - the KB's ControlNet overview walks through what each preprocessor produces. This switch doesn't do any of that work; it just decides which loaded ControlNet gets passed on.
The control is a single integer, Input, set to 1 or 2. At 1, control_net1 passes through; at 2, control_net2 does. The selected model comes out unchanged, ready to plug into a ControlNet apply node along with your control image.
The inputs that matter
Input(1 or 2, default 1) - the selector, and the only dial.control_net1/control_net2- the two loaded ControlNet models you're choosing between, each from a ControlNet loader.
Output is a single CONTROL_NET (plus a show_help string that just links the wiki). Feed the output into the control_net socket of your apply node - Comfyroll's own CR Apply ControlNet, or the stock one.
Where you'd actually reach for it
The realistic use is a reusable ControlNet template. Build a graph that can run depth or pose, wire both loaders into this switch, and flip a number per run instead of re-plugging. It's also useful when a single upstream choice should steer the whole graph at once - pick your control type once and let the same value drive this switch plus the matching preprocessor.
If you actually want both ControlNets active at the same time, this is the wrong tool - you want Comfyroll's Multi-ControlNet Stack, which layers several nets together. The switch is strictly one-or-the-other.
How to install it
- ComfyUI Manager: search
Comfyroll Studio, install, restart. - Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git, then restart.
The pack doesn't ship ControlNet models - download those into ComfyUI/models/controlnet yourself.
Common issues
Most "ControlNet switch problems" are really the pack not loading. Comfyroll is a big, older pack, and on newer ComfyUI builds a submodule can fail to import at startup, spewing NameError: name 'CR_...' is not defined and hiding every CR node. Read the first traceback in the console, not the last - the rest is cascade - and update via Manager, which usually fixes it.
Beyond that, the switch inherits ControlNet's usual footgun: the model you select still has to match your base architecture. An SD 1.5 ControlNet only works with an SD 1.5 checkpoint, an SDXL one with SDXL, and so on. The switch happily passes a mismatched ControlNet through; the error only shows up later, at the apply node or the sampler. And like the pack's other switches, this one is manual - the number is the decision, so point it at a branch that's actually connected.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| Input | INT | 11β2 | β |
| control_net1 | CONTROL_NET | β | |
| control_net2 | CONTROL_NET | β | |
| control_net1opt | CONTROL_NET | β | |
| control_net2opt | CONTROL_NET | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| CONTROL_NET | CONTROL_NET | β |
| show_help | STRING | β |