NSFW Prompt
NSFW Prompt, explained
- prompt
- seed
Here's the thing that sells this node in one sentence: it generates a complete, coherent NSFW prompt on every run with zero LLM, zero API key, and zero model downloads. It's the flagship node of the theSharque/ComfyUI-NSFW-Prompt pack, and it sits in the prompt category next to three companion nodes. If you've ever spent an evening tweaking prompts by hand for a batch of images, this is the "make it someone else's problem" button.
The output is deliberately not comma-tag soup. The pack's whole design bet is that an NSFW prompt should read like a caption - a few sentences describing who, what they're wearing, what they're doing, where, and how it's lit. That bet pays off on modern LLM-encoded checkpoints (Z-Image, Krea 2, Flux 2 Klein), where natural-language instructions are exactly what the text encoder wants, as the prompt-engineering guide in the modidex KB hammers home. It also works fine on Pony and other SDXL-lineage models - the README ships example workflows for Z-Image Turbo, Krea2 Turbo, and Pony.
How it works
Twenty-one slots get rolled, then assembled into sentences. Each slot widget on the node is one of:
disabled- the slot is skipped entirely,- a fixed dictionary value (like
a crop topfortop), random N%- roll a value from that slot's dictionary, but only N% of the time; otherwise the slot stays empty.
Everything is driven off one seed input through a deterministic draw bank, so the same seed plus the same widget settings always gives the same prompt. Empty optional slots are just omitted - you never get a bare "wearing" or "at" sentence. The pronoun (She / He / They) is picked from the gender slot, and there are a few genuinely clever extras: random under 30 / random over 30 on age, random thin / random thick on body, and the toy slot, which is only rolled when the chosen action phrase contains {toy} (e.g. "fucking her with {toy}") - otherwise it's ignored.
The inputs that actually matter
Don't get lost in the wall of dropdowns. A beginner should touch five things:
- seed (required, default 0) - the deterministic engine for the whole pick sequence.
- prefix / postfix (multiline) - bookend sentences you control, always included. Great for a style or quality line you don't want randomized away.
- shot - the "photo style" frame (
an amateur photo,a leaked nude,a webcam screenshot…). This does more to set the image's vibe than anything else. - gender -
womanis the default; therandom womenmode rolls 1 / 2 / many and switches the action pool to solo or multi accordingly. - action - the only slot with sub-modes like
random oral,random anal,random vaginal,random cum. This is where the content lives, so pick the lanes you're actually after.
Outputs are the same two on every node in the pack: prompt (STRING) and seed (INT). Wire prompt into a CLIP Text Encode / prompt block, and wire seed into your KSampler's seed input - that's the trick for reproducible batches: one seed drives both the prompt picks and the sampler.
Install
Via ComfyUI Manager, search the pack title ComfyUI-NSFW-Prompt. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/theSharque/ComfyUI-NSFW-Prompt
Then restart ComfyUI. That's the whole install - the pack has no extra Python dependencies (just stdlib json, random, re) and no models to download. It's also published to the Comfy Registry (v0.3.x), so Manager's registry search finds it directly.
Gotchas
- The prose is assembled from fixed dictionary joins, so the grammar occasionally reads terse - the README's own example has "She wearing a sweater" rather than "She is wearing". It's a quirk, not a bug; the encoders don't care, and you'll stop noticing.
- Keep the age slot above adult. The dictionary includes youthful and teen terms, and running those through an NSFW generator is the fastest way to get the pack pulled and you in trouble. Don't.
- The prompt seed and the sampler seed are independent until you wire them together. If a great prompt rolls and you didn't connect
seedto the KSampler, the image won't be reproducible. - The dictionaries live in plain JSON under
data/in the pack folder - edit them, reload the node, and you've customized the whole vocabulary. That's the real power move.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | — |
| prefix | STRING | — | |
| shot | COMBO | random | 22 options: disabled, random, an amateur photo, a professional studio photo, a candid photo, an after-sex photo, +16 |
| age | COMBO | random | 20 options: disabled, random, random under 30, random over 30, a teen, a youthful, +14 |
| body | COMBO | random | 24 options: disabled, random, random thin, random thick, skinny, slim, +18 |
| look | COMBO | random 20% | 33 options: disabled, random 100%, random 80%, random 50%, random 20%, white, +27 |
| gender | COMBO | woman | 17 options: disabled, random, random women, woman, girl, female, +11 |
| emotion | COMBO | random 80% | 41 options: disabled, random 100%, random 80%, random 50%, random 20%, a flushed expression, +35 |
| top | COMBO | random 20% | 25 options: disabled, random 100%, random 80%, random 50%, random 20%, a crop top, +19 |
| bottom | COMBO | random 20% | 40 options: disabled, random 100%, random 80%, random 50%, random 20%, a skirt, +34 |
| hosiery | COMBO | random 80% | 25 options: disabled, random 100%, random 80%, random 50%, random 20%, socks, +19 |
| headwear | COMBO | random 20% | 20 options: disabled, random 100%, random 80%, random 50%, random 20%, a hat, +14 |
| footwear | COMBO | random 20% | 23 options: disabled, random 100%, random 80%, random 50%, random 20%, sneakers, +17 |
| accessory | COMBO | random 80% | 39 options: disabled, random 100%, random 80%, random 50%, random 20%, wearing a choker, +33 |
| addon | COMBO | random 50% | 25 options: disabled, random 100%, random 80%, random 50%, random 20%, messy hair, +19 |
| toy | COMBO | random 20% | 56 options: disabled, random 100%, random 80%, random 50%, random 20%, a huge dildo, +50 |
| pose | COMBO | random 50% | 53 options: disabled, random 100%, random 80%, random 50%, random 20%, standing, +47 |
| action | COMBO | random | 70 options: disabled, random, random touch, random hand, random oral, random anal, +64 |
| cover | COMBO | random 50% | 26 options: disabled, random 100%, random 80%, random 50%, random 20%, skin covered in cum, +20 |
| place | COMBO | random 80% | 26 options: disabled, random 100%, random 80%, random 50%, random 20%, a public park, +20 |
| lighting | COMBO | random 20% | 25 options: disabled, random 100%, random 80%, random 50%, random 20%, soft window light, +19 |
| atmosphere | COMBO | random 20% | 33 options: disabled, random 100%, random 80%, random 50%, random 20%, pink glitter sparkle and soft plush textures, +27 |
| camera | COMBO | random 80% | 33 options: disabled, random 100%, random 80%, random 50%, random 20%, full body shot, +27 |
| postfix | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| seed | INT | — |