Nodes/Prompt Palette/Prompt Palette
ComfyUI Node

Prompt Palette

The prompt box that color-codes wildcards and encodes itself — Prompt Palette

By z3rofeels·Created 2 months ago·Updated 21 days ago· 14
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)
text
seed0
processing_modeentire text as one
prompt_prefix
prompt_suffix
enhancer_override
external_seed
negative_text
negative_prefix
negative_suffix

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.

CategoryPromptPalette

Inputs (12)

NameTypeDefaultDescription
textSTRINGWildcard-aware source prompt edited in Prompt Palette.
seedINT00–18446744073709550000Seed used for deterministic wildcard resolution.
processing_modeCOMBOentire text as oneResolve the prompt as one block or resolve each line independently.
clipoptCLIPOptional CLIP input used to encode the resolved positive and negative prompts.
modeloptMODELOptional model input; connect with CLIP to apply LoRA tags found in the prompt.
prompt_prefixoptSTRINGExternal wildcard-aware text prepended to the prompt.
prompt_suffixoptSTRINGExternal wildcard-aware text appended to the prompt.
enhancer_overrideoptSTRINGA non-empty value replaces the resolved positive prompt.
external_seedoptINTOptional external seed that takes precedence over the node's Seed control.
negative_textoptSTRINGOptional wildcard-aware negative prompt text.
negative_prefixoptSTRINGExternal wildcard-aware text prepended to the negative prompt.
negative_suffixoptSTRINGExternal wildcard-aware text appended to the negative prompt.

Outputs (13)

NameTypeDescription
Model (passthrough)MODELConnected model, patched with prompt LoRAs when CLIP is also connected.
CLIP (passthrough)CLIPConnected CLIP, patched alongside the model when prompt LoRAs are applied.
ConditioningCONDITIONINGResolved positive prompt encoded with the connected CLIP.
Negative conditioningCONDITIONINGResolved negative prompt encoded with the connected CLIP.
PromptSTRINGFinal resolved prompt text, or the enhancer override when used.
Negative promptSTRINGFinal resolved negative prompt text.
Seed usedINTSeed actually used for this resolution.
Wildcards used (JSON)STRINGJSON list of wildcard files used during this resolution.
Raw text (unresolved)STRINGSource prompt before wildcard resolution.
Wildcards used (count)INTNumber of distinct wildcard files used during this resolution.
Used enhancer overrideBOOLEANTrue when the enhancer override replaced the resolved prompt.
CLIP token countINTCLIP-L token count for the final prompt, or -1 when unavailable.
Prompt metadata (JSON)STRINGFinal and source prompts plus seed, wildcard, LoRA, and execution metadata.