LC 🚦
LC 🚦 is a lamp for a boolean
LC 🚦 is a 120×32 node with one input socket and a little round lamp on its face. That's it. Green when the boolean is true, red when it's false, dark when there's no value - or when the light or its source is muted or bypassed, where dark is the honest answer rather than a stale one.
Why would anyone want this? Because a boolean in ComfyUI is invisible. You wire a switch, an "any input empty" check, or an Is Bypassed / Muted probe, and the value only exists somewhere inside the graph. Half of debugging a big workflow is asking "did that branch actually get taken?" and the answer is buried in a widget you have to scroll to. A lamp you can park next to the thing it describes is a genuinely better interface than the widget, and it costs nothing to run.
How the lamp stays live
The node is an output node - same category as Preview Image or Save Image. That matters more than it sounds: ComfyUI works backward from output nodes and always executes them, so wiring a boolean into a terminal like this one makes the value part of the graph you can count on rather than something that only gets evaluated if a sampler happens to need it.
The Python side is three lines - it takes the boolean and returns a UI payload describing it. All the visible behaviour is frontend, and it's smarter than a run-time readout:
- If the node feeding
valuehas its own boolean widget - a toggle, a primitive, one of LC123's boolean switches - the lamp follows it live, as you click. No queue, no run, no cached value from the last generation. - If the source has no such widget (a compare node, say), it falls back to the value from the last run. Before any run that reads "No value yet", which is a different state from "false" - a dark lamp and a red lamp are two different diagnostics.
- Mute or bypass either the light or the node feeding it and it goes dark, rather than showing you a value that isn't part of the run anymore.
True color and false color live behind the faint ⚙ on the node - a short swatch list plus a custom picker, and a none option that turns the lamp off entirely for that state. They're stored in the node's properties, so they save with the workflow instead of resetting every reload.
Inputs and outputs
There's exactly one of each to talk about, and one of them doesn't exist.
value - required BOOLEAN, and it's forced to be an input, so there's no widget to click. You have to wire it. That's deliberate: a hand-toggleable boolean would be a different node.
Outputs: none. The light is a terminal. If you also need the value downstream, this isn't the node - use LC Show Any (which passes its value through) or just tee the boolean off the source. Don't wire into the light expecting a pass-through; there isn't one, and you'll be staring at a graph that looks connected but goes nowhere.
Where it earns its place: a live readout on LC Is Bypassed / Muted so you can see at a glance whether the branch you muted is really muted, on LC Any Empty Bool so you know whether the graph bailed out of a branch, and on any boolean that gates a whole second half of the workflow - the case you'd otherwise diagnose by re-running.
Install
ComfyUI Manager → search ComfyUI_LC123_nodes → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes.git
Restart. No requirements.txt in this pack - nothing to install beyond ComfyUI's own torch/numpy. The console prints one [LC123] + line per module; no lines at all means the folder is nested one level too deep (__init__.py has to sit directly in custom_nodes/ComfyUI_LC123_nodes/). Since this node is a small bit of JS drawing a lamp, do a Ctrl+F5 after updating the pack or you'll get the old frontend file.
Small things that trip people
- Dark lamp? Check mute/bypass on the light itself and on its source before assuming the boolean is false. All three states render dark.
- Nothing at all until you queue? The source doesn't have a boolean widget, so there's nothing to follow live; run once and the last-run value appears.
- In Nodes 2.0 the lamp updates on a slow timer instead of instantly, because the new frontend has no node foreground to paint on. Still correct, just not as snappy.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| value | BOOLEAN | The boolean to show. |
Outputs (0)
No outputs