Skip to content
@openlamp

OpenLamp

100% local stage-light control for musicians and makers — Tuya / WLED lamps from a Stream Deck or MIDI, zero cloud

OpenLamp — local stage-light control

Instant, 100% local stage-light control for musicians and makers — drive cheap consumer smart LED lamps (Tuya / Smart Life, WLED) from a Stream Deck, a MIDI controller or the command line, with sub-200 ms response and zero cloud at runtime.

Made by BenLab with the help of Claude.

The family — one repo per layer

Each layer lives in its own repo so no layer is impacted by the others.

                 ┌───────────────────────────┐
                 │        your lamps         │  Tuya (today) · WLED (testers wanted)
                 └────────────▲──────────────┘
                              │ persistent local connections
                 ┌────────────┴──────────────┐
                 │      openlamp-engine      │  drivers · OLS dispatcher · groups ·
                 │  (core + daemon + CLI)    │  snapshots · animations · local API
                 └───────▲─────────▲─────────┘
              in-process │         │ local API 127.0.0.1:8377
                 ┌───────┴───┐ ┌───┴────────────┐
                 │  lumideck │ │ openlamp-midi  │
                 │ StreamDeck│ │ MIDI controllers│
                 └───────────┘ └────────────────┘
Repo Layer Depends on For whom
openlamp-engine core: drivers, OpenLamp State contract, local API, headless daemon, CLI nothing every frontend below
engine-js Node.js port of the engine (same contract, interchangeable behind the API) JS-first environments (npm/Stream Deck SDK stacks)
lumideck Stream Deck plugin (embeds the engine in-process) openlamp-engine Stream Deck owners
openlamp-midi MIDI overlay (virtual port → engine API) openlamp-engine (its /cmd API) musicians with physical MIDI controllers on stage (Hotone Ampero Control, Behringer FCB1010, Launchpad, nanoKONTROL2…)

The WLED-compat endpoint (/json/state) ships inside the engine's local API — it lets WLED-aware tools drive Tuya lamps; no frontend depends on it.

One host at a time

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).

Design notes

  • 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).

Popular repositories Loading

  1. lumideck lumideck Public

    Local smart-lamp control for Elgato Stream Deck — Tuya / WLED, no cloud, no lag. OpenLamp State protocol.

    Python

  2. midi midi Public

    MIDI overlay for LumiDeck — drive smart lamps (and more) from Ableton, Bome or any cheap MIDI controller. Part of the LumiDeck stack.

    Python

  3. engine engine Public

    OpenLamp core engine — Tuya/WLED drivers, OLS state contract, groups, snapshots, animations, local API, headless daemon + CLI

    Python

  4. openlamp openlamp Public

    OpenLamp — 100% local stage-light control for musicians and makers. Hub repo: architecture, the OLS contract, and the repo-family map

  5. .github .github Public

    Org profile README for OpenLamp

  6. engine-js engine-js Public

    Node.js port of the OpenLamp engine — same OLS contract, interchangeable behind the local API

    JavaScript

Repositories

Showing 6 of 6 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…