Any Gate
The off switch that stops the run, not just the wire
- input
- output
There's a branch in your workflow you only sometimes want: a refine pass, a second upscale, a save. You could mute the nodes, delete them, or bypass them. Any Gate gives you a single switch for the whole thing - and unlike bypassing a node, it also stops the work upstream of it from running at all.
What it actually does
Put it on any link. Open, and it's a plain wire: whatever comes in goes out, uninspected. It takes any type - image, latent, model, string, conditioning - because the pack's wildcard type compares equal to everything, the same trick every switch node in ComfyUI uses. Closed, and the node returns an ExecutionBlocker instead of a value. ComfyUI propagates a blocker down the graph: every node that consumes this output is skipped, and everything behind those is skipped too, output nodes included. Nothing saves, nothing previews, no error is reported. The run just ends short.
That last part is the bit worth reading twice, because it's different from what you're probably used to. This isn't a switch choosing between two inputs, and it isn't the frontend's bypass (which hides the node and reconnects the wires). It is a valve that kills the branch, quietly.
The lazy input is the whole point
input is declared lazy. When the gate is closed the node's check_lazy_status asks for nothing, so ComfyUI never evaluates the upstream at all. A sampler sitting behind a closed gate doesn't run. It doesn't allocate VRAM, doesn't take a minute, doesn't produce a latent that then gets thrown away.
Compare that to the pack's own Any Switch, or rgthree's: those route a value, but every branch they're choosing between still gets computed. If your goal is "don't spend the time", a gate is the node; if your goal is "pick between two finished things", it isn't.
Inputs and outputs
Two inputs, one output, no surprises.
input- anything. Required on purpose: a gate with nothing wired in has nothing to gate, and letting it sit there silently emitting nothing downstream hides the mistake, so ComfyUI's own "required input is missing" says it out loud instead.enabled- on by default, labelled open (pass through) / closed (stop here).
The one output, output, goes wherever the link went before.
Installing it
Any Gate ships in Kinburg-Nodes alongside 108 other nodes, so you install the pack, not the node. Search Kinburg-Nodes in ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kinburg/Kinburg-Nodes
Then restart ComfyUI. The pack's install.py installs a CUDA build of llama-cpp-python for its local-LLM nodes - ComfyUI Manager runs it for you on install, and it's pinned to a prebuilt wheel matching your torch's CUDA major (a cu124 wheel on a CUDA-13 torch fails with llama.dll ... or one of its dependencies, which is the install problem people actually report). None of that touches Any Gate, which needs nothing beyond ComfyUI itself.
Where people get burned
The silence. Close the gate, hit Queue, and the run finishes "successfully" with no image and no explanation. That's the design, not a bug - but in a queue of twenty prompts it's easy to think ComfyUI glitched. If a run produced nothing, look for a closed gate before you look at the console.
Gates in the middle of a shared trunk. If the gated output feeds three consumers, all three die. That's usually what you want. What's confusing is when one of those consumers also gets fed from somewhere else - the run continues down that other path, so you get a partial result that looks half-finished rather than skipped.
Using it when you meant to choose. A gate can't pick between two values; it can only kill one path. Two branches with a gate on each gives you "neither, either, or both", which is occasionally exactly right and more often a bug factory.
Reaching for it to skip a widget. It gates a link, not a setting. Convert the widget to an input first if that's the plan.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| input | * | Anything — image, latent, model, string, conditioning… LAZY: with the gate closed this input is not evaluated, so its upstream never runs. | |
| enabled | BOOLEAN | true | Open: the input passes straight to the output. Closed: nothing leaves this node — every node downstream is skipped silently, and the upstream feeding this gate is never evaluated either. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | * | — |