Raffle
Raffle picks real Danbooru tag sets, not random tags
- Raffled output
- Unfiltered
- Debug info
You know the drill: you've got your character prompt nailed, and every render is the same girl in the same room doing the same thing. Raffle is the "shake the bag" node for that. It's a semi-random Danbooru tag generator that works alongside your character prompt - drop a scene from it next to your fixed subject, change the seed, and the scenario changes every time. The author's framing is exactly right: "put your waifu in many scenarios." It's made for the SDXL anime family - Illustrious, NoobAI, Pony - the checkpoints that actually speak Danbooru.
Here's the part that makes it better than a random-tag generator: it doesn't invent combinations. The pack ships 400,000 real taglists scraped from Danbooru, split into four files of ~100k each (and about 220MB of your disk), where every taglist is the full set of tags someone applied to one actual image. That's the whole trick. Random tags fight each other - 1girl, solo, 2girls, yuri averages to a mess. A real image's tag set is internally coherent by construction, so drawing one gives you a scene that actually holds together. The README says it plainly: "by using taglists we can be certain that the tags have good synergy with each other."
The selection is two-stage. First it builds a pool: the four content toggles, minus any taglist that contains a tag from exclude_taglists_containing, and only taglists holding all of taglists_must_include. Then your seed picks one taglist from that pool (same seed, same pick). Then it filters the chosen taglist - drops anything in negative_prompt or filter_out_tags, and only keeps tags that exist in the bundled categorized_tags.txt. The Raffled output goes into your positive prompt, typically merged with your character prompt via a text concat or string concat node.
The inputs you'll actually touch:
- The four toggles -
use_general,use_questionable,use_sensitive,use_explicit. Heads-up: sensitive and explicit are on by default. This is an adult-default pack; for SFW, enableuse_generaland switch the other three off. seed- the only input you'll fiddle with once it's set. Change it, roll a new taglist.taglists_must_include(default1girl) - every tag you add here carves a big chunk out of the pool. The tooltip's warning is not cosmetic; readDebug infoto see how many taglists you have left.negative_prompt- connect your existing negative here and its tags get stripped from the output. This is the safe one;exclude_taglists_containingremoves entire taglists and shrinks the pool.
The other two outputs earn their keep: Unfiltered is the raw taglist before filtering (see what you just lost), and Debug info reports the pool size after your filters.
Install is a Manager search or one command - the pack is in the Comfy Registry under "Raffle":
cd ComfyUI/custom_nodes
git clone https://github.com/rainlizard/ComfyUI-Raffle
No pip dependencies, no model downloads. The only bulk is the bundled taglist data, which is why the clone is chunky. Restart ComfyUI and search "Raffle" in the node menu.
Where people get burned:
- The update warning. A category overhaul broke older workflows: if
artist, character_name, copyright, metaaren't inexclude_tag_categories, the node hard-errors and tells you to add them. New defaults already include them - the trap is a saved workflow from before the update. - Pool exhaustion. Stack
taglists_must_include,exclude_taglists_containing, and restrictive toggles and you can end up with an empty pool, which surfaces as "no matching taglists found". The Debug info output exists to stop you doing this blind. - It's a booru-tags node. Feed its output to a prose model and you'll get a shrug. And if you run Anima, it doesn't appreciate underscores - the README notes you'll want a separate node to swap
_for spaces.
One more thing: it has real mileage beyond stills. The highest-scoring "dancing 1girls" post on r/StableDiffusion (flair "Workflow Included", +736) used Raffle to generate randomized character images feeding a Wan 2.2 image-to-video wildcard loop. Same character, new scenario every frame - which is exactly what this thing is built for.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | Seed value used to randomly select a taglist from the filtered pool of available taglists |
| use_general | BOOLEAN | false | Enable selection from general.txt which contains 100,000 SFW taglists |
| use_questionable | BOOLEAN | false | Enable selection from questionable.txt which contains 100,000 questionable taglists |
| use_sensitive | BOOLEAN | true | Enable selection from sensitive.txt which contains 100,000 sensitive taglists |
| use_explicit | BOOLEAN | true | Enable selection from explicit.txt which contains 100,000 explicit taglists |
| taglists_must_include | STRING | 1girl | <taglists_must_include> Only selects taglists that contain ALL of these tags. WARNING: Each tag added here severely reduces the available pool of taglists. Check the 'Debug info' output to see how many taglists remain available. |
| filter_out_tags | STRING | monochrome, greyscale, cross-section, cervix, cervical_penetration, uterus, x-ray, internal_cumshot, lactation, forced_lactation, male_lactation, projectile_lactation, lactation_through_clothes, breast_milk, male_focus, male_penetrated, interracial, dark-skinned_male, gaping, extreme_gaping, prolapse, anal_prolapse, fisting, anal_fisting, anal, anal_only, after_anal, anal_fluid, anal_object_insertion, butt_plug, jewel_butt_plug, anal_beads, vibrator_in_anus, anus, cum_in_ass, spread_anus, spread_ass, anus_peek, puckered_anus, dark_anus, presenting_anus, spreading_own_anus, anus_cutout, censored_anus, spread_anus_under_clothes, colored_anus, pubic_hair, female_pubic_hair, pubic_hair_peek, colored_pubic_hair, sparse_pubic_hair, mismatched_pubic_hair, excessive_pubic_hair, shaped_pubic_hair, condom, used_condom, condom_wrapper, condom_in_mouth, holding_condom, condom_on_penis, multiple_condoms, condom_packet_strip, pointless_condom, condom_belt, condom_box, used_condom_on_penis, condom_left_inside, colored_condom, okamoto_condoms, condom_wrapper_in_clothes, condom_thigh_strap, buying_condoms, broken_condom, used_condom_in_clothes, | <filter_out_tags> Additional tags to filter out from the final output. Use this to exclude more tags without needing to modify your main negative prompt. |
| exclude_taglists_containing | STRING | comic, 4koma, multiple_girls, multiple_boys, multiple_views, reference_sheet, 2girls, 3girls, 4girls, 5girls, 6+girls, 2boys, 3boys, 4boys, 5boys, 6+boys, gangbang, threesome, mmf_threesome, ffm_threesome, group_sex, cooperative_fellatio, cooperative_paizuri, double_handjob, surrounded_by_penises, furry, obese, yaoi, yuri, otoko_no_ko, strap-on, futa_with_female, futa_without_pussy, implied_futanari, futanari, diaper, fart, pee, peeing, pee_puddle, pee_stain, peeing_self, golden_shower, scat, guro, ero_guro, intestines, vore, horse_penis | <exclude_taglists_containing> If ANY of these tags appear in the taglist, the entire taglist is removed from the pool of available taglists. Use with caution as each tag listed here can significantly reduce options. For removing individual tags without reducing the pool, use 'filter_out_tags' instead. |
| exclude_tag_categories | STRING | artist, character_name, copyright, meta, clothes_and_accessories, female_physical_descriptors, named_garment_exposure, specific_garment_interactions, speech_and_text, standard_physical_descriptors, metadata_and_attribution, intentional_design_exposure, two_handed_character_items, holding_large_items, content_censorship_methods | <exclude_tag_categories> Exclude entire categories of tags from the final output. Each category contains related tags (e.g., 'poses' contains all pose-related tags). View the complete category list and their tags in the 'Debug info' output. Separate multiple categories with commas. |
| negative_promptopt | STRING | <negative_prompt> Removes specific tags from the final output without affecting taglist selection. Tags listed here will be filtered out after a taglist is chosen, making this safer to use than 'exclude_taglists_containing'. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| Raffled output | STRING | The final list of tags selected by the raffle and filtered according to your settings, ready for use |
| Unfiltered | STRING | The complete original taglist that was randomly selected before any filtering was applied |
| Debug info | STRING | Information about the selection process, including the size of the available pool of taglists after applying your filters |