Unlim Text Concat
Glue as many strings together as you like, no limits
- text
ComfyUI's core string-concat nodes come with a fixed number of inputs, and the moment you need a ninth string you're back to rewriting the graph. Unlim Text Concat is the version that never runs out: it starts with text_1 and text_2, and every time you connect the last slot a new empty one appears. If you've ever built a prompt from parts, joined captions into one block, or assembled a report line by line, this is the node you'll reach for instead of chaining six concat nodes in series.
How it works
The mechanism is boring in the best way. Every connected input is gathered in slot order and joined with separator between them - no magic, just "sep".join(parts). The "unlimited" part is a frontend trick: the node registers only text_1 and text_2, but any connected link arrives at the backend through **kwargs, so the growing slot list just keeps sending more values in. That's the same pattern the pack uses for its image batch/list nodes.
Inputs that matter
text_1/text_2/ … - the strings to join.text_1is required; the rest appear as you connect.separator- what goes between the parts. Multi-line allowed, and the default is a newline, which gives you one input per line - the natural shape for captions. Want comma-separated tags? Type,.skip_empty- on by default. It drops empty or unconnected inputs so they don't leave stray separators like a leading newline or a dangling comma. Leave it on unless you specifically want empty slots to count.
The single text output feeds anything that takes a string - a CLIP text encoder, a prompt node, a text preview, or a save node.
Install
Part of the Kinburg-Nodes pack: ComfyUI Manager (search "Kinburg-Nodes") or cd ComfyUI/custom_nodes && git clone https://github.com/Kinburg/Kinburg-Nodes, then restart. No extra dependencies - it's plain Python.
Where people get burned
The skip_empty default is the subtle one: if you turn it off, a bypassed branch leaves an empty line or separator in the middle of your output, and prompt nodes don't care but a ----delimited block parser might. If your output looks wrong with stray separators, check that skip_empty is on before you go debugging anything else. And if you're feeding the result into a prompt encoder, remember the newline default - a multi-line prompt is fine for CLIP but some downstream nodes expect single-line input.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text_1 | STRING | — | |
| separator | STRING | Inserted between the inputs. Multi-line is fine; the default is a newline (one input per line). | |
| skip_empty | BOOLEAN | true | Skip empty / unconnected inputs so they don't produce stray separators. |
| text_2opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |