Prompt Assembler
Structure your prompt in three weighted blocks instead of one wall of text
- prompt
Prompts are easier to manage when they're built from parts, and that's the whole idea here. Prompt Assembler takes three ordered sections - pre, main, and post - each with its own strength, and joins them into one comma-separated prompt string. Set it up once and you get a prompt skeleton you can edit by block instead of by hunting through a wall of text.
The three-part structure maps to how people actually think about prompts. The pre block holds your style and atmosphere anchors, things you want the model to keep in mind from the start. main is the subject - the character, the scene, the actual content. post is your quality tail: masterpiece, detailed, sharp focus and the other boilerplate everyone appends. If you've ever copied the same quality tags onto every prompt, that's the block that saves you.
How it works
Each section is multiline text; the node splits it into lines and drops any blank ones. Every non-empty line becomes a token group in the output. The strength is where it gets interesting: if a section's strength is exactly 1.0, its lines are added bare. Anything else gets wrapped as (line:strength), ComfyUI's standard attention-weight syntax. So strength 0.7 quietly de-emphasizes a whole block - handy for a style anchor you want present but not dominant - and 1.3 leans on it harder. The three sections are emitted in order and joined with ", ".
That last detail matters: lines are joined with commas, not spaces, so each line stays its own token group and doesn't blur into the next one.
Inputs and outputs
pre_strength(FLOAT),pre_prompt(STRING) - style/anchor block.main_strength(FLOAT),main_prompt(STRING) - the subject.post_strength(FLOAT),post_prompt(STRING) - quality tail.prompt(STRING) - the assembled result.
Wire prompt into your model's text encoder - CLIPTextEncode, or the equivalent for SDXL/Flux/whatever you're running. The strengths default to 1.0, so the node does nothing fancy until you ask it to.
Installing it
This is a node in ComfyUI Fictiverse Nodes, a small single-author pack with no Python dependencies beyond ComfyUI itself and no models to download.
- ComfyUI Manager → search ComfyUI Fictiverse Nodes → Install, restart.
- Or:
cd ComfyUI/custom_nodes && git clone https://github.com/Fictiverse/ComfyUI_Fictiverse, restart.
Common issues
The main surprise is that strength is per-line within a section - every line in the post block gets the same weight. If you want one tag louder than its neighbors, put it in its own line or use inline syntax like (specific tag:1.2) inside the text itself. Also note this is a string builder, not a token counter: it won't tell you if you've blown past your model's comfortable prompt length, and long prompts on older architectures can still dilute. Nothing here replaces knowing your model's native resolution and prompt sweet spot - it just makes the prompt itself manageable.
Worth a heads-up for the pack generally: Fictiverse nodes travel inside shared workflows, and the most common failure is loading one without the pack installed - that throws ModuleNotFoundError: No module named 'custom_nodes.ComfyUI_Fictiverse'. Clone the pack, restart, reload.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| pre_strength | FLOAT | 1.00 | — |
| pre_prompt | STRING | — | |
| main_strength | FLOAT | 1.00 | — |
| main_prompt | STRING | — | |
| post_strength | FLOAT | 1.00 | — |
| post_prompt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |