Nodes/comfyui-prompt-assembler/🧩 Prompt Assembler Weighted (6 slots)
ComfyUI Node

🧩 Prompt Assembler Weighted (6 slots)

1.3) for you β€” on CLIP models. Elsewhere, careful.

By jeremieLouvaertΒ·Created 6 months agoΒ·Updated 16 days agoΒ· 3
🧩 Prompt Assembler Weighted (6 slots)
    • assembled_prompt
    • raw_prompt
    β—„separatorcomma + spaceβ–Ί
    β—„enable_1trueβ–Ί
    β—„weight_11.00β–Ί
    β—„enable_2trueβ–Ί
    β—„weight_21.00β–Ί
    β—„enable_3trueβ–Ί
    β—„weight_31.00β–Ί
    β—„enable_4trueβ–Ί
    β—„weight_41.00β–Ί
    β—„enable_5trueβ–Ί
    β—„weight_51.00β–Ί
    β—„enable_6trueβ–Ί
    β—„weight_61.00β–Ί
    β—„prompt_1β–Ί
    β—„prompt_2β–Ί
    β—„prompt_3β–Ί
    β—„prompt_4β–Ί
    β—„prompt_5β–Ί
    β—„prompt_6β–Ί

    The weighted member of the prompt-assembler trio does what the others do - combine fragments, toggle them on and off - then adds a per-slot attention weight slider. Set slot 3 to 1.3 and the node wraps that fragment in (text:1.30) syntax automatically, so you never hand-edit parentheses again. If you're on a CLIP-based model, this is the version you want for emphasis work.

    What it is

    Six slots, each with a string input (prompt_1 … prompt_6), an ON/OFF toggle (enable_1 … enable_6), and a weight slider (weight_1 … weight_6, 0.0–2.0, default 1.0, stepping 0.05). Every run it joins the enabled fragments with your separator and hands you two outputs: assembled_prompt with (fragment:weight) wrappers applied, and raw_prompt - the same assembly with no wrappers. That second output is handy when you want to A/B a weighted prompt against the plain version, or feed the clean string to something that doesn't understand attention syntax.

    How the weighting works - and where it doesn't

    A weight of exactly 1.0 gets no wrapper. Anything more than a hair off 1.0 becomes (fragment:1.30)-style syntax, formatted to two decimals. That's standard ComfyUI attention syntax, and it's real: it genuinely strengthens or weakens a fragment's influence on CLIP-encoded models - SD 1.5, SDXL, Illustrious, NoobAI, Pony, the whole booru-tag lineage. The practical range is roughly 0.5–1.5. Push past 1.5 and you get oversaturation and distortion; below about 0.5 the concept barely registers.

    Here's the catch that'll save you an afternoon: the wrappers do nothing on LLM-encoded models. Flux, Anima, Z-Image, Klein - anything whose text encoder is a general-purpose LLM rather than CLIP - discards attention weights. Worse than doing nothing, actually: your (text:1.30) gets fed to the encoder as literal punctuation inside an instruction. If your checkpoint is one of those, skip this node and say what you want in words. Grab the compact or 8-slot version instead - plain assembly is what you actually need there.

    How it differs from the other two

    Two real differences, both visible in the inputs. First, the separator list is shorter: only comma + space, newline, and space - no period + space and, notably, no custom separator. Need a custom glue string? Wrong node. Second, there's no debug output here; raw_prompt is your sanity check instead. Also worth noting the newline option joins with a double newline, which pairs well with the block-style prompting LLM-encoded models respond to - ironic, given the weighting caveat above.

    Install

    Same pack, same everything. Search Prompt Assembler in ComfyUI Manager, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jeremieLouvaert/comfyui-prompt-assembler.git
    

    Restart, done. No pip dependencies, no models to download - the pack's pyproject.toml lists zero dependencies and the whole thing is pure-Python string handling by a single author (jeremie louvaert, under the "Akurate" label, MIT). It's a small, skimmable codebase, which is nice in a space where custom-node supply chains have burned people.

    Gotchas

    • All three nodes sit under an "AKURATE" menu category. It's there, just not where you'd guess.
    • Disabling every slot yields an empty string. Expected behavior, not a crash.
    • The slider tops out at 2.0. If you're coming from a workflow that stacks ((((fragment))))-style emphasis, this node can't express that - you're capped at one wrappered weight per slot.
    CategoryAKURATE

    Inputs (19)

    NameTypeDefaultDescription
    separatorCOMBOcomma + space3 options: comma + space, newline, space
    enable_1BOOLEANtrueβ€”
    weight_1FLOAT1.000–2β€”
    enable_2BOOLEANtrueβ€”
    weight_2FLOAT1.000–2β€”
    enable_3BOOLEANtrueβ€”
    weight_3FLOAT1.000–2β€”
    enable_4BOOLEANtrueβ€”
    weight_4FLOAT1.000–2β€”
    enable_5BOOLEANtrueβ€”
    weight_5FLOAT1.000–2β€”
    enable_6BOOLEANtrueβ€”
    weight_6FLOAT1.000–2β€”
    prompt_1optSTRINGβ€”
    prompt_2optSTRINGβ€”
    prompt_3optSTRINGβ€”
    prompt_4optSTRINGβ€”
    prompt_5optSTRINGβ€”
    prompt_6optSTRINGβ€”

    Outputs (2)

    NameTypeDescription
    assembled_promptSTRINGβ€”
    raw_promptSTRINGβ€”