Text Concatenate (TJ)
The prompt-block glue for modular prompt architecture
- text
Build prompts from blocks instead of one giant text box
Text Concatenate (TJ) takes multiple text inputs and joins them with a delimiter into a single string - but the way it's packaged in this pack tells you the real point: this is the "prompt block" architecture node. Instead of maintaining one enormous, unreadable prompt, you keep reusable blocks (character, style, camera, lighting) in separate nodes or wireless providers, then combine them here into the final prompt.
It's the ComfyUI-native version of what prompt-engineering guides have always told you: modular prompts are easier to maintain, easier to A/B, easier to reuse across workflows. If you've got a character description you use in five different workflows, you want it as a block that gets combined here, not copy-pasted into five text boxes.
How it works
The node collects every input_N value that's actually connected (and non-empty), sorts them by number, and joins them with the delimiter. Notably, the backend code explicitly skips empty/None inputs - so a block you leave unwired just disappears from the output rather than leaving a dangling ", , " gap. That's a genuinely thoughtful touch for modular use: your camera block can be absent without breaking the combined prompt.
Two mode options:
- Dynamic (Auto) - inputs appear automatically based on how many you wire up. This is the intended daily-driver mode.
- Manual - you control the port count explicitly with
num_ports(1–64), useful when you want fixed slots visible for clarity.
The delimiter defaults to ", " - the standard CLIP tag joiner - and supports \n for newline-separated blocks. There's a setnode_name for the pack's wireless re-publish, so the combined prompt can be broadcast to any Get.
The inputs that matter
mode- Dynamic (Auto) vs Manual.delimiter- what goes between blocks.,for tag-style prompts,\nif your CLIP wants sentence-style.num_ports- only meaningful in Manual mode.
Output: text (STRING) - wire it into your CLIP Text Encode (or into a wireless Get on the other side of the canvas).
Install it
No extra dependencies, standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE.git
Or ComfyUI Manager → search TJ_NODE, restart. Category: ✨ TJ_Node/Utility.
Where people get burned
The usual surprise is ordering: inputs are joined in numeric order (input_1, input_2, ...), so if your blocks are order-sensitive (a strong style tag that should come first), keep the numbers intentional - the sorted order is deterministic, but you have to arrange it. Second, don't expect any smart formatting: empty inputs are skipped, but the delimiter still joins everything else exactly as-is, so watch trailing whitespace in blocks. And it's worth pairing this with the pack's Prompt Text (TJ) nodes - blocks defined once, combined here, and the result published wirelessly - that's the whole modular architecture this pack is pushing. For simple "join two strings" jobs any concat node works; this one earns its keep the moment your prompt is a system of blocks.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| mode | COMBO | Dynamic (Auto) | 2 options: Dynamic (Auto), Manual |
| num_ports | INT | 21–64 | — |
| delimiter | STRING | , | — |
| setnode_name | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |