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.
| 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"
# 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
C:\Program Files\OpenDrop\Built-in presets for popular controllers:
Custom mappings can be created via the MIDI Learn mode.
Settings are stored in:
~/.config/opendrop/%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
MIT License - See LICENSE for details.
Made with ❤️ by kushiemoon-dev