A music-reactive lightshow application with 50+ visual effects
Project description
OpenLightShow
A music-reactive beamer lightshow application with 50+ visual effects built with Python. Transform your music into stunning visualizations with audio analysis and beat detection.
- Add a MP3 to your playlist
- Generate (a lot of) stage smoke
- Point your beamer / projector in the direction of your audience
- Start the anmimation
- Enjoy! 🙋♀️🙌🙋🙌🙋♂️
Effect preview on YouTube
Features
-
50+ Visual Effects: Wide variety of music-reactive effects including:
- Scanners & Lasers (horizontal/vertical scans, rotating dots, laser planets)
- Tunnels (circle, hex, rectangular, star tunnels)
- Particles (fireflies, pixel rain, plasma field, wild shot)
- Geometric Patterns (kaleidoscope, frequency mandala, breathing grid)
- Dynamic Effects (electric arc, orbiting satellites, corner burst)
-
Buffered Audio Analysis:
- Beat detection and tracking
- Frequency band separation (bass, mids, highs)
- Onset strength analysis
- Energy-based effect modulation
-
Customizable Controls:
- Brightness adjustment
- Sensitivity control
- Flash threshold
- Effect rotation interval
- Individual effect selection/deselection
- Weights that influence effect use probability
- Multi-effect layering (1-5 simultaneous effects)
-
Effect Classification System: Prevents similar effects from playing together for better visual variety
Installation
Quick Install
Windows Users
Download the standalone EXE installer from the GitHub Releases page. No Python installation required!
Python Users (All Platforms)
# Install from PyPI
pip install openlightshow
# Run the application
openlightshow
Development Install
For developers who want to modify the source code:
# Clone the repository
git clone https://github.com/digidigital/openlightshow.git
cd openlightshow
# Create virtual environment (recommended)
python -m venv venv
# Activate virtual environment
# On Linux/Mac:
source venv/bin/activate
# On Windows:
venv\Scripts\activate
# Install in development mode
pip install -e .
# Or install with development dependencies
pip install -e .[dev]
# Alternative: Install from requirements.txt
pip install -r requirements.txt
# For development with all tools
pip install -r requirements-dev.txt
Prerequisites
- Windows: Use the EXE installer (no prerequisites needed)
- Linux/Mac/Python install: Python 3.10 or higher
- FFmpeg (optional): For broader audio format support
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install ffmpeg libsndfile1
macOS:
brew install ffmpeg libsndfile
Windows: Download FFmpeg from ffmpeg.org and add it to your PATH.
Note: Modern versions of librosa use
soundfileas the primary audio backend, which includes MP3 support via libsndfile 1.1.0+. FFmpeg is only needed for legacy format support or if you experience compatibility issues.
Usage
Running the Application
After installation, you can run the application in several ways:
Using the command-line script:
openlightshow
Using Python module syntax:
python -m openlightshow
Or if running from source without installation:
cd /path/to/openlightshow
python -m openlightshow
Quick Start Guide
- Load a Track: Click "Add MP3" and select an audio file.
- Select Effects: Choose which effects to enable from the effects list
- Adjust Settings:
- Brightness: Control overall effect intensity (10-200%)
- Sensitivity: How responsive effects are to music (0-100%)
- Flash Threshold: Beat detection sensitivity (0-100%)
- Max Active: Number of simultaneous effects (1-5)
- Rotation Interval: How often effects change (1-30 seconds)
- Play: Click the play button to start the lightshow!
Effect Categories
Effects are internally organized by categories to prevent visual conflicts. The exclude_list.toml configuration defines which effect classes cannot play together, ensuring optimal visual variety:
- Scanner Effects: Linear scanning patterns
- Tunnel Effects: Depth-based expanding/contracting shapes
- Particle Effects: Point-based dynamic systems
- Flash Effects: Beat-synchronized flashes
- Geometric Effects: Pattern-based visualizations
- Rotation Effects: Spinning and orbital animations
- Center Effects: Effects centered on screen (gobos, kaleidoscopes)
- Edge Effects: Effects along screen edges
Technical Details
Audio Analysis
The application uses librosa for audio analysis:
- Sample Rate: 44.1 kHz
- FFT Size: 2048
- Hop Length: 512 samples
- Frequency Bands:
- Bass: 20-200 Hz
- Mids: 200-2000 Hz
- Highs: 2000-8000 Hz
Dependencies
- PySide6 (>= 6.5.0): Qt6 GUI framework
- numpy (>= 1.24.0): Numerical computations
- librosa (>= 0.10.0): Audio analysis and beat detection
- soundfile (>= 0.12.0): Audio file I/O
Creating Custom Effects
OpenLightShow uses a fully modular plugin-based architecture. Effects are auto-discovered from the effects/ directory - just drop in a new file and it's automatically loaded!
⚠️ Follow the instructions in next section or just copy the AI-prompt from the Project Website in order to create your own effects!
Quick Effect Creation (3 Steps)
- Create a new Python file in
src/openlightshow/effects/ - Subclass the Effect base class:
from ..effect_base import Effect
from PySide6.QtGui import QPainter, QColor
from PySide6.QtCore import QSize
class MyCustomEffect(Effect):
name = "My Custom Effect"
effect_class = "customeffect_class01" # Unique classification
def __init__(self, size: QSize):
super().__init__(size)
# Initialize your effect state
def on_beat(self):
# React to beat detection
super().on_beat()
def update(self, dt_ms, energies, sensitivity, flash_thresh):
# Update effect state
# energies = {'low': 0.0-1.0, 'mid': 0.0-1.0, 'high': 0.0-1.0}
pass
def paint(self, p: QPainter, brightness: float):
p.save()
# Draw your effect using QPainter methods
p.restore()
- Restart the app - Your effect will be automatically discovered and appear in the effects list!
AI-Assisted Effect Creation
Visit the project website for a ready-to-use AI prompt that you can copy and paste into ChatGPT, Claude, or Copilot with your effect idea. The prompt includes the complete Effect base class structure and examples.
See Implementation_guide.md for detailed development guidelines, QPainter methods, and best practices.
Troubleshooting
MP3 Files Not Loading
If you encounter issues loading MP3 files:
-
Check libsndfile version: Ensure you have libsndfile >= 1.1.0
python -c "import soundfile; print(soundfile.__version__)"
-
Install FFmpeg: As a fallback, install FFmpeg (see Prerequisites section)
-
Try WAV format: Convert your audio to WAV format as a workaround
Performance Issues
- Reduce the number of simultaneous effects (Max Active setting)
- Lower the brightness setting
- Close other resource-intensive applications
Effects Not Responding to Music
- Increase the sensitivity slider
- Adjust the flash threshold
- Check that your audio file is being analyzed (watch the console output during track loading)
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-effect) - Commit your changes (
git commit -m 'Add amazing effect') - Push to the branch (
git push origin feature/amazing-effect) - Open a Pull Request
Acknowledgments
- Built with PySide6
- Audio analysis powered by librosa
- Inspired by music visualization and VJ software
Authors
- Björn Seipel - Initial work
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openlightshow-1.0.3.tar.gz.
File metadata
- Download URL: openlightshow-1.0.3.tar.gz
- Upload date:
- Size: 145.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49917ec9284e7092b13f0656916d98cba958d9f80bbe0f1d0de3bbb453ba4f6c
|
|
| MD5 |
9c5d9491931f0a54236a79c727814289
|
|
| BLAKE2b-256 |
81d55ab83965a6212746b892c668b9ec5428fb03d3e963b2a299527a059acdb3
|
File details
Details for the file openlightshow-1.0.3-py3-none-any.whl.
File metadata
- Download URL: openlightshow-1.0.3-py3-none-any.whl
- Upload date:
- Size: 171.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9090009532350b1d71d1eb0c086f56bccf0aaa981d0e5e2e6159e9e58999767d
|
|
| MD5 |
b805d043b1acc9cc43195b9992eddd76
|
|
| BLAKE2b-256 |
1a70f5534df747283fd58deb97b3ae2f500a7f131166231e8f2a05adcba9057a
|