makiwildcards
Random prompt lines from a file, on a seed — no __wildcard__ syntax needed
- text
- file contents
If you came from A1111, you already know wildcards: a placeholder in your prompt swaps in a random line from a text file on every run. ComfyUI never shipped that, so people keep rebuilding it. makiwildcards is the rebuild that skips the part people usually hate - the __name__ placeholder syntax buried inside a prompt string. There's no placeholder parsing at all. You pick the wildcard files from dropdowns, tell the node how many to use, and it hands you a finished string ready to wire into a CLIP Text Encode.
The thing that makes it worth reaching for is variety at batch scale. Set wildcards_count to 3, pick a hair file, a clothes file and a pose file, queue 32 images, and every one gets a different combination - same character, different look, zero prompt editing between runs. It's the same trick people use to build character reference libraries (the old A1111 wildcard syntax the KB's prompt-engineering notes most post-2024 arrivals never learned), just without the learning curve.
How it works
At startup the node scans two folders and turns every .txt, .yaml and .yml file into a dropdown entry: your own ComfyUI/wildcards folder (entries show as base_path | ...) and the plugin's own wildcards/ folder (custom_nodes | ...). YAML files get extra entries for each nested key, so you can navigate a structured file like a tree.
The seed logic is the part people actually care about. randoms = true (the default) picks a random line per file, seeded with seed + slot_index. Same seed, same picks - that's determinism you can build a batch around. Bump the seed and everything rerolls. randoms = false switches to pure row selection: line (seed - 1) % lines, so seed 1 is the first line. A March 2025 change made each slot use seed + index, so two slots pointing at the same file with one seed no longer collide - but it also means old workflows won't reproduce their old output after updating. Worth knowing before you blame the node.
A tip that saves people a lot of confusion: this seed is just an int input. It doesn't have to match your sampler's seed. Keep them separate and you can reroll the wildcard picks while keeping the same noise, which is how you'd iterate on a composition without changing the scene.
Inputs and outputs
The inputs that actually matter:
- wildcards_count - how many of the dropdown slots get used (1–50, default 3). The rest hide.
- wildcard_name_1…N - pick a wildcard file for each slot.
Noneskips the slot. - seed and randoms - the deterministic/random behavior above.
- delimiter - how the picked lines get joined (default
", ", and entering\ngives newline separation). - clean_whitespace and replace_underscore - strip stray spaces and turn
_into spaces, which matters for danbooru-style tag files. - text - optional text prepended before the wildcard picks.
Outputs are text (the joined result - this is what you wire into a positive or negative prompt encode) and file contents (a raw dump of the selected files, handy for debugging what you actually pulled).
Installation
ComfyUI Manager: search "ComfyUI-Prompt-Wildcards" and install. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/MakkiShizu/ComfyUI-Prompt-Wildcards.git
Restart ComfyUI. There are no Python dependencies to install and no model downloads - the pack rides on the yaml and folder_paths that ComfyUI already ships. It even comes with 570+ wildcard files (folders for NAIV3, SDXL, AnimagineXLV3, DanbooruTAG and more), so you can start generating variety before you've written a single file of your own.
Common issues
- New file doesn't show in the dropdown. The file list is built when the node loads. Restart ComfyUI after adding files - it won't pick them up live.
- My file isn't listed at all. It has to live in
ComfyUI/wildcards(shows asbase_path |) or the plugin'swildcards/folder (custom_nodes |). A file dumped in the ComfyUI root is invisible. - Deterministic mode picks the last line. With
randoms = falseand seed 0,(0 - 1) % lineswraps to the final row. Seed 1 is the first line; that off-by-one surprises everyone once. - Nothing changes between runs. Same seed = same picks by design. Change the seed (not the whole prompt) to reroll.
Inputs (56)
| Name | Type | Default | Description |
|---|---|---|---|
| wildcards_count | INT | 31–50 | — |
| delimiter | STRING | , | — |
| clean_whitespace | BOOLEAN | true | — |
| replace_underscore | BOOLEAN | true | — |
| randoms | BOOLEAN | true | — |
| seed | INT | 00–18446744073709550000 | — |
| wildcard_name_1 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_2 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_3 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_4 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_5 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_6 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_7 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_8 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_9 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_10 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_11 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_12 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_13 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_14 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_15 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_16 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_17 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_18 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_19 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_20 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_21 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_22 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_23 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_24 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_25 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_26 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_27 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_28 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_29 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_30 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_31 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_32 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_33 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_34 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_35 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_36 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_37 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_38 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_39 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_40 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_41 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_42 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_43 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_44 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_45 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_46 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_47 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_48 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| wildcard_name_49 | COMBO | None | 577 options: None, custom_nodes | 人物-装饰-下身, custom_nodes | 人物-类型, custom_nodes | 人物-鞋袜, custom_nodes | 人物-唇膏, custom_nodes | 自然景观-花卉, +571 |
| textopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| file contents | STRING | — |