Last updated:

Tutorial: Light Shows from REAPER with Custom JSFX

Introduction

For my music related videos, I use static lighting, and do all brightness automation and color changes in post-production, at the video editing stage. I even coded an After Effects script to animate gamma in sync with the song tempo, for a new track by Friops. I also recently had to control lights for few minimalist private music shows, with only simple very limited remote controllers.

Becoming more and more curious about how much more expressive could light animation be for my music (live or video) projects, I decided to give it a try and starting to learn how it could works.

But there was a twist, though: instead of using a regular light control software (QLight+, Soundswitch, DMXControl…), or dedicated light controller hardware, I wanted to control lights right from my audio software of choice, REAPER. I already saw some demos about lights controlled from REAPER, and I checked some VST to DMX hardware or VST to DMX software solutions (LightJams, Enttec EMU), but they often lack some kind of visualization in the DAW, or have limited possibilities in trial mode and are expensive. So, to match my needs, I knew I would need to design some tools, which could be very fancy if successful.

Oh, and of course, the whole rig should be portable and controllable wirelessly, so I can use it in the field, on location. Another layer of challenge!

Few weeks of research and développement later, I had the system ready to make a the first track light show. I chose a pretty intense song from Ice Nine Kills, to push the system to its limit, and I was surprise how fast it was (took just half a day).

Few days later, Friops made one for Monuments, and this is the first one for which we made a video, which just has been released! So here is our first video showcasing our custom light animation system:

Fancy, isn’t it! The light animation has been programmed by Friops, using REAPER and custom scripts I coded.

This is the only show we have filmed yet, but we prepared several tracks already, so expect even more light shows coming soon!

Anyway, rather than telling you all the details of my journey in these weeks of research, which will be quite long as I was new to all this and on my own, I will jump directly to the most important aspects of this custom REAPER light show workflow, and showcase the tools I built for it. Maybe it will interest you and help you build your own custom light kit!

Considerations

Animating light shows from an audio software might seem unreasonable. Yet, there are valid arguments for this:

  • Extensive time-related features (complex tempo grid and time signature), especially useful in musical context
  • Extensive audio features (lots of compatible audio / video format, low latency, sampling…)
  • Extensive automation envelope features
  • Easy to control via MIDI hardware, like drum pads or keyboards
  • Lots of signal modifiers (audio to MIDI, MIDI data processing)

And here are some REAPER generic pros:

  • More affordable than some dedicated light software which are either subscription based, or expensive
  • Expendability (easy to create custom features and controls)
  • Portability, cross-platform etc…
  • Can run on a laptop
  • More personal, but I already know REAPER pretty well, so fewer things to learn

Of course there are some limitations at using an audio software for light control, but fortunately nothing that would be dealbreaker for me. Here is where dedicated lights system (hardware or software) would surely be better:

  • Lots of groups of lights
  • Complex lights (motorized, multi-pixel etc)
  • Advanced stage lights visualization
  • Light controller hardware, which doesn’t need computer to run

So, if you need to light a stadium concert with racks of motorized lights, REAPER may not be the perfect choice. But for my simple scenarios, using REAPER could be perfect!

Signal Path

This would be a typical REAPER MIDI to DMX based workflow.

  1. MIDI Controller (optional, for live use only)
  2. REAPER
  3. MIDI Bridge Software
  4. MIDI to DMX Converter Software
  5. USB DMX Adaptater
  6. Lights Kits
REAPER to DMX flow chart
REAPER to DMX flow chart

Let’s go into this in details and see how I managed this.

Lights Kit

First step to create a light show is to have a controllable light kit. Latency should be as small as possible, which is often an issue with some “smart lights” devices, which can require sending signal over the internet in another country server even if the light is in the same room as the computer. So, DMX lights are needed. DMX is standard communication protocol to control lights, used in almost all live events. It works locally, at a 40Hz max rate. It is an 30 years old standard, very reliable, simple, and extremely common, in both hardware and software.

As I often shoot in exterior, I needed a portable, light-weight, video compatible system. This means I needed the light kit to be battery powered and wireless. I wanted a kit of Led tubes, which is relatively compact, and looks nice on video. Two lights would be a bit limited for expressive light show, so I went for 4.

After days of research, fixture comparison and emails to various distributors and manufacturers, I ended up with a kit of 4 Nanlite Pavotube 15 XR. This is quite high-end level, as they feature built-in CRMX, which means that no extra wireless DMX receivers would be needed, and so, no need to consider battery life of these, no extra cable to buy etc. This is about 400€ of saving. CRMX is top level wireless DMX standard, pretty recent so not very common. More on CRMX later.

As support accessories, I got 4 Godox 90F foldable stands, easy to cary, and 4 Roadworx Universal Ball Joints, to be able to orient the light in any direction.

CRMX Emitter – Wireless DMX

For my wireless workflow, a CRMX signal has to be send to the lights. CRMX devices are usually very expensive (600€+) and quite rare. Fortunately, Godox has recently released an CRMX emitter, the Godox TimoLink Transmitter. It was meant to work with their own receiver. The (very light) manual doesn’t show how to connect it directly to CRMX lights, but just with their own receiver. Tech support even told me it wouldn’t work with other device. However distributors told me that it should work in theory, but no one had try. Unexplored territory. The only way to know was to try. And I’m glad to report that yes, it works flawlessly! You can connect CRMX light to the Godox CRMX transmitter.

USB to DMX

The computer has to tell what color and intensity the light should emit. So for this we need some kind of USB interface with a DMX output. These USB devices come in many shapes, in boxes or in cable. Some are generic, some are dedicated to particular software. I end up with the most compact solution I have found, compatible with Open DMX (an interface type supported by most DMX software), and fortunately it was also among the cheapest one, yet hand-made and assembled in France ( see interfacedmx.fr ). The chip handling Open DMX to USB conversion is in fact pretty cheap, that is why various independent manufacturers can propose hand-made devices based on it. Compared to box, having the interface in cable format is also a way to lower the price, while having a very compact solution. No need for advanced electronic protection in my case as my lights will be remote controlled. Maybe more advanced system would have more stable connection, but for a start it would be good enough.

MIDI to DMX Software

Now I needed a software to send DMX data to the DMX interface. I tested and tried dedicated light software, but for my case, none was as satisfying as Chataigne, a free open source software (another French tech).

Chataigne can handle various kinds of input signals (DMX, MIDI…) and devices (Open DMX interface), convert them and route them to other signal types and hardware. As the MIDI would be generated by REAPER, a virtual MIDI port, allowing to send MIDI data from one app to another was needed. More on this later.

I initially thought that simple MIDI to DMX would be good enough, but MIDI data resolution is 7 bits per CC (128 possible values), while DMX is 8 bits per channel (256 possible values). Led dimming on long periods (several seconds) already tends to be stepped, especially at low intensity values, but it is even worth if the incrementation/decrementation value is at low resolution as well.

Fortunately, there is an known trick to have 14 bits MIDI data, just by combining two CC, so these make a 16384 values data stream, way more than needed. In a bit similar way, DMX can be used in 16 bits (65 536 values), combining two DMX channels. I end up choosing this was well, because 256 values isn’t optimum for hue control, which has 360 possible values (1 step per degree on the color wheel).

MIDI data software flow.
MIDI data software flow.

On the lights, I chose the HSI (Hue, Saturation, Intensity) 16 bits mode, which answers all my needs and is more ergonomic to control than RGB. I also chose only one pixel (these lights can have up to 8 different sections, called pixels), cause controlling several parts of the tubes differently is not something I am looking for.

It tooks time to make this MIDI 14 bits to DMX 16 bits Chataigne workflow, cause debugging data sent on multi stream is more complex, but in the end, it works great! Also, thx to the Chataigne community for the assistance!

14 bits MIDI to 16 bits DMX in Chataigne, for 4 lights. Also, see Modules on the top left panel.
14 Bits MIDI data to 16 bits DMX in Chataigne.

I also added a simple Killswitch button on the Chataigne dashboard, to be able to shut down all the light directly, without MIDI involved.

DMX Killswitch in Chataigne
My Chataigne Dashboard, with a unique button for DMX Killswitch.

MIDI Bridge

Then, I needed a software to be able to pass REAPER MIDI data to Chataigne. This is called a MIDI bridge. It’s a simple virtual device. You can set it as hardware output of a REAPER track, and MIDI hardware input on Chataigne. I tested several, but LoopMIDI, which is free, seems the best at handling intensive stream of MIDI data.

LoopMIDI panel
LoopMIDI.
Setting LoopMIDI as Input in Chataigne
Input MIDI setup in Chataigne.

Custom MIDI Effects Generators

Ok so now I have hardware and data routing set up, so I can send data from REAPER to control the lights, using a track MIDI Hardware out. But how to actually generate this data in a first place?

Setting MIDI Hardware Out from a REAPER track
A REAPER track can send MIDI data to a particular MIDI hardware.

Sure, we can use any kind of basic effect with 14-bit MIDI CC sliders like ReaControlMIDI and automate one for Hue, one for Saturation and one for Intensity but… It is not very user friendly. Especially for hue, as there is no visual feedback of what the hue will be, so it forces to work with the lights on. Not efficient.

ReaControlMIDI
Sending MIDI Data from ReaControlMIDI. The value isn’t very helpful, as it scales between 0 and 16383.

This is why I designed and coded my own JSFX for light control!

JSFX is a REAPER script way to code your own audio or MIDI FX, with basic GUI. This is perfect to experiment and do some kind of minimal (but helpful) visualizers and MIDI data generators.

It tooks days to elaborate and more to polish, but I ended up with two full-featured JSFX, capable of sending these 14-bit MIDI data. I will only showcase the main concepts, leaving technical details and development process and consideration for those interesting.

4 DMX Lights Visualizer

This effect is a direct way to control my 4 DMX lights. It is meant to be used with track FX parameter envelope automation. It features HSI sliders for 4 lights and some extra settings for CC out, global intensity, DMX killswitch etc. It is straightforward, and thanks to a simple but effective color visualization, it is just perfect to design some light shows, like you saw above!

The core idea is to automate light intensities on dedicate envelopes, using automation items to allow repetition of patterns and timing stretching. Intensity automation is relative, the actual light intensity emitted by the light is controlled by a dedicated slider, which is extremely convenient then we want to quickly adjust the intensity of a whole show without having to alter each light automation points value.

A palette of clickable predefined colors (hue and saturation) buttons is displayed on the GUI, which is very convenient to write automation. The FX track is set in Touch mode, with square as default envelope point shape, hue transition isn’t being often required contrary to instant change. Saturation set to 0 output white. Track anticipative FX has to be set to off.

To go with this effect, I also made an 4 HSI timeline visualizer ReaScript, which is very convenient to find mistakes in the light programming and quickly spot where we are on the project. It was also quite challenging to code, but I really wanted to know if it would be handy, so I just made it. And I confirm that it is quite useful!

DMX Light Controller with MIDI

This second FX is meant for playing lights from a MIDI controller, live. It is meant for one single light control. But a MIDI CC duplicator FX can be used to control all 4 DMX light at the same time (sending the same data).

I designed it to control DMX light from a MIDI controller drumpad like my Maschine Mikro MK3 or my Arturia Beatstep. Meshuggah’s light operator from the video “best light guy in the world” was a good source of inspiration for aspiration (side note, The Abysmal Eyes light show, for the same band, was also a great inspiration for music synced light shows). (Extra Side note: a MIDI controller hardware in drumpad format, the Wolfmix W1, just came out recently!)

By pressing a pad, an associated color is triggered, with a customizable intensity transition timing, sending associated HSI data encoded as MIDI CC values next on the FX chain. There are lots of customization possibilities for MIDI input, channel, strobe activation etc. Simple and fun way to control lights!

I didn’t push it too far as it is not the main way I want to control my lights, but it is quite funny and functional as it is!

My Workflow

In resume, here the path I came up with:

  1. Maschine MK3 Mikro (Hardware MIDI Control – optional, for live only)
  2. REAPER (MIDI sequencer and Audio handler)
  3. HSI value generators (from JSFX hosted in REAPER)
  4. Loop MIDI (MIDI Bridge to send MIDI data across software)
  5. Chataigne (MIDI to DMX converter, and communication with the USB to DMX interface)
  6. Open DMX USB Interface Cable
  7. DMX 3 pins to 5 pin adaptater (small set-and-forget adaptater to be able to plug the transmitter to the interface)
  8. Godox Timolink CRMX Transmitter (wireless DMX)
  9. Kit of 4 Nanlite Pavotube II 15 XR (CRMX compatible)

Conclusion

Designing light shows is a novelty for me, a new kind of art to practice. But there was an uncertain chance of success, due to possible software/hardware compatibility and limitations. In the end, the workflow I came out with is very smooth, portable, easy to deploy, and efficient. Once all is set up, programming complex light shows, as you saw on the introduction video, is very accessible.

Other fancy REAPER based light control workflows could be imagined, like triggering lights based on microphone signal, midi hardware also triggering sounds and lights at same time, or having lights automation based on a audio-fiction, one color attributed for each character for eg. It could also be extended to control other kind of DMX hardware like smoke and fire machines. A bit out of my scope for now, but stimulating to consider it could be possible!

Anyway, I can’t wait to make more videos with elaborated light shows, as it is both fun to program, and fancy to look at.

I hope this article could inspire you to explore this field as well, as much as it inspired my fellow collaborators.

And if you are interested by these scripts, let me know and I will see if it worth making some kind of premium pack for it.

Let’s go for a light show!

Extra Credits

  • Norbert of BinderKitten (another open source DMX software), who sends me toward Chataigne.
  • Ben Kuper of Chataigne who helped for MIDI 14 bits -DMX 16 bits.
  • Friops and Henri for their enthusiasm in this challenge, and the few others who witnessed one of our light shows before this article release! Very encouraging!

Links