# FreezeFX blur design

`hyprtile-freezefx` intentionally does not run a continuous screencopy loop.

1. Capture the focused Hyprland output once through `wlr-screencopy`.
2. Downsample by averaging source pixels.
3. Run several separable horizontal + vertical box passes on the small image.
   Repeated box passes approximate a broad Gaussian blur without ghost images.
4. Bilinearly upscale once into an ARGB Wayland SHM buffer.
5. Present that buffer as a click-through `wlr-layer-shell` overlay.
6. After step 5 there is no capture loop and no blur computation per frame.

Presets trade startup work against blur radius:

- soft: downscale 2, radius 3, 2 passes
- medium: downscale 3, radius 4, 2 passes
- default: downscale 4, radius 4, 3 passes
- strong: downscale 5, radius 5, 3 passes
- extreme: downscale 7, radius 6, 4 passes

This is intended for loading/focus/freeze transitions. A later live blur should use
an EGL/GLES multi-pass renderer with reusable FBOs rather than continuous CPU blur.
