Backend sweep plus a full code audit of the stateful paths.
- The daemon now follows focus on every backend, not just KWin, and restores
your desktop colors when it is stopped or restarted. A failed apply or a
compositor hiccup no longer leaves it convinced a profile is active when it
isn't, and if no backend is ready at startup it keeps retrying instead of
staying dead for the session. - A broken
profiles.tomlno longer silently wipes your profiles: the daemon
and GUI log the parse error and keep the last good set. - On NVIDIA, leaving a game restores the Digital Vibrance you actually had
(say, from nvidia-settings autostart) instead of resetting it to zero. - Per-profile
outputsnow work: a profile listing specific monitors applies
only to those. Applying to several monitors reports exactly which ones
failed instead of claiming success if any single one worked. - Closing the GUI window exits the app unless the tray is running to bring it
back, instead of leaving an invisible process behind. Activity-log
timestamps are local time now, not UTC. - Profiles no longer match windows by profile name, so a profile called
"Steam" can't recolor the Steam client itself. - Plumbing with no user-visible surface: one shared backend selector across
CLI/GUI/tray/daemon, a restore-on-drop guard on every apply path, a fixed
DRM kernel-blob leak, gamescope property rollback on partial failure, and
NaN-proof saturation parsing everywhere input comes in. - Fix the nested gamescope fallback so its per-launch ReShade shader is written
to the directory gamescope actually searches,
$HOME/.local/share/gamescope/reshade/Shaders, instead of following
XDG_DATA_HOME. - Verify
satur8 run --via gamescopeon KDE Wayland / AMD RX 9070 XT by
wrappingglxgearsin nested gamescope and comparing0.0vs4.0
screenshots. - Improve the DRM-CTM backend's multi-GPU behavior by preferring a card with an
active CTM-capable CRTC and by applying the sharedalloutput target to all
active CTM-capable CRTCs. - Add DRM-CTM unit coverage for active CRTC detection, target resolution, and
partial apply success/failure. - Keep DRM/KMS listed as Implemented rather than Verified; runtime apply/off
verification remains deferred.