Nodes/ComfyUI-ppm/CLIP NegPip
ComfyUI Node

CLIP NegPip

Negative weights in your prompt, explained

By pamparamm·Created 2 years ago·Updated 4 days ago· 265
CLIP NegPip
  • model
  • clip
  • MODEL
  • CLIP

You know how you can write (masterpiece:1.3) to push a concept harder? NegPip lets you go the other way, past zero: (blurry:-1.2) actively shoves a concept out of the image instead of just leaving it out. That's the whole pitch, and it's genuinely useful once you get it.

The obvious question: isn't that what a negative prompt is for? Sort of, but not quite. A negative prompt is a separate conditioning that CFG steers away from. Negative weights live inside your positive prompt and let you mix "more of this, less of that" in one place, at whatever strength you want, token by token. It's finer-grained than dumping everything into the negatives, and it shines when you want to subtract a trait from a concept you're otherwise keeping - think "a portrait, (smiling:-0.8)" to nudge the expression without banning smiles from the whole render.

What it actually is

NegPip is a technique, not pamparamm's invention - the original is by laksjdjf and hako-mikan (there's a sd-webui-negpip for the A1111/Forge crowd). What ppm ships is a cleaned-up ComfyUI port. The nice engineering detail: it uses ComfyUI's ModelPatcher instead of monkey-patching the model, which in plain terms means it plays nicer with other nodes that also touch the model. Fewer mystery conflicts.

Mechanically, negative weights are a real thing the math supports - a token embedding scaled by a negative number points the attention the opposite direction. It works on classic CFG models like SD1.5 and SDXL, and also on the newer guidance-distilled crowd where a normal negative prompt does nothing (the README lists Anima; Flux support exists but is marked unmaintained, so don't count on it).

Inputs and outputs

Dead simple node. Two inputs, two outputs:

  • model (MODEL) and clip (CLIP) in
  • MODEL and CLIP out

You wire it right after your checkpoint loader, before your text-encode nodes and sampler, and pass the patched MODEL and CLIP on down the line. That's it - the node has no sliders. The negative weights themselves go in your prompt text, in whatever encode node you're using downstream (CLIP Text Encode, CLIPTextEncodeBREAK, etc.), now that NegPip has taught the CLIP to read them.

One real syntax gotcha, straight from the author, and it's the thing people trip on: with tag-based anime models, commas matter. Some models (Illustrious, NoobAI) do better with the comma inside the weight braces - (worst quality,:-1.3) - while others (Anima) prefer it outside. There's no universal right answer; it's a "try both, keep what looks better" situation. If your negative weights seem to do nothing, that comma placement is the first thing to poke.

Installing it

Standard ComfyUI custom node, no model downloads, no heavy dependencies:

  • ComfyUI Manager: search "ComfyUI-ppm", install, restart.
  • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/pamparamm/ComfyUI-ppm, then restart ComfyUI.

pamparamm ships example workflows too - check ComfyUI's Browse Templates → Custom Nodes → ComfyUI-ppm menu, specifically the attention_couple+negpip and flux_negpip templates. Starting from one of those beats wiring it blind.

Where people get burned

Compatibility is the main one, and the README is refreshingly honest about it. NegPip conflicts with anything that also rewrites conditioning tensors - smZ Nodes is explicitly called out as incompatible (asagi4's comfyui-prompt-control can cover most of what smZ did, if you need a replacement), as is Flux Style Adjust. It does play well with prompt-control and BlenderNeko's Advanced CLIP Text Encode. So if your outputs go weird or you get errors the moment NegPip is in the graph, look at what else is mangling your cond.

And the pack-wide rule: if the node starts throwing errors after you update ComfyUI-ppm, delete it from the canvas and re-add it. Stale serialized node state is the usual culprit, and re-adding fixes it more often than it has any right to.

Is it essential? No. If you never write weighted prompts, skip it. But if you're deep in SDXL/NoobAI tag prompting and you've ever wished you could turn a concept's dial below zero, this is the node that does exactly that - and it's one of the better-maintained implementations going.

Categoryconditioning

Inputs (2)

NameTypeDefaultDescription
modelMODEL
clipCLIP

Outputs (2)

NameTypeDescription
MODELMODEL
CLIPCLIP