Negative Library
One dropdown instead of pasting the same forty keywords again
- negative_prompt
Every workflow you download has a negative box stuffed with thirty keywords someone copied from a 2023 Reddit comment. This node replaces that with a dropdown of curated stacks, plus a box for your own terms and a socket for whatever an upstream node decided. Output is a single clean string.
The honest framing first, because the knowledge base is unambiguous on it: a negative prompt is not a filter. Classifier-free guidance already runs an unconditioned pass every step; your negative text replaces the empty string in that pass. So it's free at CFG above 1, it does literally nothing at CFG 1, and most 2026 guidance-distilled checkpoints run at CFG 1 by default. If you're on Z-Image Turbo, a Lightning/Turbo/Hyper checkpoint, or a Flux Klein build, this node will faithfully produce a string your sampler throws in the bin. On the SDXL lineage - Illustrious, NoobAI, WAI, Pony, Anima Base - at CFG 4–9, it's live and worth having.
What it actually assembles
Three sources, in order: the preset stack, your custom text box, then the optional extra string. They're joined with commas, then the node collapses redundant commas and whitespace and does an ordered, case-insensitive dedupe - first occurrence wins, so a term in custom that repeats one in the preset doesn't stack twice. That's it. No network, no models, no state.
The presets are the useful part:
SDXL Base(default) - anatomy, hands, blur, quality loss, watermark/text/logo. The general-purpose one.Photoreal Skin- waxy and plastic skin, over-smoothing, CG look, deformities. The one to reach for when faces look like mannequins.Anime Clean- anatomy, hands, limbs, blur, compression, signatures.Hands & Faces- the narrow, high-yield stack: fingers, malformed hands, face asymmetry, eyes.Text & Logo Free- text, watermark, logo, signatures, subtitles.Blur & Noise Free- blur, defocus, noise, JPEG artifacts.
(None) plus empty boxes outputs an empty string. That's not a bug, it's the off switch.
Wiring
Output is negative_prompt, a STRING. Drag it onto the negative side of your conditioning - the text field of the negative CLIPTextEncode, or the matching input of whatever conditioning node you use (the example workflow feeds a CLIPTextEncode directly).
extra is declared as a forceInput, so it renders as a link-only socket with no text box. Nobody types into it; it's how you chain. The pack's own Prompt Director has a negative_prompt output, and the shipped workflow wires exactly that into this node's extra - so the LLM's negative ideas and your library stack end up merged and deduped in one string.
Install
ComfyUI Manager → search ComfyUI-FeiFei. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/aifeifei798/ComfyUI-FeiFei.git
# restart ComfyUI, nodes appear under the FeiFei category
Nothing extra to install for this node specifically. The pack's requirements.txt lists openai>=1.40 for its LLM nodes; this one doesn't touch it.
Where people get burned
Empty output when you expected something. Check the preset isn't (None) and that both text fields aren't blank. Then check the node isn't bypassed (Ctrl+B) and that negative_prompt is actually wired into your conditioning - an unconnected STRING output is silent about it.
Using it on a CFG-1 model. Covered above, and it's the most common wasted effort. Test it properly: fix the seed, queue once with the node in the loop and once with it bypassed (Ctrl+B), change nothing else. Apply the same discipline to your custom box - only list unwanted things your positive prompt is actually producing, never a pre-emptive wall of things you might not even get.
Treating presets as gospel. They're a reasonable starting point, not a tuned recommendation; the classic lists are heavier than they need to be, and a long negative that fights your positive is worse than an empty one on some checkpoints. SDXL Base alone, or your own five terms, usually does the work - a stock stack turns a batch of terms into a maintainable dropdown, and that's the whole win.
Assuming order. Dedupe keeps the first occurrence, so a preset term always beats a duplicate in custom. If you're hunting a stray word, look at the preset before you look at your own text.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | SDXL Base | 7 options: (None), SDXL Base, Photoreal Skin, Anime Clean, Hands & Faces, Text & Logo Free, +1 |
| custom | STRING | — | |
| extraopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| negative_prompt | STRING | — |