chevron_backward Back

Genlite

NodeJS Browser (DOM) DMX/Artnet Express Websockets

Genlite is an ongoing project that I have been working on since about 2020. The goal was to make a program that would let me sync lights with Spotify, but has since become more of a bespoke platform for me to run lights for parties or events. This features a light show editor, node flow-based effect engine, and MIDI control.

Features

Light Show Editor

This program features a light show editor, allowing the user to sync lights to music by placing and sequencing lighting effects on a timeline. A basic visualiser is included to give feedback without the need to test on actual lights.

Ambient Effect Editor

For running lights without syncing to music, the ambient effect editor allows the creation of looping effects, with basic MIDI control for switching between effects.

Effect Editor

Effects can be created using a node flow-based engine, allowing for complex and customizable lighting behaviors. This section currently only allows for viewing blueprints and previewing effects with the visualiser and/or on the lights, but will eventually allow for full editing capabilities.

Fixture Definition Editor

A basic fixture definition editor allows users to create and modify fixture profiles, defining the characteristics of each channel.

Fixture Map

The fixture map allows the user to edit the addresses of each fixture.

Technical Details

Extendability & Performance

One of the main goals during the development of Genlite is to ensure that I can rapidly prototype new features, while maintaining performance to keep hardware requirements low (Ideally, anything that can run a web browser, can also run Genlite). This has been achieved by writing the application in almost entirely vanilla Javascript, minimising dependance on external libraries or frameworks. This gives much more control over how components are rendered, and can significantly reduce memory usage compared to a framework like React.

Recently, many of the core functions (e.g. turning light shows into DMX instructions) have been refactored to significantly reduce memory usage and improve speed. One major change was to convert all number arrays to ArrayBuffer types where possible (for example, DMX instructions, which can be efficiently stored as a single Uint8Array). This greatly reduced memory usage, improved performance of functions that read/write this data, and reduced overhead when sending this data over a WebSocket connection.

Custom Canvas Library

For components that are too complicated for HTML, such as the light show editor or effect editor, a custom canvas library has been created for this project. This was partly due to a lack of existing frameworks that fit my needs, but also for performance reasons, and just out of interest. This library has been designed to include features like scrolling, clicking elements, dragging elements, and more.

Planned Features

ESP32 Fixtures

A feature currently being worked on is to create custom fixtures based on ESP32 microcontrollers. This prototype uses six UV LED strips for simplicity, though could be adjusted to use RGB or WS2812b LED strips.

By using an ESP32, the lights can connect to the controller wirelessly. This removes the need for a DMX cable, and allows the light to map itself automatically in the program.

This design is significantly cheaper than many DMX alternatives, and can be adapted to various fixture types or lighting setups.

DJ Software Integration

Another feature that is being worked on is integration with DJ software, to allow for synchronized light shows based on the music being played. The biggest road block for this at the moment is that not many current DJ programs will output track information, though the concept has been tested using os2l markers in VirtualDJ.