LUMA is a DMX lighting controller with a Go backend and a React frontend. It lets you manage fixtures, presets and shows, and controls a DMX USB interface. The frontend is compiled and embedded directly into the Go binary using go:embed for easy deployment.
- Manage fixtures, presets and shows
- Real-time DMX output over USB
- REST and WebSocket APIs for remote control
- Single binary distribution with the React UI included
- Go 1.24 or newer
- Node.js and npm (for building the frontend)
- A DMX USB interface
Use the provided script to build the frontend and start the backend:
./dev.shPass -n to skip rebuilding the frontend if it has already been built.
Open http://localhost:3000 in your browser to access the UI.
cd src/frontend
npm install
npm run buildThe build output is written to src/frontend/dist and will be embedded in the Go binary.
go run ./src/backendConfiguration is done via environment variables:
SERVER_PORT– HTTP port (default:3000)DMX_PORT– serial port used for DMX (default/dev/cu.usbserial-A10QIXZO)DATA_FILE– path to the project file (default.data/project.yaml)ENABLE_DMX– set tofalseto disable DMX output
After starting the server, open http://localhost:3000 in your browser to use
the web interface.
A dockerfile is provided to build a self-contained image:
docker build -t luma:latest .
docker run --rm -p 3000:3000 lumaThe backend exposes REST endpoints under /api and a WebSocket endpoint at /ws/control for real-time DMX commands. See the source in src/backend/api and src/backend/ws for details.
This project is licensed under the MIT License. See the LICENSE file for details.