FreeU
The 2023 sharpening trick that most modern models don't want anymore
- model
- MODEL
FreeU is a free lunch from the SD 1.5/SDXL era that mostly stopped being free. It patches the UNet to amplify the backbone features and dump the low-frequency garbage in the skip connections, and it genuinely made 2023 SDXL output sharper and less mushy with zero extra steps. The catch: it was tuned for convolutional UNets, and the models people actually run in 2026 - DiT-based flow-matching things like Z-Image, Flux, Wan - have neither the backbone structure it expects nor the same failure modes. Reddit mentions of FreeU peaked in early 2024 and have trickled to near zero since.
That's not the whole story though. If you're doing SD 1.5 or SDXL work - the ecosystem that's still alive in Illustrious, NoobAI, Pony - FreeU is a legitimate, cheap quality bump, and this is the original version that the community actually validated.
How it works
The original FreeU (from Chenyang Si's 2023 paper) targets two UNet stages at once. At the decoder blocks it multiplies the backbone half of the hidden channels by a boost factor - b1 at the outer block, b2 at the next one in - to strengthen the semantic features. At the same blocks it runs the skip-connection half through a Fourier filter that suppresses the low-frequency components (which is where the redundant, detail-blurring information lives), scaled by s1 and s2. The paper's argument is that skip connections carry useful high-frequency detail but also leak unwanted low-frequency content that fights the backbone.
In ComfyUI the whole thing is one output_block_patch that hooks the decoder, computes an FFT mask per block, and multiplies. Cheap, deterministic, no new weights.
Inputs and what to set
Four floats, and they map to the two-stage design:
b1(default 1.1) /b2(default 1.2) - backbone amplification at the two patched decoder stages.s1(default 0.9) /s2(default 0.2) - how aggressively the skip-connection low-frequencies get scaled down at those stages.
For classic SD 1.5 the paper-recommended values were b1 1.2, b2 1.4, s1 0.9, s2 0.2; the node's defaults (1.1/1.2/0.9/0.2) are the gentler SDXL-oriented set and are a fine start. Output is the patched MODEL for your sampler. It ships with ComfyUI core.
Common issues & troubleshooting
It can oversharpen into halos and edge artifacts. If faces start looking crunchy or you get ringing around high-contrast edges, drop b1/b2 toward 1.0 (which disables the amplification) before touching the s values.
Modern DiTs ignore it or get worse. The model_channels-keyed scale dict the patch uses assumes the classic UNet channel layout. On a transformer-based model there's often no matching block, so it silently does nothing - one of those nodes that "works" while being a no-op. Check that your model is a real UNet before expecting results.
FreeU_V2 exists for a reason. If you're on SDXL, try the V2 variant - it replaces the flat backbone boost with a spatial-average-scaled version that's notably less prone to artifacts. This original stays better suited to SD 1.5.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| b1 | FLOAT | 1.100–10 | — |
| b2 | FLOAT | 1.200–10 | — |
| s1 | FLOAT | 0.900–10 | — |
| s2 | FLOAT | 0.200–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |