You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ROADMAP.md
+86Lines changed: 86 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,6 +59,92 @@ Research-grade data export: `thermalforge log`
59
59
60
60
---
61
61
62
+
## Profile + Smart + Calibration Redesign (In Progress)
63
+
64
+
The entire profile system, Smart curve, and calibration need to be redesigned as one cohesive system. Current profiles are binary switches that immediately set fans to a fixed percentage. They should be proportional curves that respect Apple's fan hardware behavior.
65
+
66
+
### Research basis
67
+
68
+
Apple's fan hardware behavior (sources: macos-smc-fan reverse engineering, Tunabelly blog, NMB/Nidec fan motor engineering docs, Analog Devices fan controller datasheets):
69
+
70
+
-**0 to minimum RPM is binary** — fans jump from off to minimum (2317 RPM on M5 Max, 1200 on M1 Max, 1000 on Mac Studio). No slow start possible — brushless DC motors require a startup burst to overcome static friction. Hardware limitation, not software.
71
+
-**Above minimum, smooth ramping** — Apple ramps at ~350-550 RPM/sec up, ~150-300 RPM/sec down. Evaluated every 100ms with small increments.
72
+
-**Start/stop cycles are the #1 fan bearing wear factor** — fluid dynamic bearings suffer contact wear during startup (boundary lubrication before hydrodynamic film builds). Minimize on/off cycling.
73
+
-**Once spinning, keep spinning** — Apple holds fans at minimum RPM with hysteresis rather than cycling between 0 and spinning. At least 5°C hysteresis between start and stop thresholds.
74
+
-**Smoother transitions extend lifespan up to 50%** — per fan engineering literature. Abrupt speed jumps while running cause acoustic and mechanical transients.
75
+
76
+
### Profile curve design
77
+
78
+
Each profile has three zones:
79
+
80
+
**Zone 1: Off** — below the stop threshold, fans stay at 0 RPM (Apple auto).
81
+
**Zone 2: Minimum hold** — between stop threshold and start threshold (hysteresis band), fans stay at minimum RPM if already running, stay off if already off.
82
+
**Zone 3: Proportional curve** — above the start threshold, fan speed scales proportionally from minimum RPM to the profile's max RPM cap, increasing with temperature.
83
+
84
+
Ramp governors (matching Apple's behavior):
85
+
- Ramp up: max ~400 RPM/sec (~5% of max per 2-second tick)
86
+
- Ramp down: max ~200 RPM/sec (~2.5% of max per 2-second tick, already implemented)
87
+
88
+
### Profile specifications
89
+
90
+
| Profile | Fans off below | Start ramp at | Max fan speed | Target ceiling | Stop threshold |
91
+
|---|---|---|---|---|---|
92
+
|**Silent**| 73°C | 78°C | Apple default (reset to auto) | 78°C | 73°C |
93
+
|**Balanced**| 50°C | 60°C | 60% of max RPM | 70°C | 50°C |
94
+
|**Performance**| 45°C | 50°C | 85% of max RPM | 65°C | 45°C |
**Balanced example curve (60-70°C, 0-60% of max RPM):**
99
+
- 60°C: fans jump to minimum RPM (2317)
100
+
- 63°C: fans at ~30% of max RPM (~2348 RPM, just above min)
101
+
- 65°C: fans at ~40% of max RPM (~3130 RPM)
102
+
- 67°C: fans at ~50% of max RPM (~3913 RPM)
103
+
- 70°C: fans at 60% of max RPM (~4696 RPM) — cap reached
104
+
- Below 50°C and stable: fans off
105
+
106
+
The curve between start and ceiling is proportional, not stepped. Fan speed = minRPM + (maxRPMCap - minRPM) × ((temp - startTemp) / (ceilingTemp - startTemp)).
107
+
108
+
**Silent** is special: it doesn't control fans directly. It stays in Apple auto mode and only intervenes if temp hits 78°C, at which point it resets to auto (letting Apple's own thermal management handle it). Below 73°C it returns to hands-off. This is for users who want ThermalForge monitoring without fan control.
109
+
110
+
### Smart curve redesign
111
+
112
+
Smart uses the same three-zone model but with:
113
+
- Rate-of-change awareness: if temp is rising, boost fan speed proportionally to the rate
114
+
- Calibration data: the adaptive intensity finder discovers the machine's thermal response, and calibration maps how each fan speed handles proportional load
115
+
- Without calibration: conservative S-curve (already built, stays as fallback)
116
+
117
+
### Calibration redesign
118
+
119
+
Calibration needs to work with the new curve system:
0 commit comments