CFG Where: Frequency Bands
Guide the detail, leave the colours alone
- model
- MODEL
Over-saturation at high cfg isn't spread evenly. Broad colour and layout go wrong first - the whole frame tints, contrast crushes, skies go garish - while fine detail often still benefits from the push. That's not a coincidence: guidance acts on everything, and the coarse structure is where a global scale does the most visible damage.
This node splits the guidance term into low frequencies (layout, colour, big shapes) and high frequencies (edges, texture, fine detail) and gives each its own multiplier. Scale up the detail, calm down the coarse. It's the frequency-decoupled guidance of FDG (Sadat et al. 2025) with the multipliers exposed - with plain CFG the band scale works out to 1 + multiplier × (w - 1).
The mechanism
Take the guidance term - how far guidance pushes past the conditional prediction - and split it.
gaussian: the low band is a Gaussian blur of the term, withblur_sigmain latent pixels (on SDXL one latent pixel is 8 image pixels). The high band is what's left.fft: the low band is everything belowfft_cutoff, as a fraction of the highest frequency. Sharper, more literal band separation, and correspondingly more prone to ringing.
Then rebuild with low_multiplier and high_multiplier applied to their parts. A multiplier of 1 leaves that band unchanged; 0 removes guidance from it entirely, leaving the conditional prediction there.
The recommendation from the pack's own docs is the configuration worth trying first: low 0.5, high 1.2. Calm colours, preserved detail. It's exactly the trade the node exists for, and it takes ten seconds to test on a fixed seed.
Inputs and output
model- loader → node → sampler.method-gaussian(default) orfft.low_multiplier- default 1, range -5 to 10. "1 = unchanged, 0 = no guidance there."high_multiplier- default 1, same range.blur_sigma- gaussian only: blur sigma in latent pixels, default 2. This defines where "low frequency" starts.fft_cutoff- fft only: default 0.25.
Output: MODEL. No extra forward pass - the transform is on tensors you already have.
Why this is one of the good ones
It's a clean, cheap, well-motivated node that maps onto a problem people can actually see: "the colours are cooked but I don't want to lose detail". It composes with the rest of the pack - it writes the where stage, so schedules, weak branches and mix rules all still apply - and it has no state to get confused about.
The two multipliers are a decomposition, not independent dials. At the extremes you get structure that ignores your prompt while texture busily obeys it. Somewhere around 0.5/1.2 to 0.7/1.3 is the useful zone; 0.1/2.0 is a filter, not a setting.
If you want the paper's exact configuration rather than the manual one, the pack also ships FDG: Frequency-Decoupled Guidance as a paper node in the same folder, plus FreSca (Fourier band scaling), HiWave (one wavelet level, coarse band left conditional) and LF-CFG (scaling down redundant low-frequency regions found between steps). Which of those you want depends on whether you're after a knob or a published rule.
Install
Manager → search CFG Megapack → install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/AbstractEyes/comfy-cfg-megapack
Nothing to install, no downloads - torch and the standard library only, which is why there's no requirements.txt. The pack does need a current ComfyUI: it's written against comfy_api.latest and the README reports 0.38.0 with torch 2.11. On an old build the pack won't import and the node won't be in the menu.
Where people get burned
blur_sigma too large on the gaussian method. If the blur covers most of the latent, the "high band" is a sliver and you've effectively just scaled your whole guidance. On a 1024 SDXL latent, sigma 2 is a modest blur; sigma 20 is basically the whole frame. Latent pixels, not image pixels - factor of 8.
Negative multipliers, deliberately or accidentally. The range goes down to -5, which means you can push guidance in the negative direction in one band. It's a legitimate experiment and a reliable way to make a nonsense image; if the output has gone fractal, check for a minus sign.
Expecting it to fix prompt adherence. This is a distribution knob. It changes what guidance does where, not how strongly the model listens overall. If the prompt is being ignored in the coarse structure, this node will make that more visible, not less.
The usual slot conflict. A stock RescaleCFG, Mahiro or RenormCFG node chained after this one takes over ComfyUI's single CFG-function slot and your bands go quiet. CFG Plan Readout will show you the plan if the image doesn't budge.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| method | COMBO | gaussian | gaussian: low band = Gaussian blur. fft: low band = frequencies under the cutoff. |
| low_multiplier | FLOAT | 1.00-5–10 | Multiplier on the low-frequency part of the push (1 = unchanged, 0 = no guidance there). |
| high_multiplier | FLOAT | 1.00-5–10 | Multiplier on the high-frequency part of the push. |
| blur_sigma | FLOAT | 2.00.1–32 | gaussian: blur sigma in latent pixels (1 latent pixel = 8 image pixels on SDXL). |
| fft_cutoff | FLOAT | 0.250.01–1 | fft: the cutoff as a fraction of the highest frequency. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |