None
When 'None' Is the Right Answer
- None
Some jokes are also plumbing. The None node (class noneNode) does exactly one thing: it outputs the Python value None on a * (any-type) socket. No inputs, no settings, no model. Its whole description is "Do nothing, just output None," and it means it.
So why would you ever want a node that produces nothing? Because in ComfyUI, None is a real, load-bearing value - and it's the engine's way of saying "this input is not connected." The plumbing-layer trick goes like this: plenty of nodes have optional inputs that behave one way when wired and another way when left empty. A fallback/switch node (rgthree's Any Switch is the canonical example) walks its inputs and passes the first one that isn't None. A node that deliberately emits None is how you mute a branch from inside the data - downstream fallback logic sees the None, skips it, and behaves exactly as if that branch wasn't there, without you having to bypass or delete anything.
The practical pattern: build a workflow with several alternative branches feeding one consumer (say, three different prompt sources or two model loaders), wire a None node into the branch you currently want inactive, and let the fallback pick the live one. You control which branch is active by moving the None node instead of rewiring. It's the same "null-output placeholder" trick the plumbing docs call out - the inverse of a fallback switch - and this is the smallest possible implementation of it.
There's also a second, dumber use that people actually reach for: as a free *-typed source when you need to satisfy a node's input requirement without providing a value, or to keep a link alive while you rearrange a graph. It's a placeholder with an honest name.
The output
None- typed*, so it plugs into any socket that accepts wildcard input. Unconnected optional inputs in ComfyUI arrive asNoneanyway, which is the whole reason this works: you're explicitly routing the "no value" state through the graph instead of implying it.
A couple of honest caveats. First, it only helps if the downstream node actually handles None gracefully - most optional inputs do, but don't wire it into something that will crash on a null. Second, for the "mute a branch" pattern you need a fallback/switch node in the chain; None alone doesn't do anything to execution order. It's a value, not a valve.
Installing it
This node lives in lhaoyun6/ComfyUI-lhyNodes. Install via ComfyUI Manager by searching for lhyNodes, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/lihaoyun6/ComfyUI-lhyNodes.git
python -m pip install -r ComfyUI-lhyNodes/requirements.txt
Restart ComfyUI after. The pack's shared requirements (ultralytics, opencv-python, numpy, yarl) are installed by that one command; the None node itself needs none of them and downloads nothing.
It's a two-minute addition to any workflow, and once you understand what None means in this engine, it stops being a joke and starts being a legitimately useful tool for keeping a graph's dead branches tidy.
Inputs (0)
No inputs
Outputs (1)
| Name | Type | Description |
|---|---|---|
| None | * | — |