3.1.2 — MilkDrop shader engine, Now Playing overlay, and transparent visualizer
⬇️ Download
| Get this one | Or | You should know | |
|---|---|---|---|
| 🪟 Windows | ⬇️ Installer | Portable no install |
Only the installer registers the Dynamic Lighting background identity. |
| 🍎 macOS | ⬇️ .dmg | .zip | Apple Silicon. Unsigned — one Terminal command is needed, see below. |
| 🐧 Linux | ⬇️ AppImage | .deb Debian / Ubuntu |
x64. Needs PulseAudio or PipeWire, which desktop installations already have. |
Important
🍎 macOS: the app will say it is damaged. It is not.
This build is not signed — the Apple Developer Program has not been bought. macOS puts a quarantine flag on anything unsigned that arrives from the internet and refuses to open it, reporting it as "damaged and can't be opened." Right-clicking and choosing Open does not clear this on macOS 15 and later.
Open the .dmg, drag the app into Applications, then run this once in Terminal:
xattr -dr com.apple.quarantine "/Applications/CAYADEV Visualizer.app"After that it opens normally, every time. The command removes the download flag; it does not change the application.
Then, for sound: macOS has no way to record its own output, so install BlackHole (free) and pick it as the audio source. Microphones and line inputs work with no extra setup — macOS will ask for microphone permission the first time.
A complete MilkDrop shader and equation rewrite that brings presets back to life in packaged builds, live Now Playing overlays via Windows Media Transport Controls (SMTC), and a transparent visualizer window mode.
MilkDrop Shader Engine (#559)
MilkDrop presets had never executed in packaged application builds because the equation compiler generated JavaScript strings evaluated via new Function(), which Electron's Content Security Policy deliberately and silently blocked.
This release completely rewrites the equation compiler and adds a full HLSL-to-GLSL pixel shader translation pipeline for MilkDrop 2 warp and composite shaders:
- Closure-tree compiler: Instead of evaluating raw JavaScript strings, the equation engine compiles MilkDrop equations into an AST closure tree. This eliminates the CSP violation without compromising security (
unsafe-evalis never used) and provides approximately a 51× execution speedup. - HLSL to WebGL2 GLSL translation: MilkDrop 2 pixel shaders are translated with multi-pass type inference, function signature resolution, and operator lowering. Across all 10,347 presets in the official projectM and community packs, 91.7% of all shader stages compile, and 85.0% of presets run with completely clean shader pipelines.
- Warp repeat wrapping: MilkDrop defaults to
REPEATtexture wrapping on warp sampling, whereas earlier builds clamped edges to border. Content drifting off the edge was lost, causing presets to collapse and empty (e.g. Agitator brightness collapsing from 16.7 to 0.7). Wrapping is now active, keeping energy circulating in the feedback loop. - Feedback buffer saturation clamping: Moving feedback buffers to floating point removed MilkDrop's hardware 8-bit saturation clamp, causing presets that multiply feedback values (e.g.
ret *= 5) to blow out to pure yellow or white. Explicit saturation clamping restores original color dynamics. - Eight waveform modes and custom shapes/waves: Complete implementation of all eight MilkDrop waveform geometries (
nWaveMode0–7: circular, rotating blob, dual Lissajous, smoothed ribbons, rotating figure-eight, angled dual lines) and custom shape/wave equation passes, aligned with the BeatDrop / MilkDrop reference source. - Audio scaling: Presets expect
bass,mid, andtrebas ratios relative to long-term averages (1.0 = normal). The engine now feeds normalized spectral ratios rather than raw 0..1 amplitudes, allowing subtle and explosive preset dynamics to react as their authors intended. - What is deferred to Phase 2 (quality pass): Sprite/user texture binding (
img.inicurrently connects to procedural noise), motion vectors, preset crossfade blending, and mouse interaction.
Now Playing Overlay
A dedicated overlay mode that reads track metadata and playback position from the operating system's media transport controls (Windows SMTC) and renders them onto the canvas:
- Windows SMTC integration: Operates through an event-driven native C# WinRT helper (
smtc-helper.exe, modeled after Windows-to-Android-Bridge) connecting directly to OS delegates (CurrentSessionChanged,MediaPropertiesChanged,PlaybackInfoChanged,TimelinePropertiesChanged) at 0.0% idle CPU and ~3 MB RAM, with transparent automatic fallback to PowerShell 5.1 if absent. - Anchor-based time extrapolation: Windows SMTC does not advance playback position continuously — samples often remain identical across several seconds before jumping forward. Every sample is therefore treated as a time anchor (
{ position, updated }), and the current playback head is computed locally via closed-form interpolation without requiring per-frame IPC traffic. - Visual styling & animations: Includes 7 entrance animations (
fade,slideUp,slideLeft,scale,typewriter,wipe), marquee scrolling for long titles exceeding display boundaries, audio-reactive bass pulse, and selectable Modern or Classic OG Winamp styles (with continuous or 40-segment progress bars). - Text mode binding: The standard Text layer mode can also connect its
'now'source directly to live SMTC data, falling back to manual text when no media player is active.
Transparent Visualizer Window (Addendum 4.0)
A new background.transparent toggle enables full visualizer window and canvas transparency:
- The visualizer window is instantiated with
transparent: trueand#00000000background color. - Canvas layers execute
clearRectinstead of solid color fills, and body CSS styling is made transparent. - Enables placing visualizations, frequency bars, and Now Playing widgets directly on top of the desktop, game feeds, or transparent capture windows.
What is verified, and what is not
- 971 unit tests, all passing on
main(up from 808 in v3.1.1 and 703 in v3.1.0). 42 new unit tests verify tracker grace periods, anchor extrapolation, envelopes, formatting, and native SMTC helper integration. - GPU self-test (
npm run smoke) verifies all 50 visualizer modes, 31 backgrounds, 40 post-FX shaders, window narrowing, accidental-close protection, and confirms zero untranslated strings across all admin categories in English. - Windows packages built locally with Dynamic Lighting certificate registration. macOS Apple Silicon (
.dmg,.zip) and Linux x64 (.AppImage,.deb) packages built and structurally verified on GitHub Actions CI runners.