ComfyUI Node

🐜 WTF?

Stop guessing what's on that wire β€” ask WTF?

By webfilteredΒ·Created 2 years agoΒ·Updated about a year agoΒ· 11
🐜 WTF?
  • anything

    Every ComfyUI user eventually stares at a workflow and asks a very specific question: what is actually coming out of that node? The wire is labeled TENSOR, the workflow you downloaded runs, and yet the image is black - or the next node explodes with "expected a list, got a tensor." The WTFDebugNode (display name "🐜 WTF?") is the five-second answer: a tiny debug node that shows you what any output really is, right on the canvas, without leaving ComfyUI. The name is the point - it's for the moments you're wondering what the hell a port is emitting, and it lets you find out instead of guessing.

    How it works

    One input, one idea. Drag it in, connect anything to its single anything input - any output of any type - queue the workflow, and the node's body fills with a few read-only fields: the Python type of the value, its len() if it's sized, its .shape if it's a tensor, the type of its first child if it's a list, and a multiline box with the string representation of the whole value.

    The mechanics are about as clean as ComfyUI node code gets. The input is typed * (ComfyUI's ANY wildcard), INPUT_IS_LIST is on, and execute() walks each item grabbing type, len, .shape, and the first iterable child's type - each wrapped in its own try/except, so a field quietly disappears when it doesn't apply to that type. A string has no .shape; a scalar has no len(); you just see fewer fields, not an error. The node returns only a ui dict - no data outputs - so it's a dead-end by design. It cannot corrupt anything downstream because there is no downstream.

    The frontend half is a small JS extension. It renders those fields as disabled text widgets, numbers them when a list has more than one entry (so a 12-image batch shows type 0, type 1, …), caps the display at 100 items, and even recolors the connection so an ANY-typed link shows the real type of the source node. It also console.logs every result to your browser devtools - handy, since you can copy clean text out of there.

    The one input that matters

    • anything (type *) - feed it a single output from any node. That's the entire config: no optional inputs, no knobs, no outputs.

    The pass-through absence is the real gotcha. Because there's no output, you can't splice this into a pipeline - to inspect mid-chain you duplicate the wire or add a second instance. And it tells you the shape and type of a tensor, not the raw numbers; if you need actual pixel values, grab a PreviewImage or save the image instead.

    It's an ANY-typed node, the same wildcard behind the "Anything Anywhere" style of routing node that half the community argues makes workflows unmaintainable. But this one only reads and displays - never routes - so it's the harmless use of the wildcard.

    Installing

    It's on the ComfyUI Registry, so the normal path is ComfyUI Manager β†’ Install Custom Nodes β†’ search "WTF" (or "DebugNode-ComfyUI"). Or clone it:

    cd ComfyUI/custom_nodes
    git clone https://github.com/webfiltered/DebugNode-ComfyUI
    

    then restart ComfyUI. That's the whole install: there's no requirements.txt, no model downloads, no torch-version fights. It's one Python file, one JS file, MIT-licensed - the rare pack that can't break anything at install time.

    Troubleshooting

    • The node looks empty until you actually queue a run - it fills on execution, not on connection. Queue, then look.
    • A grayed-out field just means that attribute doesn't exist on your value. Not a bug.
    • Old data still showing after you rewired? Re-run, or disconnect and reconnect.
    • Before you share a workflow, delete it. It's harmless dead weight, but it prints to the console on every single run.

    It's a small single-purpose tool, and it earns its place: use it alongside the old community debugging discipline - lock the seed, change one variable at a time - and you'll actually find the bug instead of flailing.

    Categorydebug

    Inputs (1)

    NameTypeDefaultDescription
    anything*β€”

    Outputs (0)

    No outputs