A tray lighting panel for Windows 11. Left-click the tray icon for a small frameless panel — keyboard card, mouse card, Scenes — right-click for the Scenes menu. No vendor software — no Synapse, no iCUE, no OpenRGB: every device is driven over raw HID from a small Rust back-end, and the keyboard's protocol was reverse-engineered on the desk it sits on.
| Device | IDs | Control |
|---|---|---|
| BY Tech / Sinowealth SH68F90A keyboard — the unbranded "Gaming Keyboard" sold under AULA, Portronics, and a long tail of other names | 258A:010C |
Solid colour + brightness, stored in the keyboard's own flash |
| Razer DeathAdder Elite | 1532:005C |
Logo + scroll-wheel colour and brightness, stored on the mouse |
| Corsair M75 Wireless | 1B1C:1BF1, via the Slipstream receiver 1B1C:1BDC |
Logo + bottom colour, streamed while DeetsRGB runs; battery level |
The two mice share one card. It's a role, not a device — whichever is plugged in answers to it, and if both are, the one you used last wins.
The keyboard shipped with no software, no brand, and Fn combos that did nothing; OpenRGB doesn't know its PID (and has its Sinowealth driver disabled after a bricking incident on a look-alike board). The only way to get a 40 %-brightness cool white was to find the wire protocol. Once it was found, a tray app was the obvious place to keep it.
- Two device cards — keyboard and mouse. Preset swatches, a native colour picker, a brightness slider, and explicit Apply / Off. Nothing is written to hardware while a slider drags — every keyboard write is a flash write, so the commit is deliberate.
- Scenes. Named pairs of keyboard + mouse state, applied from the panel or straight from the tray menu. Ships with Cool White 40 %, Warm White 40 %, and Lights Off; "Save current…" captures whatever the cards show.
- Launch at startup, via the per-user
Runregistry key — enrolled once on the first installed launch, and a toggle in the title menu after that. - Safe writes. The keyboard's config block carries a
5A A5marker; the driver reads it before every write and refuses to write a block that lacks it (a busy device answers with zeros, and writing those back would erase every setting). Every write is read-modify-write. - A clean exit for the Corsair. The M75 has no working hardware lighting mode — its colour lasts only while it is being streamed one — so DeetsRGB re-sends the frame every 5 s, restores the last colour on launch, and hands the mouse back to its own onboard profile on quit. One thing follows: Off on that mouse doesn't outlive the app, because "off" is a black frame that stops being sent.
docs/protocol.md is the byte-level reference for all
three devices — packet shapes, the keyboard's config map and colour table, the
Razer report and CRC, and Corsair's BRAGI properties and direct-mode frames —
with the sources each fact was pieced together from.
If you have a 258A:010C board of your own, that document is the useful part
of this repo.
npm install
npm run tauri devFirst run compiles Rust and is slow. The app starts hidden in the tray.
npm run release produces an NSIS installer under
src-tauri/target/release/bundle/nsis/.
Part of the Deets family and sharing its design language:
DeetsMusic (the token system
originates there), DeetsSolutions,
DeetsFilm,
DeetsSQL. DeetsRGB ships the Press
skin only, like DeetsFilm, and stores its theme under the family's
deets.theme key.