ComfyUI Node

Grimoire Join

The unglamorous string-joiner you'll actually reach for

By omamesamba-del·Created 3 months ago·Updated 3 months ago· 1
Grimoire Join
    • text
    separator,
    text_1

    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.
    CategoryPromptBuilder

    Inputs (2)

    NameTypeDefaultDescription
    separatorSTRING,
    text_1optSTRING

    Outputs (1)

    NameTypeDescription
    textSTRING