Extensions/ComfyUI-ppm
ComfyUI Extension

ComfyUI-ppm

Fixed AttentionCouple, NegPip(negative weights in prompts) for SDXL and FLUX, more CFG++ and SMEA DY samplers, etc.

By pamparamm·Created 2 years ago·Updated about 10 hours ago· 265
pamparamm/ComfyUI-ppm
Nodes31
On cloudLocal install
Categoryadvanced/model, model_patches/unet
Stars265
Updatedabout 10 hours ago

Nodes (31)

Attention Couple (PPM)

Different prompts for different regions

advanced/model
CADS (PPM)

More variety when every render looks the same

model_patches/unet
CFGLimiterGuider

Apply CFG only where it helps

sampling/custom_sampling/guiders
CFG++SamplerSelect

Kill overexposure with CFG++ samplers

sampling/custom_sampling/samplers
CLIP Attention Selector

Swap the text encoder's attention backend

advanced/model
CLIPMicroConditioning

Set SDXL's size and crop conditioning by hand

advanced/conditioning
CLIP NegPip

Negative weights in your prompt, explained

conditioning
CLIP Text Encode (BREAK)

The A1111 BREAK keyword in ComfyUI

conditioning
CLIP Text Encode (Invert Weights)

Flip your prompt's emphasis

conditioning
CLIPTokenCounter

How many tokens is your prompt, really

sd
ConditioningZeroOut (Combine)

Neutralize a prompt for the first few steps

advanced/conditioning
Convert Timestep To Sigma

Get the sigma number the other nodes want

sampling/custom_sampling/sigmas
DynamicThresholdingFullPost

The full-control CFG color clamp

model_patches/unet
DynamicThresholdingSimplePost

Run high CFG without the color burn

model_patches/unet
DynSamplerSelect

The SMEA/Dyn samplers, ported to ComfyUI

sampling/custom_sampling/samplers
Empty Latent Image (Aspect Ratio)

Pick a ratio, not two numbers

latent
Epsilon Scaling (PPM)

A tiny knob against exposure drift

model_patches/unet
FreeU V2 (PPM)

The detail-boosting hack, with more knobs

_for_testing
Guidance Limiter

Apply CFG only in the interval where it helps

model_patches/unet
LatentOperationTonemapLuminance

Tame blown-out highlights in latent space

latent/advanced/operations
Latent to Mask (Bounding Box)

Quick rectangular masks by coordinates

mask
Latent to Width & Height

Pull the real dimensions off a latent

latent
MaskCompositePPM

Combine a stack of masks in one node

mask
Model Attention Selector

Switch to SageAttention without restarting

advanced/model
PPMSamplerSelect

The pack's flexible sampler picker

sampling/custom_sampling/samplers
RenormCFGPost

Rein in runaway CFG magnitude

model_patches/unet
RescaleCFGPost

The anti-burn CFG rescale, built to chain

model_patches/unet
SamplerGradientEstimation

The gradient-estimation sampler with a gamma knob

sampling/custom_sampling/samplers
Skip CFG on first step

Skip guidance on the noisiest step

model_patches/unet
Tangential Damping CFG (Advanced)

Clean up the negative pass with Tangential Damping CFG

advanced/guidance
Tile Preprocessor (PPM)

A ControlNet Tile prep with no extra installs

image/preprocessors
Readme

ComfyUI-ppm

Just a bunch of some random nodes modified/fixed/created by me and/or others. If any node starts throwing errors after an update - try to delete and re-add the node.

You can browse example workflows for FLUX and SDXL NoobAI inside ComfyUI's "Browse Templates/Custom Nodes/ComfyUi-ppm" menu. I'll probably add some more examples in future (but I'm kinda lazy, kek).

Nodes

CLIPNegPip

[!TIP]

See "attention_couple+negpip" or "flux_negpip" from ComfyUI's "Browse Templates" menu.

Allows you to use negative weights in prompts. Negative weights can be used in both CFG models (such as SDXL) and Guidance-Distilled models (such as Flux) to negate a concept or a trait.

Supports:

  • SD1
  • SDXL
  • Anima
  • ~~FLUX~~ Unmaintained

Modified implementation of NegPiP by laksjdjf and hako-mikan. It uses ModelPatcher instead of monkey-patching, which should increase compatibility with other nodes.

You can read more about NegPiP in the original repo. ~~When used together with tag-based models, you should keep all commas inside weight braces (i.e. (worst quality,:-1.3) (sketch,:-1.1) instead of (worst quality:-1.3), (sketch:-1.1),).~~ Some tag-based models (Illustrious/NoobAI) perform better with commas in braces, while other models (like Anima) perform better with commas outside of emphasis blocks - feel free to experiment.

[!NOTE] CLIPNegPip is compatible with:

CLIPNegPip is incompatible with:

AttentionCouplePPM

[!TIP]

Connect this node after other model patches (such as CLIPNegPip, EasyCache, LazyCache, etc.).

See "attention_couple+negpip" and "attention_couple_with_global_prompt" from ComfyUI's "Browse Templates" menu.

[!NOTE] You can also use the version from ComfyUI prompt control (doc) - it has a convenient prompt-based approach that doesn't require to add new cond/mask nodes for each new region.

Supports:

  • SD1
  • SDXL
  • Anima

Modified implementation of AttentionCouple by laksjdjf and Haoming02, made to be more compatible with other custom nodes.

Inputs for new regions are managed automatically: when you attach cond/mask of a region to the node, a new cond_ / mask_ input appears. Link base_cond input to the positive conditioning used in KSampler/SamplerCustom.

You can use multiple LatentToMaskBB nodes to set bounding boxes for AttentionCouplePPM. The parameters are relative to your initial latent: x=0.5, y=0.0, w=0.5, h=1.0 will produce a mask covering the right half of the image.

You can adjust mask values to set region strength and use ConditioningSetAreaStrength to increase/decrease conditioning strength.

Attention Selectors

Model Attention Selector and CLIP Attention Selector nodes, can be used to swap the optimized attention algorithm, such as pytorch (SDPA), sage (SageAttention), xformers, etc., without restarting ComfyUI.

DynSamplerSelect

Modified samplers from Euler-Smea-Dyn-Sampler by Koishi-Star.

Contains some new samplers: euler_ancestral_dy, dpmpp_2m_dy and dpmpp_3m_dy.

Tweaking s_dy_pow may reduce blur artifacts (optimal value is 2 for euler_* samplers and -1 for dpmpp_* samplers, use -1 to disable this feature).

CFG++SamplerSelect

Samplers adapted to CFG++: Manifold-constrained Classifier Free Guidance for Diffusion Models by Chung et al.. Also contains converted samplers from Euler-Smea-Dyn.

Should greatly reduce overexposure effect. Use together with SamplerCustom node. Don't forget to set CFG scale to 1.0-2.0 and PAG/SEG scale (if used) to 0.5-1.0.

Guidance Limiter

Implementation of Applying Guidance in a Limited Interval Improves Sample and Distribution Quality in Diffusion Models by Kynkäänniemi et al. as a post CFG function.

Guidance Limiter is also available as a CFGLimiterGuider guider node for SamplerCustomAdvanced.

Epsilon Scaling (PPM)

Modified version of ComfyUI's Epsilon Scaling node with a hacky (and mathematically incorrect) support for v-pred ZSNR models.

Tile Preprocessor (PPM)

Image preprocessor for ControlNet Tile that doesn't require any third-party libraries (aside from kornia, which is a part of ComfyUI's requirements).

Post-CFG nodes

Post-CFG variants of some nodes - they should have increased compatibility with other CFG-related nodes, making it possible to chain them together:

Empty Latent Image (Aspect Ratio)

Generates empty latent with specified aspect ratio and with respect to target resolution.

CLIPTextEncodeBREAK

A small lightweight wrapper over ConditioningConcat node. It splits prompts into chunks by BREAK keyword and produces a single concatenated conditioning.

CLIPTokenCounter

Counts tokens in your prompt and returns them as a string. You can use Preview Any node to display them.

Hooks/Hijacks

Schedulers

Adds some schedulers to the default list from ComfyUI by replacing comfy.samplers.calculate_sigmas function: