Nodes/ComfyUI vsLinx Nodes/Forward/Bypass-Mute on State (Any)
ComfyUI Node

Forward/Bypass-Mute on State (Any)

Forward/Bypass-Mute on State (Any) — make one node's state control everything downstream

By vslinx·Created about a year ago·Updated 26 days ago· 25
Forward/Bypass-Mute on State (Any)
  • any
  • trigger
  • any
ignore_subgraph_boundaryfalse
mirror_own_statefalse

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 PipePipe 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_boundary and mirror_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.

CategoryvsLinx/utility

Inputs (4)

NameTypeDefaultDescription
any*
ignore_subgraph_boundaryBOOLEANfalseWhen enabled, the trigger lookup crosses subgraph boundaries (inbound and outbound) until it reaches a real node, instead of stopping at the boundary.
mirror_own_stateBOOLEANfalseWhen 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)

NameTypeDescription
any*