Mute Bypass by ID — Stacker
A master panel for all your mute/bypass switches — that's the Stacker
So you've done what everyone does with this pack: dropped a few Single nodes around, an A/B switch or two, and now your switches are scattered across the same giant workflow they were supposed to tidy up. That's exactly the problem the Stacker exists to solve. It's a master panel that finds every Mute/Bypass and A/B node in your graph - even ones buried in subgraphs - and lets you drive them all from one place.
Drop the Stacker onto the canvas and it immediately claims every remote control node in the workflow as its own. What you get is a small dashboard: one row per controlled node, showing its title, its mute/bypass mode, its active state, and per-row controls. There are no inputs and no outputs - the whole thing is UI. It's the "control surface" that ties the rest of this pack together.
How it works
The Python class is a no-op like the rest of the pack; it's all frontend JavaScript. The mechanism is a simple ownership model: the Stacker keeps a list of "owned" remote nodes (stored per-node in the graph data) and continuously claims any unowned RemoteControl or RemoteSwitch/RemoteSwitchMulti it finds - including ones inside subgraphs, and it tracks them if they get relocated. That's the key difference from a static dashboard: the list isn't hardcoded, it adapts.
The real power is in the header buttons. The Stacker has three modes:
- User - individual control; each row reflects (and changes) its own node's state.
- Mute - everything on the panel gets muted at once.
- Bypass - everything gets bypassed at once.
Flip from Mute or Bypass back to User and each node returns to whatever state it had before. So "run the whole workflow without every optional stage" becomes one click, and "restore everything" becomes another. That's the pattern people actually want: a panic button for "compare with and without all the extras," not fifteen manual toggles.
The row controls
Each row is [Title] [M/B] [●] [→] [✕]:
- M/B - toggles whether that row's off state is mute or bypass.
- ● - toggles the node's active state.
- → - moves the node to another Stacker, if you're running multiple.
- ✕ - removes the row from this Stacker (it becomes available to other Stackers again).
With multiple Stackers, you use ✕ to free a node and the + Add button to claim unstacked ones. Nodes at any subgraph depth are supported and keep tracking if you move them - a genuinely useful detail, because subgraph relocation is where most mute/bypass tools quietly lose the plot.
Installing it
It ships in pixelpainter's mute-bypass by node ID pack with the other four. No models, no dependencies. In ComfyUI Manager search for "mute-bypass by node ID", or:
cd ComfyUI/custom_nodes
git clone https://github.com/pixelpainter/comfyui-mute-bypass-by-ID
Restart ComfyUI after - the whole panel is frontend JS.
Gotchas
- It only controls this pack's nodes. The Stacker manages Mute/Bypass and A/B nodes from this same pack; it won't take over rgthree groups or arbitrary nodes. If you're building a control surface that spans packs, keep expectations realistic.
- The first drop claims everything. Drop a Stacker and it auto-adds every remote node in the graph, including subgraph ones. If that's more than you wanted, hit ✕ on the rows you don't need.
- The auto-claim means two Stackers could fight over a node - but the ownership model marks nodes as owned by one Stacker, so a node claimed by the first stays out of the second until you release it with ✕.
If you've built up a few of these remote switches, the Stacker is the natural endgame: one panel, whole workflow, zero hunting.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| global_enable | BOOLEAN | false | — |
| global_mode | BOOLEAN | false | — |
Outputs (0)
No outputs