An open-source Python library for controlling RGB lighting on the Royal Kludge RK M75 without the official Windows software.
The project supports USB wired RGB and a hardware-validated 2.4 GHz wireless RGB implementation on the tested RK M75 hardware.
The wired RGB implementation is complete and hardware validated.
- USB HID Feature Report control
- Individual key RGB control
- Validated 81-key RGB mapping
- RGB framebuffer support
- Continuous RGB control
- RGB streaming at up to 33 Hz
- Native SignalRGB plugin
The wireless RGB implementation is a separate backend under:
rkm75/wireless/
The recovered wireless transport is hardware validated and provides keyboard-wide grouped RGB control.
The primary validated transaction is:
13 88 08
8 × 20-byte HID reports
105-byte native RGB stream
6 RGB groups
81 native LED indices
A larger grouped representation using 13 88 12 was also hardware validated:
13 88 12
18 HID reports
249-byte native RGB stream
42 RGB groups
81 native LED indices
13 88 14 was experimentally tested but is not considered production-safe because it produced unstable behavior.
The wireless protocol is partially reverse engineered. The implementation intentionally uses the validated grouped RGB representation rather than claiming complete support for every possible wireless RGB operation.
The following limitations remain at the final state of the project:
- Arbitrary per-key wireless RGB is not fully solved.
- The sparse/per-key representation has a validated engineering boundary of 50 independently colored LEDs.
- Wireless lighting effects have not been completely decoded.
- Not all
13 88 XXtransaction types are completely understood. - A smooth 30 FPS real-time RGB stream over 2.4 GHz was not achieved.
- Further 2.4 GHz performance optimization and protocol development are outside the scope of this repository's final state.
The 50-LED limit applies only to the sparse/per-key representation. It does not limit the keyboard's RGB hardware or the grouped representations.
Detailed wireless research is documented in:
2.4ghz/docs/protocol.md
2.4ghz/docs/findings.md
A native SignalRGB plugin is included for the RK M75 wired USB mode:
signalrgb/RK_M75_Wired.js
The plugin communicates directly with the keyboard through HID Feature Reports. No Python daemon or companion application is required.
The plugin uses:
VID: 0x258A
PID: 0x0163
Usage Page: 0xFF02
Usage: 0x01
Report ID: 9
Report Size: 520 bytes
Wireless SignalRGB support is not provided as a finished integration.
Install the project dependencies:
pip install -r requirements.txtFor development:
pip install -e .The project has been developed and validated on Windows with the RK M75 hardware.
from rkm75 import Frame, RKM75
frame = Frame()
frame.set_key("A", (255, 0, 0))
with RKM75() as keyboard:
keyboard.send(frame)from rkm75 import Frame, RKM75
frame = Frame()
with RKM75() as keyboard:
with keyboard.stream(fps=33) as stream:
while True:
frame.fill((255, 0, 0))
stream.send(frame)Wireless RGB is exposed separately:
from rkm75.wireless import RKM75Wireless
colors = (
(255, 0, 0),
(255, 128, 0),
(255, 255, 0),
(0, 255, 0),
(0, 128, 255),
(180, 0, 255),
)
with RKM75Wireless() as keyboard:
keyboard.send_frame(colors)The wireless API uses the recovered grouped RGB representation rather than arbitrary per-key Frame objects.
The implementation has been validated on:
Wired:
VID 0x258A
PID 0x0163
Wireless:
VID 0x258A
PID 0x0148
Other Royal Kludge keyboards are not considered supported unless independently validated.
docs/protocol.md
docs/findings.md
2.4ghz/docs/protocol.md
2.4ghz/docs/findings.md
The documentation contains the detailed protocol structure, reverse-engineering evidence, hardware experiments, timing results, and known limitations.
The project includes hardware-independent automated tests covering the wired and wireless APIs and protocol layers.
pytestThe final automated test suite contains:
122 passed
Hardware validation is performed separately and requires the appropriate RK M75 hardware.
2.4ghz/ Wireless research and documentation
docs/ Wired protocol documentation
examples/ Usage and validation examples
rkm75/ Python library
signalrgb/ SignalRGB plugin
tests/ Automated tests
tools/ Reverse-engineering utilities
MIT