ComfyUI-ppm
Fixed AttentionCouple, NegPip(negative weights in prompts) for SDXL and FLUX, more CFG++ and SMEA DY samplers, etc.
Nodes (35)
Different prompts for different regions
C2FG turns CFG up in the last steps, where the detail actually gets decided
More variety when every render looks the same
Apply CFG only where it helps
Kill overexposure with CFG++ samplers
Swap the text encoder's attention backend
Set SDXL's size and crop conditioning by hand
Negative weights in your prompt, explained
The A1111 BREAK keyword in ComfyUI
Flip your prompt's emphasis
How many tokens is your prompt, really
Neutralize a prompt for the first few steps
Get the sigma number the other nodes want
The full-control CFG color clamp
Run high CFG without the color burn
The SMEA/Dyn samplers, ported to ComfyUI
Pick a ratio, not two numbers
A tiny knob against exposure drift
The detail-boosting hack, with more knobs
Apply CFG only in the interval where it helps
Tame blown-out highlights in latent space
Quick rectangular masks by coordinates
Pull the real dimensions off a latent
Combine a stack of masks in one node
Switch to SageAttention without restarting
The pack's flexible sampler picker
Rein in runaway CFG magnitude
The anti-burn CFG rescale, built to chain
The Anima-recommended stochastic sampler, now with a noise window you control
The gradient-estimation sampler with a gamma knob
One node that stands in for three stock ComfyUI samplers
Skip guidance on the noisiest step
Clean up the negative pass with Tangential Damping CFG
The knob that makes one seed give you several good images
A ControlNet Tile prep with no extra installs
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 MOSS Image 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
CLIP NegPip
[!TIP]
See "moss+negpip" or "attention_couple+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 the turbo versions of Anima and MOSS Image) to negate a concept or a trait.
Examples
moss+negpip - MOSS Image with Mario wearing a (red:-1) cap. Scene: (simple background:-1), (blurry:-1), castle. - the cap comes out green and the background stays a detailed castle instead of a plain blurred one:
Three characters placed with Create Bounding Boxes (PPM) + MOSS-Image Layout Prompt (moss+regions / moss+regions+negpip) - adding (pink:-2) to the middle region and (lavender:-2) to the right one strips those tints from the outfits:
| moss+regions | moss+regions+negpip |
| --- | --- |
| <img src="example_workflows/moss+regions.jpg" alt="MOSS Image with region prompts" width="420"> | <img src="example_workflows/moss+regions+negpip.jpg" alt="MOSS Image with weighted region prompts" width="420"> |
Supports:
- SD1
- SDXL
- Anima
- MOSS Image - also enables regular prompt weighting like
(word:2)
Description
Modified implementation of NegPiP by laksjdjf and hako-mikan. It uses ModelPatcher instead of monkey-patching, which should increase compatibility with other nodes.
MOSS Image ignores token weights in vanilla ComfyUI, so CLIP NegPip re-enables the syntax and applies the weights inside attention instead of on the text embeddings.
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]
CLIP NegPipis compatible with:
CLIP NegPipis incompatible with:
- smZ Nodes by shiimizu (ComfyUI prompt control can replace most of its functionality)
AttentionCouplePPM
[!TIP]
Connect this node after other model patches (such as
CLIP NegPip,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/masknodes 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.
Create Bounding Boxes (PPM)
Vibecoded port of ComfyUI's Create Bounding Boxes node with a box editor that also works with Nodes 2.0 disabled.
The stock box editor is a Vue-only widget: with Nodes 2.0 turned off, the classic canvas shows just a placeholder and the boxes cannot be edited. This node keeps the same inputs and outputs (preview, bboxes, elements) and adds a DOM widget editor for the classic canvas: draw/move/resize boxes with grid snapping, per-box type (object/text), text, description and color palette. With Nodes 2.0 enabled the stock Vue editor is used and the DOM editor stays hidden.
- When
backgroundis connected, the canvas background andwidth/heightare taken from the image after the node has run once. width/heightaccept links (e.g.Empty Latent Image (Aspect Ratio)→Latent to Width & Height). The canvas adopts the size the node actually executed with and keeps the boxes in their relative positions in that frame.- A new value on the
bboxesinput re-initializes the canvas; canvas edits are kept until the upstream value changes again.
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.
C2FG
Implementation of C2FG: Control Classifier-Free Guidance via Score Discrepancy Analysis by Gao et al. as a time-dependent CFG scale: cfg * exp(growth_rate * (1 - t/t_max)).
Improves overall image clarity and enhances small details by boosting CFG at later stages of denoising. Should be compatible with any model that is not CFG-distilled (the node doesn't work when CFG is set to 1.0).
Guidance is equal to the cfg from the sampler at the highest noise level and grows to cfg * e^growth_rate by the last steps. Set growth_rate to 0.0 to disable the schedule (1.0 is the best value from the paper).
Temperature Sampling (PPM)
Implementation of Diversify Diffusion with Temperature Sampling and Variance-Corrective Time Shifting (Li et al., 2026).
gamma< 1.0 increases sampling diversity, 1.0 disables temperature sampling.start_percent/end_percentsets sampling window.
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:
RescaleCFGPostRenormCFGPostDynamicThresholdingSimplePostandDynamicThresholdingFullPost(based on sd-dynamic-thresholding by mcmonkey4eva)
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:
aysandays+from AlignYourSteps scheduler modified by Extraltodeus -aysis the default AYS scheduler (SDXL variant) andays+is justayswithforce_sigma_min=Trueays_30andgitsschedulers based on AYS_32 by Koitenshinbeta_1_1- ComfyUI's beta scheduler with both alpha and beta set to 1.0