Power Text Concat
The glue node that chains 50 prompts and skips the empties
- text
Power Text Concat is the boring, indispensable node: it joins several text inputs into one string with a separator, and it refuses to let an empty or disabled input mess up your prompt. You've probably built this with a text-concatenation node before - the difference is how it's built for the job. The inputs grow automatically as you connect wires (up to 50), empty parts get skipped, and it has a dedicated trigger input that's clearly designed to sit downstream of the pack's LoRA machinery.
In a typical CornmeisterNL workflow it plays a quiet but central role: it's where all the pieces of your prompt finally come together. Your base prompt text, your subject words, your style tokens - each arrives on its own wire, and this node stitches them into the single string your CLIP Text Encode wants. It's the assembly line, not the factory.
How it works
It collects every present, non-empty input - the trigger first, then text_1 through text_50 - optionally strips whitespace from each (strip_parts, on by default), and joins them with your separator. The default separator is ", ", which is the right call if you're building SDXL-lineage tag-style prompts. On the LLM-encoded models where prose beats comma soup, you'd switch the separator to a space or newline - which is exactly why it's a field instead of hardcoded.
The frontend does the nice work: connect something to the last input and a new empty one appears automatically. No counting sockets, no hunting for a "+" button. It also labels the trigger input with the connected source's trigger word, so when the wire comes from a Power LoRA Configurator you can see which trigger you're injecting.
Inputs that matter
- separator - what goes between parts. Default
", ". - strip_parts - trim whitespace from each part before joining. Keep it on.
- trigger (optional) - prepended first, before all other text. This is the slot the Power LoRA Selector's
triggeroutput feeds into, so the active LoRA's trigger word lands at the front of your prompt automatically. - text_1 (and friends) - your actual prompt parts, added as you connect.
Output: text (STRING) - one joined string, into CLIP Text Encode or wherever text is consumed.
Install
It's part of the CornmeisterNL PowerPack - one install gets you all seven nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/Cornmeister/ComfyUI-CornmeisterNL-PowerPack.git
Restart ComfyUI (look for ⚡ [CornmeisterNL Powerpack] Backend loaded), or ComfyUI Manager → search "CornmeisterNL PowerPack". Only requests and Pillow; nothing heavy.
Where people get burned
- Expecting a manual "add input" button. There isn't one - connect a wire to the last input and the node grows a new slot. If you're used to clicking, this takes a second to click in your head, but it's genuinely smoother once it does.
- Trigger appears at the front, always. It's prepended, not appended. If the active LoRA's trigger ends up in the wrong place in your prompt, that's this ordering doing its job.
- Empty parts are skipped silently. That's the feature - it means you can leave a branch disconnected and the prompt won't sprout a stray comma or double space.
- Separator choice matters. Leave
", "on an LLM-encoded model and you'll wonder why the prompt feels taggy. Switch it to match the architecture you're actually prompting.
It's not the node you post about. It's the node that makes the rest of your text assembly not break, and after a while you stop noticing it's there - which is the highest compliment a glue node can get.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | STRING | , | — |
| strip_parts | BOOLEAN | true | — |
| triggeropt | STRING | — | |
| text_1opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |