About this project

projectM is an open-source reimplementation of the classic Winamp Milkdrop visualizer by Geiss, packaged as a modern, cross-platform reusable library. Its purpose is to read an audio input, detect tempo and analyze PCM data with FFT, apply Milkdrop-style equations and parameters, and render the resulting visuals through OpenGL. Presets are defined by pixel shaders and Milkdrop-style equations, and the project is compatible with the large body of user-contributed Milkdrop presets. This repository contains only libprojectM, the shared/static library intended for application development. Frontends, plug-ins and other tools live in separate repositories. Releases here are source-code and binary releases of the development libraries and headers, not end-user downloads. The library can render to a dedicated OpenGL context or to a texture. It parses presets, analyzes audio PCM data with beat detection and FFT, applies presets to audio feature data, and renders output. The core library depends mainly on OpenGL. End-user frontends exist for Windows, macOS, Linux, Android, and Xbox/Windows Phone, including a standalone SDL app (projectMSDL), a Rust SDL frontend, a Qt-based desktop app for Linux with PipeWire, PulseAudio and JACK backends, a GStreamer plugin, an Apple Music plug-in, and Steam/Windows Store releases. The README notes that many of these frontends are development previews that may not be feature-complete and may contain bugs, and that the Android apps are not created or supported by the projectM developers. The library itself ships without presets. Preset packs are maintained in separate repositories, including the base Milkdrop texture pack, the Cream of the Crop pack (about 10K presets, the current default), classic projectM presets (over 4K), original Milkdrop 2 presets, and En D presets. A MegaPack of 130k+ presets is also referenced. projectM has been integrated into third-party applications such as Kodi, Helix, Silverjuke and VLC Media Player, though these integrations are not developed or supported by the projectM team. Build instructions cover CMake, Emscripten/WebAssembly builds, and developer documentation in the wiki. The core library is released under the GNU Lesser General Public License 2.1, allowing use in closed-source applications as a shared library under the license terms. Up- and downstream projects may use different licenses. Community support is available via Discord, and contributions are accepted through pull requests and issues.