I needed to build a pixel addressable LED wall on the cheap, and have an easy way of controlling them. In the past, I had used either a standalone program to control them, or a lighting console to drive the pixels and run them as individual lighting fixtures. I have used the Fadecandy to drive the WS2811 strips in the past, it’s a great little device from Adafruit and Scanlime that lets you drive up to 64×8 WS2811 LEDs over USB via the Open Pixel Control protocol. I had 2 of them sitting around that I had driven from a Raspberry PI that was set up to receive Art-Net via the Open Lighting Project and output it to the Fadecandy units.
Unfortunately, with this LED wall I wanted to make, I was looking at 2048 pixels which is just too many to run from the lighting console as individual fixtures. I decided to set out to see if there was an easier solution to controlling the pixel wall, but figured sticking with the Fadecandy setup would be best for ease of use and cost savings.
I had recently been digging into some of the less-documented features of the presentation software ProPresenter when I stumbled across the option to “Enable Syphon”. Having no idea what Syphon was, I did some digging and stumbled across an amazing technology! Syphon runs on macOS and lets you route video between applications in real-time. With the “Enable Syphon” option in ProPresenter, you can feed its output directly to other programs like OBS.
While reading about Syphon, I noticed they had a Processing Library. This is significant because the Fadecandy has great support for Processing. Scanlime has an Open Pixel Control Library for Processing that lets you easily drive the LEDs connected to your Fadecandy via the OPC server for them. At this point it became a simple game of connect the libraries. ProPresenter -> Syphon -> Processing -> OPC.
You will need a Mac to do all this, since Syphon is macOS only. This was relatively simple, although we did have to go in and tweak some things to get everything to play nicely with the latest versions of all the Libraries. Here is what I did:
- Download and Install Processing for Mac by extracting the zip and copying the Processing app to your Applications folder.
- Open the Processing application and install the Syphon library by going to the Sketch menu -> Import Library -> Add Library… Then search for the Syphon library and Install it.
- Download the latest release of the Fadecandy Project from Scanlime. Extract it to somewhere convenient.
- Go to the Fadecandy folder and duplicate the “template” folder under examples/processing/ and rename it “syphon”. Then in the “syphon” folder, rename “template.pde” to “syphon.pde”. This will be the sketch we will use.
- As of writing this, the Fadecandy OPC Processing library has not been updated to work with Processing 3, so we will need to make a simple fix to make it work. If you decide to use Processing 2 or the library is update for P3, you can skip this step.
- Processing 3 has changed the way you register a method, so we need to fix OPC.pde included with Fadecandy to use the correct method for P3.
- Open syphon.pde and Processing will open the whole sketch. Go to the tab for OPC.pde. (You could also open OPC.pde with your favorite text editor)
- On line 30, change registerDraw(this); to parent.registerMethod(“draw”, this);
See here for an updated file: https://gist.github.com/16ad1a89832d47b2f4ff92cef9bafd19#file-opc-pde
- That will prevent an error saying The function “registerDraw(OPC)” does not exist
- Next, we will modify the syphon.pde file to pull frames from a syphon source and map them to LED pixels. Below is the file I created to take frames from the Syphon video feed and push them out to a led grid that has 64 strips with 25 pixels each.
I built this file using the documentation from Scanlime for the Processing OPC Client and examples from the Syphon Processing Library.
- Next we will create a Fadecandy server configuration file to map our pixels to the appropriate Fadecandy device. I find it best to put it in the bin folder that houses fcserver. For this project, I have 4 Fadecandy boards driving 64 strips, every other strip is doubled back so each Fadecandy will be 16 strips of 25 pixels, 2 per channel (50px).
I am planning on running everything off a Mac Mini, but you could easily have a Mac do your Syphon Processing and use another device like a Raspberry Pi run the Fadecandy controllers by changing the IP in the syphon.pde file to the RBP and running fcserver off the RBP and replacing the IP in the fcserver.json with null
- All that’s left is to wire everything up.
- Now we can get everything running.
- First, run
You should see it list the attached Fadecandy boards.
- Once the server is running, start your Syphon video source. I started ProPresenter and made sure “Enable Syphon” is checked under the Display Preferences in ProPresenter. I also changed the output resolution to match my Processing Canvas size. I did notice that you don’t need to have the Output Enabled, which is nice.
- Finally, we can start our Processing script, which will connect everything! Once you start the script, you should see it connect to the Syphon Server and OPC (fcserver) server. Processing will display a preview window that will show the video from Syphon and an overlay of the pixels.
- First, run
After getting everything installed and up and running, we had 1/4″ wood panels cut on a CNC with an abstract pattern, and hung ploly sheeting between the LEDs and wood panel to act as a diffusion. It looks amazing!