Lumi Show Text
See what that text node actually output — a debug window that stays in the save
- text
Lumi Show Text is the pack's answer to "what did that node actually produce?" You hook any STRING output into it and it displays the value right on the node, which sounds trivial until you're debugging a wildcard chain that resolved to something you definitely did not write. Then it's the difference between fifteen seconds of confusion and fifteen minutes.
The trick that separates it from a plain display node: it writes the text back into the workflow. The displayed value gets pushed into its own displayed_text widget and patched into the saved workflow data, so when you save the graph and reopen it, the last-resolved text is still there on the node. That's a surprisingly big deal for reproduction - you can look at a shared workflow and see exactly what a wildcard picked, not just the wildcard syntax that produced it.
The inputs and output
- text - the
STRINGyou want to view. It's force-input, so this is a terminal node: connect the output of an LLM processor, a shuffle, or a wildcard here to inspect it. - displayed_text (optional) - the editable copy of the value that the node updates as it runs. This is the widget you see, and it's how the value survives the save.
- Output: text, the same string passed through as a list - handy if you want to keep the value flowing into something else while also viewing it.
It's an output node, so it's meant to sit at the end of a text branch and be the last thing in that chain.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/illuminatianon/comfyui-lumi-tools
cd comfyui-lumi-tools
uv sync
Restart ComfyUI, or search "Lumi Tools" in ComfyUI Manager. No extra dependencies.
Where it shines and where it doesn't
The shining case: debugging. If your wildcard processor is resolving to garbage, or your LLM rewrite came back with a formatting mess, park a Lumi Show Text on that output and you'll see exactly what went downstream. The "stays in the save" behavior is the reason to prefer it over core Show Text for anything you plan to share.
The caveat: it displays, it doesn't format. A huge multiline block from an LLM arrives as one big blob - there's no JSON pretty-printing or syntax highlighting. And since it's a terminal output node, don't expect it to be part of the compute path; if you're checking a value mid-pipeline, wire its pass-through output forward so the branch keeps living. One thing to expect: it pushes the value to the node through the pack's feedback channel (lumi-node-feedback), so the widget updates as part of execution - if the display looks stale, rerun the queue rather than staring at an old value.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| displayed_textopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |