Nodes/ComfyUI-RvTools_v2/ControlNet Switch
ComfyUI Node

ControlNet Switch

A two-position toggle for which ControlNet reaches your sampler

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

ControlNet is how you make the model respect the edges, pose, or depth of a reference image instead of just your words. But you rarely want the same ControlNet in every generation. Maybe you're comparing canny against depth for the same subject, or testing whether the ControlNet is even helping at all. The ControlNet Switch is a two-position toggle: an Input widget set to 1 or 2 decides which of the two CONTROL_NET wires flows through to the sampler.

How it works

It's the pack's standard 2-way switch pattern, nothing clever: Input (default 1) picks input1 or input2, and the chosen CONTROL_NET comes out of the cn output. Because the inputs are forceInput, you can't type a value in - both come from ControlNet loader nodes upstream.

Here's the trick that makes it a real A/B tool: leave input2 empty sometimes. Set Input to 2 with nothing connected to input2, and the node passes None through. Downstream, that effectively disables ControlNet for that run - you get the prompt-only result without touching the graph. That's the cleanest way to answer "is the ControlNet actually doing anything here?" It's also how you'd test a weight change on one branch against the untouched other branch.

Where this slot lives in the pipeline matters. The cn output feeds an Apply ControlNet node that conditions your positive (and often negative) conditioning before it reaches the sampler. So the switch is doing its toggling upstream of the conditioning - you're swapping which ControlNet model gets applied, not the apply step itself.

When you'd actually reach for it

  • You're building a workflow that can run with or without ControlNet and you want one toggle, not a muting dance.
  • You have a union ControlNet and you want to compare it against an older per-condition model on the same base - two loaders, one switch.
  • You keep two ControlNet setups with different preprocessors feeding them (e.g. canny on one, depth on the other) and switch per image.

Install

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

Or via ComfyUI Manager, searching "ComfyUI-RvTools_v2". No ControlNet model files ship with the pack - those are your own downloads, and the switch just routes whatever you've loaded. Dependencies are the pack's standard torch/numpy/Pillow/opencv-python/pilgram set.

Two things to remember

Bypass behavior. The pack author spells this out in the README: when a switch node is bypassed (not muted), it sends whatever is connected to input1 to the target. So if your workflow ships with the switch bypassed and you expected input 2 to win, you'll get input 1 instead. It's a deliberate convention - bypass means "just pass the first thing through" - but it surprises people every time. If you toggle nodes on and off with bypass (like rgthree group bypassers do), keep the always-wanted ControlNet on input1.

The pack's status. The README declares the pack unmaintained and recommends ComfyUI_Eclipse as its successor. The original RvTools repo also vanished from GitHub in early 2025, breaking workflows that depended on it - v2's renamed nodes are what still loads today. For an existing workflow, this switch keeps working as-is; for new builds, check Eclipse first.

Category🫦 RvTools II/ Switches

Inputs (3)

NameTypeDefaultDescription
InputINT11–2
input1optCONTROL_NET
input2optCONTROL_NET

Outputs (1)

NameTypeDescription
cnCONTROL_NET