Prompt Palette
The prompt box that color-codes wildcards and encodes itself — Prompt Palette
- clip
- model
- Model (passthrough)
- CLIP (passthrough)
- Conditioning
- Negative conditioning
- Prompt
- Negative prompt
- Seed used
- Wildcards used (JSON)
- Raw text (unresolved)
- Wildcards used (count)
- Used enhancer override
- CLIP token count
- Prompt metadata (JSON)
The name undersells it. Prompt Palette is the everyday node of this three-node pack, and it quietly replaces two things you'd otherwise chain together: a wildcard node and a CLIP Text Encode. Type normally, let __wildcards__ resolve, and either grab the resolved text or let the node encode it to conditioning for you. Leave every optional socket disconnected and it behaves like a plain resolving prompt box - which is exactly how the author suggests you start.
The 30-second tour
Wildcard tokens are color-coded by folder, so a long prompt stops being a grey wall. Type __ and autocomplete kicks in; hover a token to preview its file, double-click to open it in the built-in editor, right-click to rewrite that one occurrence. Missing wildcard files get flagged and jumped to. It all scans ComfyUI/wildcards/ - nested .txt and .yaml files, referenced with slash paths like __characters/monsters__ (no extension). That's the old A1111 wildcard convention, and it's exactly what the Dynamic Prompts crowd has been asking ComfyUI for.
How it works
The text input resolves __wildcard__ syntax plus {a|b|c} inline choices and <lora:name:weight> tags. processing_mode decides whether the whole block resolves as one unit or each line independently. The seed makes resolution deterministic - same seed, same picks - and an optional external_seed input takes precedence over the node's own Seed control when you want seed control coming from elsewhere in the graph.
Connect clip and it encodes the resolved positive and negative prompts into Conditioning and Negative conditioning. Connect model too and any <lora:name:weight> tags in the prompt get applied - scanned after wildcard resolution, so a wildcard entry can itself contain a LoRA tag. Add prompt_prefix/prompt_suffix and the negative-side equivalents if you want reusable boilerplate around a changing core. The enhancer_override input is the sneaky good one: a non-empty value replaces the resolved positive prompt, which is how you wire an LLM enhancer node in front and let it rewrite on the fly.
It also hands you the resolved Prompt and Negative prompt strings, the Seed used, Wildcards used as JSON plus a count, the unresolved Raw text, and a Prompt metadata (JSON) blob. The CLIP token count output reports the real CLIP-L token count for the final prompt - meaningful on the SDXL lineage (Illustrious, Pony, SDXL), where the 77-token boundary is still a real wall and this node's bundled example workflows replace the stock text encoders.
Where it fits in 2026
One honest caveat, and it's not the node's fault: on the newer LLM-encoded models - Qwen, Z-Image, LTX, KREA 2 - (word:1.3) attention weights are silently discarded by the encoder, and the negative prompt does nothing at CFG 1 on guidance-distilled checkpoints. Prompt Palette doesn't change that; it's a wildcard and encoding node, not a weighting miracle. What it does do is keep your source clean and structured regardless of backend, which the KB's own guidance says matters more than ever on LLM encoders.
Install and troubleshooting
Whole pack, same story: ComfyUI Manager → search "Prompt Palette", or cd ComfyUI/custom_nodes && git clone https://github.com/z3rofeels/comfyui-promptpalette then restart. Dependencies are just PyYAML and typing-extensions - nothing heavy, no downloads. The classic gotcha: the custom UI loads but the fancy editor doesn't appear. Update ComfyUI and its frontend, restart completely, then hard-refresh the browser (Ctrl+Shift+R). The folder must be named comfyui-promptpalette and contain its web/ directory. If a wildcard stays unresolved, the file isn't where the node is looking - confirm it's under the active library path and refresh the wildcard browser after external edits.
This is the one you install the pack for. The other two nodes are specialized companions; this one earns its keep every single workflow.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Wildcard-aware source prompt edited in Prompt Palette. | |
| seed | INT | 00–18446744073709550000 | Seed used for deterministic wildcard resolution. |
| processing_mode | COMBO | entire text as one | Resolve the prompt as one block or resolve each line independently. |
| clipopt | CLIP | Optional CLIP input used to encode the resolved positive and negative prompts. | |
| modelopt | MODEL | Optional model input; connect with CLIP to apply LoRA tags found in the prompt. | |
| prompt_prefixopt | STRING | External wildcard-aware text prepended to the prompt. | |
| prompt_suffixopt | STRING | External wildcard-aware text appended to the prompt. | |
| enhancer_overrideopt | STRING | A non-empty value replaces the resolved positive prompt. | |
| external_seedopt | INT | Optional external seed that takes precedence over the node's Seed control. | |
| negative_textopt | STRING | Optional wildcard-aware negative prompt text. | |
| negative_prefixopt | STRING | External wildcard-aware text prepended to the negative prompt. | |
| negative_suffixopt | STRING | External wildcard-aware text appended to the negative prompt. |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| Model (passthrough) | MODEL | Connected model, patched with prompt LoRAs when CLIP is also connected. |
| CLIP (passthrough) | CLIP | Connected CLIP, patched alongside the model when prompt LoRAs are applied. |
| Conditioning | CONDITIONING | Resolved positive prompt encoded with the connected CLIP. |
| Negative conditioning | CONDITIONING | Resolved negative prompt encoded with the connected CLIP. |
| Prompt | STRING | Final resolved prompt text, or the enhancer override when used. |
| Negative prompt | STRING | Final resolved negative prompt text. |
| Seed used | INT | Seed actually used for this resolution. |
| Wildcards used (JSON) | STRING | JSON list of wildcard files used during this resolution. |
| Raw text (unresolved) | STRING | Source prompt before wildcard resolution. |
| Wildcards used (count) | INT | Number of distinct wildcard files used during this resolution. |
| Used enhancer override | BOOLEAN | True when the enhancer override replaced the resolved prompt. |
| CLIP token count | INT | CLIP-L token count for the final prompt, or -1 when unavailable. |
| Prompt metadata (JSON) | STRING | Final and source prompts plus seed, wildcard, LoRA, and execution metadata. |