π§© Prompt Assembler (8 slots)
Stop hand-editing one giant prompt string β assemble it from toggleable parts
- assembled_prompt
- debug_info
If you've ever built a ComfyUI workflow where you're hand-editing one giant comma-separated string to swap a style or drop a subject, you know the pain. Prompt Assembler is the fix: it takes up to eight prompt fragments as separate string inputs and stitches them into one assembled_prompt, with an ON/OFF toggle per slot. Toggle slot 2 off and the fragment disappears from the output. That's the whole job - done with zero dependencies, no API, no models.
It's a small utility from jeremie louvaert, published under the "Akurate" label, and it's about as long-tail as a custom node gets: a small repo, no reddit chatter, nothing. Don't let that put you off. The entire pack is one pure-Python file with no imports beyond the standard library, which is exactly why it works. In a community that has watched custom nodes ship malware, "I can read the whole source in a minute" is a feature.
Why you'd actually reach for it
The natural home is prompt experimentation. Keep a base subject in slot 1, lighting in slot 2, style in slot 3, quality tags in slot 4, and A/B test three style fragments by toggling them between generations. You click a switch instead of editing a string. It also composes cleanly: any STRING output - text nodes, an LLM prompt-enhancer node, another assembler - wires straight into a slot, and unconnected slots are silently skipped.
This also makes the prompting advice that actually works executable. Earlier keywords get stronger attention, so keep the subject first in slot 1 and toggle the style and quality blocks after it. Instead of restructuring a blob of text, you just reorder or toggle fragments.
How it works
The mechanism is embarrassingly simple, and that's the point. Every run it walks slots 1β8, keeps any prompt that's both toggled ON and non-empty, strips whitespace, and joins the survivors with the separator you picked. No parsing, no conditioning math, no LLM call. The separator enum offers comma + space, newline, space, period + space, or custom - and picking custom reveals a custom_separator string field (default , ), so you can glue fragments with literally anything, including AND if you're on a CLIP-era model that speaks it.
The inputs that matter:
- prompt_1 β¦ prompt_8 - your fragments. Wire string outputs in; leave unused ones alone.
- enable_1 β¦ enable_8 - the toggles, ON by default.
- separator - how fragments get joined. The one beginners forget, after which the output reads as one run-on word blob.
Two outputs: assembled_prompt (feed it into CLIP Text Encode or wherever your positive prompt goes) and debug_info - a genuinely nice touch for a node this small. It's a text summary of each slot's ON/OFF state, whether it's connected, and a preview of the first 60 characters. Wire it into a text preview node and "why is my style missing" answers itself.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/comfyui-prompt-assembler.git
Then restart ComfyUI. Or search Prompt Assembler in ComfyUI Manager and let it handle the clone. There are no pip dependencies (the pack's pyproject.toml lists none), no model downloads, nothing to configure. Installing gets you all three nodes at once.
Gotchas
- All three nodes register under an "AKURATE" category in the node menu. Don't hunt under "utils" or "text" - it's not there.
- Toggle every slot off and
assembled_promptcomes back empty. Not a bug, but thedebug_inforeadout showingActive slots: 0 / 8is your tell. - The
newlineseparator joins with a double newline. That's actually the right call for LLM-encoded models that like block structure, but it surprises people expecting a single line break. - The pack's
__init__.pydeclares a frontend web directory that doesn't exist in the repo. Harmless - the nodes register fine from the Python file - but it's a reminder this is a one-man project, not a polished ecosystem.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | COMBO | comma + space | 5 options: comma + space, newline, space, period + space, custom |
| enable_1 | BOOLEAN | true | β |
| enable_2 | BOOLEAN | true | β |
| enable_3 | BOOLEAN | true | β |
| enable_4 | BOOLEAN | true | β |
| enable_5 | BOOLEAN | true | β |
| enable_6 | BOOLEAN | true | β |
| enable_7 | BOOLEAN | true | β |
| enable_8 | BOOLEAN | true | β |
| custom_separatoropt | STRING | , | β |
| prompt_1opt | STRING | β | |
| prompt_2opt | STRING | β | |
| prompt_3opt | STRING | β | |
| prompt_4opt | STRING | β | |
| prompt_5opt | STRING | β | |
| prompt_6opt | STRING | β | |
| prompt_7opt | STRING | β | |
| prompt_8opt | STRING | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| assembled_prompt | STRING | β |
| debug_info | STRING | β |