Show Text (Markdown)
Prettier than the default, and it can save the file too
- value
- text
ComfyUI's stock text display is a raw textarea - fine for a prompt, miserable for the long, structured text this pack's nodes produce (style bibles, storyboard reports, ----separated prompt lists, Siren timelines). Show Text (Markdown) renders that as formatted markdown on the node, and quietly does two more things the core node can't: it can save the text to disk automatically, and it can override the input entirely so you can edit text and push it downstream without regenerating anything.
What it does
valuetakes anything - text, number, COMBO, a dict/list - and converts it to text for display. This input is lazy: with "use saved text" on, the input (and its upstream, e.g. an LLM) is not evaluated at all.markdowntoggles between rendered markdown (on) and an editable raw textarea (off). Toggling doesn't resize the node, which is a small mercy.save_path+autosave- give it a path and it writes the text to disk on every run. Relative paths go under ComfyUI's output folder, a.mdextension is added, and{date}/{time}/{datetime}expand to the current date/time. This is the poor man's "keep a log of what the storyboard wrote" - wire it to apromptsoutput and you have an audit file for free.use_saved_text- the sneaky-powerful one. Off (default): show whatever's connected and run its upstream. On: output the text saved/edited here and don't evaluate the input, so the upstream never runs - including with a random seed, and it holds after a restart. Edit the text and re-queue to push it downstream without regenerating.saved_textis the node's stored text, managed by the editor (hidden in the UI), and it carries into the saved workflow.
The output is a single text STRING, so it slots in anywhere a string is expected - into a prompt field, into prompt_overrides on Morpheus Storyboard (after you've hand-edited a ----separated list), into Save Song's lyrics socket.
When you'd actually use the override
The main workflow this enables: run once, read the output (formatted, so the structure is actually legible), edit the one bad block, toggle use_saved_text, and re-queue - downstream runs with your edit and nothing upstream regenerates. For the pack's cache-heavy samplers that's a real saving: editing a prompt override this way doesn't invalidate every cached shot the way re-running the writer would. The flip side is the usual lazy-node trap: flip it on by accident and the text on screen silently stops tracking its input. If a number you changed upstream "isn't updating," check this toggle first.
Installing it
It ships in Kinburg/Kinburg-Nodes - ComfyUI Manager search "Kinburg-Nodes", or cd ComfyUI/custom_nodes && git clone https://github.com/Kinburg/Kinburg-Nodes, restart. No dependencies. There's also a preview-as-text route for plain display, but for this pack's structured outputs the markdown render is the one you'll reach for.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| valueopt | * | Anything — text, number, COMBO, dict/list… converted to text for display. LAZY: with 'use saved text' ON, this input (and its upstream, e.g. an LLM) is NOT evaluated. | |
| markdownopt | BOOLEAN | true | On: render the text as formatted markdown. Off: show an editable raw textarea. Toggling doesn't resize the node. |
| save_pathopt | STRING | Path for 💾 Save / autosave. Relative paths go under ComfyUI's output folder; a .md extension is added. {date}/{time}/{datetime} expand to the current date/time. | |
| autosaveopt | BOOLEAN | false | Write the text to save_path automatically on every run (needs a non-empty path). |
| use_saved_textopt | BOOLEAN | false | Off (default): take the connected input and run its upstream (e.g. the LLM); the shown text tracks the input. On: output the text saved/edited here and DON'T evaluate the input, so the upstream never runs (holds after a restart / with a random seed). Edit the text and re-queue to push it downstream without regenerating. |
| saved_textopt | STRING | The node's stored text. Managed by the editor and hidden in the UI; it carries the edited text to run() and into the saved workflow. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |