Skip to content

v0.3.0 — telemetry, state file, resume + NVML recovery

Choose a tag to compare

@I4cTime I4cTime released this 15 Sep 04:53
· 6 commits to main since this release

Telemetry

  • dGPU power draw, graphics clock, VRAM used/total, and a top-5 per-process VRAM breakdown on every tick — in the GUI (new VRAM panel with sparkline, session peak and per-process rows), the tray tooltip, and the CLI.
  • Process names come from /proc argv0 with NVML as fallback, so Chromium-style command lines and Wine/Proton Windows paths reduce to a clean binary name. Game detection is rebuilt on the same list; one NVML pass per tick feeds both.
  • cryoctl status prints a human summary (--json for the raw frame). cryoctl watch --log FILE.csv appends a CSV stream for long leak-hunt sessions.

Robustness

  • /etc/cryo/config.json is now overrides-only and the daemon never rewrites it. Runtime state (last lighting, the curves-off latch a manual boost sets) moves to /var/lib/cryo/state.json. Flipping the curves switch clears the latch. A broken config or state file logs and falls back to defaults instead of keeping the daemon — and the Thermal Guard — down.
  • NVML is retried every 30 s while unavailable, so starting before the NVIDIA driver loads no longer disables game detection for the session.
  • The lighting controller is reopened once on a USB error.
  • New reapply op / cryoctl reapply re-asserts lighting, platform profile and NVML; cryod-resume.service runs it after suspend and hibernate.
  • Telemetry subscribers that are closing or stop reading are dropped instead of buffered forever.

Packaging

  • cryod.service: After=systemd-modules-load.service, StartLimitIntervalSec=0, generic description.
  • The installer ships and enables cryod-resume.service, restarts the daemon on re-run (the update path), and refuses to run without a sudo caller instead of falling back to a hardcoded username.
  • pytest suite (37 tests) wired into CI.

Upgrading

cd cryo && git pull && sudo ./packaging/install.sh

Existing config files keep working; they are simply treated as overrides from now on.