FreeUExtreme
FreeU with the training wheels removed
- model
- input_config
- middle_config
- output_config
- MODEL
You know how ComfyUI ships a plain FreeU node that takes b1, b2, s1, s2 and calls it a day? This is that idea, rebuilt as a modular patch kit. FreeUExtreme patches a model with the FreeU / FreeU V2 effect, but instead of four magic numbers you get per-block configs you can schedule, blend, and stack. The README calls it a "build your own FreeU kit," and that's the accurate description.
FreeU, if you've never touched it, is a model patch that boosts detail by manipulating the U-Net's feature maps in the frequency domain - roughly, it trims low-frequency content from the skip connections and re-scales the backbone, which pushes the model toward sharper high-frequency detail without changing the checkpoint. ComfyUI core has a FreeU node because it works, but it's a blunt instrument. This node's whole reason to exist is control.
The inputs
At its simplest it's only two required inputs:
model- the MODEL to patch. Wire this between your checkpoint loader and your sampler and you're done.cpu_fft(default false) - whether FFT math runs on the CPU. Leave it off unless your GPU lacks native FFT support; the tooltip notes it costs performance.
Then come the three optional config sockets that make this "Extreme": input_config, middle_config, and output_config, all typed FRUX_CONFIG. Plug FreeUExtremeConfig nodes into them to tell the patch what to do to each part of the network. With nothing connected, the node still applies a default FreeU-style effect - the configs are the fine control, not the requirement.
Output is a single MODEL, which flows straight into your sampler. That's the whole wiring story: load → FreeUExtreme → sample.
What makes it better than stock FreeU
The FRUX_CONFIG chain (see the FreeUExtremeConfig article) lets you target backbone vs. skip layers, restrict the effect to a slice of each layer, apply it only between certain percentages of sampling, stack multiple configs, and blend filtered output with the original. You can, for example, hit only the input blocks, or apply one config early in sampling and another late. None of that exists in the stock node.
One honest note: FreeU V2 behavior (the hidden_mean mode in the config node) is the modern default and generally the one worth starting from. And because the effect is strongest when it's subtle, the scale/blend dials in the config nodes are where most people should live, not the all-or-nothing stock multipliers.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/blepping/ComfyUI-sonar
or install "ComfyUI-sonar" via ComfyUI Manager and restart. No model downloads - the node patches whatever checkpoint you already have. Same pack-wide caveat as everything else from blepping: inputs shift between revisions, so pin your git hash if you're chasing reproducible output.
Where people get burned
FreeU in general amplifies detail and artifacts - skin texture and halos alike. Start with the defaults, A/B against an unpatched pass on the same seed, and only then start slicing. The most common beginner mistake is stacking several aggressive configs because the node makes it easy, and ending up with something that looks embossed. The blend input exists precisely so you can dial the effect back to "noticeable but not weird."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | Model to patch. | |
| cpu_fft | BOOLEAN | false | Controls whether to perform FFT calculations on the CPU. May be necessary for some GPUs that don't have native support for FFT )operations at the cost of performance. |
| input_configopt | FRUX_CONFIG | Allows specifying configuration for input blocks. | |
| middle_configopt | FRUX_CONFIG | Allows specifying configuration for middle blocks. | |
| output_configopt | FRUX_CONFIG | Allows specifying configuration for output blocks. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |