Passthru Ovum
The do-nothing node that actually tells you what's flowing
- any_in
- any_out
Passthru is the node equivalent of sticking a wire in a live circuit and calling it a tool. It does nothing to your data - value goes in, same value comes out - but it reports what it saw. Every run it prints the value's type and a pretty-printed dump to the ComfyUI console, and it writes the same thing into its status text on the canvas. That's it. That's the whole job, and for debugging a graph it's quietly excellent.
When you'd reach for it
ComfyUI gives you almost no visibility into what's actually traveling down a wire. You know the output type, you don't know the value. A passthrough node answers "what is this, really?" mid-pipeline - useful when a node upstream is silently returning None, when a list arrives as a single weird object, or when you inherited a workflow and want to see what a jack produces before you wire more stuff to it.
It lives in the ovum/debug category of the comfy-ovum pack, sfinktah's grab-bag of utility nodes. If you've never met the pack: the author describes it as "custom nodes I just couldn't live without," some ported from other projects, some original. No model files, no heavy dependencies - the pack's requirements.txt is mostly small utilities, so installing it is painless.
How it works
The mechanism is deliberately boring, which is the point. The node declares a single optional any_in input of the wildcard * type and a matching any_out output. Because both are *, it accepts anything and connects to anything. On execution it:
- pretty-prints the incoming value with a compact formatter (long lists and dicts get truncated, not dumped in full)
- logs it to the console
- returns the exact same object unchanged
One detail worth knowing: the node's IS_CHANGED returns NaN, which forces ComfyUI to treat it as changed on every run. That means it never gets cached away, so it always fires and always shows you current data. It's also handy in loops where you want a node to re-execute regardless of caching.
Inputs and outputs
- any_in (optional,
*) - the value to inspect. Leave it unconnected and you getNonethrough, which is its own kind of debug signal. - any_out (
*) - the input, untouched. Wire it onward and the node costs you nothing except a log line.
There are no widgets to configure. Drop it, run, read the status text.
Installing it
The node ships inside the comfy-ovum pack, so install the pack, not a single node:
cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum
Then restart ComfyUI. Easier still: ComfyUI Manager → search "comfy-ovum" → Install. Manager pulls in the pack's requirements automatically; there's nothing extra to download.
Common gotchas
- It doesn't convert anything. If you were hoping a passthrough would reshape a value into a list or a string, it won't - use the cast nodes from the same pack for that.
- Don't leave it in production workflows. Every copy you keep is a console log line per run, and if your input is a big tensor or list, the dump gets noisy fast.
- Status text is compact on purpose. The canvas shows a truncated, compact version; the console shows more. If something looks cut off, check the console, not the node.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| any_inopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| any_out | * | — |