Configure the AJAZZ AK980 V2 from macOS — lighting, the TFT screen, key remapping, shortcuts, and live sports scores on the keyboard itself.
All 20 effects, plus colour, brightness, speed and direction — the same set the Windows app exposes.
Put any image or GIF on the 240×135 panel, scaled and dithered for you.
Scores on the keyboard, updated by themselves: F1, the major European leagues, MLS, NFL, NHL and tennis.
Per-key colours and remapping across the full 97-key layout.
Bind a key combination to an app, a file or link, an AppleScript — or the music, which follows whichever of Spotify and Apple Music is actually playing.
Set the keyboard's clock and date from the Mac, and keep them in sync.
Win-key lock, Alt+F4 and Alt+Tab lock, Fn layer, sleep timeout, and the Num Lock icon macOS never lights.
Live scores on the keyboard. It watches public scoreboard feeds and repaints the panel only when something actually changes — a goal, a lap, a different match — because every repaint writes to the keyboard's flash.
Macro keys that cannot clash. macOS ignores F13 to F20 entirely. Remap a key on the keyboard to one of those, bind it in the Shortcuts pane, and you have a dedicated macro key nothing else in the system will ever claim.
There is a third, quieter one. Switching the keyboard between USB, Bluetooth and the dongle makes the firmware reload its own defaults and your picture disappears — the keyboard remembers nothing. The app stores your lighting, settings and picture on the Mac and sends them again a couple of seconds after the keyboard comes back.
Needs macOS 13+ and the Xcode command line tools.
git clone https://github.com/OWNER/REPO.git
cd REPO
./Tools/build-app.sh
open ~/Applications/"Ajazz Control.app"
The AK980 V2 runs a Sonix SN32F299 and enumerates under Microdia's USB
vendor id. Every configuration command travels over a vendor-defined HID
collection, and macOS lets ordinary userspace processes talk to those
through IOHIDManager — no kernel extension, no system extension, no
entitlement, no disabled SIP, no sudo. The Windows "driver" is
a configuration app calling HidD_SetFeature; this is the same
app written in Swift.
The protocol was worked out from scratch. The findings are written up in docs/PROTOCOL.md — including the part nobody else has documented: on macOS the screen transfer has to be split across two HID collections, control frames on one and pixel blocks on the other, or the firmware never commits the image.