Grimoire Join
The unglamorous string-joiner you'll actually reach for
- text
The name is a lie - and that's fine
Grimoire Join ships in the grimoire-bridge pack and the "Grimoire" name makes it sound like it only works with the companion app. It doesn't. There's nothing grimoire-specific about it at all. It's a dead-simple utility: take any number of text strings, glue them together with a separator you pick, and skip the ones that are empty. It's the boring plumbing layer of ComfyUI done right, and it's the node I'd grab when a prompt needs to be assembled from parts.
Where it earns its keep: you're using a Grimoire Slot for the positive prompt and you want to bolt on a fixed quality prefix or suffix without editing the external app. Or you keep a character list, a style block, and a quality tag block as separate nodes and want one combined prompt. Wire all of them into a Join, run the output into a CLIP Text Encode, and now you can toggle whole sections on and off by whether they're connected - the empty-input skip means a disconnected slot just quietly disappears from the string instead of leaving a stray , , in your prompt. That last bit is the whole reason this node beats doing it by hand.
How it works
Mechanically it's about as deep as a puddle: it walks every input named text_1, text_2, text_3… in order, strips whitespace, drops anything empty, and joins the survivors with your separator. If you leave the separator blank it falls back to , . Nothing caches, nothing reorders - input order is output order.
The "+" and "−" buttons on the node aren't in the base node definition; the pack's JavaScript extension adds them. Click + Add input to grow the node, - Remove input to shrink it. The inputs themselves are wire-only (forceInput), so you can't type text straight into a text_N socket - connect another node, or use a plain text primitive upstream if you need a constant.
The inputs and output
- separator - the glue, default
,. Comma-space works for tag-style prompts on SDXL-lineage models; a newline is handy if you want line breaks, and you can type anything literally. - text_1, text_2, … - the parts. Optional, so the node works with just one input connected.
Output is a single text (STRING), ready for a CLIP Text Encode or any other STRING socket.
Installing it
Same story as the rest of the pack - there are no extra dependencies, no model files, nothing to download beyond the repo itself:
cd ComfyUI/custom_nodes
git clone https://github.com/omamesamba-del/comfyui-grimoire-bridge.git
Restart ComfyUI; it shows up as Grimoire Join under the PromptBuilder category. ComfyUI Manager can install it too if you prefer, but the clone above is what the README documents.
Gotchas worth knowing
- Order matters and it's your job. Join doesn't sort or dedupe; the tag you connect first stays first, which matters because the start of a prompt gets the strongest attention.
- The buttons need the browser extension loaded. If you're looking at the node in a place that skips the pack's frontend JS, you'll only ever see
text_1. In the normal ComfyUI UI the buttons are there. - It doesn't validate anything. Join happily concatenates whatever strings it's given - a mismatched CLIP Text Encode input is still your problem, not its problem.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | STRING | , | — |
| text_1opt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |