Nodes/ComfyUI LC123 Nodes/LC Is Bypassed / Muted
ComfyUI Node

LC Is Bypassed / Muted

Ask the graph whether that node is actually running

By lonecatone23·Created 3 months ago·Updated a day ago· 46
LC Is Bypassed / Muted
  • value
  • BOOLEAN
◄is_bypassed_or_mutedfalse►

Anyone who's built a graph with an optional second pass knows the smell: you mute the upscaler branch to test the base render, or you bypass the detailer, and then you have to remember that when you read your own outputs. Three configurations deep, you've got a workflow whose behaviour depends on state you can only see by clicking around the canvas. LC Is Bypassed / Muted turns that state into a boolean you can wire into logic. True if the node you point it at is currently bypassed or muted; false otherwise.

How it works

This one is clever for a reason worth understanding, because the trick is forced by the engine. Bypass and mute aren't data - they're frontend-only LiteGraph state living on the node object as mode (2 = muted, 4 = bypassed). Bypassing a node makes it pass its input straight through; muting it means it never executes at all. So there is no output signal to read, and a muted node in particular could never report on itself - not executing is the entire point.

The solution is a live read off the graph. A hidden is_bypassed_or_muted boolean widget sits on the node, and the pack's frontend JavaScript keeps it in sync by walking the link on the value input to find the origin node and checking that node's own mode. No queue required: the face updates as you toggle things, and what Python sends back is simply whatever that widget holds at run time. It's the same contract as the pack's LC Boolean and LC Invert Boolean nodes, just reading node mode instead of coercing a value.

The node draws its answer big on its face - true in green, false in red - so it doubles as a status light you can leave sitting in a corner of the canvas.

The inputs and outputs that matter

  • value - a wildcard (*) input. Wire anything at all from the node you want to watch. The type is irrelevant; only which node the wire originates from matters. That's why this doesn't need four typed variants.
  • is_bypassed_or_muted - the internal boolean, kept in sync live by the node's own face. The tooltip is explicit that you're not meant to set it by hand.

The single output is a BOOLEAN. Wire it into anything that branches on a flag - a boolean switch, an LC Any Empty Bool, your own logic chain - to make a graph that adapts instead of one you have to reconfigure.

What you'd actually use it for

The honest answer is that this is a niche node in the same family as rgthree's Fast Groups Muter: it exists because large workflows get switched on and off as units, and once you start doing that, "which state am I in?" becomes a real question. Two uses hold up:

  1. Gating a fallback. If the refinement branch is muted, route the untouched image straight to the save node. Nothing downstream has to be told twice.
  2. Report, don't act. Wire the boolean into LC Show Any or a text node and your workflow tells you, in the saved output, which path ran. For anything you're going to share or re-open in three weeks, that's worth more than it sounds.

Installing it

Part of the usual one-shot install. The pack declares no pip dependencies at all - no requirements.txt, just what ComfyUI ships with.

cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git

Manager: search ComfyUI LC123 Nodes → install → restart → check the [LC123] line in the console.

Common issues

Wire from the node itself, not through a Reroute. The live read looks at the origin node of the link on value. If you put a Reroute in between, the origin is the Reroute - and a Reroute is never muted, so you'll get a confident, wrong false. Same for anything else in the path: this node wants a direct wire.

It's a live UI signal, not a sampled one. Because it reads the graph rather than the data, the value is whatever the mode was when you queued. If you flip a mute switch mid-run, don't expect that run to have seen it.

Bypassed and muted are treated as one answer. There's no "which one" output. For most branches that's fine - off is off - but if you need to distinguish pass-through from never-runs, this node won't tell you.

Nothing wired, always false. An unwired value means no origin node, which reads as false. Not an error, just a silent one.

* sockets erase types. The usual advice applies: a wildcard wire looks connected but skips the type check that would have caught a mistake, so use it deliberately rather than as a habit.

CategoryLC123/utils

Inputs (2)

NameTypeDefaultDescription
is_bypassed_or_mutedBOOLEANfalseInternal: kept in sync live by this node's own face. Not meant to be set by hand.
valueopt*Wire anything from the node you want to watch -- the type doesn't matter, only which node the wire comes from.

Outputs (1)

NameTypeDescription
BOOLEANBOOLEAN—