ComfyUI Node

Show Text

The node that shows you what your workflow is actually saying

By fairy-root·Created 2 years ago·Updated 6 months ago· 25
Show Text
    • STRING
    text

    Your prompt enhancer just rewrote the prompt. Your LLM node spat out three candidate ideas. The CLIP interrogator described your image. And somewhere between here and the KSampler, all of that text got consumed by a node you can't see inside. ComfyUI is genuinely great at hiding what's flowing between nodes - which is exactly why Show Text exists. It's the debug print statement of ComfyUI: wire any string into it, hit Run, and the text shows up right on the node in a clean, read-only, auto-resizing box.

    Fair warning before you start: "Show Text" is one of the most collision-prone node names in the ecosystem. The one in half the YouTube tutorials is pythongosssss's Show Text, part of the big Custom Scripts pack. This is the standalone, registry-published version from FairyRoot - the same dev behind the well-received comfyui-ollama-llms LLM nodes. Same idea, its own tiny pack, zero extra baggage. If a guide tells you to grab "Show Text" from Custom Scripts, that's a different node; both do the same job, so pick either.

    How it works

    The whole thing is about 40 lines of Python plus a small JS file. The node is registered as ShowText under the utils category, and it's OUTPUT_NODE = True, which means ComfyUI treats it as a terminal node and won't optimize it out of your graph. When it executes, the bundled frontend wipes whatever widgets it had, builds fresh read-only multiline text boxes, and resizes the node to fit the content. It also carries two hidden inputs - unique_id and extra_pnginfo - that write the text back into the workflow JSON when you save. That's the "keeps state in saved workflows" feature: reload the workflow later and the last text is still sitting there.

    The inputs and output that matter

    There's really one input worth knowing about:

    • text (STRING, required) - the only thing you set. Because it's declared with forceInput: True, you can't type into it; it has to be connected. Any STRING output works.
    • STRING output - this is the part people miss. The node passes the text through, so you can tap a signal for viewing without breaking the chain. Display it here, keep wiring the same value onward.

    One more nice detail: the node is list-aware (INPUT_IS_LIST), so feed it a batch of strings and it renders one box per item. Handy when an LLM node hands you several options at once.

    Why you'd actually reach for it

    • Checking what a prompt enhancer really generated. People do exactly this with LTX-Video's built-in Gemma enhancer - add Show Text to its output and suddenly you see how generic the "enhanced" prompt is. That's the entire debugging loop: stop trusting, start looking.
    • Any wildcard or prompt-builder chain where text gets transformed a few times before the sampler.
    • Interrogator output, LLM JSON you want to eyeball before it becomes a workflow.

    It's not exciting, and that's the point. It's the node you reach for constantly once you're building text-driven workflows, and reach for again when something silently breaks.

    Install

    Two ways, both trivial - there are no dependencies, no model files, nothing to download beyond the code:

    cd ComfyUI/custom_nodes
    git clone https://github.com/fairy-root/ComfyUI-Show-Text.git
    

    then restart ComfyUI. Or use ComfyUI Manager and search for ComfyUI-Show-Text (it's published on the Comfy Registry under publisher fairy-root). It'll show up in the node menu under utils → Show Text.

    Gotchas

    • You can't type in the box. forceInput means the field is a display for whatever's connected, not an editor. If you expected to write a prompt and see it, that's not this node's job - connect a string instead.
    • The wrong "Show Text". If you grabbed this one and a tutorial references Custom Scripts settings, you're on the wrong docs. The behavior is nearly identical, so it rarely matters.
    • Big batches, big node. Feed it a long list and it auto-resizes to fit - that's by design, not a bug.

    For a one-input utility, that's the whole story. Wire text in, run, read, keep going.

    Categoryutils

    Inputs (1)

    NameTypeDefaultDescription
    textSTRING

    Outputs (1)

    NameTypeDescription
    STRINGSTRING