textconcatenate_v2
The concatenator that grows new inputs as you connect things to it
- text
textconcatenate_v2 is the answer to the one annoying thing about its sibling textconcatenate: the text_count dial. You set it to 5, then realize you need 6 inputs, then you need 4, and you're fiddling with a counter to match how many strings your workflow actually produces. The v2 node throws the counter away. It starts with a single text input, and every time you connect another string, it quietly grows a new input slot. Connect four, you get four. Connect twelve, you get twelve. No counting, no show/hide gymnastics.
If that sounds like a frontend trick, it is - and it's the one thing that makes this node different from its older sibling. The node's declared inputs in its schema are just the three controls (delimiter, clean_whitespace, replace_underscore); the text slots are created dynamically in the browser by the pack's JavaScript extension as you wire things in. That's why it's a v2 rather than a variant - the behavior is genuinely different, not just renamed.
How it works
On each run the node collects every connected text input, in connection order, drops the empties, strips whitespace and replaces underscores if those toggles are on, and joins the rest with the delimiter. The \n delimiter trick works here too, so newline-separated output is one field edit away.
The connection-order join is the practical benefit over the count-based version. With textconcatenate you have to know in advance which numbered slot sits where in the output. With v2, the order is just the order you connected them, and the inputs renumber themselves (text1, text2, …) to match. Rearranging the final output is a matter of rewiring, not renumbering.
It's the natural end of the chain in this pack: makiwildcards and makitextwildcards produce random fragments, v2 collects however many of them you actually hooked up - plus your fixed prompt text - and hands one string to a CLIP Text Encode.
Inputs and outputs
- delimiter - separator between texts, default
", ". - clean_whitespace - strip ends of each input (default on).
- replace_underscore -
_to space (default on). - text1, text2, … - dynamic inputs that appear as you connect strings; the schema doesn't list them because they're created in the browser.
Output is a single text string for your prompt encode.
Installation
It's in the ComfyUI-Prompt-Wildcards pack. ComfyUI Manager: search "ComfyUI-Prompt-Wildcards". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/MakkiShizu/ComfyUI-Prompt-Wildcards.git
Restart ComfyUI. No pip dependencies, no model downloads.
Common issues
- No text inputs appear at all. The dynamic slots come from the pack's JavaScript, so this is the one node in the pack where a stale browser matters. Fully reload the ComfyUI frontend after installing/updating - a hard refresh if it's being stubborn. If the node still only shows the three controls, the extension didn't load.
- Output order looks wrong. Order follows connection order, and renumbering happens as you wire. If you need a specific arrangement, reconnect in the order you want the text to appear.
- A slot you disconnected leaves an empty gap. Empty inputs are skipped, so you'll just get no text from that spot - but the input count may stay where it was until you disconnect the now-orphaned slot. Clean up the graph and it sorts itself.
The tradeoff is real: the count-based textconcatenate is more predictable, the v2 is more convenient. For chaining a bunch of wildcard and text nodes that change as you iterate, v2 is the one I'd actually leave in the workflow - it never asks you to count things.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| delimiter | STRING | , | — |
| clean_whitespace | BOOLEAN | true | — |
| replace_underscore | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |