CFGNorm
Keep high CFG from deep-frying your colors
- model
- patched_model
Crank the CFG scale high enough and every model turns into a meme of itself - colors bloom until the render looks airbrushed, contrast gets baked in, and skin goes plastic. CFGNorm is the patch that lets you push CFG hard for prompt adherence without paying for it in saturation. It renormalizes the magnitude of the guided prediction so a high CFG can't inflate the image into "deep fried" territory. If you've ever raised CFG to force a stubborn subject to appear and regretted the colors, this is the node.
It's the most-searched node in ComfyUI's built-in guidance family for good reason: it's one of the few CFG patches that showed up inside stock workflows. You'll see it in Qwen Image and Microsoft Lens workflow exports, and ComfyUI explicitly extended it in May 2026 to match the norm-scaled CFG those "Lens"-style models use. It landed in core back in July 2025, flagged experimental like most of this family.
How it works
CFG computes uncond + scale * (cond - uncond). The problem is that extrapolation also inflates the magnitude of the result - the prediction gets longer, not just steered. CFGNorm measures the norm of the conditional prediction versus the CFG result and scales the result back down toward the conditional's length.
The pre_cfg toggle changes where that rescaling happens, and it's the one decision that matters:
pre_cfgoff (default) - rescale happens after the sampler's CFG combine, in x0 space, and the correction is clamped to[0, 1]. Attenuate-only: it can dampen oversaturation but never amplify contrast. This is the safe, original behavior.pre_cfgon - rescale the combined noise before the sampler's CFG combine, with no clamping. That means it can amplify, and it matches the norm-scaled CFG that Lens-style models were trained around. The author's own tooltip calls this out: use it when you're following a workflow that expects the Lens behavior.
Inputs and what to set
model- the MODEL to patch.strength- float, default 1.0, range 0–100. Full rescale at 1.0; lower values blend back toward plain CFG. If the image starts looking washed out, drop this toward 0.5.pre_cfg- boolean, default false. Leave off unless you're replicating a Lens-style workflow.
Output is the patched MODEL, wired straight into your sampler or guider. Ships with ComfyUI core - nothing to install.
Common issues & troubleshooting
At CFG 1 it does nothing. Both modes collapse to a no-op when the conditional and result are identical, which is exactly what CFG 1 means. That's fine - CFGNorm is a high-CFG tool, and on guidance-distilled models (Turbo, Schnell) the fix for oversaturation is lowering CFG, not this node.
"Experimental" means expect change. The source flags it is_experimental, so the exact behavior can shift between ComfyUI updates. If a saved workflow suddenly renders differently after an update, this node is a suspect.
It's a sampler-CFG patch, not a stackable fix. Chain CFGNorm after another post-CFG patch and they fight over the same hook. Pick one correction node and let it sit closest to the sampler.
Default mode can only attenuate. If your render is under-contrasted and muddy, the clamp means the default path can't help - that's when the pre_cfg mode exists. Toggle it before you conclude the node is broken.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| strength | FLOAT | 1.000–100 | — |
| pre_cfgopt | BOOLEAN | false | If true, rescale the combined noise BEFORE the sampler's CFG combine, without clamping (can amplify). Matches the norm-scaled CFG used by models like Lens. Default false keeps the original post-CFG x0-space attenuate-only behavior. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| patched_model | MODEL | — |