πΈ Prompt Processor
Merge, wildcard-resolve, sort and dedupe in a single step
- toggle_pack
- prompt
- debug
This is the flagship node of Frog Node Pack, and the one that makes the pack's "fewer nodes, more done" pitch concrete. πΈ Prompt Processor replaces a four-node chain - πΈ Merge β πΈ Wildcard Resolver β πΈ Sorter β πΈ Dedupe - with one node. Feed it up to six string inputs, set a seed, and out comes a single prompt that's been merged, wildcard-expanded, sorted into category order, and deduplicated. The README is explicit that the old four nodes are deprecated in its favor.
Why does that pipeline exist at all? Because a good tag prompt isn't just a bag of words. The community's hard-won convention (see the KB's prompt-engineering doc) is that on the SDXL-anime lineage - Illustrious, NoobAI, Pony, and Anima, which this pack targets - tags matter more when they're ordered: quality tags first, then subject, character, series, artist, then general. And wildcards introduce duplicates and contradictions. So the processor runs the whole gauntlet for you:
- Merge - joins your inputs with the
separator(default", "), silently dropping empty ones. - Wildcard resolve - expands
__file__and{a|b}notation using the same engine as πΈ Wildcard Resolver, including opposite-pair deconfliction. - Sort - buckets tags into
quality,subject,character,series,artist,generaland re-emits them in that order. - Dedupe - collapses exact and near-duplicate tags, keeping first occurrence.
The inputs that matter, in practice:
library- wire from the last Library node in your chain; its positive output already contains all chained passthroughs. Always included.extra_1/extra_2- any additional tags, always included.raffle,scene,tagger- gated by the πΈ Toggle Pack. If no toggle pack is wired, these three are excluded automatically.seed- wildcard seed; 0 = random each run, any other value = reproducible picks.use_builtin_oppositesanduse_autodetected_pairs- the wildcard contradiction-fighting toggles, both on by default.
Outputs are prompt (the finished string, ready for CLIP Text Encode) and debug, which logs every wildcard resolution and every tag's category assignment. That debug output is where you go when the final prompt looks wrong - it tells you exactly what the sorter classified your tags as, and it's the fastest way to spot a tag that landed in the wrong bucket.
A word on the toggle gate, because it's the same trap as in πΈ Prompt Merge: with no πΈ Toggle Pack wired, raffle, scene, and tagger are all excluded no matter what you connect. Wire the Toggle Pack and flip the flags you want on.
Installing it
Part of Frog Node Pack:
- ComfyUI Manager: search Frog Node Pack, install, restart.
- Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/RabbitThatIsPink/FrogNodePack, restart, hard-refresh (Ctrl+Shift+R).
No extra pip dependencies - requirements.txt is empty; Pillow ships with ComfyUI. Find πΈ Prompt Processor under πΈ Node Pack.
Common issues
The usual suspects: (1) toggle gate - no Toggle Pack wired, or a flag off, and raffle/scene/tagger silently vanish; (2) __wildcards__ still in your output - either your .txt files aren't in ComfyUI/wildcards/ or the text came in after the resolve stage; (3) a tag sorted into the wrong bucket - read the debug log, because the category assignment is heuristics and sometimes "blue hair" gets classified as subject when you expected a general tag. If the sorter keeps misclassifying a word, the debug output will show you where it went, and the pack's tag-filter vocab tools (πΈ Vocab Extender) are the intended lever for adjusting what gets stripped or kept.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00β281474976710655 | Wildcard seed. 0 = random each run. |
| use_builtin_opposites | BOOLEAN | true | Auto-swap left/right, top/bottom etc. from {left|right} wildcards. |
| use_autodetected_pairs | BOOLEAN | true | Detect and deconflict opposing wildcard choices automatically. |
| separator | STRING | , | Separator used when joining inputs. |
| libraryopt | STRING | Wire from the LAST library node in the chain β its positive output already contains all chained passthroughs (character + style merged). Always included. | |
| raffleopt | STRING | Raffle node output. Gated by toggle_pack 'raffle'. | |
| sceneopt | STRING | Wire from the Scenes node output. Gated by toggle_pack 'scene'. | |
| taggeropt | STRING | Tagger or Florence2 output. Gated by toggle_pack 'tagger'. | |
| extra_1opt | STRING | Any additional tags. Always included. | |
| extra_2opt | STRING | Any additional tags. Always included. | |
| toggle_packopt | ANIMA_TOGGLES | Wire from πΈ Toggle Pack. Controls raffle, scene, and tagger inputs. If unwired, those three inputs are excluded. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | Processed prompt β merged, wildcards resolved, sorted, deduped. |
| debug | STRING | Debug log from wildcard resolution and tag sorting. |