Nodes/CFG Megapack/Skimmed CFG (Extraltodeus)
ComfyUI Node

Skimmed CFG (Extraltodeus)

The community hack that lets you run cfg 15 without the burn

By AbstractEyes·Created 5 days ago·Updated 5 days ago· 3
Skimmed CFG (Extraltodeus)
  • model
  • MODEL
◄scale-1.0►
◄skimming_scale7.0►
◄full_skim_negativefalse►
◄disable_flipping_filterfalse►
◄spaceauto (the method's own)►

Most of the nodes in the paper folder come with an arXiv number attached. This one doesn't. Skimmed CFG is a community trick from Extraltodeus - the same author behind ComfyUI-AutomaticCFG, and a name you'll find in Stable Diffusion threads going back to 2022 - and the pack re-implements it from the published code and description.

The idea is disarmingly specific. When guidance pushes a value past both predictions in the same direction, that value was never going to be usefully guided; it's just overshoot. So instead of letting it fly, pull it back to what a lower "skimming scale" would have produced.

The mechanism

Everything is computed on the denoised estimates x0_c and x0_u, at a scale of w.

  1. Build the CFG result and flag the elements where the conditional, the unconditional and the result all point the same way - those are the overshoot candidates.
  2. There's a second gate: a flipping filter comparing the sign of the result against the current latent x_t. If the sign flips relative to the latent, the element gets flagged too.
  3. On flagged elements, the value is pulled back toward what guidance at skimming_scale would give; unflagged elements keep the full-scale value.
  4. Rebuild: u' + w (c' - u'), with the negative side skimmed separately.

Net effect: coordination and structure come from the high scale, palette and highlights come from the low one. It's the same goal as a standard-deviation rescale, reached from a completely different direction - and because it only touches flagged elements, it's more surgical.

Inputs and output

  • model - loader → node → sampler.
  • scale - the w this rule uses; -1 takes the sampler's cfg, which is where your 12–15 lives.
  • skimming_scale - default 7.0. "The scale the flagged values fall back to." This is the palette reference. Set it to the cfg you'd use if you weren't chasing adherence.
  • full_skim_negative - default False. "Skim the negative side completely." Turning it on applies the fallback across the whole negative side rather than only flagged elements - a much bigger change to the image, and not the original's default behaviour.
  • disable_flipping_filter - default False. "Drop the check against the current latent." The filter is what keeps the skimming from fighting the latent's own sign structure; disabling it also removes the node's need for the current x_t, which is why it exists as a fallback.
  • space - auto (the method's own), which lands in the denoised space here.

Output: MODEL.

Install

Manager → search CFG Megapack → install → restart. Manual, same as the rest of the pack:

cd ComfyUI/custom_nodes
git clone https://github.com/AbstractEyes/comfy-cfg-megapack

No requirements.txt, no weights, no API. The pack does require a recent ComfyUI - it's built on comfy_api.latest and the README reports testing on 0.38.0 - so if nothing shows up after a restart on a two-year-old build, that's why.

If you'd rather run the original, Extraltodeus' Skimmed_CFG is a standalone repo; keep the two out of the same graph, since both want ComfyUI's single CFG-function slot.

Where people get burned

Setting skimming_scale at or above scale. If the fallback is the same as the scale, nothing was "pulled back" anywhere and the node is a no-op - a very confusing way to spend an afternoon. It has to be lower.

Turning on full_skim_negative first. Start with defaults. It's not a stronger version of the same thing; it changes how the negative side of the estimate is built, and the difference in the image is large and often unflattering.

Disabling the flipping filter to fix an error. If the node complains that it needs x_t, the intended fix is to run it in a normal sampling context, not to flip the flag. The flag is there for the odd case where the filter misfires, at the cost of correct behaviour.

The slot conflict, again. ComfyUI has one CFG-function slot and every pack that does this fights for it. A stock RescaleCFG, Mahiro or RenormCFG node chained after this one replaces it, silently. CFG Plan Readout will tell you which rule actually ended up installed.

Expecting a free lunch at cfg 20. Skimming rescues a lot, but it isn't magic - at extreme scales you're asking the model to reconcile a difference it can't, and the flagged set grows until most of the image is skimming. Somewhere around 12–15 is where this pays off on SDXL; past that, drop the scale and fix the prompt.

CategoryCFG Megapack/papers/combining the two predictions

Inputs (6)

NameTypeDefaultDescription
modelMODEL—
scaleFLOAT-1.0-1–100The guidance scale w for this rule. -1 uses the sampler's cfg value.
skimming_scaleFLOAT7.00–30The scale the flagged values fall back to.
full_skim_negativeBOOLEANfalseSkim the negative side completely.
disable_flipping_filterBOOLEANfalseDrop the check against the current latent.
spaceCOMBOauto (the method's own)Where the rule is computed. Linear rules give the same image in any space; nonlinear ones do not. 'auto' uses the space the method was published in (noise for most, denoised for APG and the angle rule, velocity for flow models).

Outputs (1)

NameTypeDescription
MODELMODEL—