A working open-source driver and example application for the Ajazz AKP153E (PID 0x0300:0x3010) on Linux — specifically targeting Raspberry Pi 5, but should work on any Linux machine with libusb.
This was built to bridge an awkward gap: the AKP153E is a great-looking 15-key streamdeck-style controller with per-key LCDs, but it has no Linux software, no public protocol documentation, and a firmware quirk that prevents it from transmitting button events on Linux unless properly initialized.
This repo solves that. Out of the box you get:
- A Python driver that talks to the AKP153E over USB via
libusb/pyusb - The captured init handshake (recorded from the official Windows app via Wireshark + USBPcap) packaged as a binary blob the script replays
- Custom per-key icons from any image file (PNG/JPG/WebP/etc.) — script handles resizing, rotation, and centering
- Full TV-remote example: GPIO IR transmitter integration with channel-switching macros, power+input combo, etc.
- Systemd service + udev rules so the service only runs when the device is plugged in (no crash-looping, no manual start)
- It's not a stream-deck protocol implementation. The init replay is byte-for-byte from one specific Windows app session (mine). The icons embedded in the replay are mine — you'll be replacing them with your own, but the act of replaying the init is what wakes the device up.
- It's not a generic "Ajazz everything" library. Only AKP153E rev 0x0002 (PID 0x3010) is verified working. Other Ajazz models likely use similar protocols but haven't been tested.
- Ajazz AKP153E — verify yours has VID
0x0300, PID0x3010. Check withlsusbafter plugging in. - Raspberry Pi 5 (or any Linux machine) — should also work on Pi 4, Pi Zero 2 W, x86 PCs, etc.
- For the TV remote example: a GPIO IR transmitter (V1221 or similar) on GPIO 27.
See docs/SETUP.md for a step-by-step guide from "blank Pi" to "working remote."
For just the AKP153E driver without the TV/IR parts, see docs/MINIMAL.md.
If you want to understand how this works under the hood (or adapt it for another Ajazz model), see docs/PROTOCOL.md.
The repo includes ajazz_replay_essential.bin (~12 MB) — this is the captured init sequence the device requires. It contains my custom icons baked into the replay. When you run the script, it will:
- Replay the init (your device shows my icons briefly)
- Apply your custom icons from
icons/(overwriting mine)
So for normal use you don't need to do anything — just put your icons in the icons/ folder. If for some reason you want to recapture the init from your own Windows session, see docs/RECAPTURE.md.
Inspired by reverse engineering work by @Uriziel01/Ajazz-AKP153-reverse-engineering and the mirajazz Rust library.
MIT — see LICENSE.