Unofficial, reverse engineered, open source
RedMagic Cooler is a menu-bar app for macOS that drives a Bluetooth REDMAGIC cooler from your Mac’s own chip temperature. It starts cooling as the Mac heats up, adds power as it climbs, and eases back off once the work is finished. Clip the cooler to the lid and forget about it.
macOS 13 or later. Built for Apple Silicon. Signed, notarized and MIT licensed.

What it does
The REDMAGIC coolers are sold for phones, and the app that ships with them expects one. This does not: it watches the machine it is running on and decides for itself.
Auto mode reads the SoC die temperature straight from the Mac’s own sensors through IOKit, with no helper tool and no password prompt. It reacts within seconds of the fans spinning up, not minutes later.
Pick a level and it stays there. Because nothing else will end that session, manual runs on a 1, 2 or 3 hour timer. Removing the limit asks you to confirm first: a plate held cold for hours pulls water out of the air onto itself.
Cold plate, hot side, ambient temperature and fan RPM, pushed once a second over Bluetooth and decoded from a 16 byte frame. Your Mac’s current temperature sits in the menu bar next to the clock.
Set the LED to Auto and its colour tracks how hot the Mac is, sweeping from green through amber to red. The five effects the hardware supports are all in the menu if you would rather pick one yourself.
Autopilot
Auto mode starts at an engage threshold you pick, anywhere from 45 to 85 °C, and derives the tiers above it in 10 °C steps. The bars are the fan; the level beside each one is what the thermoelectric plate is doing.
Quick to step up, deliberate about stepping down. It moves up the moment the die crosses a boundary, but it will only drop a tier once the Mac has been 5 °C below that boundary for fifteen seconds, and then only one tier at a time. Peltier plates do not enjoy being switched on and off every few seconds. macOS can also force a floor of its own: at a serious thermal state the app will not go below medium, and at critical it holds max.
With the effect set to Auto, the app repaints the cooler’s LED as the Mac warms up. Green while it is idle, red while it is working hard, and everything in between. You can read the machine from across the room.
The protocol
The cooler speaks a vendor service with nine short characteristics behind it. Everything below came out of packet captures from the Android app, a decompiled APK, and a lot of writing bytes at the hardware to see what happened.
Service
d52082ad-e805-9f97-9d4e-1c682d9c9ce6
| Characteristic | Controls | Access | Notes |
|---|---|---|---|
| 0x1011 | Cooling mode | read / write | TEC power, values 0x01 to 0x08 |
| 0x1012 | Fan speed | read / write | 0 to 100, independent of the mode |
| 0x1013 | Light | read / write | 4 bytes: effect, then R, G, B |
| 0x1014 | Temp threshold | read / write | °C, for the device’s own auto mode |
| 0x1015 | Hall sensor | read / notify | reports a phone being clipped on |
| 0x1016 | Telemetry | read / notify | 16 byte frame at roughly 1 Hz |
| 0x1018 | Auto temp | read / write | 0x00 off, 0x01 on |
| 0x1017 | Unknown | read | always 0x00 |
| 0x1019 | Unknown | read | always 0x00 |
Sixteen bytes, once a second, little endian, wrapped in a pair of markers. Warming the plate with a hand and watching which number moved is how most of it was found.
Bytes 5 and 6 repeat the cold and hot readings. Byte 0 is always 0xAA and byte 15 always 0xDD. The five unmarked bytes have not given anything up yet.
cold = data[2]
hot = data[3]
amb = data[7]
rpm = int.from_bytes(data[13:15], "little")The vendor app offers Low, Medium and Super. The firmware accepts every value from 0x01 to 0x08 without asking who is calling, and five of them never appear in any interface. They are real levels with real hot-side temperatures behind them, and the app uses the whole range.
The LED takes four bytes: an effect, then red, green and blue. Writing 04 ff 00 00 gives you a steady red light.
The full map, including the things that did not work and the one command that reliably crashes the cooler’s Bluetooth stack, is in the findings document. There is also a write-up of how the whole thing was worked out, from the first packet capture to a working menu-bar app.
Devices
A model is only marked as supported once its name, characteristics, commands and telemetry have been confirmed against real hardware. Everything else stays on the list as a candidate.
Verified on hardware. Advertises itself as RM Magcooler 6pro.
REDMAGIC’s current generation and app connected, but its radio has not been opened up here.
Driven by the same Goper app, so it is a good candidate. Nobody has checked.
Bluetooth and the REDMAGIC Equipment app, on paper. No capture exists.
Adding a cooler is one new device profile in a single Swift file, and the porting guide walks the whole path. You do not have to finish to be useful. An advertised Bluetooth name in an issue is enough to save the next person an evening.
Getting started
The release is a signed and notarized DMG, so it opens without an argument from Gatekeeper. The app checks for updates once a day and never installs one on its own.
Xcode command-line tools and nothing else. No package manager, no project file to open.
git clone https://github.com/hajarrashidi/redmagic-cooler-mac.git
cd redmagic-cooler-mac
./build.sh --runmacOS asks for Bluetooth permission the first time you press the button in the menu, not at launch.