Nodes/Bubba Nodes/Bubba Prompt Randomizer
ComfyUI Node

Bubba Prompt Randomizer

Bubba Prompt Randomizer Builds the Booru Prompt for You

By bubbafett5611·Created 5 months ago·Updated 2 months ago· 0
Bubba Prompt Randomizer
  • pipe
  • metadata
  • clip
  • pipe
  • metadata
  • positive
  • negative
  • positive_prompt
  • negative_prompt
  • chosen_values
seed0
prefix_text
extra_positive
negative_prompt
cleanuptrue
dedupetrue
remove_category_underscoresfalse
1_character_presetsdisabled
accessories_extradisabled
bearddisabled
body_builddisabled
bottomsdisabled
breastsdisabled
buttdisabled
expressiondisabled
eye_colordisabled
face_featuresdisabled
fashion_styledisabled
hair_accessoriesdisabled
hair_colordisabled
hair_styledisabled
outfitdisabled
posedisabled
settingdisabled
shoesdisabled
skin_markingsdisabled
topsdisabled
weatherdisabled

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 (like expression: 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.

CategoryBubba Nodes/Prompt

Inputs (31)

NameTypeDefaultDescription
seedINT00–4294967295
prefix_textSTRING
extra_positiveSTRING
negative_promptSTRING
cleanupBOOLEANtrue
dedupeBOOLEANtrue
remove_category_underscoresBOOLEANfalse
1_character_presetsCOMBOdisabled4 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_extraCOMBOdisabled7 options: disabled, random, glasses, sunglasses, horns, whiskers, +1
beardCOMBOdisabled11 options: disabled, random, facial_hair, beard, mustache, goatee, +5
body_buildCOMBOdisabled7 options: disabled, random, slim, athletic, chubby, slightly_chubby, +1
bottomsCOMBOdisabled17 options: disabled, random, skirt, miniskirt, long_skirt, pleated_skirt, +11
breastsCOMBOdisabled8 options: disabled, random, flat_chest, small_breasts, medium_breasts, large_breasts, +2
buttCOMBOdisabled8 options: disabled, random, flat_butt, small_butt, medium_butt, large_butt, +2
expressionCOMBOdisabled19 options: disabled, random, smile, grin, smirk, open_mouth, +13
eye_colorCOMBOdisabled18 options: disabled, random, blue_eyes, green_eyes, brown_eyes, purple_eyes, +12
face_featuresCOMBOdisabled18 options: disabled, random, freckles, freckled_face, beauty_mark, mole, +12
fashion_styleCOMBOdisabled20 options: disabled, random, casual, formal, goth_fashion, punk, +14
hair_accessoriesCOMBOdisabled16 options: disabled, random, hair_ornament, hair_bow, hair_ribbon, hairclip, +10
hair_colorCOMBOdisabled19 options: disabled, random, black_hair, brown_hair, blonde_hair, platinum_blonde_hair, +13
hair_styleCOMBOdisabled24 options: disabled, random, short_hair, medium_hair, long_hair, very_short_hair, +18
outfitCOMBOdisabled25 options: disabled, random, dress, black_dress, long_dress, short_dress, +19
poseCOMBOdisabled16 options: disabled, random, standing, sitting, lying, kneeling, +10
settingCOMBOdisabled36 options: disabled, random, simple_background, white_background, transparent_background, gradient_background, +30
shoesCOMBOdisabled16 options: disabled, random, shoes, boots, ankle_boots, knee_boots, +10
skin_markingsCOMBOdisabled14 options: disabled, random, tattoo, arm_tattoo, back_tattoo, chest_tattoo, +8
topsCOMBOdisabled22 options: disabled, random, shirt, t-shirt, dress_shirt, blouse, +16
weatherCOMBOdisabled16 options: disabled, random, day, night, sunset, sunrise, +10
pipeoptBUBBA_PIPE
metadataoptBUBBA_METADATA
clipoptCLIP

Outputs (7)

NameTypeDescription
pipeBUBBA_PIPE
metadataBUBBA_METADATA
positiveCONDITIONING
negativeCONDITIONING
positive_promptSTRING
negative_promptSTRING
chosen_valuesSTRING