Music, rendered live.
Omadrop is a native music visualizer for Omarchy. It turns the audio playing through PipeWire into ten original GPU feedback scenes. Kicks, snares, hats, bass, musical phrases, and section changes each control different parts of the image.
Its audio engine separates percussion, frequency bands, beats, phrases, and arrangement changes before the renderer draws them. The result follows both the immediate rhythm and the larger structure of a track, not just its volume.
Website · 31-second demo · Latest release
Every scene uses the same live music analysis differently. These are frames from the v0.3 release demo, not mockups.
Spectral Ribbons · Constellation Field
Prism Garden · Wire Organism
- Separate musical signals. Kick, snare, hat, bass, mids, treble, onsets, beats, bars, phrases, and arrangement changes do not collapse into one volume value.
- Musical scene direction. Omadrop changes scenes on detected bar and section boundaries, avoids immediate repeats, and recalls a visual family when a familiar part of the song returns.
- Ten authored scenes. Depth Tunnel, Centrifuge, Wire Organism, Prism Garden, Orbital Loom, Tidal Grid, Pulse Cathedral, Constellation Field, Spectral Ribbons, and Bloom Engine ship with the native renderer.
- High-resolution album art. MPRIS artwork opens the show, supplies the scene palette, and dissolves into the first visual. ASCII mode keeps the full-resolution cover underneath its dot field.
- Synchronized multi-monitor output. Launch, scene changes, ASCII state, and keyboard input stay synchronized across displays.
- Local by design. Audio analysis runs on the machine. There is no account, model download, hosted AI service, or song upload.
The native renderer is the default. An 11-preset projectM compatibility mode is included for direct comparison with classic MilkDrop behavior.
git clone --branch v0.3.0 https://github.com/btsouth/omadrop.git
cd omadrop
./install.shThe installer checks dependencies, builds the renderer, installs Omadrop under
~/.local/share/omadrop, and adds its Hyprland shortcuts. Existing bindings
are backed up and restored automatically if Hyprland rejects the new config.
Run ./install.sh again to update. Use --no-deps or --no-bindings to skip
automatic package or shortcut setup.
# Check the machine before building
./bin/omadrop-doctor
# Remove Omadrop while preserving sync settings and cached covers
~/.local/share/omadrop/uninstall.shOmadrop builds against libprojectM, SDL2, GLEW, OpenGL 3.3, PipeWire, FFTW,
json-c, libpng, ImageMagick, GLib, curl, jq, GCC, and pkgconf. Demo recording
also uses FFmpeg and gpu-screen-recorder. On Omarchy, the installer can add
missing Arch packages with omarchy pkg add.
omadrop # all connected displays
omadrop --single # focused display only| Key | Action |
|---|---|
Super + Shift + V |
Toggle Omadrop |
Super + Alt + V |
Hide or restore the secondary display |
A |
Toggle ASCII and continuous rendering |
N / P |
Next or previous scene |
[ / ] |
Adjust audio sync by 10 ms |
F11 |
Toggle fullscreen |
Esc |
Quit |
Controls apply to every Omadrop window, regardless of which display has focus.
ASCII mode and per-output audio delay are remembered between launches.
OMADROP_ASCII=0 remains available as a temporary override.
PipeWire output -> musical roles and structure -> scene director
MPRIS artwork -> cover, palette, and texture -> native feedback renderer
Each scene maps the same music frame into its own geometry. A transient detector preserves fast attacks, the beat clock groups beats into bars and phrases, and the structure tracker waits for sustained musical changes before directing a new scene. Optional ASCII is a final GPU material, not a replacement for the underlying image.
Scene targeting and projectM compatibility
Start the native renderer on a specific scene:
OMADROP_NATIVE_SCENE=spectral-ribbons omadrop --singleAccepted names are depth-tunnel, centrifuge, wire-organism,
prism-garden, orbital-loom, tidal-grid, pulse-cathedral,
constellation-field, spectral-ribbons, and bloom-engine.
Run the preserved projectM renderer:
OMADROP_ENGINE=projectm omadrop --singleFocused A/B modes are available for the authored Reactive Tunnel, Halls of Centrifuge, and Wire Dance editions:
OMADROP_ENGINE=projectm OMADROP_CONTORTION_ONLY=1 omadrop --single
OMADROP_ENGINE=projectm OMADROP_HALLS_ONLY=1 omadrop --single
OMADROP_ENGINE=projectm OMADROP_WIRE_ONLY=1 omadrop --singleAdd OMADROP_CLASSIC_CONTORTION=1, OMADROP_CLASSIC_HALLS=1, or
OMADROP_CLASSIC_WIRE=1 to run the matching original preset.
Record the release showcase
omadrop-demo
omadrop-demo-recordThe showcase moves through Spectral Ribbons, Constellation Field, Prism Garden,
Wire Organism, and Orbital Loom. Transitions begin on detected bar boundaries,
with a fallback deadline when the beat clock is uncertain. The recorder creates
a timestamped 60 FPS MP4 in ~/Videos, suppresses desktop notifications during
capture, and ends inside the final fade. Pass an output path to
omadrop-demo-record to choose another destination.
Use omadrop-demo --single for one display or omadrop-demo --loop to repeat
the sequence.
./experiments/projectm-ascii/build.sh
./bin/omadropRenderer and audio tests live in experiments/projectm-ascii. Run the full
native visual audit with:
experiments/projectm-ascii/native-renderer-test shaders/native
bin/reactivity-auditRead NOTES.md before changing the renderer. It records the audio fixtures, visual test workflow, architecture decisions, and known silent failure modes. The next product phases are in docs/roadmap.md; the completed native-engine buildout is in docs/native-engine-plan.md.
The landing page is an Astro project in site/. Run it locally with
npm install && npm run dev from that directory. Cloudflare Pages deploys
site/dist from master to omadrop.com.
Classic presets retain their original author credits and are preserved for A/B testing. See THIRD_PARTY_NOTICES.md for the complete list and rights notice. projectM is a separate project and is not affiliated with Omadrop.
Omadrop is released under the MIT License.



