Skip to content

Commit 22cbd3d

Browse files
committed
Sync ROADMAP, branding cleanup, README polish
1 parent 5ce3dd6 commit 22cbd3d

5 files changed

Lines changed: 103 additions & 0 deletions

File tree

MonitorControlPro.ps1

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,15 @@ if (-not (Test-Path $script:ProfilesPath)) { New-Item -ItemType Directory -Path
624624
$reader = New-Object System.Xml.XmlNodeReader $xaml
625625
$window = [System.Windows.Markup.XamlReader]::Load($reader)
626626

627+
# codex-branding:start
628+
try {
629+
$brandingIconPath = Join-Path $PSScriptRoot 'icon.ico'
630+
if (Test-Path $brandingIconPath) {
631+
$window.Icon = [System.Windows.Media.Imaging.BitmapFrame]::Create((New-Object System.Uri($brandingIconPath)))
632+
}
633+
} catch {
634+
}
635+
# codex-branding:end
627636
# Get all UI elements
628637
$monitorCanvas = $window.FindName("MonitorCanvas"); $selectedMonitorName = $window.FindName("SelectedMonitorName")
629638
$selectedMonitorRes = $window.FindName("SelectedMonitorRes"); $selectedMonitorInfo = $window.FindName("SelectedMonitorInfo")

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
<!-- codex-branding:start -->
2+
<p align="center"><img src="icon.png" width="128" alt="Monitor Control"></p>
3+
4+
<p align="center">
5+
<img alt="Version" src="https://img.shields.io/badge/version-preview-58A6FF?style=for-the-badge">
6+
<img alt="License" src="https://img.shields.io/badge/license-MIT-4ade80?style=for-the-badge">
7+
<img alt="Platform" src="https://img.shields.io/badge/platform-PowerShell-58A6FF?style=for-the-badge">
8+
</p>
9+
<!-- codex-branding:end -->
10+
111
# MonitorControl Pro
212

313
<p align="center">

ROADMAP.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# Roadmap
2+
3+
PowerShell/WPF utility for DDC/CI monitor control — brightness, contrast, color temp, input switching, RGB gain, gamma, VCP exploration. Roadmap prioritizes tray mode, hotkeys, and multi-GPU monitoring.
4+
5+
## Planned Features
6+
7+
### System Tray Mode
8+
- Persistent tray icon with brightness slider popup (like Twinkle Tray)
9+
- Per-monitor unison group / link mode
10+
- Auto-hide main window to tray on minimize
11+
- Tray-click cycling through saved profiles
12+
13+
### Hotkeys & Automation
14+
- Global hotkey registration (RegisterHotKey WinAPI) — brightness up/down, input switch, profile cycle
15+
- Per-application profile switching (monitor foreground window exe → apply profile)
16+
- Scheduled profile switching (sunrise/sunset via SunCalc, or explicit times)
17+
- Idle-dim on inactivity (GetLastInputInfo polling)
18+
19+
### Display Controls
20+
- Extended VCP set: Gamma (0x72), OSD Language (0xCC), OSD Transparency, Power Indicator LED
21+
- Dynamic contrast toggle (VCP 0xFC where supported)
22+
- Picture mode presets (Cinema/Game/Web) via VCP 0xDC
23+
- Dual-Input PiP/PbP control for ultrawide monitors that support it
24+
25+
### GPU Monitoring
26+
- NVAPI integration for Digital Vibrance (stop being a placeholder)
27+
- AMD ADL SDK for Radeon temperature/clock/fan
28+
- Intel Arc / iGPU monitoring via IGCL
29+
- CPU temperature via LibreHardwareMonitor/OpenHardwareMonitor lib
30+
- Per-GPU FPS overlay (PresentMon integration)
31+
32+
### Laptop Support
33+
- WMI fallback (`WmiMonitorBrightnessMethods`) for integrated laptop displays
34+
- Ambient light sensor polling (`ILightSensor`) for auto-brightness
35+
- Battery-aware profile: dim on battery, bright on AC
36+
37+
### Data & Profiles
38+
- Profile JSON schema version + migration on load
39+
- Export/import profile bundle (all profiles at once)
40+
- Cloud-sync profiles via OneDrive/Dropbox folder pointer
41+
- Profile scheduling UI (graphical timeline, not just trigger rules)
42+
43+
## Competitive Research
44+
- **Twinkle Tray** — tray leader; borrow slider popup UX and time-based automation precision.
45+
- **Monitorian** — clean WPF unison-mode implementation; reference for multi-monitor grouping.
46+
- **ClickMonitorDDC** (discontinued) — classic feature density; fill that gap.
47+
- **LightBulb (Tyrrrz)** — gamma-based color temp with smooth transitions; match the interpolation curve.
48+
49+
## Nice-to-Haves
50+
- MQTT/Home Assistant integration (monitor-as-device with brightness entity)
51+
- NUC/mini-PC HDMI-CEC remote control compatibility
52+
- Stream Deck plugin (brightness/input as buttons)
53+
- Per-monitor wallpaper switcher (stretches existing WPA work)
54+
- OSD overlay rendered by the app itself (dxgi output duplication) when monitor lacks OSD
55+
- VCP code crowdsource database (users share supported VCPs by monitor model)
56+
57+
## Open-Source Research (Round 2)
58+
59+
### Related OSS Projects
60+
- https://github.com/emoacht/Monitorian — WPF/.NET, Microsoft Store + Winget, per-monitor range adjustment, WMI + DDC/CI
61+
- https://github.com/xanderfrangos/twinkle-tray — Electron tray app, hotkey bindings, brightness normalization across monitors, VCP codes (`--VCP=0xD6:5`)
62+
- https://github.com/hensm/ddccli — .NET CLI, scriptable brightness/contrast
63+
- https://github.com/ddccontrol/ddccontrol — classic Linux DDC/CI stack, reference for VCP code tables
64+
- https://github.com/unix755/displayController — Go Windows DDC/CI package, full VCP matrix (brightness/sharpness/contrast/RGB/input/power)
65+
- https://github.com/Defozo/ddc-ci-control-bridge — MCP server + MQTT client for Home Assistant integration
66+
- https://github.com/synle/display-dj — cross-platform (Win/macOS) Electron DDC/CI with hotkey adjust
67+
- https://github.com/musqz/ddc-slider — ddcutil backend with per-monitor controls, state cache, tray variants
68+
69+
### Features to Borrow
70+
- Brightness normalization across heterogeneous panels (twinkle-tray) — a 50% slider produces perceptually equal brightness on all monitors
71+
- Global hotkey bindings for brightness +/- on specific or all displays (twinkle-tray)
72+
- Arbitrary VCP code send (e.g. `0xD6` for power mode) instead of hardcoded brightness/contrast only (twinkle-tray `--VCP`)
73+
- MCP server interface for AI/agent integration (ddc-ci-control-bridge) — let Claude/Copilot adjust monitors via prompt
74+
- MQTT Home Assistant integration (ddc-ci-control-bridge) — ties monitor state into smart home scenes
75+
- Per-monitor adjustable range (monitor X: 20-80%, monitor Y: 0-100%) so the slider maps to each display's usable range (Monitorian)
76+
- Brightness state cache with disk persistence (musqz/ddc-slider) — restore last-used values on boot before DDC handshake
77+
- Input-source switching via VCP 0x60 (displayController Go package) — one-click KVM-like monitor input switching
78+
79+
### Patterns & Architectures Worth Studying
80+
- WMI path vs low-level DDC/CI path — Monitorian falls back between them because some docks only expose one; MonitorControl should probe both
81+
- VCP capabilities string parsing (`0xF...`) — interrogate monitor for supported codes instead of hardcoding (ddccontrol, Monitorian)
82+
- Scheduled/ambient brightness automation — sunrise/sunset curves driving VCP 0x10 (display-dj pattern)
83+
- Tray-only minimal UI vs full control panel — Monitorian ships a tray popup, Twinkle Tray a richer overlay; MonitorControl can do both with a mode switch
84+
- Cable/dock compatibility warnings — VGA/DVI and some HDMI adapters break DDC, surface a "DDC not detected" banner with docs link (Monitorian compatibility notes)

icon.ico

14.7 KB
Binary file not shown.

icon.png

1.2 MB
Loading

0 commit comments

Comments
 (0)