RescaleClassifierFreeGuidanceTest
The RescaleCFG ancestor that fixes plastic skin and color blowout
- model
- MODEL
If you've ever seen ComfyUI's core RescaleCFG node and wondered where it came from: here. RescaleClassifierFreeGuidanceTest is the direct ancestor, an implementation of the "Rescale Classifier-Free Guidance" paper (arxiv 2305.08891) from comfyanonymous's experiments pack. The mechanism is identical to the core node's - the multiplier default is even the same 0.7.
What it does, in plain terms: normal CFG amplifies the whole conditional difference, including all the noise and over-exaggeration that lives in its long tail. Rescale CFG instead measures the standard deviation of the conditional prediction, measures the standard deviation of the CFG result, and rescales the CFG result to match the conditional's. The "steering" keeps its intensity, but the dispersion - the part that turns skin plastic and colors radioactive - gets pulled back in.
The community noticed. The well-worn thread on r/StableDiffusion asking whether RescaleCFG is an "anti-slop node" (+86) is full of people reporting it fixes exactly that: better skin texture, less of the waxy look, on models like Flux dev and HiDream-I1 where CFG tends to over-polish. That's the signature of this technique, and it's why it survived the jump from experiment to core.
How it works
The code patches the sampler's CFG function. After computing x_cfg = uncond + cond_scale * (cond - uncond), it takes the standard deviation of the conditional (ro_pos) and of the CFG output (ro_cfg), rescales the CFG output by the ratio ro_pos / ro_cfg, then blends between the rescaled and original results using multiplier:
- multiplier = 1.0 - full rescale.
- multiplier = 0 - plain CFG, node does nothing.
- default 0.7 - most of the rescale, with a touch of the original left in so it doesn't flatten.
Inputs and output
- model - your checkpoint's MODEL.
- multiplier - FLOAT, 0 to 1, default 0.7. The blend between fully-rescaled and plain CFG.
Output is a single MODEL, wired between your checkpoint and the KSampler's model input. Set the KSampler's CFG wherever you like; this node keeps the blowout from following.
The catch vs. the core node
Worth being honest about: the core RescaleCFG node in ComfyUI does everything this one does and more. The core version converts the predictions into v-prediction space before rescaling, which matters on v-pred checkpoints (the NoobAI vpred family and friends); this experiment skips that step. So on standard SD 1.5/SDXL models, either works. On v-prediction checkpoints, use the core node - or the CFG++ samplers the vpred crowd reaches for anyway.
Installing it
ComfyUI Manager → search ComfyUI_experiments, or:
cd ComfyUI/custom_nodes
git clone https://github.com/comfyanonymous/ComfyUI_experiments
Restart ComfyUI. No dependencies. Look for it under custom_node_experiments.
Troubleshooting
- Images look flat or washed - multiplier 1.0 is aggressive on some models; back it to 0.5–0.7.
- Node seems to do nothing - check the multiplier isn't 0, and that the node sits between checkpoint and KSampler, not after the sampler.
- On a v-pred model and it misbehaves - use core ComfyUI's
RescaleCFGinstead, which handles v-pred properly.
This one's a keeper even as an experiment - it's the rare case where the "Test" node shipped a genuinely useful trick that ComfyUI decided was worth stealing.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| multiplier | FLOAT | 0.700–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |