⬡ Polyhedron Show Text
Your LoRA report is just a string — here's how to actually read it
- text
Half the useful output in a modern ComfyUI graph isn't a picture. It's text: a merge analyzer's fidelity report, a token count against WAN's 512-token ceiling, the prompt that actually reached the encoder after some node swapped tags in, an info line telling you which reference slot landed where. All of that leaves a node as a STRING socket, and a socket with nothing plugged into it is invisible. You queue a run, the console scrolls past, and you're left guessing what the graph thought it was doing.
⬡ Polyhedron Show Text is the node you plug that socket into. It puts the text on the canvas, in the workflow, next to the thing that produced it - and hands the same text straight on down the chain.
What it actually does
One input, one output, both called text. The input is a socket (forceInput), so there's no widget to type into - that's deliberate. You wire something in, it shows up.
The output is the same string, unchanged, which is the part people underestimate. It's a pass-through, so you can park a Show Text in the middle of a chain instead of at the end of one: a Stack's trigger output goes in, the panel shows you what came out, and the same string keeps going into your CLIP Text Encode's pos_external. A debug node that breaks the wire is a debug node you delete again in five minutes.
Under the hood it's built the classic ComfyUI way for exactly this job:
- It's an output node, so it executes even when nothing is wired to its output. A display node that only runs when something downstream wants its value would show nothing, which is the opposite of the point.
- It's a list node on both sides (
INPUT_IS_LIST/OUTPUT_IS_LIST). If a batch of strings arrives, you get one field with a rule of dashes between the items, and the output stays a list, so anything expecting per-item strings downstream still works. That's how you get a per-frame report out of a batched run. - The field is read-only and monospace, and it wraps at the node's width. Resize the node narrower and it grows taller rather than hiding the text; past a cap it scrolls. Monospace matters more than it sounds: these reports are aligned tables, and a proportional font turns them into soup.
- The text you last saw is kept in the node's properties, so reopening the workflow still shows it. It's the last run's text, not a live value - a slight lie that beats an empty box.
The row at the bottom is the colour picker, and it's the same one the pack's Note node uses - the same ten choices as ComfyUI's own right-click › Colors menu. Colour it red and park it next to the sampler when something looks wrong.
Installing it
Show Text ships inside the Polyhedron Suite, so you install the pack once and get it (plus the Sigma and Cine nodes, the LoRA Stack, the media I/O nodes and the rest).
ComfyUI Manager is the easy path - search "Polyhedron Suite" and install. The package id stays polyhedron-lora-stack, so updates land in place. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/PolyhedronAI/ComfyUI-PolyhedronLoRAStack.git
# then restart ComfyUI
Dependencies: none. The pack's requirements.txt lists Pillow and requests, and both are only needed by an optional standalone CLI - the loaded nodes run without them. The source says why this node exists: the suite's reports used to have to be wired into a third-party Show Text node from another pack to be readable at all. Now they don't.
Where people get tripped up
You have to actually run the graph. A field reading "run the graph to show the text here" is the node working, not failing. Nothing is evaluated on the canvas until you queue.
Don't go looking for the text in the saved workflow's widget values. The display field is created by the frontend with serialize: false and the real text lives in the node's properties. That's a deliberate guard: ComfyUI restores widget values by index, and a field that grows and shrinks would eventually renumber something and shift a value in every workflow you've saved. The upside is that the text survives a reload while the node's slot layout stays stable.
If the text looks stale, that's the last run. Show Text shows what the graph gave it the last time it executed, which after an overnight pause is a value from hours ago. Press queue again if you're unsure; it costs nothing to add a second one next to a node whose output you don't trust yet.
One thing worth saying plainly: this is a small node. It calls no API, downloads no models, has no opinion about samplers, and will never be the reason a generation looks good. It's the node that tells you why a generation looked bad - which, once your graph grows past about twenty nodes, is the more valuable of the two.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Any text -- a report, a prompt, a caption. It is shown as it is and passed on unchanged. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | The text it received, unchanged. |