π§ SD3 Negative Conditioning
A surgical fix for SD3's negative-prompt problem
- conditioning
- CONDITIONING
Rectified-flow models like SD3 and SD3.5 have a weird relationship with negative prompts. Community troubleshooting on this class of model has settled on a recurring pattern: fully zeroing out the negative conditioning (the naive "just don't use one" approach) tends to produce grainy, degraded output, but leaving a real negative conditioning active for the entire sampling run isn't right either - it fights the model in ways SD3's architecture doesn't handle gracefully. The fix people converge on by hand is to let the negative prompt do its job only early in the schedule, then fade it out. SD3NegativeConditioning packages that trick into a single node instead of a chain of core ones.
How it works
The node takes your negative conditioning and one control: end, a fraction between 0 and 1 (default 0.1). Under the hood this is the same idea as manually stacking ConditioningSetTimestepRange and ConditioningZeroOut - the negative conditioning stays active for the first end portion of the sampling schedule and gets turned off for the rest. At the default 0.1, your negative prompt is doing real work for the first 10% of steps and then gets out of the way.
Why this matters specifically for SD3: this class of model reportedly gets worse, not better, from a negative prompt riding along the whole way through - but a completely empty/zeroed negative conditioning has its own failure mode (grainy output), a pattern documented on the closely related rectified-flow model Krea 2. This node threads that needle without you having to hand-build the timestep-range chain yourself.
The inputs and outputs that matter
Just two things:
conditioning(CONDITIONING) - your negative prompt, encoded the normal way (CLIPTextEncode or similar).end(FLOAT, 0β1, default 0.1) - how far into the sampling schedule the negative conditioning stays active before being cut off.
Output is a single CONDITIONING - wire it straight into your KSampler's negative input, exactly where the unmodified negative conditioning would go.
If your images look over-baked, oversaturated, or fight the positive prompt when you've got a strong negative dialed in on SD3, try lowering end further (less negative influence, cut off earlier). If the negative prompt isn't doing enough, raise it.
How to install it
Via ComfyUI Manager, search "ComfyUI Essentials" and install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/cubiq/ComfyUI_essentials
Restart ComfyUI. No extra dependencies beyond the SD3/SD3.5 checkpoint itself - this node just reshapes a conditioning object, nothing model-specific gets downloaded.
Common issues
Using it on non-SD3 models. There's nothing stopping you from wiring this into an SDXL or Flux workflow, but the whole reason it exists is a quirk specific to SD3/SD3.5-style rectified-flow sampling. On other architectures you're better off with a plain negative conditioning or the model's own established negative-prompt conventions.
Confusing this with just lowering CFG. This node doesn't touch your CFG scale - it changes when the negative conditioning is allowed to influence the result, not how strongly. If your output is still off after adjusting end, check CFG separately; the two knobs solve different problems.
Expecting it to fix a bad negative prompt. This node manages timing, not content. Garbage negative terms will still produce a mediocre result during that first end fraction of steps - this isn't a substitute for a reasonable negative prompt, just a way to stop that prompt from actively hurting the rest of the generation.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | β | |
| end | FLOAT | 0.1000β1 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | β |