Skip to content
Jon Evans edited this page Aug 13, 2017 · 7 revisions

FireMix is a platform for controlling lightshows built using RGB LED strips.

It serves as the host for a library of small programs called Presets. Presets determine the output of the lightshow for a given point in time, and are called repetitively in order to create an animated show.

FireMix can interleave two presets using various transitions in order to create a more visually pleasing show.

A typical use case would involve an installation using a set of addressable LED strips. You can use FireSim to design the physical layout of the installation, and assign addresses to all of the strips (which are presumably being driven by a controller of some sort). Then, the scene file created by FireSim is loaded into FireMix, which allows the lighting presets to be aware of the physical position of the pixels in the scene (both the absolute position and relative information such as a given pixel's neighbors).

Getting Started

Follow the Installation Guide - Windows, Mac or Linux to get FireMix up and running. You will also want to install FireSim in order to design the physical layout of the show and see the simulated output of FireMix.

For general use, the command line python firemix.py <scene> will work best. Replace <scene> with the name of the scene you wish to load (use demo if you are just getting started).

Preset Development

To create a new preset, simply drop a new Python file into the /presets/ directory, and put a class in it that inherits from lib.preset.Preset or lib.raw_preset.RawPreset. Take a look at the existing presets for examples of what to do.

To test your preset, the command line python firemix.py <scene> --preset <ClassName> --nogui --profile may be helpful. The --preset switch forces the mixer to output a single preset only, so substitute the name of your preset for <ClassName>. The --nogui switch disables the GUI for faster startup, and the --profile option will create a frame-rate histogram so that you can see if your preset is taking too long to render.

Read on about Basic Preset Development to get started, and then Raw Preset Development for cases where you'd like efficient control of individual pixels.

Core and Plugin Development

I welcome contributions to the rest of the program. The transition engine is pluggable (see lib.transition.Transition and the examples in the /plugins/ directory), so it is easy to add new ones. See Transition Development for details.