PixelController
(LED) Matrix Control Software, supports various Hardware, Keywords: LED Matrix, OSC, Realtime, VJ, Arduino, Teensy, RPI
Install / Use
/learn @neophob/PixelControllerREADME
PixelController
PixelController - a matrix control project by Michael Vogt <michu at neophob.com>, (c) 2010-2013. The main goal of this application is to create an easy to use matrix controller software which creates stunning visuals!
Primary Website: http://www.pixelinvaders.ch
My Blog: http://www.neophob.com
Facebook: https://www.facebook.com/PixelInvaders
You can download PixelController on Google Code: http://code.google.com/p/pixelcontroller/downloads/
HOWTO USE PIXELCONTROLLER
Prerequisite:
- Java Runtime, v1.6+
You can start PixelController with an integrated GUI by double click on PixelController.jar or you can start the console version (for example on a Raspberry PI) of PixelController by executing the console\PixelController.sh (OSX/Linux) or console\PixelController.cmd (Windows) Script.
By default PixelController has no configured output device (= no configured LED Matrix). To change that open the data/config.properties configuration file and make the necessary changes, lines starting with # are ignored. The most important parts are:
output.resolution.x=8
output.resolution.y=8
which defines the resolution of your matrix. Next you need to define one or multiple Output devices, for example for two PixelInvaders panels (while the output for the second panel is rotated by 180 degrees):
pixelinvaders.layout.row1=NO_ROTATE,ROTATE_180
#pixelinvaders.layout.row2=NO_ROTATE,NO_ROTATE
Take a look at the config file, there are a lot of hints how to configure PixelController.
Main idea
A Visual can be assigned to one or more Output LED Matrices. A Visual consists of two Generators (create the content), two Effects (modify the content), a Mixer (mix the content) and a Colorset (define the look of the content). I try to visualize it:
[GENERATOR A] ---> [EFFECT A] ---> [MIXER] <--- [EFFECT B] <--- [GENERATOR B]
|
V [Colorset]
[VISUAL]
Exception: There are two exceptions, if you use the Capture generator or use the OSC Generator (that sends 24bpp data) PixelController switch to the Pass-though mode. This means no Colorset, Effect and Mixer can be used and the original input data is send to the panels.
Per default PixelController creates one Visual more than the number of connected Output devices. This allows you to play with a non-visible Visual, that can be displayed later. All Visuals can be stored (and of course loaded) in a preset.
DEMO
Check out PixelController Rough Cut #2. Featuring two PixelInvaders panels, PixelInvaders 3D RGB Panels and PixelInvaders panels controlled by a tablet (OSC) to see PixelController in action on two PixelInvaders panels.
SUPPORTED HARDWARE
PixelController supports different (LED) matrix hardware devices/controller:
- PixelInvaders 3D Panels serial device (see Readme.PixelInvaders, http://www.pixelinvaders.ch)
- PixelInvaders 3D Panels network device (see Readme.PixelInvaders, http://www.pixelinvaders.ch)
- Seeedstudios Rainbowduino V2 (see Readme.rainbowduinoV2)
- Seeedstudios Rainbowduino V3 (Using this firmware: https://code.google.com/p/rainbowduino-v3-streaming-firmware)
- ArtNet Devices, multiple universe are supported,510 Channels (170 RGB Pixels) per universe
- MiniDmx Devices (like the SEDU board of http://www.led-studien.de)
- Element Labs Stealth LED panel. No longer in production ()
- Generic UDP Devices (for example Raspberry Pi, check out the PixelPi Software)
- TPM2 Serial devices (see http://www.led-studien.de for more information)
- TPM2 Net devices (see http://www.led-studien.de for more information)
- E1.31 devices (see http://www.opendmx.net/index.php/E1.31)
Check out the integration/ArduinoFW directory, all Arduino based firmware files are stored there.
Which firmware should I use?
If you don't have a hardware controller (like ArtNet or E1.31) and would like to use an Arduino/Teensy microcontroller you can choose between different firmwares.
- If you bought a PixelInvaders DIY Kit, use the
integration/ArduinoFw/pixelinvaders/neoLedLPD6803Spifirmware - If you want to create a ONE panel matrix with an arbitrary resolution, use the
integration/ArduinoFw/tpm2serialfirmware - If you want to create multiple 8x8 panels, use the
integration/ArduinoFw/pixelinvaders/neoLedWS2801Spifirmware
I recommend a Teensy 2.0 microcontroller, as some Arduino boards suffer from bad serial latency (especially the Arduino UNO r3). You need to install the Arduino IDE, see the "Getting started with Arduino" (http://arduino.cc/en/Guide/HomePage) Tutorial.
You need to know how to install an Arduino Library (http://arduino.cc/en/Guide/Libraries). For PixelInvaders Panels (LPD6803) install the integration/ArduinoFw/libraries/timer1 and integration/ArduinoFw/libraries/neophob_lpd6803spi libraries, for other panels (WS2801, WS281x...) install the integration/ArduinoFw/libraries/FastSPI_LED2 library.
How does it work?
PixelController generates the content for the LED matrix and sends the data out to the controller. The controller then handle the LED module update (which depends on the used LED modules). There are two options to send the data to the controller:
- sends the data via USB to the Arduino/Teensy board aka. DIY LED controller.
- sends the data via ethernet to a PixelInvaders/E1.31/ArtNet... device.
Here are some primitive schemes:
[PixelController]---<USB>---[Teensy with PixelInvaders firmware]---<SPI>---[LED#1]---[LED#2]...
[PixelController]---<USB>---[Teensy with TPM2 firmware using fastspi2 lib]---<SPI>---[LED#1]---[LED#2]...
[PixelController]---<ethernet>---[Artnet Controller]---<???>---[LED#1]---[LED#2]...
Advanced PixelController configuration
There are a lot of options in the config.properties file. I describe some examples; PixelController updates all Visuals depending on the Sound input. If a beat is detected, the Visuals are updated faster. You can disable this behavior by setting this option:
#=========================
#enable pixelcontroller sound analyzer (disable it if you don't have a sound card)
#=========================
sound.analyze.enabled=true
There is a Generator called "Screen Capture" which is disabled by default. If you want to enable this generator, edit the following settings:
#x/y offset for screen capturing generator
#if you define screen.capture.window.size.x as 0, the screen capture generator will be disabled
screen.capture.offset=100
screen.capture.window.size.x=500
screen.capture.window.size.y=300
This enables the Screen Capture Generator which captures a region of 500 x 300 pixels. Potential use cases for this Generator are: YouTube videos, other movie players...
Or you can start PixelController in the random mode where PixelController changes the Visuals randomly:
#=========================
#start in random mode?
#=========================
startup.in.randommode=false
Or you can save a preset and load that one per default if you start PixelController (per default, preset 0 will be loaded)
#=========================
#load a preset if PixelController starts?
#Warning, this will overwrite your settings configured above (initial generator values)!
#=========================
#startup.load.preset.nr=1
You can define the size of the PixelController GUI, for example the size of the simulated LED Matrix (which is per default 16 pixels):
#=========================
#the size of the software output matrix
#=========================
led.pixel.size=16
Or define the window size, depending on this setting, the Visuals are displayed larger or smaller.
#=========================
#define the maximal window size (control window)
#=========================
gui.window.maximal.width=820
gui.window.maximal.height=600
You can define your own Colorsets, they are defined in the file data/palette.properties. A Colorset definition consists of a name and multiple RGB color values. Here is an example:
MiamiVice=0x1be3ff, 0xff82dc, 0xffffff
There are more options in the config file, take a look - each option is documented in the config file.
FRONTENDS
There are different frontends for PixelController (besides the GUI frontend). It doesn't matter how you control PixelController - you have the same functions. See chapter OSC Messages to get an overview.
- PixConCli: Command Line Interface for PixelController, works also remote. The CLI tool is called
PixConCli.cmdon Windows andPixConCli.shon Linux/OSX. - OSC: The OSC interface of PixelController is listening (by default) on port 9876. Processing examples are included in the
integration/Processingdirectory. You can send messages to control PixelController or you can send image content via OSC to PixelController.
Related Skills
openhue
337.3kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
337.3kElevenLabs text-to-speech with mac-style say UX.
weather
337.3kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.4kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.
