Concatenate JSON
Prompt libraries without the copy-paste
- jsons
- JSON
Concatenate JSON is the glue node for anyone who treats prompts as reusable assets. The Prompt Helpers pack runs on a JSON prompt format, and this node is how you build a prompt from smaller pieces instead of maintaining one giant blob.
The mechanics are boring in the best way: it takes up to 20 JSON prompt lists (an autogrow input - sockets appear as you plug things in) and concatenates them in order into a single EZ_JSON output. That output feeds straight into EZ Prompt, which is what actually turns a JSON prompt into conditioning. Nothing is parsed, validated, or clever here - it's list.extend with a schema, which is exactly what you want from a building block.
The workflow it unlocks
The classic setup is a prompt library. You keep a base "style" JSON (quality tags, artist, camera), a "character" JSON, and maybe a "scene" JSON - each in its own Parse Lines or Parse YAML node, or even a Prompt Toggle node - and Concatenate Json joins whichever subset you want for this render:
Parse Lines (style) ───┐
├─ Concatenate Json ──► EZ Prompt
Parse Lines (char) ────┘
Because concatenation is just ordering, you get compositional control: same character, different style, without duplicating tags.
Inputs and outputs
- jsons - autogrow input, 1–20
EZ_JSONvalues. Each must be an array; the node raises a clear error if you feed it something that isn't. - JSON (EZ_JSON) - the merged result, wired into EZ Prompt (or another Concatenate Json, if you want a bigger tree).
The one gotcha that bites
The pack's JSON format has named bundles (bundle: name), and bundle names must be unique across everything that ends up in one prompt. Concatenate two JSON files that both define a bundle called style and you'll get Duplicate bundle: style at processing time. This isn't a bug - it's the pack refusing to guess which one you meant.
The fix is namespacing: name your bundles with a prefix (char_style, scene_style) rather than bare words, so combining never collides. There's no equivalent collision problem for plain prompt chunks or LoRA entries, so this only bites once you lean on bundles - and if you're building a prompt library, you probably will.
Installing it
It ships with the Prompt Helpers pack. In ComfyUI Manager search "Prompt Helpers" (Pauan/comfyui-prompt-helpers), install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/Pauan/comfyui-prompt-helpers
Then restart ComfyUI. It needs no model downloads; the only dependencies are PyYAML and desktop-notifier (used by EZ Notify), and it requires ComfyUI 0.8.0+ because the pack is built on the Nodes 2.0 API.
If your combined prompt produces nothing, remember that Debug JSON is your friend here - wire the concatenated output through it to see the final structure before you blame the join.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| jsons | COMFY_AUTOGROW_V3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| JSON | EZ_JSON | — |