Lounge room laser show
Posted: Tue Feb 18, 2025 11:27 am
I want to share with you some results from my recent laser project which used QLC+.
I'm a hobbyist programmer and laser enthusiast. I do neither professionally and do both purely for my own enjoyment in my free time.
For this project, I created a 7-hour laser show synchronised to music, intended for viewing in a residential setting like a lounge room. The show consisted of 92 songs, and I used my own program to generate the code for the Script Editor. Using my program, the show took approximately 45 hours of manual work to create.
The show used 4 lasers aimed at each other to form an X-shaped convergence point, with a mirrorball positioned slightly off-center from this convergence point. To protect the audience, adhesive felt was used to cover problematic mirrors.
I recorded some videos at random moments during the show, and after watching them back I felt they turned out well, so I decided to share them here.
Video examples
Example 1:
Example 1 with QLC+ Simple Desk overlay:
Example 2:
Example 2 with QLC+ Simple Desk overlay:
How was QLC+ used?
I'd like to explain how QLC+ was used for this project. Because you might be thinking that since I created a program which can generate a laser show and output all the relevant DMX values, why do I even need QLC+? The answer is that while my program now handles the show generation, QLC+ is still a key part of the process.
Before I even started developing my own program, I relied entirely on QLC+ for everything. When I first got into the hobby, QLC+ made it so easy to get started, from connecting to my lasers to basic control, which allowed me to develop a deeper understanding of DMX over time. Eventually, I came up with the idea of writing a basic program to assist with creating simple sequences. At first, this worked well as a complement to QLC+, making it easier to generate some customisable sequences. But as I gradually added complexity, I offloaded more and more of the show creation process to my program. Over time, it reached the point where it could generate the code for an entire song from start to finish, requiring only copy-paste into QLC+’s Script Editor.
QLC+ remains an important part of my workflow. While my program handles the show generation, I still rely on QLC+ tools such as the Virtual Console, Simple Desk, and Function Manager for everything else. Even though my approach has evolved over time, I wouldn’t have reached this point without QLC+, and I don’t see myself moving away from it anytime soon. Hopefully, this conveys just how much I appreciate what an amazing program it is.
How did I make the show?
For this project, I programmed a sort of overly complex number generator that outputs code for the Script Editor in QLC+. This is a program I've been working on and off for the past 3 years.
While my program automates a large part of the laser show generation, there’s still a lot of manual work required for each song before I can run it through my program. For example, I have to manually collate all the details of each song into a spreadsheet, such as song name, bpm, and duration. I then manually locate all my desired cue points within the song and between each cue point assign a numerical value to reflect the relative "energy" of that part in the song. This might not sound like a lot of work, but on average this process takes about 10 minutes per song.
A couple more things each song needs before the program can generate the laser show are a beatmap and a notemap, which are essentially arrays of stored millisecond values, with beatmaps marking every beat in the song and notemaps marking every note in the song. The beatmap is calculated simply using the bpm and duration of the song, whereas the notemap is generated using python and Aubio's onset detection feature. I then run a simple script to align the beatmap to the notemap and manually verify its accuracy. On average, this task takes about 2 minutes per song.
My program has about 3,000 parameters that influence the laser show generation. So this means that to give each song a unique feel, these parameters need to be manually adjusted for each song. Unfortunately, since any adjustment can make the show better or worse, this creates a trial-and-error type situation, where I have to continuously repeat the following steps: adjust the parameters, generate the show, watch the show to assess the outcome. As a result, this quickly becomes very time consuming, therefore the average time it takes me is about 17 minutes per song to get it to the point I am happy with the show.
So in total, creating a laser show for one song takes me about 29 minutes. Considering the uniqueness I achieve with each song, I think this is quite reasonable, though I’m constantly looking for ways to bring this number down. This is actually something I’d be very curious to get other opinions on: how long do you generally spend per song creating your laser/light show? What level of complexity do you aim for?
I'm a hobbyist programmer and laser enthusiast. I do neither professionally and do both purely for my own enjoyment in my free time.
For this project, I created a 7-hour laser show synchronised to music, intended for viewing in a residential setting like a lounge room. The show consisted of 92 songs, and I used my own program to generate the code for the Script Editor. Using my program, the show took approximately 45 hours of manual work to create.
The show used 4 lasers aimed at each other to form an X-shaped convergence point, with a mirrorball positioned slightly off-center from this convergence point. To protect the audience, adhesive felt was used to cover problematic mirrors.
I recorded some videos at random moments during the show, and after watching them back I felt they turned out well, so I decided to share them here.
Video examples
Example 1:
Example 1 with QLC+ Simple Desk overlay:
Example 2:
Example 2 with QLC+ Simple Desk overlay:
How was QLC+ used?
I'd like to explain how QLC+ was used for this project. Because you might be thinking that since I created a program which can generate a laser show and output all the relevant DMX values, why do I even need QLC+? The answer is that while my program now handles the show generation, QLC+ is still a key part of the process.
Before I even started developing my own program, I relied entirely on QLC+ for everything. When I first got into the hobby, QLC+ made it so easy to get started, from connecting to my lasers to basic control, which allowed me to develop a deeper understanding of DMX over time. Eventually, I came up with the idea of writing a basic program to assist with creating simple sequences. At first, this worked well as a complement to QLC+, making it easier to generate some customisable sequences. But as I gradually added complexity, I offloaded more and more of the show creation process to my program. Over time, it reached the point where it could generate the code for an entire song from start to finish, requiring only copy-paste into QLC+’s Script Editor.
QLC+ remains an important part of my workflow. While my program handles the show generation, I still rely on QLC+ tools such as the Virtual Console, Simple Desk, and Function Manager for everything else. Even though my approach has evolved over time, I wouldn’t have reached this point without QLC+, and I don’t see myself moving away from it anytime soon. Hopefully, this conveys just how much I appreciate what an amazing program it is.
How did I make the show?
For this project, I programmed a sort of overly complex number generator that outputs code for the Script Editor in QLC+. This is a program I've been working on and off for the past 3 years.
While my program automates a large part of the laser show generation, there’s still a lot of manual work required for each song before I can run it through my program. For example, I have to manually collate all the details of each song into a spreadsheet, such as song name, bpm, and duration. I then manually locate all my desired cue points within the song and between each cue point assign a numerical value to reflect the relative "energy" of that part in the song. This might not sound like a lot of work, but on average this process takes about 10 minutes per song.
A couple more things each song needs before the program can generate the laser show are a beatmap and a notemap, which are essentially arrays of stored millisecond values, with beatmaps marking every beat in the song and notemaps marking every note in the song. The beatmap is calculated simply using the bpm and duration of the song, whereas the notemap is generated using python and Aubio's onset detection feature. I then run a simple script to align the beatmap to the notemap and manually verify its accuracy. On average, this task takes about 2 minutes per song.
My program has about 3,000 parameters that influence the laser show generation. So this means that to give each song a unique feel, these parameters need to be manually adjusted for each song. Unfortunately, since any adjustment can make the show better or worse, this creates a trial-and-error type situation, where I have to continuously repeat the following steps: adjust the parameters, generate the show, watch the show to assess the outcome. As a result, this quickly becomes very time consuming, therefore the average time it takes me is about 17 minutes per song to get it to the point I am happy with the show.
So in total, creating a laser show for one song takes me about 29 minutes. Considering the uniqueness I achieve with each song, I think this is quite reasonable, though I’m constantly looking for ways to bring this number down. This is actually something I’d be very curious to get other opinions on: how long do you generally spend per song creating your laser/light show? What level of complexity do you aim for?