Forward/Bypass-Mute on State (Any)
Forward/Bypass-Mute on State (Any) — make one node's state control everything downstream
- any
- trigger
- any
The vsLinx Forward/Bypass on Boolean nodes need a boolean to decide. But sometimes you don't have a boolean - you have another node whose state should decide. Maybe you keep a "master" face-detail node that you manually bypass when you're testing, and you want the whole chain that depends on it to follow along. This node is that relay: it forwards any value unchanged, watches the node wired into its trigger input, and mirrors that node's state onto the downstream node(s). Bypassed trigger → bypassed output. Muted trigger → muted output. Normal → normal.
How it works
The pass-through half is the same as the boolean variants: any in, any out, untouched. The control half is new - instead of reading a boolean widget, it reads the bypass/mute state of whatever node is connected to the optional trigger input. Its value is never used; only the link matters. Connect nothing to trigger and the node is a plain pass-through and downstream runs normally.
Two toggles tune the behavior:
ignore_subgraph_boundary- when on, the trigger lookup crosses subgraph boundaries (inbound and outbound) until it reaches a real node, instead of stopping at the edge of the subgraph. Turn it on when you're triggering from a node outside the current subgraph.mirror_own_state- when on, this node also mirrors its own bypass/mute state onto downstream, taking precedence over the trigger. That's the chaining trick: bypass this node and the state propagates onward, so you can cascade state through a graph.
Like the boolean siblings, mirroring is applied instantly in the UI (frontend-driven, not waiting on a queue run) and is pipe-aware - state correctly propagates through Any to Pipe → Pipe to Any.
Inputs and outputs
any(any type) - the value forwarded unchanged.trigger(any type, optional) - the watched node; value unused, only the link matters.ignore_subgraph_boundaryandmirror_own_state- the two toggles above.- Output
any- the forwarded value.
When it beats the boolean version
Any time your condition is "is that other node currently bypassed?" rather than "is this flag true?". Concrete example: you have a big optional processing group - say a ControlNet tile pass or an inpainting subgraph - and you toggle it off by bypassing its first node when testing. Without this node, everything fed by that group either errors or needs its own manual toggle. With it, one bypass cascades. It's also the natural tool for building "master switch" nodes in large graphs, the kind of thing rgthree's group muters do at the group level but this does at the wiring level.
Install
Ships in the vsLinx pack. ComfyUI Manager → search "ComfyUI vsLinx Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/vslinx/ComfyUI-vslinx-nodes.git comfyui-vslinx-nodes
Restart, look under vsLinx/utility. No dependencies beyond the pack itself.
Gotchas
The trigger lookup is direct-by-wire, so "the node you want to watch" means the node actually connected to trigger - not its grandparent. That's exactly what ignore_subgraph_boundary exists to relax. And remember the priority order: mirror_own_state beats the trigger, so if a node isn't following the trigger the way you expect, check whether this node itself got bypassed or muted along the way. Minor, but it's the kind of subtlety that eats an afternoon.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| any | * | — | |
| ignore_subgraph_boundary | BOOLEAN | false | When enabled, the trigger lookup crosses subgraph boundaries (inbound and outbound) until it reaches a real node, instead of stopping at the boundary. |
| mirror_own_state | BOOLEAN | false | When enabled, this node also mirrors its OWN bypass/mute state onto the downstream node(s): if this node is bypassed/muted, the output node is too. Its own state takes precedence over the trigger. |
| triggeropt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| any | * | — |