Apply Krea2 NegPiP
Krea 2 has no real negative prompt. This node gives you one.
- model
- clip
- model
- clip
Here's the thing about Krea 2 that trips everyone up: it runs at CFG 1.0 (Turbo) or low CFG, and at those settings a separate negative prompt barely does anything. You keep typing "blurry, low quality" into the negative box, it keeps coming out blurry, and you're not imagining it - the mechanism just isn't there. Apply Krea2 NegPiP is the workaround: it lets you write (blurry:-1.0) inside the positive prompt and have that token actively suppressed, NegPiP-style, instead of hoping a CFG-gated negative prompt rescues you.
What it actually is
"NegPiP" is short for negative prompt in prompt - an old idea from hako-mikan's sd-webui-negpip for A1111 that this pack ports to Krea 2. Instead of a whole second prompt, you tag individual tokens with weights: a portrait photo, (blurry:-1.0), (low quality:-1.2). The node parses those weights, and during sampling it flips the attention value vectors of the negative tokens so the model actively steers away from them.
It's one node in a tiny, dependency-free pack: no requirements to pip, no model files to download, no API key. The author (blue-pen5805) is the same person behind sdweb-easy-stablecascade-diffusers, so this isn't a drive-by one-off - it's a real little project.
How it works
The node patches two things and hands them back to you as a patched MODEL and CLIP:
- CLIP side. It wraps the Qwen3-VL encoder's
encode_token_weightsto parse ComfyUI's(word:-1.2)syntax. Positive and non-unit weights still scale the text conditioning normally; negative tokens get their positions recorded and packed into a "sidecar" - metadata smuggled into the flattened multilayer text features with magic markers and a checksum. - DiT side. At sampling, it decodes that sidecar and, for the marked token positions, multiplies the attention V vector by
-value_strength. That's the NegPiP trick: flip the values, suppress the concept, in every block the node is told to touch.
You plug MODEL and CLIP in, and wire the outputs onward to your text encoder and sampler. Forgetting that second half - using the original CLIP for encoding instead of the patched one - is the #1 way to silently get nothing.
Inputs that matter
Only a few of the seven fields are worth touching:
value_strength- how hard the negative effect hits. Default1.0; people tend to sit around there or slightly higher.0turns it off entirely.patch_txtfusion_refiners- off by default; flip it on only if you're chasing a stronger effect on Krea 2's fusion/refiner path.block_start/block_end/block_stride- optional, defaulting to0–27with stride1, i.e. every block. Fine to leave alone; drop them to limit the effect to part of the network if you find it too aggressive.
Installing
The usual, no surprises:
cd ComfyUI/custom_nodes
git clone https://github.com/blue-pen5805/ComfyUI-krea2-negpip.git
Then restart ComfyUI. Or search "krea2 negpip" in ComfyUI Manager. There are no extra dependencies - the only real requirement is a ComfyUI that can load Krea 2 at all (0.25.0+), with the model, the Qwen3-VL text encoder, and the Qwen-Image VAE all in place. Load the CLIP with CLIPLoader type krea2 specifically.
Common issues
- "Krea2 NegPiP requires CLIPLoader type='krea2'" - this raises if your CLIP isn't a real Krea 2 Qwen3-VL encoder. Switch the loader type, then wire the patched CLIP output through.
- It works better on simple prompts. In the release thread, early users found that on long, detailed prompts the negative words often get ignored. Keep your
(word:-1.x)tags short and early in the prompt. - Image placeholders and custom embeddings are handled conservatively - negative weights after an image embedding may not apply.
- Performance cost was asked about but nobody measured it publicly; the patch only runs during the diffusion call and is restored after, so it's not a permanent mutation of your model.
The syntax takes a second to get used to, and yes, people have written regex chains to auto-convert a traditional negative prompt into (tag:-1.0) format appended to the positive prompt. That's honestly the cleanest workflow: keep writing negatives normally, let the regex translate them, and let this node do the real work.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| value_strength | FLOAT | 1.000–8 | — |
| patch_txtfusion_refiners | BOOLEAN | false | — |
| block_startopt | INT | 00–999 | — |
| block_endopt | INT | 270–999 | — |
| block_strideopt | INT | 11–16 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |