feat: add fan curve control via temperature-based fan speed curves #1

Merged
Pakobbix merged 2 commits from feature/fan-curve into main 2026-08-01 14:07:14 +00:00
Collaborator

Summary

Add a complete Fans tab for GPU fan speed control via temperature curves.

Changes

Backend

  • hal/fans.py: NVML v2 fan read/set/reset with min/max queries
  • server.py: GET/POST /api/fans, POST /api/fans/reset, POST /api/fans/speed endpoints
  • Background fan poller reads GPU temp every 2s, interpolates fan speed from curve
  • Profile integration: fan_curve field saved/applied, auto-restore on shutdown
  • Probe uses current GPU temp (not first curve point) to avoid brief inappropriate speed

Frontend

  • FanCurveEditor: SVG chart with drag/add/delete points, static defaults (30°C=0%, 45°C=40%, 60°C=80%, 70°C=100%)
  • FanMonitor: sidebar with Fan Speed, GPU Temp, Target Fan gauges
  • App.tsx: three-tab layout (Curve, Performance, Fans) with shared fan state refresh
  • GaugeCard: optional history sparkline, Fan Mode card without sparkline
  • fan_mode field populated as "curve" or "auto" in GET /api/fans
## Summary Add a complete Fans tab for GPU fan speed control via temperature curves. ## Changes ### Backend - **hal/fans.py**: NVML v2 fan read/set/reset with min/max queries - **server.py**: GET/POST /api/fans, POST /api/fans/reset, POST /api/fans/speed endpoints - Background fan poller reads GPU temp every 2s, interpolates fan speed from curve - Profile integration: fan_curve field saved/applied, auto-restore on shutdown - Probe uses current GPU temp (not first curve point) to avoid brief inappropriate speed ### Frontend - **FanCurveEditor**: SVG chart with drag/add/delete points, static defaults (30°C=0%, 45°C=40%, 60°C=80%, 70°C=100%) - **FanMonitor**: sidebar with Fan Speed, GPU Temp, Target Fan gauges - **App.tsx**: three-tab layout (Curve, Performance, Fans) with shared fan state refresh - **GaugeCard**: optional history sparkline, Fan Mode card without sparkline - **fan_mode** field populated as "curve" or "auto" in GET /api/fans
ARIA added 1 commit 2026-08-01 13:59:58 +00:00
- 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
ARIA added 1 commit 2026-08-01 14:03:19 +00:00
Pakobbix merged commit d2d05bbe6d into main 2026-08-01 14:07:14 +00:00
Pakobbix deleted branch feature/fan-curve 2026-08-01 14:07:14 +00:00
Sign in to join this conversation.