Mute (obvpm)
Kill a branch from a wire instead of by hand
- input
- value
ComfyUI already has mute. Right-click a node, choose Mute, and everything downstream of it is skipped. What it doesn't have is conditional mute - a mute that flips itself on the basis of what's happening in the graph rather than on your right-click.
That's this node. It takes any input and passes it through untouched. When the mute boolean is true, it blocks everything downstream instead.
What it does
The input is a wildcard, the output is a wildcard, and the value is never altered. The only thing that changes is whether the output carries a value or an ExecutionBlocker.
The boolean is the interesting part: it's a widget by default, but it's connectable, so it can be driven by logic. Feed it a gate's present output through a Boolean invert and you get "skip this stage when no reference image was loaded." Feed it from a comparison, a bundle field, whatever. The gate becomes a rule, not a switch you remember to flip.
Inputs and outputs
mute (required, BOOLEAN, default false - and connectable) plus an optional input of any type. Output is value. There's no present or status output, because the node has nothing to report: either the path is alive or it isn't.
Where it earns its place
Stages you run sometimes. A second sampler pass, an upscale, an extra detailer, a save at a resolution you don't always want. Rather than deleting three nodes and re-adding them later, put a Mute gate at the head of the block and let a condition open it.
Making a downstream sink conditional. This is the half of "turn the branch off completely" that laziness can't do. A lazy switch stops the work on the unselected side, but an output node at the end of the graph is an execution root - ComfyUI walks backwards from it, so if any live path reaches a Save or Preview, it runs. A blocker on the wire into that sink is what actually stops it. Get this pairing right and you stop shipping runs that quietly saved nothing, or that saved the empty branch you thought you'd switched off.
Recoverable branching. Because the blocker is a value in the graph rather than an editor state, flipping the boolean back brings the whole path back. That's the cleaner version of the "I bypass groups by hand and it gets messy" workflow that shows up in routing questions over and over - the pack's gates and lazy switches are aimed exactly at it.
The catch, stated plainly
Nodes upstream of input still run. This is the one thing everyone gets wrong once. Mute stops the tree below the gate; the loader, the encoder and the sampler feeding it already executed and already cost you their seconds and their VRAM. If the goal is to save that work, you need a lazy node, not this one. The plumbing notes make the same distinction for the older routing nodes in the ecosystem: mute and bypass act downstream, only lazy evaluation saves the upstream cost.
A blocker can't be caught. Nothing downstream gets to object, log an opinion, or handle the absence. Use it for a path you want off, not for a path you want to degrade gracefully - that's what the optional gates' bypass mode is for.
Don't confuse it with the editor's mute. The right-click Mute is a static state you set on a node and that saves with the workflow; it's great for parking an experimental block. This is a runtime decision that can depend on data. They're both called mute, they do different jobs, and mixing up which one is doing the muting is a fun five minutes.
Install
Manager, search comfyui-obvpm, or:
cd ComfyUI/custom_nodes
git clone https://github.com/chanon/comfyui-obvpm
Restart ComfyUI. No dependencies to install - the pack declares none on purpose, since everything it imports already ships with ComfyUI - and no model files. All nodes carry an (obvpm) suffix, so searching the node menu for obvpm lists the whole pack.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| mute | BOOLEAN | false | When true, every node downstream of this gate is skipped. Connectable, so it can be driven by logic. |
| inputopt | * | Any value to pass through. Its upstream nodes still run even when muted. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | The input passed through. Blocked while mute is true. |