** ScreenGenie Release Notes **

v26.4.3210
Enhancement: Primary monitor can now be configured via Primary = Yes under [Monitor 1] or [Monitor 2] in screengenie.ini
Change: Display numbering in the GUI now matches Windows 11 conventions (1, 2, 3 — not the internal DISPLAY number)

v26.4.3212
Enhancement: New setting Deduplicate = No under [Settings] — when set, ScreenGenie will not intervene when monitors are duplicated
Enhancement: Brightness and contrast can be adjusted even when Deduplicate = No

v26.4.3217
Bugfix: Name and serial number of external monitors were sometimes swapped in the GUI after changing the primary monitor in Windows
Bugfix: Saving via Save → This Model or Save → This Monitor only saved the first monitor when Sync Monitors was enabled — both monitors are now saved
Bugfix: [Monitor#<serialnumber>] section was automatically created in screengenie.ini without any values — this section is now only created when saving via Save → This Monitor

v26.4.3218
Change: Resolution and refresh rate are now applied before the monitor layout (preset, vertical alignment, ForceLeft/Right). This ensures that vertical alignment is calculated based on the correct screen resolution.

v26.v26.4.3219
Bugfix: Resolution and refresh rate were not applied in engine mode due to monitor discovery being skipped. Monitor discovery is now always performed before applying resolution and refresh rate settings.

v26.4.3220
Change: Removed redundant monitor discovery step in engine mode after layout application, improving engine pipeline performance.

v26.4.3221
Bugfix: After a ForceLeft/ForceRight swap combined with a primary monitor change, the GUI showed only one monitor. ScreenGenie now waits for the display layout to settle before setting the primary monitor, and allows additional time for Windows to complete the primary monitor change before re-detecting monitors.

v26.4.3222
Enhancement: Startup progress indicator now shows granular steps during layout application, including resolution & refresh rate, ForceLeft/Right evaluation, display positioning, vertical alignment and setting the primary monitor. All steps are available in all supported languages (EN, DE, FR, ES, IT, NL, DK, SE, NO).

v26.4.3223
Change: ScreenGenie starts up noticeably faster in typical scenarios where displays are already configured correctly
Bugfix: In some situations, ScreenGenie would apply settings multiple times during startup — this has been resolved

v26.4.3224
Bugfix: When ForceLeft/Right swapped monitor positions, the primary monitor was set based on the pre-swap order, causing an unnecessary second primary monitor change with brief black screens. The primary monitor is now always set after the display positions have been finalized.

v26.v26.4.3225
Bugfix: After applying a refresh rate or resolution change, ScreenGenie did not wait long enough for monitors to come back online, causing the second monitor to temporarily disappear from the pipeline. The settle delay is now extended when an actual change was applied.
Bugfix: Post-pipeline verification ran twice in engine mode, causing unnecessary duplicate checks.

v26.4.3226
Bugfix: After a ForceLeft/Right swap combined with a refresh rate change, the primary monitor was incorrectly overwritten during post-pipeline verification. Primary monitor verification has been removed from the verification step as it is now correctly handled earlier in the pipeline.

v26.5.3101
New: ScreenGenie Agent is now a persistent tray application, running in the background after Windows login
New: Press Ctrl+Alt+S to launch the ScreenGenie GUI from anywhere, including locked shell environments
New: Press Ctrl+Alt+R to trigger a silent display refresh from anywhere
New: Tray context menu provides quick access to Open ScreenGenie, Run Engine and Exit
Change: Agent is automatically started at Windows login for all users after installation

v26.5.3102
Bugfix: Pressing Ctrl+Alt+R or using "Run Engine now" from the tray menu now starts the engine immediately, without the configured agent delay. The delay is still applied for automatic triggers (power and display events).

v26.5.3103
New: ScreenGenie Agent now sends a telemetry heartbeat at configurable intervals, reporting live monitor values (brightness, contrast, resolution, refresh rate, firmware, connection) without making any changes to the display configuration
New: Heartbeat is sent immediately on agent startup, then repeated at the configured interval
New: Configure the heartbeat via [Telemetry] Enabled = Yes and [Telemetry] Interval = 60 (minutes) in screengenie.ini

v26.5.3104
New: AutoBrightness — the Agent now gradually adjusts monitor brightness based on sunrise and sunset, calculated automatically from the Windows timezone
New: Daytime brightness is read per monitor from screengenie.ini ([Monitor#Serial], [Model] or [Monitor 1/2]), ensuring each monitor uses its own configured baseline
New: Nighttime brightness is set via NightBrightness in [Schedule]. If NightBrightness is equal to or higher than the daytime value, no adjustment is made
New: Transitions are gradual — configurable via TransitionStep (% per interval) and TransitionInterval (minutes)
New: Manual override detection — if a user manually adjusts brightness beyond the configured Deadband, AutoBrightness pauses for PauseAfterManualMinutes minutes before resuming
New: Configure via [Schedule] in screengenie.ini: Enabled, NightBrightness, TransitionStep, TransitionInterval, Timezone, PauseAfterManualMinutes, Deadband

v26.5.3105
Bugfix: Engine pipeline crashed with an ArgumentOutOfRangeException when no DDC-capable monitors were detected at startup, for example when a monitor is not yet ready after being connected
Bugfix: Engine pipeline now retries monitor discovery once after a 3 second delay when no monitors are found, instead of immediately aborting
Bugfix: Engine pipeline aborts gracefully (exit code 0) when no monitors are detected after the retry, instead of crashing with exit code 2

v26.5.3106
Change: Corrected the ScreenGenie version number to 26.5 to accurately represent the release containing the Tray Agent.

v26.5.3107
Stability fix: layout engine aborts gracefully on unstable display enumeration
In rare cases, typically during the first connection of external monitors via a docking station, Windows could enumerate display connectors before all DisplayPort links were fully initialized. This caused one external monitor to be temporarily misclassified as the internal laptop screen, resulting in incorrect screen positioning.
ScreenGenie now detects this condition: if more than one display is classified as internal during a layout apply, the operation is aborted and a warning is logged. The next display change event (which fires automatically once Windows finishes enumerating) will trigger a new layout apply with correct classifications.
This issue was self-correcting in practice — subsequent reconnections worked correctly — but could cause a brief incorrect layout on the very first dock connection after a cold boot or driver initialization.