ControlNet Switcher
Flip between two ControlNet conditions with one boolean
- controlnet_condition_1
- controlnet_condition_2
- controlnet_condition
There's nothing clever going on here, and that's the point. This node takes two already-built ControlNet conditions and a boolean, and hands back whichever one you asked for. No blending, no math, no image processing - it's a toggle switch wearing a node's clothes, and its whole job is letting you flip between two ControlNet setups without rewiring your graph every time.
What it's for
Picture you're testing a depth-conditioned pass against a canny-conditioned pass on the same Flux ControlNet workflow, or comparing two different reference images run through the same ControlNet loader. Without a switch node, that means unplugging one wire and plugging in another every time you want to compare. With this node, you wire both conditions in once, and use_first becomes your A/B toggle - flip a boolean, hit queue, done. It's the same convenience rgthree-comfy and Impact Pack built entire quality-of-life node libraries around, just scoped to exactly one type.
That scoping matters: this isn't a general-purpose switch. It works specifically on the ControlNetCondition type - the object an XLabs-style Flux ControlNet loader/apply node produces, not a raw image and not a ControlNet model file. The XLabsNodes category on this node (and on its packmate, FluxSamplerPuLID) is the giveaway: both were built to slot into an XLabs-AI-style Flux + ControlNet workflow, and this switch is the piece that lets you A/B which condition feeds the sampler.
Inputs and outputs
There are exactly three fields, and they're all required - no optional slots to leave dangling:
controlnet_condition_1andcontrolnet_condition_2- bothControlNetConditiontype. You need a ControlNet loader/apply node upstream of each one to actually produce this type; this pack doesn't ship one itself, only the switch.use_first(boolean, default true) -truepasses through condition 1,falsepasses through condition 2.
One output: controlnet_condition, the winner. Wire it straight into anything expecting that type - most naturally, into this same pack's FluxSamplerPuLID node, whose optional controlnet_condition input takes exactly this.
Installing it
Manager: search ComfyUI-Light-N-Color. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/KAVVATARE/ComfyUI-Light-N-Color.git
Restart ComfyUI. No models, no extra dependencies beyond the pack's baseline (numpy, torch, opencv-python, pillow) - this node does zero image math, it's pure graph plumbing.
Common issues
- "It's rejecting what I'm plugging in" - both inputs want a
ControlNetConditionobject specifically, not a rawIMAGEand not aCONTROL_NETmodel. If you're getting a type-mismatch error, you're missing the loader/apply step that turns a ControlNet model plus an image into that condition object in the first place. This pack doesn't include that loader - it ships only the switch, three of them actually (this one, plus siblings for images and latents mentioned in the README), assuming you already have a way to produce the thing being switched. - Both slots are mandatory - there's no optional side and no default-empty behavior. If you only have one real ControlNet condition to offer, you'll need to feed the same upstream output into both sockets to satisfy the graph, since leaving either one unwired throws a missing-input error like any other required socket.
- Missing/red node in a shared workflow - standard custom-node caveat: if someone opens a workflow that uses this node without the pack installed, it'll show up broken. Point them at the install steps above.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| controlnet_condition_1 | ControlNetCondition | — | |
| controlnet_condition_2 | ControlNetCondition | — | |
| use_first | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| controlnet_condition | ControlNetCondition | — |