Prompt Palette (Combinatorial)
Stop clicking Run a hundred times — generate every prompt combo at once
- clip
- model
- Model list
- CLIP list
- Conditioning list
- Prompt list
- Seed list
- Wildcards used
- Prompt metadata (JSON) list
If you migrated from A1111 or Forge, you know this exact pain: in those UIs, {a|b|c} in a prompt means all three images on one click. In stock ComfyUI it means clicking Run three times. Prompt Palette (Combinatorial) is the fix - you write one wildcard-aware template and it returns the whole batch in a single execution. It's from the same pack as the base Prompt Palette node, and it's the one you reach for when you want a deliberate sweep of variations rather than an afternoon of manual clicking.
How it works
Feed it a template with wildcards and choice groups - a __subject__ wearing __outfit__ in __location__ - and pick a mode:
- Random resolves the template
counttimes (default 10) with independently derived seeds. Sampling is with replacement, so repeats are possible. This is the quick "give me N variations" setting. - Combinatorial expands every unmarked wildcard and
{a|b|c}group into the full Cartesian product - 3 subjects × 4 outfits × 5 locations gives you 60 prompts - stopping at the max_prompts cap.
The clever bit: a group carrying an explicit sampler marker (+, -, *, ~, @, %) opts out of full expansion and makes one pick per generated prompt. So you can sweep subject exhaustively while keeping lighting random. That's the Dynamic Prompts convention this pack follows, and it's old A1111 syntax most people who arrived after 2024 never learned - worth knowing even if you only ever use the base node.
The inputs that matter
- mode - random vs. combinatorial. Everything else hangs off this.
- count - random mode only; how many prompts to roll.
- seed + seed_mode - sequential (seed, seed+1, seed+2…), fixed (same seed every prompt), or random (deterministic sequence derived from the base seed). Sequential is your friend for reproducible sweeps.
- max_prompts - combinatorial safety cap.
0uses the built-in 5,000 limit. The node shows an estimated output before you queue, and warns when expansion will hit the cap.
The fan-out trap
All seven outputs are lists: Prompt list, Seed list, Conditioning list, Model/CLIP lists, Wildcards used, and a Prompt metadata (JSON) list. In ComfyUI, a list output makes connected downstream nodes execute once per item - so an estimated output of 500 prompts genuinely means 500 sampler runs. That's the whole point, but it's also the number-one way people cook their own GPU and walk away confused. Check the estimate, mark groups that should only pick once, and set max_prompts deliberately. Connect model and clip and each generated prompt can also apply its own <lora:name:weight> tags before encoding - handy when different combinations select different LoRAs, though it makes each run slower.
Install and troubleshooting
Install is the same for the whole pack: ComfyUI Manager → search "Prompt Palette", or cd ComfyUI/custom_nodes && git clone https://github.com/z3rofeels/comfyui-promptpalette then restart. The only Python deps are PyYAML and typing-extensions - no model downloads, no torch shenanigans. Wildcards live in ComfyUI/wildcards/ (nested .txt/.yaml, referenced as __characters/monsters__). If the custom UI doesn't appear after updating, hard-refresh the browser (Ctrl+Shift+R) - and note the repository folder must stay named comfyui-promptpalette.
Honest take: this node is niche. The author says so himself - the base Prompt Palette is the everyday tool; Combinatorial is for test matrices and character-reference sweeps. But when you need one, "every subject × outfit × location" in a single run is exactly the thing A1111 users keep asking for in 2026 and rarely get in ComfyUI.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Wildcard-aware source prompt expanded by this batch node. | |
| mode | COMBO | random | Generate independent random prompts or expand every combination. |
| count | INT | 101–5000 | Random mode only; number of prompts to generate. |
| seed | INT | 00–18446744073709550000 | Base seed for deterministic wildcard resolution. |
| seed_mode | COMBO | sequential | Choose sequential, fixed, or deterministically randomized per-prompt seeds. |
| max_prompts | INT | 00–5000 | Combinatorial mode safety cap; 0 uses the resolver default (5000). |
| clipopt | CLIP | Optional CLIP input used to encode every generated prompt. | |
| modelopt | MODEL | Optional model input used when applying per-prompt LoRA tags. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| Model list | MODEL | One model per prompt, individually patched when LoRA tags are applied. |
| CLIP list | CLIP | One CLIP value per prompt, patched alongside the model when needed. |
| Conditioning list | CONDITIONING | One encoded conditioning value per prompt when CLIP is connected. |
| Prompt list | STRING | Resolved prompt texts, one per generated item. |
| Seed list | INT | Resolution seed used for each generated prompt. |
| Wildcards used | STRING | Wildcard files used during this batch, repeated for list-compatible fan-out. |
| Prompt metadata (JSON) list | STRING | One resolved/source metadata record per generated prompt. |