A NestDrop alternative for Linux and Windows
Real-time audio visualization with MilkDrop presets, multi-deck mixing, and video output for OBS/VLC.
Note: This is a beta release. Some features may still be in development.
- Multi-Deck Visualization — Up to 4 independent decks with crossfader mixing
- MilkDrop Presets — Full support for .milk and .prjm preset files via ProjectM 4.x
- Audio Capture — Native PipeWire/PulseAudio support (Linux), WASAPI (Windows)
- Video Output — v4l2loopback (Linux), Spout (Windows) for OBS/VLC integration
- NDI Streaming — Network video output (optional, requires NDI SDK)
- MIDI Control — Full MIDI mapping with learn mode and controller presets
- Playlist Management — Per-deck playlists with shuffle and auto-cycle
- Compositor — Blend modes (Normal, Add, Multiply, Screen, Overlay)
- Multi-Monitor — Fullscreen on any connected display
- VU Meters — Real-time audio level visualization
- Theme Support — Dark/Light mode with customizable accent colors
- Preset Organization — Favorites, categories, and tags for presets
- Toast Notifications — Non-intrusive feedback for actions
| Platform | Format | Download |
|---|---|---|
| Linux (x64) | AppImage | OpenDrop_0.2.0_amd64.AppImage |
| Linux (x64) | Debian | OpenDrop_0.2.0_amd64.deb |
| Windows (x64) | MSI | OpenDrop_0.2.0_x64-setup.msi |
| Windows (x64) | Installer | OpenDrop_0.2.0_x64-setup.exe |
# Arch Linux
sudo pacman -S projectm pipewire
# Ubuntu/Debian
sudo apt install libprojectm4 pipewire
# Video output (optional)
sudo pacman -S v4l2loopback-dkms # Arch
sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="OpenDrop"- Windows 10/11 (x64)
- Spout for video output to OBS
# Prerequisites
# - Rust 1.75+
# - Node.js 18+
# - pnpm
# - libprojectM-4 development files
# Clone
git clone https://github.com/kushiemoon-dev/OpenDrop-VJ.git
cd OpenDrop-VJ
# Install dependencies
pnpm install
# Development mode
pnpm tauri dev
# Release build
pnpm tauri build┌─────────────────────────────────────────────────────────┐
│ Frontend (Svelte 5 / SvelteKit) │
│ AudioPanel, PresetBrowser, Playlist, Crossfader, VU │
└────────────────┬────────────────────────────────────────┘
│ Tauri IPC Commands
▼
┌─────────────────────────────────────────────────────────┐
│ Tauri Backend (Rust) │
│ AppState, AudioEngine, MIDI, Crossfader, Compositor │
└──┬──────────────────────────────────────────────┬───────┘
│ Spawn (JSON IPC) │ Audio
▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────┐
│ Renderer Deck 0 │ │ Renderer Deck 1-3│ │ PipeWire │
│ ProjectM+OpenGL │ │ ProjectM+OpenGL │ │ Capture │
│ + Video Output │ │ + Video Output │ └──────────┘
└────────┬─────────┘ └──────────────────┘
│ glReadPixels
▼
┌──────────────────┐
│ /dev/video10 │ → OBS/VLC
│ v4l2loopback │
└──────────────────┘
# Load kernel module
sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="OpenDrop"
# Verify device
ls -la /dev/video10
# In OBS: Sources → Video Capture Device → OpenDrop- Download SpoutLibrary.dll
- Place in
C:\Program Files\OpenDrop\ - In OBS: Sources → Spout2 Capture → OpenDrop
Built-in presets for popular controllers:
- Generic DJ — Universal 2-deck mapping
- Akai APC Mini — Grid-based control
- Novation Launchpad — Pad-based preset switching
- Korg nanoKONTROL2 — Fader-based mixing
Custom mappings can be created via the MIDI Learn mode.
Settings are stored in:
- Linux:
~/.config/opendrop/ - Windows:
%APPDATA%\opendrop\
| Setting | Default | Description |
|---|---|---|
preset_path |
/usr/share/projectM/presets |
Default preset directory |
audio_device |
Auto | Audio capture device |
video_output |
Disabled | v4l2/Spout output |
| Component | Technology |
|---|---|
| Backend | Rust, Tauri 2.x |
| Frontend | Svelte 5, SvelteKit, TypeScript |
| Visualization | ProjectM 4.x, OpenGL 3.3 |
| Audio | PipeWire, CPAL, PulseAudio |
| MIDI | midir |
| Video Out | v4l2 (Linux), Spout (Windows), NDI (optional) |
opendrop/
├── src/ # Svelte frontend
│ ├── lib/components/ # UI components
│ └── routes/ # SvelteKit pages
├── src-tauri/ # Tauri backend
│ └── src/lib.rs # Main Rust logic
├── crates/
│ ├── opendrop-core/ # Core library (audio, video, MIDI)
│ ├── opendrop-renderer/ # OpenGL renderer process
│ ├── projectm-rs/ # Safe ProjectM wrapper
│ └── projectm-sys/ # ProjectM FFI bindings
└── static/ # Static assets
- ProjectM — MilkDrop visualization engine
- Tauri — Desktop application framework
- Svelte — Frontend framework
- midir — MIDI library for Rust
- This software is for personal and educational use only
- Respect the licenses of preset files you use
- Support the original preset creators
- No warranty is provided; use at your own risk
MIT License - See LICENSE for details.
Made with ❤️ by kushiemoon-dev