LOVJ is a framework based on LOVE2D, designed as a live-coding and interactive VJing environment for live music performances. It provides a patch-based architecture for creating, sequencing, and mixing video effects with real-time controls, GLSL shader support, and a web-based control surface (LOVJ Deck).
- Patch-based architecture — modular video patches that can be loaded, layered, and mixed across multiple slots
- Live-coding — hot-reload on file save with syntax checking and rollback on failure
- GLSL shaders — up to 10 post-process layers per slot with
@paramannotations for automatic parameter binding - BPM-synced signals — LFOs, envelopes, and easing curves locked to a global transport clock
- Step sequencer — Elektron-style parameter locks with per-step easing, polyrhythmic channels, and morph transitions
- Scene sequencer — beat-quantized transitions between saved parameter states
- Modulator engine — bind LFOs and envelopes to any parameter with min/max range and waveshaping
- Savestate system — save/recall parameter snapshots with smooth easing transitions
- Video sampler — FFmpeg-based video playback with varispeed, seeking, loop points, and any-codec support via threaded decoding
- Databending / datamoshing — real-time packet-level video corruption: I-frame removal (melt), I-frame corruption (crush), block copy/shift (corrupt), P-frame repeat (smash)
- Feedback buffers — ping-pong echo effects with rotation, zoom, and tint
- LOVJ Deck — web-based control surface with parameter editing, sequencer faders, shader management, and beat visualization
- MIDI support — CC, note, and program change mapping to any command
- OSC networking — bidirectional control with parameter discovery
- Spout integration — stream video to and from other applications (Windows)
git clone --recurse-submodules https://github.com/merumerutho/LOVJ.git
cd LOVJ
love .To build the LOVJ Deck web GUI:
cd studio && npm install && npm run buildFor Spout support (Windows):
python installSpout.pyFor FFmpeg video sampler support:
python installFFmpeg.pyFull documentation is in doc/, covering:
- Getting Started — installation, dependencies, first run
- Creating Patches — patch anatomy, lifecycle, drawing
- Writing Shaders — GLSL pipeline,
@paramannotations - Clock & BPM — transport, syncRate, tap-tempo
- Signals — LFO, envelope, easing curves
- Sequencer — step sequencer, p-locks, morph easing
- Keyboard / MIDI / OSC — input mapping and control protocols
- LOVJ Deck — web control surface
- Rendering Pipeline — canvas flow, shader layers
- Savestates — save/load with morph transitions
Contributions are welcome! Please feel free to open an issue or submit a pull request.
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
- lick — original live-coding library (rewritten for LOVJ)
- json.lua — JSON library
- Spout — video sharing library
- SiENcE/lovemidi — MIDI library for LOVE2D
