A tiny, native Windows screen dimmer that protects OLED screens from burn-in, respects your eyes, and values your privacy.
IdleDimmer is a per-monitor screen dimming utility for Windows 10 and 11. It overlays a transparent black layer on each display you choose to reduce eye strain and protect OLED panels from static burn-in. You can dim a second screen to 30% for late-night reading while keeping your main monitor at 80% — without flickering the OSD, fighting DDC, or installing a 50 MB Electron wrapper.
Built in native C++23 with Direct2D and the raw Win32 API. ~150 KB on disk. Zero runtime dependencies. Zero telemetry. Zero ads.
Desktop Bridge MSIX package. Auto-updates. Sandbox-friendly. Free.
Each connected display gets its own on/off toggle and a 0–90% dim slider. Drag a slider to auto-enable dimming for that monitor. Disable one monitor and leave the rest at full brightness — no group lock-in, no "all-or-nothing" mode.
Set a timeout (1–60 minutes) and an idle dim level (up to 100% black). When the system reports no keyboard or mouse input, the overlays fade in to prevent static element burn-in on OLED displays. When activity resumes, they fade out. The cursor auto-hides during idle dimming and reappears the moment you touch the mouse.
Add any process to the blocked list (Steam, MPC-HC, mpv, Plex, your TV app — whatever you use for video). When a blocked app is in the foreground or is playing audio through the default audio endpoint, dimming is automatically suspended so you never get a darkened video.
When Direct3D runs fullscreen (games) or a presentation app takes over the shell, dimming fades out. Detection is throttled to a 5-second cadence to keep CPU and Windows Defender happy.
A monochrome "light mode" wash for low-light sessions. Off by default — the default dim is a neutral black.
One-click toggle in the settings panel to register a HKCU\...\Run entry. No scheduled tasks, no services, no startup folder pollution.
A single "Check for Updates" button pings GitHub's public releases API to compare your version against the latest. No background updater, no auto-install, no elevated-process tricks. Off by default.
Settings, Run-key entry, Start Menu shortcut — all removed. No leftover files, no leftover registry keys, no leftover services.
Set a start and end time for automatic dimming. The scheduler uses two compact sliders (15-minute increments) for quick setup — default is 22:00 to 07:00 for overnight dimming. Toggle it on and forget it.
Every config change triggers a sleek, click-through notification at the bottom-right of your primary monitor — showing what changed without stealing focus or intercepting input.
Save your entire config as a portable .ini file and share it across machines. Import a previously exported profile with one click — no manual file editing needed.
- Tray-resident. Closing the settings window leaves a single tray icon. No background window, no persistent notification.
- One process, ~3 MB working set. Verified idle.
- No driver, no kernel component, no service. Standard user-mode Win32 application.
- Single-instance via a named mutex. Launching the EXE twice just brings up the existing window.
- Defender-friendly. Heavy API calls (process enumeration, audio session polling, shell32 notification state) are throttled to a 5-second cadence. No
SetSystemCursor, noCreateToolhelp32Snapshot, noHWND_BROADCASTpower messages.
| Executable size | 150 KB (standalone), 140 KB (MSIX) |
| Config file size | < 1 KB at %APPDATA%\IdleDimmer\dimmer.ini |
| Memory footprint | ~3 MB working set at idle |
| Disk footprint | 150 KB exe + 1 KB config |
| Runtime dependencies | None. Statically linked against Windows API. |
| Install location | %LOCALAPPDATA%\Programs\IdleDimmer\ (or per-user MSIX location) |
| Permissions used | Standard user. No UAC prompts, no admin elevation. |
| Supported OS | Windows 10 1809+ and Windows 11 |
| Architecture | x64 |
The app collects no personal data, no telemetry, and no analytics. The only outbound network request is an optional manual "Check for Updates" call to GitHub's public API, which contains no identifying information.
Full policy: docs/privacy.html
Source is open. You can audit every line: src/
- Windows 10 or 11 (x64)
- Visual Studio 2022 (MSVC
cl.exe+rc.exe), or - LLVM-MinGW (
clang+++llvm-windres)
build.batAuto-detects VS 2022, compiles resources, links the app.
llvm-windres resources\resources.rc -O coff -o resources\resources.o
clang++ -O2 -std=c++23 -mwindows -Os -s -mguard=cf -fms-extensions -static ^
-o IdleDimmer.exe ^
src\main.cpp src\MainWindow.cpp src\MainWindowDraw.cpp src\MainWindowInput.cpp src\DimmerManager.cpp src\ConfigManager.cpp ^
resources\resources.o ^
-lgdi32 -ld2d1 -ldwrite -ldwmapi -lole32 -luuid -lwinhttp -lversion -lcomdlg32 ^
-Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va -Wl,--subsystem,windowsmsix\build_msix.batRequires Windows 10 SDK 10.0.22621 (winget install --id=Microsoft.WindowsSDK.10.0.22621 -e --silent).
| Component | File | Purpose |
|---|---|---|
| Entry point | src/main.cpp |
COM init, Per-Monitor DPI v2, single-instance mutex, message loop |
| Settings UI | src/MainWindow.cpp |
D2D-rendered settings panel, slider cards, toggle switches |
| Overlay manager | src/DimmerManager.cpp |
Per-monitor layered overlay windows, fade animation, video detection |
| Config I/O | src/ConfigManager.cpp |
JSON-like config at %APPDATA%\IdleDimmer\dimmer.ini |
Window classes: IdleDimmerMainClass, IdleDimmerOverlayClass.
Overlay style: WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST.
IdleDimmer is licensed under the GNU General Public License v3.0 or later (GPLv3-or-later). See LICENSE for details.
Copyright © 2026 UnDadFeated.