Skip to content
macOS 13 Ventura or laterApple Silicon and Intel

Take the fans back from macOS.

Free, open source fan control for macOS. Read every SMC sensor and ramp your fans on a curve you draw.

The AutoFansMac Fans view: two fans with their mode, an editable sensor curve with Tmin and Tmax, and a live preview of the ramp.

Fans: per-fan mode, a sensor curve with Tmin and Tmax, and a live preview before you apply.

Pick the sensor. Draw the ramp.

Choose any temperature key, set where the fan starts and where it saturates, and AutoFansMac holds the line between them.

  • Below Tmin the fan is handed back to macOS, which idles it at 0 RPM.
  • The tracked temperature is an EMA with alpha 0.3, so a spike does not yank the fan.
  • A command is written only when the target moved 50 RPM or more, and at most once a second.
  • If the sensor goes missing for 10 s the curve fails safe to full speed instead of stalling.

lo + (hi - lo) x (T - Tmin) / (Tmax - Tmin)

Tracked sensor

Tp01CPU performance core 1

Auto (macOS)
02000400060008000F0Mx 7826406080100Tmin 55Tmax 85floor 95
49.4C

Smoothed temperature

0RPM

macOS holds this fan and idles it at 0 RPM

Workload

idle24%saturated
SensorCPU performance core 1, CPU

Live model of the shipped ramp maths. Values are simulated; the fan range 2317 to 7826 RPM is measured on a MacBook Pro Mac17,9.

Every sensor the SMC exposes.

Named from a 200-entry catalog derived from Stats. Keys that are not in the catalog are still listed, with their raw FourCC, instead of being hidden.

catalog entries
200
keys on a Mac17,9
3611
decoded values
413
average read cost
0.34 ms

Measured on a MacBook Pro Mac17,9 with an M5 Pro, running macOS 27.0.

Unknown keys are not an error. The app lists them with their raw FourCC in an Unknown group.

Group
Type

Showing 42 of 171 matching keys, from 171 literal keys in a 200-entry catalog

CPU

CPU Computing high sidePC0R
CPU CorePC0C
CPU Core (IMON)PCAM
CPU diodeTC0D
CPU diode filteredTC0F
CPU diode virtualTC0E
CPU efficiency core 1Te05
CPU efficiency core 1Tp09
CPU efficiency core 1Tp1h
CPU efficiency core 2Te0L
CPU efficiency core 2Te0S
CPU efficiency core 2Tp0T
CPU efficiency core 2Tp1t
CPU efficiency core 3Te09
CPU efficiency core 3Te0P
CPU efficiency core 3Tp1p
CPU efficiency core 4Te0H
CPU efficiency core 4Te0S
CPU efficiency core 4Tp1l
CPU GFXPC0G
CPU heatsinkTC0H
CPU IAVCAC
CPU packageTCAD
CPU PackagePCPC
CPU Package totalPCPT
CPU Package total (SMC)PCPR
CPU performance core 1Tf04
CPU performance core 1Tp01
CPU performance core 1Tp0O
CPU performance core 10Tf4B
CPU performance core 10Tp0p
CPU performance core 11Tf4D
CPU performance core 11Tp0u
CPU performance core 12Tf4E
CPU performance core 12Tp0y
CPU performance core 2Tf09
CPU performance core 2Tp05
CPU performance core 2Tp0R
CPU performance core 3Tf0A
CPU performance core 3Tp09
CPU performance core 3Tp0D
CPU performance core 3Tp0U

The whole machine, in five views.

Fans, Sensors, Profiles, Settings and the menu bar itself. The menu bar carries the same numbers as the window, so a glance is often enough.

AutoFansMac Profiles view listing the built-in Automatic and Full Blast profiles next to custom ones.
ProfilesUnlimited profiles plus the built-ins. Edit a built-in and your version is saved as a profile of your own.
The AutoFansMac menu bar item with its dropdown open: both fans on a sensor-based curve, the profile list, and the Open, Settings, Export Diagnostics and Quit items.
Menu bar firstSwitch profiles, watch every fan and check the tracked sensor without opening a window. The window is there when you want the curve.
AutoFansMac Sensors view listing SMC temperature keys grouped by CPU, GPU and system.
SensorsEvery temperature, plus voltage, power, current and fans as secondary groups. Searchable.
AutoFansMac Settings view showing helper status, lifecycle options and safety controls.
SettingsHelper, lifecycle and safety in one pane, including the expert switch that lasts a single session.

Safe by construction, honest by default.

Four rules are not optional, and they are enforced in the helper rather than in the interface.

Never 0 RPM by default

Every commanded value is clamped to the range the firmware reports. Sending less requires the expert switch, which warns and lasts one session.

Thermal floor at 95 C

Any CPU, GPU or SOC sensor reaching the floor drives every fan to maximum, whatever the profile says. Normal control returns 10 C below it.

Dead-man switch

Sixty seconds without a heartbeat from the app and the helper hands the fans back to macOS on its own.

Never leaves manual mode set

The signal handler and the crash-recovery state file both exist so that a crash cannot leave thermal management disabled with nobody driving it.

Write clamp
max(F%dMn, 500) to F%dMx
Thermal floor
95 C, configurable
Floor hysteresis
10 C
Heartbeat timeout
60 s
Mode re-assert
every 5 s
Sensor lost
10 s to full speed
Write threshold
50 RPM, max 1 per second
Temperature smoothing
EMA, alpha 0.3

Probed, not assumed.

Mode-key casing, the unlock path and each key's data type are read from the machine at runtime. Nothing is inferred from the model number, because M2 and M3 base models were never verified upstream.

M5

Verified on hardware

MacBook Pro Mac17,9

Mode key
F0md, lowercase
Unlock
Direct, no Ftst

413 decoded values measured here. Both fans idle at 0 RPM under macOS.

M4

Verified upstream

MacBook Pro M4 Max

Mode key
F%dMd
Unlock
Ftst unlock

Upstream fan control confirmed. Not tested on this machine.

M3

Verified upstream

MacBook Pro M3, iMac M3

Mode key
F%dMd
Unlock
Ftst unlock

thermalmonitord holds the fans in system mode, so the unlock sequence is used.

M2

Untested

MacBook Air and Pro M2

Mode key
Probed
Unlock
Direct, Ftst as fallback

Unverified upstream and here. The probe path is what runs.

M1

Verified upstream

MacBook Pro M1, Pro, Max

Mode key
F%dMd
Unlock
Direct

Upstream fan control confirmed. Not tested on this machine.

M1 fanless

Verified in simulation

MacBook Air M1, FNum 0

Mode key
Not present
Unlock
Not applicable

A machine with no fans probes cleanly and shows no fan controls at all.

Intel with T2

Verified upstream

iMac19,1, MacBook Pro 2018 to 2020

Mode key
F%dMd plus FS!
Unlock
FS! bitmask, fpe2 or flt

Key types differ per machine, which is why every type is probed.

Intel without T2

Untested

iMac 2013 to 2017, MacBook Pro to 2015

Mode key
F%dMd
Unlock
FS! where present

Fan control is expected to work and has not been verified here.

Three ways to run it.

Free and open source. An administrator password is needed once, when the helper is installed, and reading sensors needs no privileges at all.

Terminal
./Scripts/package-unsigned.shxattr -dr com.apple.quarantine /Applications/AutoFansMac.app

No Apple account needed. The recipient clears the quarantine flag once.

Fan control needs the privileged helper. The helper answers only a client whose code signature matches this team, and the unsigned build is the one exception.

Download for macOS

Limits, stated up front.

The same list the app itself would give you. None of it is a footnote.

Do I have to run this as root?

No. Reading the SMC works from any unprivileged process, so the app does that itself. Only writes go through the helper, and only the helper is installed with administrator rights.

What does the unsigned build give up?

Its helper cannot verify the calling app's signature, so any process on the machine could ask it to set a fan speed. That is the trade for not having a Developer ID. Docs/DISTRIBUTING.md says so in the same words and shows how to re-badge the app with your own team.

Which machines are actually verified?

One: a MacBook Pro Mac17,9 with an M5 Pro, recorded in Docs/COMPATIBILITY.md. M1, M3, M4 and Intel with T2 are confirmed upstream. M2, and Intel without a T2, have never been verified by anyone, and the compatibility list marks them that way instead of claiming otherwise.

Does it phone home?

It asks GitHub for the latest release once a day, or when you press the button in About. That is the only request the app makes, and it can be switched off.

Can it stop a fan completely?

Not by default. A target of 0 stops the fan, so every value is clamped into the range the firmware reports, and going outside that range needs the expert switch.

What happens if the app crashes?

The helper hands the fans back to macOS after 60 seconds without a heartbeat. A SIGTERM handler releases them immediately, and a state file lets the next launch reclaim and then release a fan that manual mode was left on.