Nodes/ComfyUI-ppm/CFG++SamplerSelect
ComfyUI Node

CFG++SamplerSelect

Kill overexposure with CFG++ samplers

By pamparamm·Created 2 years ago·Updated about 18 hours ago· 265
CFG++SamplerSelect
    • SAMPLER
    sampler_name
    eta1.00
    s_gamma_start0.00
    s_gamma_end1.00
    s_extra_stepsfalse

    If your SDXL images come out looking sunburned - blown highlights, oversaturated colors, that fried HDR sheen - CFG++ is one of the cleanest fixes going, and this node is how you use it in ComfyUI. CFG++SamplerSelect gives you samplers adapted to CFG++, a reformulation of guidance that greatly reduces the overexposure effect classic CFG bakes in.

    What CFG++ actually changes

    Normal classifier-free guidance extrapolates: it takes the difference between your conditioned and unconditioned predictions and pushes past it, and the harder you push (higher CFG), the more your contrast and saturation blow out. CFG++ (Chung et al.) reworks that step so guidance stays on the model's actual data manifold instead of shooting off it - you get the prompt adherence without the overcooked look. It's not a subtle tint fix; the README's own word is "greatly."

    The one non-negotiable that trips everyone up: CFG++ uses a low CFG. The whole scale is different. Set your CFG to 1.0-2.0, not the usual 7-8. Leave it at 8 with a CFG++ sampler and you'll overshoot and get a mess, then wrongly conclude the node is broken. If you're also running PAG or SEG, the README says to drop those to 0.5-1.0 as well.

    The inputs

    • sampler_name (dropdown) - the CFG++ sampler to use. The node also carries converted samplers from the Euler-Smea-Dyn family, so some of the dynamic/artifact-reducing variants show up here too.
    • eta (default 1) - ancestral noise amount, standard meaning.
    • s_gamma_start (default 0) / s_gamma_end (default 1) - control the interval over which the CFG++ gamma behavior applies across the run. Defaults span the whole sample; leave them unless you're tuning deliberately.
    • s_extra_steps (boolean, default false) - extra sub-steps for a bit more quality at some speed cost.

    Output is a SAMPLER → into SamplerCustom. The README is explicit: use this with SamplerCustom, and set that low CFG there.

    Install

    No models, no deps:

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

    Honest take

    This is one of the genuinely worthwhile nodes in the pack, not a curiosity. Overexposure is the single most common "my SDXL renders look bad and I can't say why" complaint, and CFG++ addresses it at the root instead of papering over it with dynamic thresholding after the fact. If you've been fighting blown highlights, this is worth a real trial.

    Set expectations by model, though. CFG++ is an SDXL/SD1.5-era guidance fix; on modern guidance-distilled models (Flux, Z-Image Turbo and friends) you're already running CFG at ~1 and the overexposure problem it solves mostly isn't there, so it's not the tool for those. This is for classic CFG models where high guidance was the price of prompt adherence.

    The failure mode, one more time because it's the only one that matters: forgetting to lower CFG. Enable a CFG++ sampler, set CFG to 1.5, sample. Do that and it just works; skip it and you'll be confused. There's overlap with PPMSamplerSelect's cfg_pp toggle in this same pack - that's the same CFG++ behavior folded into the general sampler node; this dedicated one gives you the fuller set of CFG++ samplers and the gamma-interval controls.

    Pack rule: erroring after a ComfyUI-ppm update? Delete and re-add the node.

    Categorysampling/custom_sampling/samplers

    Inputs (5)

    NameTypeDefaultDescription
    sampler_nameCOMBO13 options: euler_cfg_pp, dpmpp_2m_cfg_pp, gradient_estimation_cfg_pp, euler_ancestral_cfg_pp, dpmpp_2m_sde_cfg_pp, dpmpp_2m_sde_gpu_cfg_pp, +7
    etaFLOAT1.000–100
    s_gamma_startFLOAT0.000–10000
    s_gamma_endFLOAT1.000–10000
    s_extra_stepsBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    SAMPLERSAMPLER