Simple Selector (Switch) Advanced
The checkbox selector that greys out your canvas groups for you
- selector
- source_a
- source_b
- source_c
- source_d
- source_e
- output
- label
Simple Selector (Switch) Advanced (class SimpleSelectorSwitchAdvanced) does everything the plain Simple Selector does - same selection semantics, same output + label outputs - but it's the version with opinions about your canvas. Two differences: a different frontend, and a toggle that rewires whole groups for you.
First, the frontend. Instead of a dropdown plus five label fields, you get a single exclusive-checkbox list: one row per slot (A–E) plus a none row, exactly one ticked at a time, like a radio group. Click a row to select it. Double-click a slot row to edit its label inline. The selection and all five labels live together in one custom widget as a small JSON blob, so there are no hidden label boxes to hunt for. The selected slot's label still comes out the label output, exactly like the plain node.
The group-bypass trick
The real reason to pick Advanced over plain is bypass_unselected_groups, a frontend-only toggle in the style of rgthree's Fast Groups Bypasser. Here's the trick: each slot's label doubles as a canvas group name. Turn the toggle on and the node scans your groups, then:
- the group matching the selected slot's label is set to ALWAYS, and
- every other slot's matching group is set to BYPASS - the greyed-out rgthree look.
So if slot B's label is "Detail pass" and you tick B, the group literally named "Detail pass" activates while "Base prompt", "Upscale", whatever you labelled the other slots, go grey. It's a pure frontend mode change: it flips other nodes' mode flag, exactly like rgthree does. Select none and every referenced group gets bypassed.
Two things to keep straight, because the naming invites confusion:
bypass_unselected_groups(group bypass, frontend) andbypass_unselected(lazy evaluation, backend) are orthogonal - run either, both, or neither. The first decides which canvas groups are mode-4 bypassed; the second decides which sources this node bothers evaluating.- Group membership is spatial - a node belongs to a group if it sits inside the group's box. Restructure your groups and you need to re-click a row to re-apply.
Inputs and outputs mirror the plain node: selector (the custom widget), block_on_none_selected, bypass_unselected, bypass_unselected_groups, optional source_a…source_e, and outputs output (any) + label (STRING).
Known wart
Under ComfyUI's Nodes 2.0 (Vue) rendering, selecting the node opens the right-hand properties panel, which draws the selector a second time. ComfyUI repaints only one of the two copies, so the node-body checkboxes can momentarily show a stale choice until they next repaint. The selection itself is always correct - close the panel and it re-syncs. Nodes 2.0 is still opt-in and buggy with custom frontends generally, so if you're on it and something looks off, that's the first suspect.
Install
Same pack, same trivial story. This one ships the pack's only JS file - that's what powers the custom widget and the group bypass - but still zero Python dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/id-fa/ComfyUI-Lenient-Switch lenient-switch
Restart ComfyUI and it's under Lenient Switch. If all you need is dropdown-and-label behavior, the plain Simple Selector ships no JavaScript at all and is the safer default; grab Advanced specifically because you want the group bypass.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| selector | LENIENT_SELECTOR | {"select": "none", "labels": ["", "", "", "", ""]} | Exclusive-checkbox selector (slots A-E + none) with a per-slot editable label. Click a row to select; double-click a slot row to edit its label (the label also names the canvas group for bypass_unselected_groups). Value is JSON: {"select": ..., "labels": [..]}. |
| block_on_none_selected | BOOLEAN | false | When 'none' is selected, emit ExecutionBlocker so downstream nodes are skipped instead of receiving None. |
| bypass_unselected | BOOLEAN | false | When ON, only the selected slot's source_X is evaluated; the upstream chains feeding the other (and, with 'none', all) sources do not run (lazy evaluation). Note: nodes are not visually bypassed like rgthree; they simply do not execute. |
| bypass_unselected_groups | BOOLEAN | false | JS-only, rgthree FastGroupsBypasser-style group bypass. When ON, the canvas group whose name matches each slot's label is set to BYPASS (mode 4) for every UNSELECTED slot and to ALWAYS for the selected slot. Handled entirely by the frontend; the Python run/check_lazy_status ignore this toggle. Orthogonal to bypass_unselected (lazy eval). When OFF, referenced groups are restored to ALWAYS. |
| source_aopt | * | Source for slot A (any type). | |
| source_bopt | * | Source for slot B (any type). | |
| source_copt | * | Source for slot C (any type). | |
| source_dopt | * | Source for slot D (any type). | |
| source_eopt | * | Source for slot E (any type). |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| output | * | — |
| label | STRING | — |