# sd-webui-freeu implementation of [FreeU](https://github.com/ChenyangSi/FreeU) as an [a1111 sd webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) extension At each of the 3 stages of the UNet decoder: - Apply a scalar on a window over the features of the backbone - Tame the frequencies of the skip connection ## Settings - Start At Step: do not apply FreeU until this sampling step is reached - Stop At Step: apply FreeU until this sampling step is reached - Transition Smoothness: see $k_{smooth}$ in [this desmos graph](https://www.desmos.com/calculator/ngcqo5ictm) - Backbone n Scale: scalar applied to the backbone window during UNet stage n - Backbone n Offset: offset of the window, 1 is the same as 0 as the window wraps around the downsampled latent features - Backbone n Width: width of the window applied to the backbone - Skip n Scale: scalar applied to the low frequencies (low end) of the skip connection during UNet stage n - Skip n High End Scale: scalar applied to the high frequencies (high end) of the skip connection - Skip n Cutoff: ratio that separates low from high frequencies, 0 means to control the single lowest frequency with "Skip n Scale" and 1 means scale all frequencies with "Skip n Scale" ## API You can pass a single dict as the alwayson script args when making API calls: ```json { "alwayson_scripts": { "freeu": { "args": [{ "enable": true, "start_ratio": 0.1, "stop_ratio": 0.9, "transition_smoothness": 0.1, "stage_infos": [ { "backbone_factor": 1.2, "backbone_offset": 0.5, "backbone_width": 0.75, "skip_factor": 0.9, "skip_high_end_factor": 1.1, "skip_cutoff": 0.3 }, { "backbone_factor": 1.4, "backbone_offset": 0.5, "backbone_width": 0.75, "skip_factor": 0.2, "skip_high_end_factor": 1.1, "skip_cutoff": 0.3 }, { "backbone_factor": 1.1, "backbone_offset": 0.5, "backbone_width": 0.75, "skip_factor": 0.9, "skip_high_end_factor": 1.1, "skip_cutoff": 0.3 } ] }] } } } ``` It is possible to omit any of the entries. For example: ```json { "alwayson_scripts": { "freeu": { "args": [{ "start_ratio": 0.1, "stage_infos": [ { "backbone_factor": 0.8, "backbone_offset": 0.5, "skip_high_end_factor": 0.9 } ] }] } } } ``` Here, since there is a single dict in the `stage_infos` array, freeu will only have an effect during the first stage of the unet. If you want to modify only the second stage, prepend the `"stage_infos"` array with 1 empty dict `{}`. If you want to modify only the third stage, prepend the `"stage_infos"` array with 2 empty dicts. If `"stop_ratio"` or `"start_ratio"` is an integer, then it is a step number. Otherwise, it is expected to be a float between `0.0` and `1.0` and it represents a ratio of the total sampling steps.