Nodes/Frog Node Pack/🐸 Wildcard Box
ComfyUI Node

🐸 Wildcard Box

Wildcard text input with autocomplete β€” the friendly half of the wildcard system

By RabbitThatIsPinkΒ·Created 3 months agoΒ·Updated 24 days agoΒ· 1
🐸 Wildcard Box
    • output
    β—„textβ–Ί

    If you've ever used wildcards - __hair/color__ or {red|blue|green} hair - you know the pain of typing them blind, hoping the file name is exactly right. 🐸 Wildcard Box is the input half of Frog Node Pack's wildcard system: a multiline text box that understands wildcard notation and helps you write it. Type __ and a dropdown of matching wildcard file names from your wildcards folder appears. Pick one, and it drops in correctly spelled.

    That's the whole trick, and it's the part people underestimate. Wildcard systems live or die on remembering your file layout. With subdirectories like wildcards/hair/color.txt, wildcards/clothing.txt, and so on, the box's autocomplete turns a memory exercise into point-and-click.

    The mechanism, from the source: the node is a plain STRING input that outputs the text as-is - no expansion happens here. The box's companion JS registers an endpoint (/ribbity/wildcards/list) that lists every .txt file under your wildcards folder, and that list powers the dropdown. The node itself just hands the text through unchanged to its output socket. Expansion is a separate step: you pair it with 🐸 Wildcard Resolver (or the consolidated 🐸 Prompt Processor) to actually pick values at queue time.

    So the division of labor is: Wildcard Box writes, Wildcard Resolver reads. The box is where you compose, the resolver is where the magic happens. If you wire the box straight into a CLIP encoder without a resolver in between, you get literal __hair/color__ text in your prompt, not a random color. That's by design - the README says the text "passes through as-is."

    Where do your wildcard files live? The pack looks for a wildcards/ folder at the ComfyUI root first, then falls back to the pack's own folder. Plain .txt files, one possible value per line, blank lines and # comments ignored. Subdirectories become path segments in the wildcard name - wildcards/hair/color.txt is __hair/color__. You can also use inline {option_a|option_b} choices in the text itself; those need no files at all.

    One honest note on positioning: the wildcard engine in this pack originated in Junkie's Ribbity Node Suite, which the README credits explicitly, and the concept itself is old hat to anyone who's used Impact Pack's __wildcard__ syntax. The box's contribution is the autocomplete dropdown, which genuinely saves time once your library gets past a dozen files. If you only use a couple of wildcards, the box is a nice-to-have; if you're building a big prompt library, it's the difference between remembering and browsing.

    Installing it

    Part of Frog Node Pack - one install, all the nodes:

    • 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 - the pack's requirements.txt is empty and Pillow ships with ComfyUI. Find 🐸 Wildcard Box under the 🐸 Node Pack category.

    Common issues

    Two things bite beginners. First: forgetting the resolver. The box outputs raw text; if your prompt arrives at the sampler containing __something__, the resolver is missing from the chain. Second: the dropdown shows nothing, which almost always means your wildcard .txt files aren't in a folder the pack scans - put them in ComfyUI/wildcards/ (the root, next to main.py) and hard-refresh the browser so the endpoint re-lists. Also note the pack recently got the autocomplete-optimization patch for pythongosssss's Custom-Scripts (a separate optional step in the README) if your tag list is huge and the dropdown feels slow.

    Category🐸 Node Pack

    Inputs (1)

    NameTypeDefaultDescription
    textSTRINGType __ to use wildcards (e.g. __hair/color__). Outputs the text as-is.

    Outputs (1)

    NameTypeDescription
    outputSTRINGβ€”