Commit Graph
19 Commits
Author SHA1 Message Date
Pakobbix 06db52e8ac Merge pull request 'fix: fan settings persistence, profile indicator, and point removal' (#6) from fix/fan-settings into main
Reviewed-on: #6
2026-09-02 15:26:15 +00:00
ARIA d9260007d1 fix: fan settings persistence, profile indicator, and point removal
Address three fan-settings issues:

1. Profile view: show a fan icon next to a profile's name when it has a
   saved fan curve, so it's clear which profiles carry custom fans.

2. Fan curve persistence: the active fan curve was in-memory only and lost
   on every server restart. It is now persisted per-GPU in
   /etc/nvcurve/config.json (fan_curves) and re-applied at server startup,
   so an applied curve survives restarts. All fan-curve state changes route
   through _activate_fan_curve/_deactivate_fan_curve helpers that keep the
   persisted state in sync (apply, reset, and profile apply).

3. Point removal: the fan-curve remove button was nearly invisible. The
   chart remove control is now always faintly visible with an X glyph, the
   table remove button is larger with a tooltip, and a hint line explains
   how to add/remove points.

Also includes a formatting pass over the two edited frontend files.
2026-09-02 17:25:09 +02:00
ARIA 9cf2009d2c removed old markdown files 2026-09-02 16:58:31 +02:00
Pakobbix 0320cea895 Merge pull request 'feat: add Dashboard tab with live GPU overview' (#5) from feat/dashboard-tab into main
Reviewed-on: #5
2026-09-02 14:57:54 +00:00
ARIA da507d55bb feat: add Dashboard tab with live GPU overview
Add a new Dashboard tab as the default/first tab (Dashboard - Curve -
Performance - Fans) showing a full GPU overview.

Backend:
- New hal/dashboard.py: one-shot static GPU info via NVML (VBIOS, CUDA
  cores, compute capability, bus width, BAR1/CPU-accessible VRAM,
  Resizable BAR, PCIe max, max clocks, power limits, temp thresholds,
  persistence mode, fan count, serial, board part number, UUID).
  ROP count and VRAM type are best-effort from a per-model table since
  NVML does not expose them.
- New /api/dashboard endpoint.
- MonitoringSample gains live throttle_reasons (+label), PCIe link
  width/generation (downclocks when idle, so read per poll), and VRAM
  temp (from the MEMORY thermal sensor, if exposed).

Frontend:
- New Dashboard component: critical top row (throttling, voltage,
  GPU/VRAM temps), full live-monitor grid with sparklines, and a static
  GPU-information grid. Unavailable fields are omitted.
- useDashboard hook + DashboardInfo type + api.client dashboard().

Also: restrict CORS to localhost origins (end-anchored), make
_int_key_deltas fail closed on bad keys, and clean up lint blockers in
server.py/monitoring.py.
2026-09-02 16:56:47 +02:00
Pakobbix 3c55263250 Merge pull request 'feat: multi-user authentication (dual mode)' (#4) from feat/multi-user-auth into main
Reviewed-on: #4
2026-09-02 13:47:26 +00:00
ARIA bbd692ea2e feat: multi-user authentication (dual mode)
Add optional login protection for the web UI/API, intended for shared
machines (e.g. AI servers). Dual mode: with no users configured the API
and web UI are open (as before); once at least one user exists, every
/api/* and /ws/* endpoint requires a valid session.

- bcrypt password hashing: passwords stored as $2b$ hashes in
  /etc/nvcurve/users.json (0600, root-owned); plaintext never persisted.
- 24-hour sessions: HttpOnly cookie for browsers, Authorization: Bearer
  token for CLI/scripts; in-memory, invalidated on server restart.
- Multi-user: multiple named accounts (no shared-password mode).
- New CLI: nvcurve user add|list|remove|set-password (root for mutating
  ops; password always prompted, never a CLI argument).
- New endpoints: GET /api/ping (public), /api/auth/status|login|logout|users.
- Web UI: sign-in screen when auth is enabled; status bar shows the
  signed-in user with sign-out; expired sessions (401) re-show sign-in.
- Brute-force lockout: 10 failed logins/IP within 5 min -> 15 min lockout.
- New dependency: bcrypt.

Also: LSP config (pyrightconfig.json) pointing at the project .venv, and
small error-handling cleanups in daemon.py/server.py.
2026-09-02 15:21:35 +02:00
Pakobbix af23a10f25 Merge pull request 'fix: retry NvAPI init on autoload to handle early boot race' (#3) from fix/autoload-nvapi-retry into main
Reviewed-on: #3
2026-08-09 06:29:58 +00:00
hhofmann f417297713 fix: retry NvAPI init on autoload to handle early boot race
init_nvapi() previously called sys.exit(1) directly, which raised
SystemExit (uncaught by except Exception). The autoload subprocess
would die instantly if the NVIDIA driver wasn't fully loaded at boot.

- Raise RuntimeError from init_nvapi() so callers can handle failures
- Add 16-attempt retry loop (2s interval, 32s total) in run_autoload()
2026-08-09 08:28:59 +02:00
Pakobbix 0c1f853a5c Merge pull request 'docs: add source install instructions and systemd service guide' (#2) from docs/source-install-systemd into main
Reviewed-on: #2
2026-08-08 13:51:08 +00:00
ARIA 76b491b913 docs: add source install instructions and systemd service guide
- Replace PyPI-only install with full source build workflow (npm + uv)
- Add Blackwell GPU fork notice with extended memory offset and fan control
- Add systemd service section: install commands, unit file template, config reference
- Update docs/Installation.md to match npm + uv tool install . workflow
- Update docs/Overview.md with Blackwell-specific capabilities
2026-08-08 15:50:52 +02:00
Pakobbix d2d05bbe6d Merge pull request 'feat: add fan curve control via temperature-based fan speed curves' (#1) from feature/fan-curve into main
Reviewed-on: #1
2026-08-01 14:07:13 +00:00
ARIA 26afaeecfa Fix fan_mode type to match backend API ('auto' | 'curve') 2026-08-01 16:03:02 +02:00
ARIA 477c4becae feat: add fan curve control via temperature-based fan speed curves
- Backend HAL (hal/fans.py): NVML v2 fan read/set/reset with min/max queries
- Server endpoints: GET/POST /api/fans, POST /api/fans/reset, POST /api/fans/speed
- Background fan poller: reads GPU temp every 2s, interpolates fan speed from curve
- Profile integration: fan_curve field saved/applied, auto-restore on shutdown
- Frontend: FanCurveEditor (SVG chart with drag/add/delete points), FanMonitor sidebar
- App.tsx: three-tab layout (Curve, Performance, Fans)
- GaugeCard: optional history sparkline, Fan Mode card without sparkline
- fan_mode field populated as 'curve' or 'auto' in GET /api/fans
2026-08-01 15:59:39 +02:00
ARIA 7605d21e27 Bump version to 0.5.1 2026-05-09 15:27:58 +02:00
ARIA 67762b6a76 Document unreleased changes in changelog 2026-05-09 15:27:10 +02:00
ARIA 706df90bc3 Fix doc links: hyphenate filenames for clickable markdown links 2026-05-09 15:23:12 +02:00
ARIA a36b8c4dff Prune README and add comprehensive documentation
README reduced to essentials: install, quick start, and links to docs/.
New docs/ covers Overview, Installation, Usage Guide, and Tips and Tricks.
2026-05-09 15:22:25 +02:00
ARIA 024dcbceb0 nvcurve with some fixes and better limits 2026-05-09 15:05:29 +02:00