π§ NumberedText (Dehypnotic)
Your prompt scratchpad, except it never throws a version away
- text
You know the drill: you're two hours into a ComfyUI session, the positive prompt in your CLIPTextEncode has been rewritten ten times, and the version that actually worked is long gone because you overwrote it. π§ NumberedText is the fix for exactly that. It turns a plain text field into a numbered list - one prompt variant per row, a checkbox on each row, and only the rows you check get sent to the output. Hit Enter for a new idea, hit Shift+Enter to add a line inside the current one, and never lose a draft again.
It's a tiny node, and I mean that as a compliment. The pack is one of the rare ones with no dependencies, no model files, and no runtime cost - it doesn't generate anything, it just manages text. The author's own pitch is that it's for prompts: keep a running list of frequently used prompt lines, check the ones you want, combine them, copy them out for later. It's the kind of quality-of-life node that quietly makes workflow tinkering feel less like archaeology.
How it works
Two halves, and the interesting one is the frontend. ComfyUI renders its canvas in your browser, and this node ships JavaScript that replaces the boring textarea with an actual editable list - rows with checkboxes, number labels, and a swap row at the bottom. Everything you type gets serialized back into the node's text widget in a checkbox format ([x] row lines). On execution, the Python side parses that format, keeps only the checked rows, strips whitespace and empty rows, and joins what's left with the separator.
There's a compatibility shim worth knowing about: if you paste the older 1. prompt style numbering instead of checkbox markup, it auto-upgrades those lines to checked rows. That's why old saved workflows with plain numbered text keep working after this pack updates.
The inputs that matter
Only two, and you'll mostly interact with one of them through the list UI:
- text - the whole buffer, multiline. You normally edit it via the list, but this is where workflow state lives and what the JS writes back to.
- separator - joins the checked rows on output. Default is
,. Type\nif you want a real newline between rows - the node unescapes it, so\n\ngives you paragraph breaks, which matters for LLM-encoded prompts that read as sentences rather than tag soup.
The output
One text (STRING) output: your checked rows, joined by the separator. Wire it straight into the text input of a CLIPTextEncode, a prompt scheduler, or any node that eats a string. Nothing clever, nothing to configure.
Installing it
Via ComfyUI Manager - that's the easy path:
- Open Manager β Custom Nodes
- Search for NumberedText
- Hit Install, then restart ComfyUI
Or the manual route:
cd ComfyUI/custom_nodes/
git clone https://github.com/dehypnotic/comfyui-numbered-text.git
Then restart ComfyUI - for a node with a JS frontend like this one, a browser refresh isn't quite enough; the extension only registers when the app boots. No model downloads, no requirements.txt, nothing else to chase. If you want a safe first custom node to check that your install path works, this is about as low-stakes as it gets.
Common issues
- The README is stale. It still describes the old five-input version (
selected_text,selected_texts,join_separator,max_numbered_texts). That node isn't registered anymore - the old Python file is still sitting in the repo, but the shipped node is the two-input checkbox editor you see on this page. Trust the node, not the README. - Checked rows that vanish. If your output is missing something, it's almost always a checkbox you forgot to tick. Empty rows are dropped by design.
- Separator surprises. The separator is literal text joined between rows, so
,yieldsa, band\nyields a line break. No magic, but people do type,expecting line breaks.
For one-off generations it's dead weight. For anyone who iterates on prompts all session, it's the node you didn't know you wanted - free, MIT, and a one-minute install. Worth a try.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | 1. | β |
| separator | STRING | , | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | β |