Bubba Prompt Randomizer
Bubba Prompt Randomizer Builds the Booru Prompt for You
- pipe
- metadata
- clip
- pipe
- metadata
- positive
- negative
- positive_prompt
- negative_prompt
- chosen_values
Bubba Prompt Randomizer is a structured character-prompt generator hiding behind a node. Instead of one giant prompt field, you get a dropdown per category - hair color, hair style, outfit, pose, expression, setting, weather, body build, and a couple dozen more - and it assembles the final booru-tag prompt for you, pulling one value from each category you turn on. It's the machine behind "I want a random character, every run, that still fits my scene."
The whole thing is backed by JSON files shipped in the pack's data/prompt_randomizer folder, one file per category, each a list of tag choices (expression.json has everything from smile to seductive; there's a full 1.character_Presets set too). The node builds its dropdowns from those files at load time, which is why the category widgets in your UI have names like hair_color and setting - they're literally the JSON filenames. Want to add a category? Drop a new JSON file in that folder and restart.
How it works
Each category dropdown has three states: disabled (don't include it), random (pick one per run), or a specific tag you chose. A seed input drives all the picks, so the same seed reproduces the same character - the usual ComfyUI reproducibility contract. On top of the categories you get freeform fields: prefix_text (stuck at the front), extra_positive (appended), and negative_prompt (used as-is). cleanup and dedupe normalize and de-duplicate the assembled string, and remove_category_underscores strips the underscores from tags if you're targeting a model that prefers plain spaces. Wire in a pipe and a clip and you also get ready-to-sample conditioning.
The inputs and outputs that matter
For a beginner the three freeform text fields are where you'll spend your time; the two dozen category dropdowns are the fun part. Leave a category at disabled and it's ignored entirely - no need to hunt through them all.
Outputs to know:
positive_prompt/negative_prompt- the final assembled strings. This is what gets saved into metadata and shown in the PNG.chosen_values- a per-category report of what was actually picked this run (likeexpression: smile, hair_color: brown). Invaluable when you love an image and want to know which combination produced it.positive/negative- conditioning, only when a CLIP is connected.
How to install it
Same pack as everything else here: ComfyUI Manager → "Bubba Nodes" → install → restart, or
cd ComfyUI/custom_nodes
git clone https://github.com/bubbafett5611/bubba_nodes.git
restart ComfyUI, pip install -r requirements.txt if needed (aiohttp and pydantic, both light). No models to download - the categories ship in the package. Needs ComfyUI v0.27.0+.
Gotchas
The seed here is a plain widget, so remember the control_after_generate timing trap from the node-plumbing docs: the seed shown is the one that runs next unless you set "widget control mode" to Before. And keep the tag reality in mind - the KB's prompt-engineering essay makes the point that these categories are only as good as the model's tag vocabulary. On a Pony or Illustrious checkpoint, a fashion_style tag like gothic_lolita is gold; on a Flux-style LLM-encoded model, a pile of booru tags wants to be a sentence. The randomizer assumes the tag world. Also note the pack is new with essentially no community tutorial trail yet - the JSON files in the data folder are self-documenting, so open them if you want to know exactly what you're picking from.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–4294967295 | — |
| prefix_text | STRING | — | |
| extra_positive | STRING | — | |
| negative_prompt | STRING | — | |
| cleanup | BOOLEAN | true | — |
| dedupe | BOOLEAN | true | — |
| remove_category_underscores | BOOLEAN | false | — |
| 1_character_presets | COMBO | disabled | 4 options: disabled, random, dark_brown_hair, short_hair, wavy_hair, messy_hair, (slightly_chubby:0.5), round_face, broad_face, wide_jaw, strong_jawline, beard, mustache, thick_eyebrows, full_cheeks, brown_eyes, dark_brown_hair, short_hair, wavy_hair, messy_hair, (slightly_chubby:0.5), round_face, broad_face, wide_jaw, strong_jawline, thick_eyebrows, full_cheeks, brown_eyes |
| accessories_extra | COMBO | disabled | 7 options: disabled, random, glasses, sunglasses, horns, whiskers, +1 |
| beard | COMBO | disabled | 11 options: disabled, random, facial_hair, beard, mustache, goatee, +5 |
| body_build | COMBO | disabled | 7 options: disabled, random, slim, athletic, chubby, slightly_chubby, +1 |
| bottoms | COMBO | disabled | 17 options: disabled, random, skirt, miniskirt, long_skirt, pleated_skirt, +11 |
| breasts | COMBO | disabled | 8 options: disabled, random, flat_chest, small_breasts, medium_breasts, large_breasts, +2 |
| butt | COMBO | disabled | 8 options: disabled, random, flat_butt, small_butt, medium_butt, large_butt, +2 |
| expression | COMBO | disabled | 19 options: disabled, random, smile, grin, smirk, open_mouth, +13 |
| eye_color | COMBO | disabled | 18 options: disabled, random, blue_eyes, green_eyes, brown_eyes, purple_eyes, +12 |
| face_features | COMBO | disabled | 18 options: disabled, random, freckles, freckled_face, beauty_mark, mole, +12 |
| fashion_style | COMBO | disabled | 20 options: disabled, random, casual, formal, goth_fashion, punk, +14 |
| hair_accessories | COMBO | disabled | 16 options: disabled, random, hair_ornament, hair_bow, hair_ribbon, hairclip, +10 |
| hair_color | COMBO | disabled | 19 options: disabled, random, black_hair, brown_hair, blonde_hair, platinum_blonde_hair, +13 |
| hair_style | COMBO | disabled | 24 options: disabled, random, short_hair, medium_hair, long_hair, very_short_hair, +18 |
| outfit | COMBO | disabled | 25 options: disabled, random, dress, black_dress, long_dress, short_dress, +19 |
| pose | COMBO | disabled | 16 options: disabled, random, standing, sitting, lying, kneeling, +10 |
| setting | COMBO | disabled | 36 options: disabled, random, simple_background, white_background, transparent_background, gradient_background, +30 |
| shoes | COMBO | disabled | 16 options: disabled, random, shoes, boots, ankle_boots, knee_boots, +10 |
| skin_markings | COMBO | disabled | 14 options: disabled, random, tattoo, arm_tattoo, back_tattoo, chest_tattoo, +8 |
| tops | COMBO | disabled | 22 options: disabled, random, shirt, t-shirt, dress_shirt, blouse, +16 |
| weather | COMBO | disabled | 16 options: disabled, random, day, night, sunset, sunrise, +10 |
| pipeopt | BUBBA_PIPE | — | |
| metadataopt | BUBBA_METADATA | — | |
| clipopt | CLIP | — |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| pipe | BUBBA_PIPE | — |
| metadata | BUBBA_METADATA | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |
| chosen_values | STRING | — |