Debug Print | akatz-loops
See what's actually flowing through a wire
- value
- *
When a ComfyUI workflow misbehaves, half the battle is just seeing what a wire is carrying. DebugPrint | akatz-loops is the low-tech answer: you drop it on a wire, it prints a description of the value to the ComfyUI console, and it passes the value straight through so nothing downstream breaks. It's the print() of ComfyUI, and it belongs in every workflow you're actively debugging - even the ones you eventually delete it from.
Inputs and outputs
- value - a
*input; anything at all. - label (STRING) - a tag printed before the value so you can tell your debug lines apart when there are several.
- output - the same
*value, untouched, so you can keep the node inline between two other nodes without splicing wires.
The output is a pure passthrough, which is the design that makes it painless: wire it in the middle of an existing connection and the graph keeps working while you look.
What it prints
The node is smart about how it describes values rather than dumping raw reprs. It renders:
- strings as quoted text
- numbers and booleans as their literals
- lists, tuples, and dicts recursively
- torch tensors as
Tensor[shape]- which is the one you'll actually care about, because it tells you the batch/height/width/channel layout at a glance - anything else as its type name
So a latent shows up as Tensor[1, 4, 64, 64] instead of five thousand floats. Where does it print? The terminal running ComfyUI - not the browser UI. If you don't see output, check you're looking at the console, not the frontend.
Installing it
Part of the Akatz-Loop-Nodes pack (repo ComfyUI-Execution-Inversion):
cd ComfyUI/custom_nodes
git clone https://github.com/akatz-ai/ComfyUI-Execution-Inversion
# restart ComfyUI
Or ComfyUI Manager → "Akatz-Loop-Nodes". opencv-python is the only dependency; no model files.
Gotchas
The obvious one: it's terminal-only, and plenty of people miss the prints entirely because they're watching the UI. The subtler one is inside loops - a debug node in a loop body prints once per iteration, so a 50-iteration loop buries your terminal in 50 lines (fine, but label well or you can't tell which iteration is which). And don't leave it on the hot path in production workflows; it's cheap, but a debug node you forgot about is how you end up with 200 lines of [label]: Tensor[1,4,64,64] after every batch.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| value | * | — | |
| label | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| * | * | — |