Instant, 100% local stage-light control for musicians and makers — drive cheap consumer smart LED lamps — WLED (recommended) or Tuya / Smart Life — from a Stream Deck, a MIDI controller or the command line, with ~45 ms response on WLED and zero cloud at runtime.
Made by BenLab with the help of Claude.
Each layer lives in its own repo so no layer is impacted by the others. Two independent paths reach the lamps — the engine (direct, ~45 ms) and Home Assistant — and a shared, firmware-independent asset layer dresses the UIs on both.
your lamps · WLED (recommended) / Tuya
▲ ▲
│ direct local API, ~45 ms │ via Home Assistant
┌──────┴─────────────┐ ┌───────┴────────────────┐
│ openlamp-engine │ │ HA "wled" integration │
│ OLS · API :8377 │ └───────┬────────────────┘
└──▲──────────▲──────┘ │ entities
in-proc│ /cmd│ ┌───────┴────────────┐
┌────┴───┐ ┌────┴───────┐ │ wled-assets-card │
│frontend│ │ openlamp- │ │ (Lovelace card) │
└───┬────┘ │ midi │ └───────┬────────────┘
│ └────────────┘ │
└─────────── consume ──────────────┘
│
┌─────────┴───────────┐
│ wled-assets │ localized names + illustrations (CC0)
└─────────────────────┘
| Repo | Layer | Depends on | For whom |
|---|---|---|---|
| openlamp-engine | drivers · OpenLamp State contract · local API · headless daemon · CLI | nothing | every control surface below |
| engine-js | Node.js port of the engine (same contract, interchangeable behind the API) | — | JS-first stacks (npm / Stream Deck SDK) |
| Repo | Layer | Depends on | For whom |
|---|---|---|---|
| openlamp-midi | MIDI overlay (virtual port → engine /cmd API) |
engine | musicians with physical MIDI controllers (Ampero Control, FCB1010, Launchpad, nanoKONTROL2…) |
| wled-assets-card | Home Assistant Lovelace card — dresses HA's wled light with localized names + illustrations, one-tap apply |
HA wled integration · wled-assets |
Home Assistant users |
| Repo | What | Consumed by |
|---|---|---|
| wled-assets | localized effect/palette names (8 languages) + palette illustrations + effect motion previews — CC0 | wled-assets-card · any WLED client |
| streamdeck-wled-icons | 216 animated effect GIFs + 111 palette/control icons as Stream Deck Marketplace packs (under @Beennnn) | Stream Deck profile designers |
The WLED-compat endpoint (/json/state) ships inside the engine's local API — it
lets any WLED-aware tool drive OpenLamp lamps; no control surface depends on it. The
Home Assistant card is fully independent of the engine: it rides HA's own WLED
integration and only shares the wled-assets layer with the other frontends.
A Tuya lamp accepts a single local connection and every engine host binds
port 8377. Run either the Stream Deck plugin or the headless daemon
(openlamp-engine/daemon.py), never both:
- deck sessions → the plugin (Stream Deck app running);
- CLI / MIDI-only sessions → the daemon (
run-headless.sh).
- OLS is WLED-compatible on purpose: 8-bit values (0–255), state-patch semantics (omitted fields unchanged). One contract, many lamp brands.
- MIDI is 7-bit (0–127), scaled up ×2 by the bridge — plenty for stage cues.
- Everything local, offline-friendly (built for stages with a travel router).