CFG-less Negative Prompt
A negative prompt that still works at CFG 1
- conditioning
- clip
- CONDITIONING
If you've moved to Flux, Z-Image Turbo, or any other guidance-distilled model, you've probably typed something into the negative prompt box and watched it do absolutely nothing. That's not a bug in your workflow - it's math. Negative prompting rides on classifier-free guidance's unconditioned pass, and at CFG 1 that pass either gets zeroed out or isn't even computed. ComfyUI's own sampler code skips it as a speed optimization. So the box is still there, it's just wired to nothing.
CFGlessNegativePrompt routes around that entirely. Instead of asking the sampler to steer away from a negative during denoising, it does the steering before the sampler ever sees the conditioning - by encoding your negative text and subtracting it, at a strength you set, directly from your positive conditioning vector. No second forward pass, no CFG requirement, no doubling your render time. It's the same trick the whole ConDelta pack is built on (a ConDelta is just the vector difference between two encoded prompts), applied here as a one-node convenience instead of a manual subtract-and-save workflow.
How it works
The node takes your existing conditioning, plus a clip model and a negative_prompt string. It encodes the negative text through CLIP the same way any positive prompt gets encoded, then subtracts that vector from your conditioning, scaled by negative_prompt_strength. Because this is straight vector arithmetic rather than a sampling-time guidance term, it doesn't care whether your model is running at CFG 1 or CFG 7 - the subtraction already happened.
The inputs and outputs that matter
conditioning- your positive conditioning, the thing you're steering.clip- the CLIP model used to encode the text (the tooltip is explicit: "The CLIP model used for encoding the text").negative_prompt- multiline text field for what you want to push away from. Same tooltip framing as any standard CLIP Text Encode: "The text to be encoded."negative_prompt_strength- defaults to 0.6, range -100 to 100. This is your dial. Start low; it doesn't take much.
Output is a single CONDITIONING, which you plug straight into your KSampler's positive slot - there's no separate negative input to wire, because the negative has already been baked in.
How to install it
Easiest path is ComfyUI Manager: search "ComfyUI-ConDelta", install, restart. Manually, it's the standard drop-in:
cd ComfyUI/custom_nodes
git clone https://github.com/envy-ai/ComfyUI-ConDelta
Restart ComfyUI. This particular node needs no model download and no extra Python dependencies - it's pure tensor math on top of whatever CLIP model you're already using.
Common issues & troubleshooting
Don't confuse this with a magic bullet - it has the same failure mode as overdriving CFG. Push negative_prompt_strength too high and you'll get the vector-arithmetic equivalent of burn: oversaturation, distorted structure, the model fighting itself. If your output looks deep-fried, dial the strength back before touching anything else - same diagnosis as too-high CFG, just via a different mechanism.
It's solving a problem you might not have. If you're already running a non-distilled model at real CFG (SD 1.5, SDXL, Illustrious, Pony, Anima Base) your ordinary negative prompt box already works, is free once CFG is above 1, and doesn't need this node at all. Save it for the distilled models where the box is genuinely inert.
It's not the only fix for this problem. NAG (Normalized Attention Guidance) is the more established community answer to negative prompting on CFG-1 models, working in attention space with its own ComfyUI node. CFGlessNegativePrompt is a lighter-weight alternative worth trying first if you just want a quick push away from a concept without installing a separate pack - but if you need serious negative steering, NAG has more community mileage behind it.
Results won't feel identical to a real negative prompt. You're subtracting a direction in conditioning space, not running a second denoising pass - it's closer to how the rest of this pack's ConDelta nodes work than to classic CFG-based negatives. Treat it as "push away from this concept" rather than "guarantee this never appears," and it'll behave the way you expect.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| clip | CLIP | The CLIP model used for encoding the text. | |
| negative_prompt | STRING | The text to be encoded. | |
| negative_prompt_strength | FLOAT | 0.60-100–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |