Prompt Combiner
Seven named prompt slots, joined into one string
- Combined Prompt
- Style
- Face
- Subject
- Clothing
- Action
- Environment
- Extra
Prompt Combiner is the pack's structured prompt assembler: seven named slots - Style, Face, Subject, Clothing, Action, Environment, Extra - that get joined into a single prompt string with commas. Think of it as a fill-in-the-blank template for prompt writing, where each slot is its own node.
Why you'd reach for it
Prompts are the part of ComfyUI most people edit the most, and a monolithic prompt widget punishes modularity: change one part and you're re-editing a wall of text. Prompt Combiner breaks it into semantic chunks. You keep your Subject in one Text Box, your Environment in another, and swap them independently. Because each slot is a real input socket, you can also wire dynamic text in - a wildcard, a String Switch output, a number converted to string - so the composition can change per run while the structure stays fixed.
It's also just nice for keeping your prompts organized. "Style: cinematic, Subject: a red fox, Action: leaping" reads better as separate fields than as one comma soup, especially when you revisit a workflow a month later.
How it works
The join is simple and deliberate: it skips empty slots and joins what remains with ", ":
parts = [p for p in [Style, Face, Subject, Clothing, Action, Environment, Extra] if p]
combined = ", ".join(parts)
Inputs (all optional, all multiline strings, all wireable or typeable):
- Style, Face, Subject, Clothing, Action, Environment, Extra - leave any empty and it's simply skipped, no dangling commas.
Outputs - this is the pleasant surprise:
- Combined Prompt - the joined result, ready for CLIPTextEncode.
- Style, Face, Subject, Clothing, Action, Environment, Extra - every individual slot is echoed out as its own output too.
So the node is simultaneously an assembler and a splitter: you can use the combined output, or grab individual pieces to feed elsewhere (a String Switch needs a source, for example).
Where people get burned
The comma-join is fixed - ", " with no option to change it. If you want a different separator you're looking at Combine String instead, which lets you set one. Also note the order is hard-coded: Style comes first, Extra last. You can't reorder without re-typing into different slots.
Worth remembering too that empty-slot skipping means the output can be an empty string if every slot is empty - which a CLIPTextEncode won't love. Keep at least one slot filled. And as with all string work in this pack: this node builds text, it doesn't encode it, so run the result through CLIPTextEncode before the sampler.
Installing it
ComfyUI Manager → search "HavocsCall" → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/HavocsCall/comfyui_HavocsCall_Custom_Nodes
Restart, under HavocsCall/Basic. No requirements.txt, no model downloads - instant.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| Styleopt | STRING | — | |
| Faceopt | STRING | — | |
| Subjectopt | STRING | — | |
| Clothingopt | STRING | — | |
| Actionopt | STRING | — | |
| Environmentopt | STRING | — | |
| Extraopt | STRING | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| Combined Prompt | STRING | — |
| Style | STRING | — |
| Face | STRING | — |
| Subject | STRING | — |
| Clothing | STRING | — |
| Action | STRING | — |
| Environment | STRING | — |
| Extra | STRING | — |