Eric Krea2 Negative Guidance
Real negatives on Turbo, without paying for CFG
- guidance
Turbo checkpoints are distilled for guidance 0, which means CFG 1, which means no negative pass, which means no negative prompt. That's the deal you sign with distillation, and it's why "why doesn't my negative prompt do anything on Turbo" is such a common question. Eric Krea2 Negative Guidance takes the other route: both techniques in it are off by default, both work at g = 0, and both are single-pass. The node builds a KREA2_GUIDANCE bundle for the Ultra node's guidance socket.
How it works
NAG (Normalized Attention Guidance) runs a second, negative text stream through the blocks alongside your positive one. For image queries it pushes the attention output away from the negative and renormalises: z = z+ + phi (z+ - z-), with the L1 ratio clamped to tau so guided features can't blow up, then blended alpha into the positive. Text and edit-source tokens keep their positive attention - you're steering the picture away from something, not arguing with your own prompt. It's one pass with a small overhead: ~+23% per step on text-to-image, ~+12% on edits. Compare that to CFG, which doubles.
NegPiP is the cheaper, weirder one and costs approximately nothing. Write (phrase:-1.0) in Ultra's prompt or in the Edit instruction and those tokens' attention values get multiplied by the negative weight inside the joint blocks - so the concept is subtracted rather than added. It's the prompt-weighting syntax you already know, with the sign flipped and a completely different mechanism under it.
The pack's nag_negative field is deliberately separate from Ultra's negative_prompt. That one is the CFG negative and only does anything on a stage with g > 0. This one is the attention negative and works regardless.
Which inputs to set
Turn on nag and fill nag_negative with what you want suppressed - "blurry, extra fingers, watermark" style, or the specific thing the model keeps adding. Leave nag_phi at 4.0, nag_tau at 2.5, nag_alpha at 0.25; those are the published defaults and there's no reason to freelance on your first run. nag_stages picks where it applies (s1, s1_s2, all) - start at s1, since that's where composition and the offending feature get decided. nag_sigma_start and nag_sigma_end (1.0 and 0.0) limit it to a sigma window if you want it active only during the structural part of the run. Expect a nudge, not a deletion: in testing it cleaned up an unwanted feature with a small remnant left over.
For NegPiP: flip negpip on and write the groups in the prompt. negpip_mode is in_place by default - the phrase's tokens are flagged where they stand, which tested cleaner - with lifted as the alternative (phrase pulled out and encoded on its own, so the text encoder never reads it in context). negpip_strength multiplies every negative weight, and negpip_block_start / negpip_block_end (0–27) bound which transformer blocks are affected. negpip_text_fusion extends the flip into the text-fusion refiner attention, which is stronger.
Output is a single guidance output, into Ultra's guidance socket.
Installing it
The node ships in the pack, so:
cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Krea2_ComfyUI_Advanced
or ComfyUI Manager → search Eric_Krea2. The pack drives the real Hugging Face Krea2Pipeline, so you need the from-source diffusers build:
python_embeded\python.exe -m pip install --upgrade --force-reinstall --no-deps git+https://github.com/huggingface/diffusers.git
The --force-reinstall matters - the version string didn't move when Krea 2 support merged. You'll also want transformers>=4.57.0, Krea 2 weights and, for the edit combo below, the Identity Edit LoRA. All three of the pack's split-attention features (edit sources, ref_boost, NAG) share one attention core, and it uses flash-attn if you have it, falling back to an exact but slower math path if not - so NAG on a machine without flash-attn is a bigger per-step cost than the numbers above.
Traps worth knowing before you queue
Don't use both on the same concept. In testing, NAG and NegPiP stacked on one unwanted feature over-suppressed it into dark patches. Pick one technique per concept.
NegPiP can't read groups from a precomputed conditioning. With a Vision Prompt feeding prompt_conditioning, the text can't be parsed for (phrase:-1.0) - put those groups in Ultra's prompt instead. Also note that positive weights are simply stripped: Krea 2 conditioning has no prompt weighting, so (cat:1.3) does nothing.
NAG with an empty nag_negative disables itself and prints a line to the console saying so. Cheap to miss, and the run silently proceeds as if you'd never enabled it.
Skill check on the socket. Guidance combines with control and edit. Wiring it alongside style or paint doesn't error - it runs the other feature and prints that guidance was ignored.
One last thing: if what you actually want is a real CFG negative prompt on Turbo, Ultra's turbo_guidance dropdown can re-enable guidance per stage - s1_only puts CFG and negatives on the composition, then lets S2/S3 refine single-pass. That costs you a second pass. NAG is what you use when you don't want to pay it.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| nag | BOOLEAN | false | Normalized Attention Guidance: steer AWAY from nag_negative inside attention - works at guidance 0 (Turbo), single pass + small overhead. |
| nag_negative | STRING | What to suppress, e.g. 'blurry, extra fingers, watermark'. Separate from Ultra's negative_prompt (that one is the CFG negative). | |
| nag_phi | FLOAT | 4.00–20 | Extrapolation strength (z+ + phi (z+ - z-)). |
| nag_tau | FLOAT | 2.51–10 | Norm clamp: guided features may grow at most tau x the positive. |
| nag_alpha | FLOAT | 0.250–1 | Blend of the guided features into the positive ones. |
| nag_stages | COMBO | s1 | 3 options: s1, s1_s2, all |
| nag_sigma_start | FLOAT | 1.000–1 | Apply NAG only while sigma is in [end, start]. |
| nag_sigma_end | FLOAT | 0.000–1 | — |
| negpip | BOOLEAN | false | NegPiP: (phrase:-1.0) in the prompt / edit instruction subtracts that concept (its attention values are flipped). |
| negpip_mode | COMBO | in_place | in_place (default, cleaner in tests): the phrase's tokens are flagged where they stand. lifted: the phrase is removed from the prompt and encoded on its own (the text encoder never reads it in context). |
| negpip_strength | FLOAT | 1.000–8 | Multiplies every negative weight. |
| negpip_block_start | INT | 00–27 | — |
| negpip_block_end | INT | 270–27 | — |
| negpip_text_fusion | BOOLEAN | false | Also flip inside the text-fusion refiner attention (stronger). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| guidance | KREA2_GUIDANCE | — |