Nodes/ComfyUI-GTE/Show Text · Lines (gte)
ComfyUI Node

Show Text · Lines (gte)

Six readouts stacked in one node, on purpose

By mgkgng·Created 2 days ago·Updated 2 days ago· 4
Show Text · Lines (gte)
    • text
    text_1
    text_2
    text_3
    text_4
    text_5
    text_6

    Most packs ship a "show text" node because they have to. This pack ships a specific one, with two behaviours that are not the same as core's Show Text, and both of them exist to make one particular job easy: putting the noise-remaining table on the canvas and leaving it there.

    The job: staged diffusion has six or seven numbers that matter at any moment - where the latent actually is, what sigma it's at, how much noise is left, which candidate you kept, which seed it is. Six separate preview nodes is a wall of boxes. One node with six inputs is a legend.

    The two behaviours that matter

    A LIST on an input becomes one line per element. The node sets INPUT_IS_LIST, so an upstream node that emits a list doesn't fire this six times producing six disconnected boxes - it prints every element as its own numbered line, in order. That's what makes it work with things like per-candidate seed lists.

    It re-displays every run, even when nothing changed. Its IS_CHANGED returns float("nan"), which is the standard trick for opting out of ComfyUI's cache - NaN != NaN, so the comparison always says "this changed". Without it, a readout node whose inputs happen to be identical to last run would simply not refresh, which is the kind of thing that makes you distrust the number. docs/knowledge/comfyui-node-plumbing.md covers the mechanic and its cost: an always-dirty node defeats the cache for everything behind it, which is fine for a display node and a genuine performance trap anywhere else.

    It numbers the lines, joins them with newlines, and prints the whole block to the console as well - so the log after a run carries the same readout you were looking at.

    Inputs and outputs

    Six optional inputs, text_1 through text_6, all STRING. Every one of them is wire-only (forceInput) - there's no widget to type into, because this node is for displaying values that come from somewhere else, not for holding text. Wire as many as you need; unwired ones are skipped. If nothing is wired at all it prints (nothing wired) and moves on.

    One output: text (STRING) - every line joined with newlines, so you can chain it into another string node, a filename, or a save-note. It's an output node, so it renders on every queue.

    The obvious use is Schedule Info's table output, which arrives as one multi-line string and displays as exactly that. Beyond that: a Seed Range Noise origin seed, a Resume Step start_step, a Stamp Step-fed sigma, a Candidate Select seed.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/mgkgng/ComfyUI-GTE
    

    Restart ComfyUI and look for [gte] loaded 8 node(s) in the console. Or use ComfyUI Manager, searching the pack title ComfyUI-GTE (display name "Generative Trajectory Explorer").

    No Python dependencies, and I mean that literally: the pack's requirements.txt is deliberately empty with a comment saying so, because every node here runs on the torch, numpy and Pillow that ComfyUI already ships. No model files, nothing to download. This node also needs nothing from the rest of the pack - it's the one you can pick up for an unrelated graph.

    Common issues

    The box is empty. Each input is wire-only, so there is no text field to fill in - if it's blank, text_1..6 are unwired, not misconfigured. The console will literally print (nothing wired).

    The panel widget doesn't draw. The pretty line display is a small frontend extension served from the pack's web/ directory; when the frontend can't render it, the console print and the STRING output both still carry the full text. Check the log before assuming the node did nothing - the pack's readouts are all mirrored to stdout for exactly this reason.

    Your graph got slower with no obvious cause. If you've chained this node into a long branch rather than off to the side, remember it's deliberately cache-defeating: everything downstream of it re-runs every queue. Keep readouts on their own little spur.

    Nothing displays after a re-queue with the same values. Shouldn't happen here - that's the case IS_CHANGED returning NaN handles - but if another pack's display node is in the same graph, it may be the one going stale. Compare against the console.

    Node IDs are GTE_-prefixed. If you have graphs saved against an earlier build of this pack, the nodes won't resolve; open them and re-add the affected ones.

    Categorygte/data

    Inputs (6)

    NameTypeDefaultDescription
    text_1optSTRINGLine 1. A LIST here becomes one line per element.
    text_2optSTRINGLine 2. A LIST here becomes one line per element.
    text_3optSTRINGLine 3. A LIST here becomes one line per element.
    text_4optSTRINGLine 4. A LIST here becomes one line per element.
    text_5optSTRINGLine 5. A LIST here becomes one line per element.
    text_6optSTRINGLine 6. A LIST here becomes one line per element.

    Outputs (1)

    NameTypeDescription
    textSTRINGEvery line joined with newlines, to chain onward.