Wraps projectM 4 for Milkdrop-style visual playback in openFrameworks, with texture output, playlist and runtime parameter control.
README
ofxProjectM
ofxProjectM wraps projectM 4 for openFrameworks and focuses on Milkdrop-style visual playback, texture output, playlist control, runtime parameter control, logging, touch input, and sprites.The addon is especially useful as a companion addon for
ofxVlc4.There is no longer a maintained app example inside this repository. The recommended real integration example now lives in:
- ../ofxVlc4/ofxVlc4Example
- full
ofxVlc4+ofxProjectMGUI with playlist, video preview,projectMpreview/display windows, and runtime diagnostics
Note
Parts of this addon, its examples, and its documentation were developed with AI-assisted help during implementation and refinement.
Release
- addon release version:
1.0.2 - changelog:
CHANGELOG.md
Highlights
projectM 4playback in openFrameworks- internal FBO/texture output
- preset playlist and preset switching helpers
- runtime parameters:
- FPS
- mesh size
- frame time
- beat sensitivity
- cut settings
- texel offset
- easter egg
- preset start clean
- texture search path control
- runtime logging callback + log level
- touch API
- user sprites
- version info helpers
Version helpers
There are now two different version concepts available:
- addon version
ofxProjectM::getAddonVersionInfo()- wrapped runtime version
ofxProjectM::getVersionInfo()- reports the linked
projectMruntime version and VCS string
Source layout
The public facade stays in:
src/ofxProjectM.h
src/ofxProjectM.cpp- core lifecycle, logging, shared callbacks, runtime parameters
src/ofxProjectMPlaylist.cpp- playlist, preset loading, switching, filtering
src/ofxProjectMRender.cpp- FBO/texture rendering, audio input, touch, sprites
src/ofxProjectMPlaylist.hsrc/ofxProjectMRender.h
Building projectM libraries
The unified shell script clones and builds
projectM in a temporary directory outside the addon tree, then copies only the finished libraries and headers back into libs/projectM.The repository keeps
libs/projectM as placeholder directories only. Run the build script after cloning if you want the local static libraries and headers populated.If you want one entry point across platforms, use:
bash scripts/build_projectm.shThe wrapper dispatches to:
- macOS: native static build into
libs/projectM/lib/osx - Linux: native static build into
libs/projectM/lib/linux64 - Git Bash / MSYS / Cygwin on Windows: embedded PowerShell build into
libs/projectM/lib/vs - WSL: auto-detected as Windows by default so a Windows checkout still fills
libs/projectM/lib/vs
Windows
Run:
bash scripts/build_projectm.shThis builds both
Debug and Release by default on Windows. WSL now follows this Windows path automatically unless you override it. If you only want one configuration, use for example:bash scripts/build_projectm.sh --configuration ReleaseOutputs:
libs/projectM/lib/vs/Debug/libprojectM-4.liblibs/projectM/lib/vs/Debug/libprojectM-4-playlist.liblibs/projectM/lib/vs/Release/libprojectM-4.liblibs/projectM/lib/vs/Release/libprojectM-4-playlist.liblibs/projectM/include/projectM-4
VLC-backed integration
For the maintained
ofxVlc4 + projectM app example, use:That example owns the runnable
libVLC + projectM integration story now.macOS
Run:
bash scripts/build_projectm.shOutputs:
libs/projectM/lib/osx/libprojectM-4.alibs/projectM/lib/osx/libprojectM-4-playlist.alibs/projectM/include/projectM-4
arm64;x86_64 build. You can override that before the run, for example:OSX_ARCHITECTURES=arm64 bash scripts/build_projectm.shLinux / WSL
Run:
bash scripts/build_projectm.shOutputs:
libs/projectM/lib/linux64/libprojectM-4.alibs/projectM/lib/linux64/libprojectM-4-playlist.alibs/projectM/include/projectM-4
bash scripts/build_projectm.sh --target linuxRuntime assets
Preset and texture packs are now documented and downloaded from the maintained integration example:
Notes
- The addon uses one public
ofxProjectMfacade even though implementation is now split internally. - The source split does not require
addon_config.mkupdates because openFrameworks auto-scanssrc. - The full
ofxVlc4Exampleexposes part of theprojectMsurface, but the addon API is broader than the current GUI. - The maintained app-level example now lives in
ofxVlc4Example, not in this repository.
ofxAddons