ND Show Any As Text
Finally see what's actually on that wire
- value
Half of ComfyUI debugging is guessing what a wire is carrying. An IMAGE that came out the wrong size, a conditioning that turns out to be a list of two, a seed that you're sure you set. Print statements don't exist here, so you get a node that prints for you.
What it is
ND Show Any As Text takes anything and renders it as readable text in the node body. It's an output node - it always runs - with no outputs of its own, so it's a dead end you wire in on purpose and delete later.
How it presents each type is where the thought went:
- Strings come through as-is.
- Numbers and booleans as their value.
- Lists and dicts as formatted JSON, which is how you look inside a latent or a conditioning without writing a script.
- Tensors and arrays as shape, dtype, device, and min/max/mean. Values are only printed for very small tensors (16 elements or fewer) because dumping a 1024×1024×4 tensor into the browser is a fine way to freeze a tab.
That tensor line is the one you'll use most. Tensor(shape=[1, 1024, 1024, 3], dtype=float32, device=cuda:0, min=0, max=1, mean=0.43) tells you instantly whether your image is a batch of one or eight, whether it's already 0–1, and whether something upstream handed you a CPU tensor by accident. Ninety percent of "why does this look wrong" starts with those four facts.
Caps, all sensible: the text sent to the UI is capped at 100,000 characters, lists and dicts show 100 entries per level, nesting goes 6 deep. A giant bundle will be truncated rather than shipped whole.
Inputs, outputs, tabs
One input, value (*, optional, any type), and nothing out. That's the whole schema.
The interesting part is the notebook built around it. The first tab is Preview: read-only, lighter background, text selectable and copyable. Then + adds note tabs - Note 1, Note 2 - and double-clicking a tab title renames it. Notes are saved into the workflow and survive a reload, which makes this the note-taking node you don't have to think about: keep the prompt you finally got working in Note 2 next to the node that produces the values.
One quirk that looks like a bug and isn't: the preview only updates when new input data arrives. Change an unrelated widget upstream and the box still shows the last thing it saw, because that node was cached and never re-ran. That's ComfyUI's execution model doing its job.
Where it earns its place
Two jobs, really. The obvious one is debugging: shape checks before a VAE Decode, sanity checks on a prompt string after six concatenations, confirming that the seed you set is the seed that ran.
The less obvious one is auditing a bundle. If you're using ND Pack Parameters to carry a dozen values down one wire, this node is how you confirm what's actually in the bundle before you blame the sampler. The whole known weakness of bundle-style plumbing is that a wrong-connection and a right-connection-with-stale-content look identical; a text dump is the cheapest cure.
Install
Part of Neural Dreamer Nodes (v1.1.0, MIT). No Python dependencies, no models - the pyproject.toml dependency list is empty.
cd ComfyUI/custom_nodes
git clone https://github.com/neural-dreamer/ComfyUI-NeuralDreamer-Nodes.git
Restart and refresh the browser tab; the tab/notes UI is frontend code. ComfyUI Manager: search "Neural Dreamer Nodes".
Common issues
Text is stale. Nothing re-ran. Queue the workflow, or change something upstream that invalidates the cache - this is the one node where you want an invalidated cache.
Everything shows as None or an empty JSON blob. The wire is connected to something that produced nothing on this run - commonly a switch whose selected side is empty, or a gate that's off. Nothing wrong with the display node.
It won't connect to the thing I want to inspect. Any * input should accept anything; if a node's output refuses, that output is itself typed weirdly (some packs emit custom subclasses). Try connecting to a different point in the chain.
Mouse wheel zooms instead of scrolling. By design: the wheel scrolls the text area only when the text doesn't fit, otherwise it zooms the canvas. Ctrl always zooms. Shift+wheel is the reliable way to scroll a long dump.
I want to feed the value onward. You can't - there are no outputs. Put this on a branch, not inline. For passing values around use ND Pack Parameters / ND Unpack Parameters.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| valueopt | * | — |
Outputs (0)
No outputs