Passthru Output Is List Ovum
The 'trust me, this is a batch' debug node
- any_in
- any_out
The name is doing a lot of work, so let's decode it: Passthru Output Is List takes any value in, passes it through untouched, but declares to ComfyUI's graph engine that its output is a list. It also dumps what it sees to the console and the canvas, because this is a debug node first and a list-shaping trick second.
If you've ever hit "this input expects a batch" and stared at a perfectly good output that refused to connect, this is the node that explains - and sometimes works around - what's going on.
The trick it's built on
ComfyUI has two different notions of "list," and beginners get burned by the gap between them constantly. There's a Python list - a single value that happens to be a collection - and there's a graph-level batch, which is the engine fanning one output out across many downstream calls. OUTPUT_IS_LIST is the flag that tells the engine "treat everything from this slot as a batch."
This node sets OUTPUT_IS_LIST = True on its output. The actual Python object passes through byte-for-byte unchanged; only the type declaration changes. So the honest way to read it: "the value is unchanged, but the engine should consider it a list."
When it's actually useful
Two real cases. First, debugging: like the plain Passthru, it logs the input's type and a pretty-printed value every run (its IS_CHANGED returns NaN, so it never gets cached and always fires). Second, satisfying list-expecting sockets: if a downstream node needs a batch-shaped input and you want to see what the engine will hand it, run it through this node and watch. It won't magically fix a non-list upstream - if you feed it a single image tensor, downstream still gets a single image tensor, just advertised as a list. For actual conversion you want the ReinterpretAsListCast node from this same pack.
It's part of comfy-ovum, sfinktah's grab-bag of "nodes I couldn't live without," many borrowed and reworked from other projects. No models to download, no GPU footprint.
Inputs and outputs
- any_in (optional,
*) - whatever you're inspecting. Unconnected meansNonepasses through, which is informative in its own way. - any_out (
*, declared list) - the input, unchanged, marked as a batch.
Installing it
Install the pack, not the node:
cd ComfyUI/custom_nodes
git clone https://github.com/sfinktah/comfy-ovum
Restart ComfyUI afterward. Or skip all that with ComfyUI Manager → search "comfy-ovum" → Install. The pack's dependencies are lightweight (pillow, numpy, requests, aiohttp and friends), so there's no big install surprise.
Common gotchas
- It lies to the type system, not to your data. If you expect the node to wrap a scalar into
[scalar], it won't. Read the console dump to confirm what actually arrived. - Debug nodes are for debugging. A workflow full of passthroughs is a workflow full of log noise. Trace the problem, then delete the node.
- Output marked list ≠ valid input for everything. Some nodes genuinely need a real Python list object, not a graph-level batch declaration. When in doubt, check whether the downstream node's input expects
*(wildcard) or an explicitLIST.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| any_inopt | * | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| any_out | * | — |