Show Any (GeN13)
The debug node that tells you what's actually in the wire
- any
- STRING
- any
Half of ComfyUI debugging is not knowing what's coming down a wire. A node returns something, the next node behaves oddly, and the only way to find out what happened in between is to guess. Is that string really a string? Did the JSON parse? Is the seed 42 or 42.0000001?
Show Any (GeN13) is the answer to all of those. It accepts any type, displays the contents in a text box on the node, and passes the object straight through - so you can park it in the middle of a live graph and leave it there.
What it does with each type
The clever bit is that it doesn't just str() whatever arrives:
- Strings and numbers show as themselves. Floats get up to six decimal places, so
0.1 + 0.2reads as0.3instead of0.30000000000000004. - Booleans read
true/false. - Lists and dicts get laid out as JSON, which is how you actually want to read a latent dict, a sampler output object, or an LLM's structured response.
- IMAGE, MASK and LATENT tensors show a one-line size summary - dimensions, count, channels - instead of a wall of tensor repr.
Multi-part inputs (a list of strings, say) display as separate blocks with a blank line between them, and both outputs stay lists.
Inputs and outputs
content is a required multiline text box. any is the optional wildcard input - unconnected, the box's text is the output; connected, the box mirrors the upstream content.
STRING- the text as displayed. Wire this into anything textual: a CLIP Text Encode to check the prompt that an LLM produced, a note, a Save Image prefix, or Number'snumberinput if you're extracting a figure out of prose.any- the upstream object, untransformed. This is why the node is safe mid-graph: it's a router, not a converter. Whatever you put in comes out, so you can chain Show Any → real consumer and lose nothing.
Both outputs can be lists, which matters if you're inspecting batched prompt lists from a text-concatenation chain.
The workflow-saving trick
The box's text is saved with the workflow. That sounds small and isn't: it means the node doubles as an annotation of what the graph was doing when it last ran, in the file itself, next to the node it describes. Open a workflow from six months ago and see the actual prompt that went in, rather than an empty text node you meant to fill in.
While any is connected the box tracks the upstream, and the frontend has a manual/auto mode in the node's properties so you can freeze the text and edit it (the STRING output follows your edit; a SYNC control pulls the latest upstream in). That gives you a scratchpad that can either mirror reality or hold your own note about it.
Cut / Copy / Paste buttons sit on the node, so moving a long generated prompt out to another app doesn't involve fighting a canvas text box. Paste appends on a new line rather than replacing, which is the right behaviour for building a prompt by hand.
Installing
Manager → search GeN13 → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/heigen13/ComfyUI-GeN13
pip install -r ComfyUI-GeN13/requirements.txt
The requirements file is one line, nvidia-ml-py, for the pack's monitor strip - nothing needed for this node. Pure Python plus frontend JavaScript, no models.
Where it's the tool you want
LLM pipelines. An LLM writes a scene description, and you want to see it before it goes into the encoder. Show Any inline between them. It's the difference between "the output is a bit off" and "the model hallucinated a second paragraph and the tokenizer truncated the important half".
Wildcard socket debugging. Any node with a * input is a node you can't inspect with normal previews. Feed it through Show Any first and you find out whether you're actually passing a dict or just a string that looks like one.
Numbers. Float precision in a sampler or a latent size, read at six decimals, is the fastest way to find out why two "identical" runs differ.
If you only want the compact version - one line, no annotation ambitions - Show Any Lite does the same inspection in a third of the canvas. And if you're worried about a node in the middle of your graph changing behaviour: it doesn't. It's a passthrough, and the cache treats it accordingly, so it's honest about what it costs.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| content | STRING | Content: used as the output when any is not connected; shows the upstream content when it is. | |
| anyopt | * | Input: any type. Text, numbers and JSON are shown as is; IMAGE and other tensors show a size summary. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | Text: as shown in the box; FLOAT up to 6 decimal places, lists and dicts as JSON. |
| any | * | Passthrough: the upstream object, unchanged. |