Skip to content
projectM - cross-platform music visualization. Open-source and Milkdrop-compatible
C++ C M4 Objective-C Objective-C++ NSIS Other
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
bad_presets Temporarily moved bad presets to bad_presets folder in repo root to a… Mar 30, 2019
fonts bundle SDL for osx WIP Jul 31, 2018
m4 Add GLES into automake build / fix android compile string (#171) Mar 3, 2019
msvc Create inno setup for windows with sdl on appveyor Jun 4, 2019
nix Add a nix file Feb 10, 2019
presets added a few presets to presets/presets_mischa_collection/ (#218) Jun 10, 2019
projectM.xcworkspace automating dist for macOS Mar 3, 2019
src Set file dialogs to not be native (#232) Jul 23, 2019
vendor/glm GLSL and emscripten - JavaScript and WebGL support (#92) May 11, 2019
web Add link and screenshot to Silverjuke, an FOSS jukebox which is also … Feb 16, 2018
.appveyor.yml Create inno setup for windows with sdl on appveyor Jun 4, 2019
.gitignore automating dist for macOS Mar 3, 2019
.gitmodules Use autotools to build (#27) Feb 9, 2018
.travis.yml AX_HAVE_QT for configuring Qt compilation (#167) Mar 2, 2019
AUTHORS.txt Update AUTHORS.txt May 5, 2019 Update Apr 26, 2019
LICENSE.txt cleaning up license/authors/copyright Aug 3, 2016 LLVM - add native code generation for expression evaluation (#162) Mar 5, 2019 Sort input file list (#176) Mar 11, 2019 typo correction in Aug 18, 2019 automating dist for macOS Mar 3, 2019
configure-ndk projectM Android native build (#191) Apr 11, 2019 Add NSMicrophoneUsageDescription for macOS - required to capture audi… May 11, 2019

Build Status Backers on Open Collective


projectM - The most advanced open-source music visualizer

projectM is an open-source project that reimplements the esteemed Winamp Milkdrop by Geiss in a more modern, cross-platform reusable library.

Its purpose in life is to read an audio input and to produce mesmerizing visuals, detecting tempo, and rendering advanced equations into a limitless array of user-contributed visualizations.

Available For


Get it from the Releases tab

Demo Video

Project Status

You can read more about how it works and the current state of development here.


The preset files define the visualizations via pixel shaders and Milkdrop-style equations and parameters. Included with projectM are the bltc201, Milkdrop 1 and 2, projectM, tryptonaut and yin collections. You can grab all of the presets here.

Also Featured In

Kodi Kodi (formerly XBMC)

Helix Helix

Silverjuke Silverjuke (FOSS Jukebox)

Silent Radiance Distance Disco











Building from source


Using the library

At its core projectM is a library, libprojectM. This library is responsible for parsing presets, analyzing audio PCM data with beat detection and FFT, applying the preset to the audio feature data and rendering the resulting output with openGL. It can render to an openGL context or a texture.

To look at a simple example way of using the library see the libSDL2 sample code.

There are many other applications that make use of libprojectM and that can be found in the src directory.


  • Support for the missing Milkdrop waveforms to get full compatibility with Milkdrop presets.
  • Steal cool stuff from the recently-released Milkdrop source.
  • Finish emscripten support for building to wasm/webGL for the web.
  • Update the various implementations using libprojectM.
  • Update downstream projects with new versions.


Report issues on GitHub We're on IRC at #projectM

If you would like to help improve this project, either with documentation, code, porting, hardware or anything else please let us know! We gladly accept pull requests and issues.


If you maintain packages of libprojectM, we are happy to work with you! Please note well:

  • The main focus of this project is libprojectM. It's a library that only really depends on OpenGL. The other applications are more like examples and demos.
  • This project was converted to use GNU autotools instead of CMake in 2018. This was due to inflexibility of CMake, issues with OSX and SDL2, an unintuitive configuration interface, standardizing on the most common and well-understood build system, a desire to make it easier for others to get up and running and contribute, and other factors too lengthy to expound on here.
  • Most of the applications (e.g. src/projectM-*) are likely outdated and of less utility than the core library. If you desire to use them or depend on them, please file an issue so we can help update them.
  • The "canonical" application for actually viewing the visualizations is now projectM-sdl, based on libSDL2 because it supports audio input and is completely cross-platform.
  • This is an open source project! If you don't like something, feel free to contribute improvements!
  • Yes, you are looking at the official version. This is not a fork.




This project exists thanks to all the people who contribute.


Thank you to all our backers! 🙏 [Become a backer]


Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]



You can’t perform that action at this time.