Nodes/FreeU_Advanced/FreeU (Advanced Plus)
ComfyUI Node

FreeU (Advanced Plus)

FreeU, With Every Knob Exposed

By WASasquatch·Created 3 years ago·Updated 11 months ago· 123
FreeU (Advanced Plus)
  • model
  • MODEL
target_block
multiscale_mode
multiscale_strength1.000
slice_b1640
slice_b2320
b11.100
b21.200
s10.900
s20.200
b1_mode
b1_blend1.000
b2_mode
b2_blend1.000
threshold1
use_override_scales
override_scales# OVERRIDE SCALES # Sharpen # 10, 1.5

FreeU is that rare thing in image diffusion: a free quality boost. No extra model, no training, no new weights - the 2023 paper literally calls it "Free Lunch in Diffusion U-Net." The stock ComfyUI node gives you four knobs (b1, b2, s1, s2) and nothing else. WAS_FreeU is what happens when WASasquatch - the person behind the WAS Node Suite - decides four knobs aren't enough.

You reach for it when you want detail and contrast out of an SD1.5 or SDXL checkpoint without a LoRA, and you want to decide which part of the model does the work, not take the one-size-fits-all preset.

What it actually does

Diffusion UNets process features in blocks with specific channel counts - 1280 channels and 640 channels in the big down/up-sampling stages of SD-class models. FreeU's trick is two-part: it boosts a slice of those channels (the b side, which carries detail) and it shapes the high-frequency part of the signal in Fourier space (the s side, which is where sharpness lives).

The node clones your model in memory and registers block patches on it. When those 1280/640-channel features pass through, it:

  1. Slices off slice_b1 / slice_b2 channels (defaults 640 and 320), multiplies by b1 / b2, then blends the result back in using b1_mode / b2_mode at b1_blend / b2_blend strength.
  2. Runs the spectral path through a Fourier filter: FFT, shape the frequency mask with the multiscale_mode preset (Default, Sharpen, Edge-Enhancement, Bandpass, and the "Multi-" variants), scale it by s1 / s2 at threshold radius, then IFFT back.

The inputs that matter

Honestly, 90% of the value is in a few of these:

  • model - feed it the output of your Load Checkpoint. It clones it, so your actual model file is untouched.
  • target_block - input_block, middle_block, output_block, or all. Output block is where FreeU does most of its visible work; all is the "just make it better" setting.
  • b1 / b2 - the gain on the detail slice. Higher = stronger, and where people usually tune. Community wisdom for SD1.5/SDXL: b1 around 1.0–1.2, b2 around 1.2–1.6.
  • s1 / s2 - the Fourier scale, i.e. how much the frequency mask is boosted. s1 = 0.9 and s2 = 0.2 are the paper's defaults, and staying ≤ 1 keeps things sane.
  • slice_b1 / slice_b2 - how many channels of the block get boosted. Leave them unless you're chasing a specific artifact.
  • multiscale_mode / multiscale_strength - the frequency shaping preset and how hard it's applied. Default is safe; Sharpen is a fun experiment.

Optional extras: b1_mode / b2_mode (blending modes from plain inject through stable_slerp and linear dodge), threshold (mask radius), and use_override_scales + override_scales, which lets you type your own radius, scale pairs (one per line, #, // and ! are comments) instead of using a preset.

The output is a single patched MODEL, and it wires straight into your KSampler's model input - nothing else changes in the graph.

Installing it

It ships in the FreeU_Advanced pack alongside FreeU V2 and the Flux-focused Post-CFG SHIFT node. Easiest path:

  • ComfyUI Manager → Install Custom Nodes → search FreeU_Advanced → install, restart.
  • Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/FreeU_Advanced

Then restart ComfyUI. There's no requirements.txt in the pack and no model to download - it's pure PyTorch (torch FFT), which you already have. This is one of those rare installs that just works. One note: the category is _for_testing, so look under the test section of the node menu if it doesn't show up in search.

Where people get burned

  • Nothing visibly changes. The patches only fire on blocks with exactly 1280/640-channel features. Feed it a transformer-only architecture or a distilled model with different channel counts and it silently does nothing. Not a bug.
  • Flat or washed-out output. Exotic multiscale presets can gray things out. Switch to a stable preset (Sharpen, Pass-Through) or drop threshold / s1 / s2.
  • It's a quality knob, not a free pass. Push b2 too far and you get crunchy, oversharpened detail. A/B it - the whole point of the advanced version is that you can turn things down to where the stock node can't.

FreeU is a "free lunch," but the portion size is still your call.

Category_for_testing

Inputs (17)

NameTypeDefaultDescription
modelMODEL
target_blockCOMBOWhich UNet block(s) to patch.
multiscale_modeCOMBOFrequency shaping preset used by Fourier_filter.
multiscale_strengthFLOAT1.0000–1Intensity of multi-scale shaping [0-1].
slice_b1INT64064–1280Slice width (channels) affected in 1280-channel features.
slice_b2INT32064–640Slice width (channels) affected in 640-channel features.
b1FLOAT1.1000–10Gain multiplier applied to the b1 slice (1280-ch).
b2FLOAT1.2000–10Gain multiplier applied to the b2 slice (640-ch).
s1FLOAT0.9000–10Fourier scale at threshold for 1280-ch features.
s2FLOAT0.2000–10Fourier scale at threshold for 640-ch features.
b1_modeoptCOMBOBlending mode for b1 path.
b1_blendoptFLOAT1.0000–100Blend strength for b1 path.
b2_modeoptCOMBOBlending mode for b2 path.
b2_blendoptFLOAT1.0000–100Blend strength for b2 path.
thresholdoptINT11–10Base radius for the Fourier mask.
use_override_scalesoptCOMBOEnable manual override of scale presets.
override_scalesoptSTRING# OVERRIDE SCALES # Sharpen # 10, 1.5Custom scale lines: '<radius>, <scale>'. Comments with #,//,!

Outputs (1)

NameTypeDescription
MODELMODEL