Overview | News | Windows | macOS | Android | iOS | Audio Formats | Components | Encoder Pack | Screenshots | Help & Support | Developer | Old Versions | Other Projects
MilkDrop 2 Visualisation
By: oops
Version: 0.8.0, released on 2026-04-09 (archived)
Change log:
- Add preset scheduling using CSV parser [feature]
- Add DirectX 9 shader fixes [feature]
- Add recursive preset directory scanning [feature]
- Add per-preset FFT/wave audio texture samplers for custom shaders [feature]
- Add system time and date shader variables [feature]
- Parse MilkDrop 3 presets and reject unsupported preset formats [feature]
- Extend the sprite system by adding layers, rotation modes, blend modes 5 to 10 and color keying [feature]
- Add double-preset format (".milk2") support [feature]
- Add screenshot capture support with keyboard and mouse shortcuts [feature]
- Add Advanced Preferences toggles for legacy fixes and "Treat shader compile warnings as errors" [feature]
- Enable mipmap generation for loaded textures [feature]
- Add shader source dump capability for debug [feature]
- Save preset navigation order on close [feature]
- Use display-sized title texture [improvement]
- Persist preset directory per instance [improvement]
- Expand custom sampler texture search paths [improvement]
- Pause render timer during configuration changes [improvement]
- Make "Debug output" flag in Advanced Preferences reactive at runtime [improvement]
- Make shader body parsing more robust [improvement]
- Support both "fFFTAttack/Decay" and "FFTAttack/Decay" [improvement]
- Share the surface if a texture is already loaded in another slot [improvement]
- Update menu navigation (Home/End/Space), track enabled and visible items better [improvement]
- Change instance tracker implementation [improvement]
- Extend debug information diagnostics [improvement]
- Harden shader texture binding [improvement]
- Replace large stack WaitString scratch buffers with vectors [improvement]
- Tighten DirectX resource teardown for clean shutdown [improvement]
- Use `PowerSetRequest()` instead of `SetThreadExecutionState()` for power management (during fullscreen enter/exit) [improvement]
- Match DirectX 9 feedback energy behavior [change]
- Move blur passes before shapes/waves to match DirectX 9 ordering [change]
- Re-run "per_frame_init" on resize for stateful presets [change]
- Keep resize lifecycle symmetric with fullscreen toggles [change]
- Only save the enabled custom waves and shapes (both on preset save and into their own file) [change]
- Use instance fullscreen state [change]
- Set `_WIN32_WINNT` to Windows 10 for all builds [change]
- Block manual preset navigation when scheduled order is active [change]
- Update Winamp shader files [change]
- Extend shader cache keying [change; breaking]
- Add embedded sprite load control option [change]
- Copy bundled "*.fx" shader files to profile directory on first install and clean up source, but fall back to component directory if absent [change]
- Pass `rad` and `ang` from input to output in default vertex shader [change]
- Revert composite shader's `uv_orig` to `_uv.xy` [change]
- Load and save preset-embedded sprite blocks [change]
- Toggle preset order playlist independently [change]
- Align build/revision validation and update component version text [change]
- Disable application crash if initialization fails [bug]
- Fix config title format source from Preferences instead of hard-coded default [bug]
- Seed shader variable defaults from HLSL bytecode [bug]
- Fix rendering stuck on single preset [bug]
- Add EEL lifecycle null guards [bug]
- Use `std::wstring` for preset path construction [bug]
- Identify and undefine macro collisions [bug]
- Fix reversed green and blue assignments for wave vertex color [bug]
- Fix depth stencil reference leak on early return in `SetRenderTarget()` [bug]
- Fix textured custom shapes shader state [bug]
- Remove last DirectX 9 half-texel UV offset from warp mesh [bug]
- Fix noise texture R/B channel swap [bug]
- Handle preset scan thread overlap [bug]
- Defer embedded preset sprite reload to the render loop [bug]
- Prevent null-context or null-resource copy calls [bug]
- Skip embedded sprite retry when all images are missing [bug]
- Harden preset list UI against race conditions and invalid indices [bug]
- Fix screenshot capture timing and add fallback hotkey [bug]
- Rebind RTV after `Present()` [bug]
- Release shell-owned text elements [bug]
- Block preset load menu from launching when schedule order is active [bug]
- Bind sampler state on sampler registers, not the texture registers [bug]
- Reuse resolved `randNN` texture names in `CacheParams()` [bug]
- Make embedded sprite activation robust on startup and reload [bug]
- Correct blend mode 7 (invert) to preserve alpha composition [bug]
- Harden texture/sampler slot behavior and add SRV dimension checks [bug]
- Guard auto-advance against disabled next preset scheduling [bug]
- Fix several DX11 rendering bugs [bug]
- Fix composite shader zeroing `uv_orig` [bug]
- Fix constant buffer corruption of unchanged variables [bug]
- Fix preset selection invalidation after directory/list changes [bug]
- Fix text element fade and layout invalidation edge cases [bug]
- Guard invalid EEL handles in compile, free and execute paths [bug]
- Guard `m_errors` list reads and writes with mutex lock [bug]
- Fix intermittent stuck UI text caused by waitable timers race [bug]
- Fix preset and interactivity locking to avoid concurrency races [bug]
- Fix text-related crashes [bug]
- Fix typos in unused blur textures [bug]
- Fix incorrect WaitString buffer for closing square brace [bug]
- Fix menu's box margin dimensions [bug]
- Fix search thread argument lifetime inconsistency [bug]
- Fix missing reset of preset start and next times when resetting the time [bug]
- Fix crash while playlist loads (indices are stale or invalid) and ensure unneeded text is removed from screen [bug]
- Fix column-major `float4x3` matrix constant table layout [bug]
- Improve EEL cleanup and fix crashes [bug]
- Fix buffer overrun on WaitString commit [bug]
- Fix text manager concurrency crash on menu close [bug]
- Fix embedded sprite runtime behavior [bug]
- Fix preset lock priority [bug]
- Correct motion-vector seed behavior and frame ordering [bug]
- Reset feedback history on preset load completion to prevent carry-over artifacts [bug]
- Use current warped frame for blur and isolate custom-shape shader state [bug]
- Fix playing title disappearing when changing active playlist [bug]
- Fix unintentionally disabled checkbox [bug]
- Add projectM-eval memory leak fix to patch [developer]
- Use `MDVERTEX` stride for all vertex buffers [developer]
- Expose blend operation override and add device accessors in D3D11 shim [developer]
- Add explicit VS source selection to `ApplyShaderParams()` [developer]
- Add NULL guards to `CacheParams()` [developer]
- Zero-initialize `CShaderParams` on construction [developer]
- Defer brush release out of `UnregisterElement()` and into `CleanUpMilkDropDX11()` [developer]
- Update keyboard command comments [developer]
- Enable Trace logging [developer]
- Limit primitive counts in Direct3D 11 shim to prevent oversized draw calls [developer]
- Replace `_locale_t`-aware functions [developer]
- Normalize `wchar_t` buffer initialization [developer]
- Change resource string loading macro name [developer]
- Update MilkDrop 2 library copyright year [developer]
- Update project file [developer]
- Update setup script [developer]
- Add shader compilation check script [developer]
- Delete ClangFormat script [developer]
- Update DirectXTK to mar2026 [developer]
- Update CSV parser to 2.5.2 [developer]
- Update EEL2 to bff79dd [developer]
- Update WTL to 10.01 [developer]
- Update comments [developer]
- Update README [developer]
Supported systems: Windows 32-bit, Windows 64-bit, Windows ARM.
Works with foobar2000 v2.0 and newer
Links
View version history
View latest version and component description
Documentation
Discussion
Source code