Wildcard Manager
The Santodan Wildcard Manager
- processed_text
- processed_string
- all_wildcards
Wildcards are old-school A1111 tech that most people who landed in ComfyUI after 2024 never learned - the {blue|red|green} and __person__ syntax that turns one prompt into a randomized pool. The catch in ComfyUI is that the canonical wildcard machinery lives inside the Impact Pack, which is a lot of nodes to install just for a text trick. The Santodan Wildcard Manager gives you the same syntax as a single, standalone node with file management built in.
The author explicitly built it to be drop-in compatible with the Impact Pack's wildcard processor, so existing wildcard files and {a|b|c} prompts carry over. It reads from your root ComfyUI/wildcards folder - both .txt (the default, extension optional in the tag) and YAML (.yaml/.yml, including nested keys like styles.yaml/lighting).
The syntax, in one sitting
{blue|red|green}- pick one at random.__person__- pull a random line fromperson.txtin your wildcards folder.{*red|blue}/__*person__- the*prefix means "always random, seed ignored."{+red|blue}/__+person__- the+prefix steps through options in order across queue runs, so each image in a batch gets a different item in sequence.{5::red|2::green|blue}- weighted: red is most likely, blue least.{1-2$$ and $$cat|dog|bird}- multi-select with a custom separator (here, "and").{2$$, $$3#__colors__}- a quantifier that repeats a wildcard so you can multi-pick from it.- Nesting works recursively, and lines starting with
#are comments in both the text field and your files.
What to actually set
Four inputs, and only two matter most of the time:
input_text- your template. Comes with a demo prompt to play with.seed- controls every pick except*-prefixed ones, which are deliberately unseeded.processing_mode-line by linetreats each non-comment line as a separate prompt (great for batch runs where you want N different prompts);entire text as onekeeps paragraphs intact.wildcards_list- a dropdown of your files. Selecting one inserts its tag into the text.
Three outputs: processed_text (a list - one string per line in line-by-line mode), processed_string (everything joined into a single string, for feeding a normal CLIP text encode), and all_wildcards (every available tag, for building pickers elsewhere).
The part that beats Impact for daily use
The node is an output node with built-in file management, and it rescans without a restart. The author tested this in public: create a file, and the dropdown sees it immediately; edit or delete it, same run cycle. There are buttons for insert, edit/create, and delete - to make a new file, select [Create New] in the dropdown, name it, and use the editor. That alone kills the "I added a wildcard and had to restart ComfyUI" loop that plagues manual approaches.
Gotchas
processed_textis a list, so if you're not doing batch work, wireprocessed_stringinto your encoder instead or you'll get a type mismatch.- Files live in
ComfyUI/wildcardsat the ComfyUI root - notcustom_nodes, notmodels. On first launch the pack creates the folder for you. - The
+sequential behavior is global across all WildcardManager instances in your workflow, not per node. Two managers in one graph share the step counter - which is either a feature or a footgun depending on your workflow.
Install
ComfyUI Manager (search "Santodan") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Santodan/santodan-custom-nodes-comfyui
Restart, done. No dependencies, no models to download - pure Python plus a little frontend. If you already run Impact Pack and only care about wildcards, you don't need this. If you want the syntax without hauling in FaceDetailer and friends, this is the lighter way in.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| wildcards_list | COMBO | 1 options: [Create New] | |
| input_text | STRING | A {*cute|big|small} {+cat|dog} is sitting on the __object__. | — |
| processing_mode | COMBO | 2 options: entire text as one, line by line | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| processed_text | STRING | — |
| processed_string | STRING | — |
| all_wildcards | STRING | — |