Nodes/Frog Node Pack/🐸 Prompt Processor
ComfyUI Node

🐸 Prompt Processor

Merge, wildcard-resolve, sort and dedupe in a single step

By RabbitThatIsPinkΒ·Created 3 months agoΒ·Updated 24 days agoΒ· 1
🐸 Prompt Processor
  • toggle_pack
  • prompt
  • debug
β—„seed0β–Ί
β—„use_builtin_oppositestrueβ–Ί
β—„use_autodetected_pairstrueβ–Ί
β—„separator, β–Ί
β—„libraryβ€”β–Ί
β—„raffleβ€”β–Ί
β—„sceneβ€”β–Ί
β—„taggerβ€”β–Ί
β—„extra_1β€”β–Ί
β—„extra_2β€”β–Ί

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, general and 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_opposites and use_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.

Category🐸 Node Pack

Inputs (11)

NameTypeDefaultDescription
seedINT00–281474976710655Wildcard seed. 0 = random each run.
use_builtin_oppositesBOOLEANtrueAuto-swap left/right, top/bottom etc. from {left|right} wildcards.
use_autodetected_pairsBOOLEANtrueDetect and deconflict opposing wildcard choices automatically.
separatorSTRING, Separator used when joining inputs.
libraryoptSTRINGWire from the LAST library node in the chain β€” its positive output already contains all chained passthroughs (character + style merged). Always included.
raffleoptSTRINGRaffle node output. Gated by toggle_pack 'raffle'.
sceneoptSTRINGWire from the Scenes node output. Gated by toggle_pack 'scene'.
taggeroptSTRINGTagger or Florence2 output. Gated by toggle_pack 'tagger'.
extra_1optSTRINGAny additional tags. Always included.
extra_2optSTRINGAny additional tags. Always included.
toggle_packoptANIMA_TOGGLESWire from 🐸 Toggle Pack. Controls raffle, scene, and tagger inputs. If unwired, those three inputs are excluded.

Outputs (2)

NameTypeDescription
promptSTRINGProcessed prompt β€” merged, wildcards resolved, sorted, deduped.
debugSTRINGDebug log from wildcard resolution and tag sorting.