Nodes/Prompt Concatenate Pro/Prompt Concatenate Pro
ComfyUI Node

Prompt Concatenate Pro

Stop editing one giant megaprompt — build your prompt in blocks instead

By StoneZol·Created 2 months ago·Updated 23 days ago· 2
Prompt Concatenate Pro
    • str_pos
    • str_neg

    You know the workflow. One CLIP Text Encode with three hundred words of comma soup, and every time you want to try a different lighting setup you hunt through the middle of the mess, delete three tags, and pray you didn't break the syntax somewhere invisible. Prompt Concatenate Pro is the answer to that specific kind of suffering: instead of one giant string, you get named blocks - skin, lighting, outfit, background, whatever you like - each with its own positive and negative text, toggleable and reorderable. It joins them all for you and hands back two clean strings.

    The reason this works better than it sounds isn't just comfort. Structured, block-ish prompting is one of the few habits that transferred to the new LLM-encoded model generation, where your prompt is an instruction rather than a token bag - and it's still exactly right for the SDXL lineage (Illustrious, Pony, and friends) that most tag-prompting still targets. This node is one clean way to keep that structure without a wall of widgets.

    How it works

    Under the hood it's almost embarrassingly simple, and that's a compliment. You add groups on the node - each has a title, a positive field, a negative field, and an enable toggle. When the graph runs, the node's Python side reads that list, keeps only the enabled groups, and runs every field through a normalizer: it trims whitespace, forces , separators, collapses doubled commas, and tidies runs of !!! or ??? down to one. Then it joins everything with , and skips empty fields.

    That normalizer is the quiet hero. Paste a block that ends with a stray comma and a trailing space, and the output still comes out clean - no ,, hiding in the middle of your prompt. The whole engine is stdlib Python plus SQLite, so there's no model to download and no new dependency tree to break.

    The outputs that matter

    There are no static inputs to configure - you build the content on the node itself. What you wire out are the two outputs:

    • str_pos - the joined positive prompt. Goes into your positive CLIP Text Encode.
    • str_neg - the joined negatives. Wire it to the negative encode if your model still wants one (on CFG-based SDXL checkpoints it does; on Flux or LLM-encoded models you can often leave it empty).

    Every group also exposes two hidden STRING widgets you can pin from the Inputs panel or Favorites, labeled Group | positive and Group | negative. Edits sync both ways with the group card - handy if you want a lighting block visible while you fiddle with something else.

    The real time-saver is the built-in SQLite library (db/presets.sqlite, auto-created on first run). Save preset snapshots your whole slot layout (names + order) so you can recall a full "portrait setup" or "product shot setup" in one click. Save pair on a group card stores that block's pos/neg under a collection, so your trusted skin prompt or negative boilerplate is one load away instead of a copy-paste archaeology dig.

    Install

    Via ComfyUI Manager, search Prompt Concatenate Pro and install. Or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/StoneZol/prompt-concatenate-pro.git
    

    Then restart ComfyUI (or refresh after a hot reload). That's it - Python 3.8+, no pip dependencies, no model files.

    Gotchas

    • Two installs = two nodes. ComfyUI loads every folder in custom_nodes, so a git clone and a Manager install means two nodes and two separate SQLite files. Keep a single copy.
    • Renames don't cascade. Renaming a group on the node is local - it won't rewrite the pinned sidebar labels or rename your saved library collections.
    • Vue Nodes 2.0 users: toggling Vue mode can leave a duplicate layout glitch on the canvas. A page refresh heals it; your saved data is untouched.

    One honest caveat: this pack is brand new - 1.2.0 shipped in August 2026 - so it's not battle-tested by thousands of users yet. It's simple enough that the risk is low, but if you're rebuilding a critical production workflow, keep an eye on the changelog.

    CategoryPrompt Concatenate Pro

    Inputs (0)

    No inputs

    Outputs (2)

    NameTypeDescription
    str_posSTRING—
    str_negSTRING—