π€ CR Text Concatenate
Glue two strings together with a separator
- STRING
- show_help
Two pieces of text, one separator, one string out. CR Text Concatenate joins text1 and text2 with whatever you put in the separator field. If you've ever built a prompt out of reusable blocks - a subject over here, a style string over there - this is the little node that stitches them at runtime instead of forcing you to hand-merge them.
The reason you build prompts this way at all: once your subject, your style, and your quality tags live in separate nodes, you can swap any one of them without touching the others. Concatenate is what turns those separate boxes back into a single prompt string that CLIP can actually encode. Think of it as string addition with a configurable "+".
How it works
It takes the two inputs, drops the separator between them, and emits the result. Nothing fancy - but the separator is the part people fumble. Leave it empty and you get text1text2 mashed together with no space, which is a classic "why is my prompt broken" moment. For prompts you almost always want either a comma-space or a plain space in there. Set it once and forget it.
Because both text inputs are optional, you can leave one unconnected and the node just passes the other through - handy when you're wiring up a graph and one branch isn't filled in yet.
The inputs and outputs that matter
text1andtext2- the two strings to join. Both optional, both single-line by default. Wire them from CR Text nodes, CLIP-adjacent string sources, or type directly.separator- what goes between them. Default is empty (so, no gap). Set it to,for prompts. This is the knob that actually matters.
Outputs:
STRING- the joined result (wildcard type, so it plugs into anything expecting a string).show_help- a wiki link. Ignore it.
One honest note on scope: this node does two strings. If you're assembling a prompt from three or four reusable fragments, reach for CR Combine Prompt instead - same idea, more slots, and its separator defaults to a comma, which is what you want for prompts anyway. Concatenate is the two-input special case; don't fight it into doing four.
How to install it
Comfyroll Studio is a long-standing utility pack from Suzie1 and RockOfFire - no models, no heavy dependencies, just a big grab-bag of quality-of-life nodes.
- ComfyUI Manager - search Comfyroll Studio, install, restart.
- Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git, then restart.
Also available on CivitAI.
Common issues
The node logic here is trivial; the failure modes are pack-level. If Comfyroll won't load, your startup log will show Comfyroll Studio: Failed to load Graphics nodes / Failed to load Utility nodes followed by NameError: name 'CR_HalftoneGrid' is not defined. That NameError is a red herring - the real error is a failed import higher up the log, most often an incompatible Pillow version pulled in by some other custom node. Since Comfyroll registers its nodes as one block, that one bad import can knock out the whole pack, Concatenate included. Fix the Pillow version (pip install --upgrade --force-reinstall pillow into ComfyUI's environment) and restart. And if your concatenated prompt reads oddly, check the separator before you check anything else - an empty separator gluing two tags into one word is the single most common "bug" here, and it isn't a bug.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| text1opt | STRING | β | |
| text2opt | STRING | β | |
| separatoropt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | * | β |
| show_help | STRING | β |