Auto Negative Prompt
A negative prompt built to match what you're actually generating
- negative_prompt
Most negative prompts are the same forty-keyword block copy-pasted from a tutorial: worst quality, lowres, bad hands, extra fingers, on and on, regardless of what's actually in the image. AutoNegativePrompt, from the OneButtonPrompt pack, takes a different approach - it looks at your positive prompt and builds a negative around it, stacking that on top of a small base list, rather than shipping the same static block to every generation. It's the sibling node to OneButtonPrompt - that one writes what you want, this one figures out what to steer away from given what you asked for.
This matters more than it sounds like it should, because the community's own hard-won rule about negative prompting is exactly this: a negative should only contain things your positive is already producing, not a preemptive list of everything that could theoretically go wrong. A generic block fights the positive prompt as often as it helps it, especially on sensitive checkpoints. A negative that's actually derived from the positive is closer to doing the job right.
How it works
Feed it your positive prompt and it builds a matching negative, using the same insanitylevel-style generation machinery as the rest of the pack - pulling in negatives relevant to what's being generated rather than everything under the sun - then appends whatever you've set as base_negative on top.
The inputs and outputs that matter
postive_prompt(required, multiline) - yes, that's really how it's spelled in the node itself, a typo baked into the pack. This is your generated or hand-written positive prompt; the whole node's output depends on what's in here.base_negative(default"text, watermark") - a small always-included seed list, on top of whatever the node generates automatically.enhancenegative(0 or 1, default 0) - a toggle rather than a real range despite being typed as an integer; flip it on for a more aggressive negative.insanitylevel(0–10, default 0) - same idea as the main generator's slider, but defaulting to off here: how much extra negative material gets layered in beyond the base list.base_model- matters because what counts as an unwanted element differs by model family; keep it matched to whatever you set onOneButtonPrompt.- Output:
negative_prompt, a single string - wire it straight into your negative CLIP Text Encode.
How to install it
Same pack, same steps as OneButtonPrompt: ComfyUI Manager → search "One Button Prompt" → install, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/AIrjen/OneButtonPrompt
then restart. It's a text-only node - no models, no extra Python dependencies beyond what the rest of the pack already needs.
Common issues & troubleshooting
It does absolutely nothing to your image, and it's not broken. This is the one that actually catches people. If you're running a distilled, speed-optimized checkpoint at CFG 1 - Z-Image Turbo, a Lightning/Turbo/Hyper checkpoint, most speed-LoRA setups - classifier-free guidance isn't running a second unconditioned pass at all, and the negative prompt has nothing to act through. It's not weakened, it's not computed. This has nothing to do with AutoNegativePrompt specifically; it's true of any negative prompt at CFG 1, including a perfectly hand-written one. If you're on a CFG-1 workflow, restate the constraint positively in your positive prompt instead, or bump CFG above 1 and accept the speed trade-off.
The generated negative feels generic. Check that postive_prompt is actually wired to something substantial - a thin or empty positive gives the node little to react to, and it'll fall back closer to just the base_negative list.
enhancenegative looks like it should be a slider. It isn't - it's effectively 0 or 1 in the node's own schema. Anything you type beyond those two values is outside the documented range.
You want it to do more. Push insanitylevel up from its 0 default - unlike the main OneButtonPrompt node, this one starts conservative rather than at 5.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| postive_prompt | STRING | — | |
| base_negativeopt | STRING | text, watermark | — |
| enhancenegativeopt | INT | 00–1 | — |
| insanitylevelopt | INT | 00–10 | — |
| base_modelopt | COMBO | SDXL | 4 options: SD1.5, SDXL, Stable Cascade, Anime Model |
| seedopt | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| negative_prompt | STRING | — |