A lightweight Windows utility that automatically enables HDR when you launch configured applications and disables it when you close them.
Click any preview to view full size
EasyHDR monitors running processes at regular intervals (500-1000ms). When a configured application starts, HDR is enabled globally across all capable displays within 1-2 seconds. When the last monitored application closes, HDR is automatically disabled. A 500ms debounce delay prevents rapid toggling if applications restart quickly.
The application uses Windows Display Configuration APIs to control HDR state, with version-specific implementations for Windows 10, Windows 11, and Windows 11 24H2+.
Requirements:
- Windows 10: 21H2 (Build 19044) or later
- Windows 11: 21H2 (Build 22000) or later
- HDR-capable display
Steps:
- Download the latest release from the Releases page
- Extract
easyhdr.exeto a folder of your choice - Run
easyhdr.exe - On first launch, Windows Defender SmartScreen will appear - click "More info" then "Run anyway"
- Click "Add Application" and select the
.exefiles you want to monitor - Minimize to system tray
Configuration is stored at %APPDATA%\EasyHDR\config.json and saved automatically.
Click any preview to view full size
Launch: Bypassing SmartScreen warning (unsigned app)
Add Application: Adding applications to monitor
Core:
slint- GUI frameworkwindows- Windows API bindingsserde/serde_json- Configuration serializationtracing/tracing-subscriber- Loggingparking_lot- Synchronization primitives
Windows Integration:
winreg- Registry access for auto-starttray-icon- System tray integrationrfd- Native file dialogstauri-winrt-notification- Toast notificationsreqwest- Update checking
Baseline performance metrics (measured with Criterion on release builds):
- Config Serialization: ~20 µs
- Config Deserialization: ~35 µs
- Config Round Trip: ~55 µs
- HDR State Detection: Platform-dependent (Windows only)
Run benchmarks: cargo bench
To detect performance regressions, compare new benchmark results against these baselines. Criterion automatically tracks changes between runs and flags statistically significant regressions (>5% slower).
Three fuzz targets are available to test robustness:
fuzz_config_json- Tests configuration JSON parsing for crashes/panicsfuzz_process_name- Tests process name extraction from arbitrary pathsfuzz_windows_api- Tests Windows API structures and bit field logic
Running fuzzing targets:
# Install cargo-fuzz (requires nightly)
cargo install cargo-fuzz
# Run a specific fuzz target for 60 seconds
cargo +nightly fuzz run fuzz_config_json -- -max_total_time=60
# Run all targets sequentially
cargo +nightly fuzz run fuzz_config_json -- -max_total_time=60
cargo +nightly fuzz run fuzz_process_name -- -max_total_time=60
cargo +nightly fuzz run fuzz_windows_api -- -max_total_time=60This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE for details.