⚠️ The blur is invisible to screen capture — it does NOT hide content from screen shares. On Windows the overlay excludes itself from capture (WDA_EXCLUDEFROMCAPTURE), so screen shares (Teams/Zoom/OBS), screenshots (Win+Shift+S), and recordings see straight through it to the unblurred content. It hides things from people looking at your physical screen — shoulder surfers, phone cameras — not from viewers of your share. The non-Windows fallback is no better for shares: each re-grab briefly reveals the raw content. Do not rely on this tool to redact secrets in a broadcast.
A frameless, always-on-top window that blurs the live desktop behind it with
an adjustable blur radius. It captures the region behind the window and
re-blurs it ~25×/sec, so it tracks moving content like video. Move it over
anything you want softened on your own screen — a distraction, a spoiler,
something you'd rather not have visible to people around you. Drag to
reposition, drag the corner to resize, +/- to change how strong the blur is.
Single file, one dependency (PySide6-Essentials). No image library — the blur is a downscale + smooth-upscale at the chosen radius.
pip install -r requirements.txt
python blur_overlay.py| Action | How |
|---|---|
| Move | left-click drag anywhere on the window |
| Resize | drag the bottom-right corner (diagonal grip) |
| Blur strength (minimal ↔ maximum) | + / - |
| Quit | right-click the window, or Esc (when focused), or Ctrl+C in the terminal |
Right-click is the most reliable quit: a frameless always-on-top window doesn't
always hold keyboard focus, so Esc can be a no-op until you click it first.
To blur what's behind the window without capturing its own output, the overlay excludes itself from screen capture, then grabs the region under it and blurs it:
- Windows:
SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE)(Win10 2004+) hides the window from capture, so it re-grabs continuously at ~25 fps — live and flicker-free, tracks video. - macOS: the grab needs Screen Recording permission (System Settings → Privacy & Security → Screen Recording); without it the capture returns the wallpaper instead of window content. There's no capture-exclusion here, so the hide-during-grab fallback below applies.
- Linux / other: there's no capture-exclusion API, so it briefly hides the window during each grab (slight flicker) and refreshes on interaction rather than continuously. Wayland restricts screen capture and may return blank.
python blur_overlay.py --selfcheck # verifies the blur math headless- NVIDIA ShadowPlay / Instant Replay refuses desktop capture while the
overlay runs ("python is blocking") — its capture-exclusion reads as
protected content to NvFBC. Run
python blur_overlay.py --no-excludeto record: the blur then shows up in the recording, but it's static (refreshes on move/resize/+/-) and each refresh briefly flashes the raw content. OBS is unaffected either way — it records through the overlay as if it weren't there. - Continuous capture uses some CPU while running; heavier for large windows.
- Coordinates are logical pixels; on mixed-DPI multi-monitor setups the grabbed region can be slightly offset. Fine at a single scale factor.
Existing tools blur the whole screen via hotkey and aren't movable regions: BlurMe, pc-blur. OpenScreen has blur regions but is a screen-recorder, not a live desktop overlay. This tool fills the gap: a live, draggable, resizable, adjustable-radius blur region.
MIT — see LICENSE. Contributions welcome; see CONTRIBUTING.md.