Nodes/ComfyUI-RvTools_v2/ControlNet Multi-Switch
ComfyUI Node

ControlNet Multi-Switch

The first connected ControlNet wins

By r-vage·Created about a year ago·Updated 5 months ago· 23
ControlNet Multi-Switch
  • input1
  • input2
  • input3
  • input4
  • input5
  • cn

Here's the ControlNet version of the "just pick whichever one is actually there" switch. ControlNet Multi-Switch takes up to five ControlNet inputs and passes through the first one that isn't empty. No widget to flip, no state to manage - you just leave the inputs you don't want disconnected (or bypass the nodes feeding them), and the switch figures out the rest. It's the automation-friendly cousin of the manual ControlNet switches.

How it works

Straight-line logic, checked in order:

if input1 != None:   return input1
elif input2 != None: return input2
elif input3 != None: return input3
# ... input4, input5
else: raise ValueError("no active Input")

The cn output is whatever the first connected input supplied. That's the whole mechanism, and it's where both the power and the trap live.

The trap: because it returns the first non-None slot, anything always-connected and placed early shadows everything after it. The README spells this out for the whole multi-switch family: put the nodes that can be bypassed (your optional choices) in the early slots, and put the always-on fallback last. If you wire your default checkpoint's ControlNet into input1, inputs 2–5 may as well not exist - a never-empty first slot wins every time.

The other edge: if literally nothing is connected, it raises an error rather than returning None. That's arguably a feature - a silent None would let a broken workflow limp along producing garbage; this makes the problem loud.

Why you'd reach for it

Pair it with an "options menu" pattern: several ControlNet branches that can each be bypassed, feeding inputs 1–4, with your safe default in input 5. Bypass a branch and the switch falls through to the next live one. Same trick works for any of the pack's multi-switches (clip, model, latent, string) - this is the ControlNet-flavored version. It's a great fit for shared workflows where you want a few named presets without a pile of manual toggles.

The inputs that matter

  • input1 through input5 - all CONTROL_NET, all optional, all checked in order. Only wire what you need; the rest can stay empty.
  • The cn output feeds a ControlNet Apply (alongside your conditioning and preprocessed image).

Note the earlier ControlNet articles' lesson applies here too: a ControlNet that came from a Union model needs its type set before this switch sees it - the switch routes, it doesn't configure. And remember the types must actually differ per branch for the switch to be meaningful.

Installing it

Part of the RvTools v2 pack - no model files. ComfyUI Manager → search RvTools → install ComfyUI-RvTools_v2, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI-RvTools_v2

Restart and confirm RvTools v2: Version 2.5.x in the console. Extra deps (opencv-python, pilgram, pynvml, piexif) come through Manager automatically.

Troubleshooting

  • "Missing Input: Multi ControlNet Switch has no active Input" - that's the all-disconnected error, and it's the number one thing to hit. Check that at least one input is wired or un-bypassed.
  • Lower slots never win. If branch 3 never activates no matter what you bypass, you've got a live connection in slot 1 or 2. Reorder so the always-on branch is last.
  • Old v1 RvTools references fail in Manager - the original repo was deleted, and the author has since moved development to ComfyUI_Eclipse, the successor pack.
Category🫦 RvTools II/ Multi-Switches

Inputs (5)

NameTypeDefaultDescription
input1optCONTROL_NET
input2optCONTROL_NET
input3optCONTROL_NET
input4optCONTROL_NET
input5optCONTROL_NET

Outputs (1)

NameTypeDescription
cnCONTROL_NET