Desktop control for ELK-BLEDOM / MELK Bluetooth LED strips — drive multiple strips at once with a live color picker, presets, and a system tray.
pip install -r requirements.txt
python main.pyIf
pip installfails on the newest Python, use a 3.11–3.13 interpreter (PySide6/Pillow wheels can lag).
brew tap ugurcandede/tap
brew install --cask lumeaThe cask clears Gatekeeper for you. To update later: brew upgrade --cask lumea.
Download Lumea-windows.exe and run it. On the SmartScreen prompt, choose More info → Run anyway.
- Python 3.11+
- A strip advertising as
ELK-BLE,MELK, orELK-BULB - Bluetooth turned on
- (optional, MSI motherboard RGB) an MSI board with a Mystic Light USB controller — driven via
hidapi(installed on Windows byrequirements.txt) - (optional, SteelSeries RGB) a SteelSeries Apex 3 keyboard and/or Rival 650 mouse — same driverless
hidapipath
- Scan — lists nearby strips.
- Tick the devices you want, then press Connect Selected. Double-click a row to set an alias.
- On / Off and the color picker (live) — commands go to every checked-and-connected device at once.
- Presets — the 12 swatches: left-click applies, right-click saves the current color.
- Disconnect All drops every connection.
Closing the window keeps the app in the system tray. Checked devices, aliases, presets and the last color are saved and restored on launch, and dropped links auto-reconnect.
- Control multiple strips at once
- Per-device aliases
- Live color picker with 12 savable presets
- System tray — runs in the background, icon reflects the current color
- Settings persistence and auto-reconnect
- MSI motherboard RGB (Windows, optional) — mirror the color to a Mystic Light controller, driverless
- SteelSeries RGB (Windows, optional) — mirror the color to an Apex 3 keyboard and/or Rival 650 mouse, driverless
If your PC is an MSI board with a Mystic Light USB controller, Lumea can control its RGB too — no MSI Center, no kernel driver. The controller appears in the device list as MSI Mystic Light (always "Connected"); tick it to mirror the color picker to the motherboard and any RGB/ARGB headers, alongside your BLE strips.
- Driverless — pure USB HID via
hidapi(an optional dependency, Windows only). - Static color only. Lumea never sends firmware effect/mode bytes — those are undocumented and have bricked some boards. Writes are volatile, so a reboot restores your BIOS lighting.
- Case fans: if they run off a case controller (e.g. MSI Gungnir), set that controller to motherboard control (JARGB) mode so they follow Lumea.
- Verified on an MSI MPG Z790 CARBON WIFI. Same-variant Mystic Light USB boards should work; anything else is detected and left untouched.
If a SteelSeries Apex 3 keyboard or Rival 650 mouse is plugged in, Lumea can drive its lighting too — no SteelSeries GG, no driver. Each appears as its own device row (SteelSeries Apex 3 / SteelSeries Rival 650, always "Connected"); tick it to mirror the color picker to that device.
- Driverless — pure USB HID via
hidapi, the same optional dependency as the MSI path. - Static color only, following the picker. No brick risk (plain HID output reports; nothing is written to onboard flash).
- Verified on an Apex 3 and a Rival 650. Other SteelSeries models are detected and left alone.
main.py entry point: QApplication + qasync event loop
ble.py scan(); ElkBledom (one strip); DeviceManager (many strips, fan-out)
msi_mystic.py optional MSI Mystic Light (USB HID) backend
steelseries.py optional SteelSeries Apex 3 / Rival 650 (USB HID) backend
ui.py LedController: device list, color, presets, system tray
colorpicker.py embedded SV-square + hue-bar color picker
icon.py app icon + dynamic tray icon
protocol.py pure command encoders
Not affiliated with the makers of ELK-BLEDOM / MELK devices, or with MSI / Mystic Light or SteelSeries.