Anima Wildcard
One node to expand every __wildcard__ in your ANIMA prompt
- text
- seed
The one node that turns one prompt into a thousand
If you've ever written {a|b|c} into a prompt and watched A1111-style dynamic syntax do nothing because ComfyUI's CLIP encoder treats it as literal text, this is the node that fixes it. Anima Wildcard sits in the EasyUse Anima/Prompt category of the ComfyUI-EasyUseAnima pack - the workflow toolkit n0va39 built around Circlestone's ANIMA model - and it expands wildcard files and inline choices before your prompt ever reaches the text encoder. You get real prompt variety at batch time, seeded and reproducible, without a hundred hand-typed prompts.
It's the standalone version of the wildcard machinery buried inside Anima Prompt Studio, so if you're building a lean ANIMA workflow that doesn't want the whole studio, this is the one you reach for. Wildcards are old news in the A1111 world but most people who came to ComfyUI after 2024 never learned them; this node brings that syntax back and makes it deterministic.
How it works
Drop a __name__ token in your text and the node looks up a matching file in its wildcard folders, picks one line, and substitutes it. Inline {red|blue|green} groups get the same treatment with the choices right in the prompt. The node ships the A1111-style syntax most people know plus a few extras:
__hair_color__ → one line from hair_color.txt
3#__hair_color__ → pick 3 lines, join with ", "
{red|blue|green} → one inline choice
{2::red|5::blue|green} → weighted: red=2, blue=5, green=1
{1-3$$, $$red|blue|green} → pick 1-3, join with ", "
Wildcard names ignore case, * globs work (__*/hair_color__, __style/*__), and nesting is fine. Lines whose first non-space character is # are treated as comments and dropped - handy for annotating a wildcard file without polluting your prompts.
The clever part is the populated_text lifecycle, which it inherits from Impact Pack conventions. Each run's expanded result is written back into the workflow's saved state, so the exact prompt that made an image lives in the PNG's workflow metadata. Next week you can open the image, hit reproduce, and get the identical prompt back instead of a different random pick.
The inputs that matter
- text - the source prompt with wildcards and
{choices}. - mode - four options, and this is the whole personality of the node. 일반 (General) expands text with seed-based picks and caches the result. 고정 (Fixed) ignores text and re-expands whatever's in
populated_text. 순차 (Sequential) picks each option byseed % option_count, so it cycles through variants instead of randomizing. 재현 (Reproduce) processes the cached text once and flips back to General - the "reproduce this exact image" mode. - seed - deterministic: same text plus same seed gives the same picks.
- populated_text - the expanded-result cache. You rarely touch it directly; it's what Fixed and Reproduce consume.
Two outputs: text (the expanded prompt - wire it into a CLIP Text Encode) and seed (the seed used, so you can feed it into the sampler and keep the whole pass reproducible).
Installing it
The pack is one install covering all EasyUse Anima nodes, including this one. Easiest: ComfyUI Manager, search "ComfyUI EasyUse Anima", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/n0va39/ComfyUI-EasyUseAnima
pip install -r ComfyUI-EasyUseAnima/requirements.txt # requests, googletrans-py
Then restart ComfyUI. On first load the pack creates ComfyUI/user/__easyuse_anima/wildcards/ with a test file, so __easyuse_anima_test__ works out of the box. Your own wildcard folders get registered under Settings → EasyUse Anima → Wildcard, and they live in the user-data directory - not inside the install folder - so Manager updates won't wipe them.
Common gotchas
- Missing wildcard - a token that matches no file is reported back in the node's status (it tracks used and missing keys), so a typo'd
__name__is visible rather than silently wrong. If nothing expands, check the folder paths in Settings. - Weighted syntax -
{2::red|5::blue|green}reads as "2, 5, and 1"; unweighted items default to 1. Easy to misread if you're coming from other wildcard tools. - Seed precision - stick to the browser-safe range (below ~9 quadrillion) when you're hand-editing seeds; huge uint64 values work on the Python side but JS can lose integer precision.
For a pack aimed at ANIMA users this is arguably the most transferable node in it - the wildcard engine works with any model, not just Circlestone's.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Source prompt expanded by General and Sequential modes. Syntax: __name__; {a|b|c}; weighted N::item; {n$$...} or {min-max$$separator$$...}; N#__name__; and nested combinations. Wildcard names ignore case and support * glob collections. Only lines whose first non-space character is # are removed as comments. | |
| populated_text | STRING | Expanded-result cache used like Impact Pack's populated_text. General and Sequential replace it from text; Fixed and Reproduce ignore text and process this value with the same wildcard engine, including file wildcards. | |
| mode | COMBO | 일반 | General (일반): expand text with deterministic seed-based choices and cache the result in populated_text. Fixed (고정): ignore text and process populated_text with the same wildcard engine. Sequential (순차): expand text with seed modulo each option count. Reproduce (재현): process populated_text once, then return the live and saved mode to General like Impact Pack. |
| seed | INT | 00–18446744073709550000 | Seed for deterministic weighted random selection. The same text and seed produce the same result. Browser/public editing and next-seed range: 0..9007199254740991. The Python backend continues accepting uint64 values for legacy workflow validation, but values above the public maximum are best-effort in the browser because JavaScript may already have lost integer precision. ComfyUI's native seed control owns any post-queue randomize, increment, or decrement behavior. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | Expanded prompt text. |
| seed | INT | Seed used for this expansion. |