Overview | News | Windows | macOS | Android | iOS | Audio Formats | Components | Encoder Pack | Screenshots | Help & Support | Developer | Old Versions | Other Projects
Releases of MilkDrop 2 Visualisation
0.8.1 current version, released on: 2026-04-10
- Add multi-channel audio support [feature]
- Add ".milk2" extension to drag-and-drop loading [improvement]
- Improve `GetCurrentPreset()` to handle ".milk2" suffix and description mismatches [improvement]
- Add INI template creation for sprite and message configurations [improvement]
- Fix song position and length display for tracks over 1 hour [improvement]
- Remove hard-coded pixel value from font dialog scoot calculation [improvement]
- Update song title on track change and launch title animation [change]
- Fix album art sprite management [bug]
- Fix IPC queries to report during pause [bug]
- Clear text and force rescan on preset directory change [bug]
- Suppress false shader-compile error for no-shader presets [bug]
- Save and restore last preset when "preset lock at startup" is enabled [bug]
- Add `lum` to shader shadowed-builtins list and preserve `lum` macro [bug]
- Fix `fRating` precision consistency between changing rating and preset save [bug]
- Fix `OnGetDlgCode()` return value for proper keyboard handling [bug]
- Remove unused `AnalyzeNewSound()` band analysis [developer]
- Remove unused title texture blending state [developer]
- Refactor UI text rendering macros into functions [developer]
- Simplify resource string loading macros [developer]
0.8.0 released on: 2026-04-09
- 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]
0.7.3-rc11 released on: 2026-04-07
- Add DirectX 9 shader fixes [feature]
- Add Advanced Preferences toggle for legacy fixes, defaults to enabled [feature]
- Enable mipmap generation for loaded textures [feature]
- 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]
- Expand custom sampler texture search paths [change]
- Align build/revision validation and update component version text [change]
- Only save the enabled custom waves and shapes (both on preset save and into their own file) [change]
- Pause render timer during configuration changes [change]
- Use instance fullscreen state [change]
- Set `_WIN32_WINNT` to Windows 10 for all builds [change]
- 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]
- Enable Trace logging [developer]
- Normalize `wchar_t` buffer initialization [developer]
- Update EEL2 to bff79dd [developer]
- Update MilkDrop 2 library copyright year [developer]
- Update project file [developer]
- Update comments [developer]
0.7.3-rc4 released on: 2026-04-03
- Add "Treat shader compile warnings as errors" flag controlled in Advanced Preferences [feature]
- Make "Debug output" flag in Advanced Preferences reactive at runtime [change]
- Block manual preset navigation when scheduled order is active [change]
- Support both "fFFTAttack/Decay" and "FFTAttack/Decay" [change]
- Share the surface if a texture is already loaded in another slot [change]
- Update Winamp shader files [change]
- Extend shader cache keying [change; breaking]
- 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]
- Use display-sized title texture [improvement]
- Extend debug information diagnostics [improvement]
- Make shader body parsing more robust [improvement]
- Add shader compilation check script [developer]
- Delete ClangFormat script [developer]
- Add projectM-eval memory leak fix to patch [developer]
- Update DirectXTK to mar2026 [developer]
- Update CSV parser to 2.5.2 [developer]
0.7.3-rc2 released on: 2026-03-30
- Add screenshot capture support with keyboard and mouse shortcuts [feature]
- Add system time and date shader variables [feature]
- Add per-preset FFT/wave audio texture samplers for custom shaders [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]
- Save preset navigation order on close [feature]
- 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]
- Update menu navigation (Home/End/Space), track enabled and visible items better [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]
- 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]
- Harden shader texture binding [improvement]
- Expand debug monitor to three views [improvement]
- Change instance tracker implementation [improvement]
- Use `PowerSetRequest()` instead of `SetThreadExecutionState()` for power management (during fullscreen enter/exit) [improvement]
- Replace large stack WaitString scratch buffers with vectors [improvement]
- 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]
- Add null-guard bindings and names in `CacheParams()` [developer]
- Defer brush release out of `UnregisterElement()` and into `CleanUpMilkDropDX11()` [developer]
- Update keyboard command comments [developer]
- Update README [developer]
0.7.3-rc0 released on: 2026-03-23
- Add preset scheduling using CSV parser [feature]
- Fix playing title disappearing when changing active playlist [bug]
- Fix unintentionally disabled checkbox [bug]
- Tighten DirectX resource teardown for clean shutdown [change]
- Limit primitive counts in Direct3D 11 shim to prevent oversized draw calls [developer]
- Replace `_locale_t`-aware functions [developer]
- Update WTL to 10.01 [developer]
0.7.1 released on: 2026-02-20
- Fix crashes due to uninitialized brushes during text rendering [bug]
- Fix seek keyboard shortcuts blocked by preset interactivity [bug]
- Hide song title and time/length text when playback is stopped [bug]
- Add dark mode to Win32 color chooser dialog [change]
- Use latest versions of foobar2000 SDK APIs [developer]
- Fix typos [developer]
0.7.0 released on: 2026-02-13
-
Convert font configuration blob from using GDI to support DirectWrite [feature; breaking]
- Add color picker for animated font
- Save color in `fontinfo` struct
- Fix `supertext` field name
- Apply font dialog changes at runtime
- Prevent crash if settings update mid-render
- Fix swatch color save and restore
- Fix RGB to BGRA color assignment
- Change the font category names
- Add A/B "Th" ligature test
-
Use grayscale anti-aliasing (instead of ClearType) on transparent surfaces [change]
- Extend grayscale anti-aliasing on all text
- Remove duplicate render target creation for title text [bug]
- Refactor, add caching and enable OpenType font feature selection into text manager [feature]
- Dynamically generate tooltip text for the "Clear [Shader] Cache" button [feature]
- Implement minor changes and improvements noticed during feature development [developer]
0.6.4 released on: 2026-02-02
-
Allow framerate to go beyond 60fps [feature]
- Change to a high-resolution render timer implemented using the periodic waitable timer
- Remove DirectXTK/XNA step timer
- Update visualisation stream configuration and backlog [change]
- Add ability to change opacity of popup window [feature]
-
Update preferences page layout and add new options [feature]
- Fix Preferences page overlap and overflow
- Move format box in Preferences page 1 pixel down
- Update F1 help message text [change]
- Update easing function and duration of "Press F1 for Help" message [change]
- Implement screen-dependent render [feature]
- Add option to lock preset when nothing is playing [feature]
- Add beat sensitivity knob [feature]
- Update preset cumulative ratings calculation [change]
- Add pixel shader caching [feature]
- Fix UI crashes from negative height rectangles [bug]
- Fix UI crashes from out-of-bounds access of playlist due to latency between getting position in list for currently playing track and accessing it to extract its title [bug]
- Increase maximum UI lines per "page" to 128 instead of 32 [change]
- Increase simultaneous shapes and waves that can be displayed from 4 to 16 [change]
- Add 9 new waveforms; the total waveforms is now 18 [feature]
- Add 15 new transition effects with keyboard control; the total transitions is now 19 [feature]
- Add 12 new hard cut modes with keyboard control; the total hard cut modes is now 13 [feature]
- Add 32 additional Q variables: q33 through q64 [feature]
- Add simulation time reset interval option and interactive control [feature]
- Add preset interactivity with mouse and keyboard to init, per-frame, per-vertex or shaders [feature]
- Increase texture/sprite limit from 16 to 64 [change]
- Add transparency mode with keyboard controlled opacity to the popup visualization window [feature]
- Add multi-monitor borderless fullscreen and control in Preferences page [feature]
- Add drag-and-drop to load MilkDrop preset [feature]
- Use mouse wheel to change presets [feature]
- Export shapes using the `.shape` file extension and waves using the `.wave` file extension [change]
- Extend preset, texture, transition and noise generation randomization limit using Mersenne Twister Pseudo-Random Number Generator [change]
-
Update pixel shader model support [change]
- Support Direct3D 9.1, 9.2, and 9.3 feature levels (Shader Models 2 and 2.x) as baseline for compatibility
- Support Direct3D 10.0 feature level (Shader Model 4)
- Support Direct3D 11.0 and 11.1 feature levels (Shader Model 5)
- Incorporate stereo separation, current sample rate and custom bands to sound analysis (i.e., adjust beat detection for better audio reaction) [change]
- Avoid Columns UI warning on load due to `WS_VISIBLE` on window creation [bug]
- Fix default texture size [bug]
- Fix `TimeToFrequencyDomain()` comment [bug]
- Save "Show Album" option setting on exit [change]
- Update resources including preferences, tooltip and menu text [change]
- Open Windows Explorer to the current Presets folder [change]
- Update DirectXTK to oct2025 [developer]
- Update NS-EEL2 to 4485aa0 and remove unsused EEL2 files [developer]
- Update projectM-eval to 1.0.5 [developer]
- Disable C4865 warning in DirectXTK compile [developer]
- Update "wa_ipc.h" [developer]
- Add `CreateDirectories()` function [developer]
- Use `InterlockedIncrement()` and `InterlockedDecrement()` in `CConstantTable` [developer]
- Prefer pre-increment and pre-decrement operators [developer]
- Use C++ versions of mathematic functions for type consistency [developer]
- Remove DirectX 9 text drawing code [developer]
- Remove "test" project [developer]
- Update ".gitattributes"
- Make minor quality, style and comment changes [developer]
- Update the MSBuild projects and Visual Studio solution [developer]
- Update GitHub Actions workflow and build scripts [developer]
- Update headers and README [developer]
0.6.2-beta5 released on: 2026-01-29
-
Changes in addition to those from 0.6.2-beta4:
- Complete screen-dependent render and hard cut mode implementations [feature]
- Fix Preferences page overlap and overflow [bug]
0.6.2-beta4 released on: 2026-01-17
-
Allow framerate to go beyond 60fps [feature]
- Change to a high-resolution render timer implemented using the periodic waitable timer
- Remove DirectXTK/XNA step timer
- Update visualisation stream configuration and backlog [change]
- Add ability to change opacity of popup window [feature]
- Update preferences page layout and add new options [feature]
- Update F1 help message text [change]
- Update easing function and duration of "Press F1 for Help" message [change]
- Pass screen-dependent render and beat control options to plugin [feature; incomplete]
- Add option to lock preset when nothing is playing [feature]
- Update preset cumulative ratings calculation [change]
- Add pixel shader caching [feature]
- Fix UI crashes from negative height rectangles [bug]
- Increase maximum UI lines per "page" to 128 instead of 32 [change]
- Increase simultaneous shapes and waves that can be displayed from 4 to 16 [change]
- Add 9 new waveforms; the total waveforms is now 18 [feature]
- Add 15 new transition effects with keyboard control; the total transitions is now 19 [feature]
- Add 12 new hard cut modes with keyboard control; the total hard cut modes is now 13 [feature]
- Add 32 additional Q variables: q33 through q64 [feature]
- Add simulation time reset interval option and interactive control [feature]
- Add preset interactivity with mouse and keyboard to init, per-frame, per-vertex or shaders [feature]
- Increase texture/sprite limit from 16 to 64 [change]
- Add transparency mode with keyboard controlled opacity to the popup visualization window [feature]
- Add multi-monitor borderless fullscreen and control in Preferences page [feature]
- Add drag-and-drop to load MilkDrop preset [feature]
- Use mouse wheel to change presets [feature]
- Export shapes using the `.shape` file extension and waves using the `.wave` file extension [change]
- Extend preset, texture, transition and noise generation randomization limit using Mersenne Twister Pseudo-Random Number Generator [change]
-
Update pixel shader model support [change]
- Support Direct3D 9.1, 9.2, and 9.3 feature levels (Shader Models 2 and 2.x) as baseline for compatibility
- Support Direct3D 10.0 feature level (Shader Model 4)
- Support Direct3D 11.0 and 11.1 feature levels (Shader Model 5)
- Incorporate stereo separation, current sample rate and custom bands to sound analysis (i.e., adjust beat detection for better audio reaction) [change]
- Avoid Columns UI warning on load due to `WS_VISIBLE` on window creation [bug]
- Fix default texture size [bug]
- Fix `TimeToFrequencyDomain()` comment [bug]
- Save "Show Album" option setting on exit [change]
- Update resources including preferences, tooltip and menu text [change]
- Open Windows Explorer to the current Presets folder [change]
- Update DirectXTK to oct2025 [developer]
- Update NS-EEL2 to 4485aa0 and remove unsused EEL2 files [developer]
- Update projectM-eval to 1.0.5 [developer]
- Disable C4865 warning in DirectXTK compile [developer]
- Update "wa_ipc.h" [developer]
- Add `CreateDirectories()` function [developer]
- Use `InterlockedIncrement()` and `InterlockedDecrement()` in `CConstantTable` [developer]
- Prefer pre-increment and pre-decrement operators [developer]
- Use C++ versions of mathematic functions for type consistency [developer]
- Remove DirectX 9 text drawing code [developer]
- Remove "test" project [developer]
- Make minor quality, style and comment changes [developer]
0.6.2-beta1 released on: 2025-11-18
- Allow framerate to go beyond 60fps
- Increase simultaneous shapes that can be displayed from 4 to 16
- Add 8 new waveforms; the total waveforms is now 16
- Add 15 new transition effects; the total transitions is now 19
- Add 32 additional Q variables: q33 through q64
- Export shapes using the `.shape` file extension and waves using the `.wave` file extension
0.6.1 released on: 2025-10-06
- Implement "Rule of 5" for shaders to eliminate "heap-use-after-free" errors [bug]
- Fix blank context menu preset name in Release [bug]
- Fix playlist text not clearing correctly for help [bug]
- Avoid calling settings' initialization twice [bug]
- Rewrite playlist text drawing [feature]
- Remove "Downmix Channels" option [change]
- Do some more fullscreen validation [change]
- Update audio buffer sample mapping from chunk data [change]
- Check and set configuration object directly for "Always On Top" detection and enabling or disabling [change]
- Add code preset lock and multi-instance fullscreen awareness to context menu to gray out invalid options [change]
- Attempt to replace `%fb2k_profile_path%` back on exit if it was used in Advanced Preferences [change]
- Make mouse context menu entries string resources [developer]
- Update main entry file [developer]
- Remove unnecessary `ValidateRect()` from `WM_PAINT` [developer]
- Print only 8 window handle characters instead of 16 [developer]
- Rename timer [developer]
- Replace string buffer size [developer]
0.6.0 released on: 2025-10-03
-
Fix remaining memory leaks flagged by CRT heap debugger and address sanitizer
- Fix GDI font memory leak [bug]
- Fix sound data and sound information memory leaks [bug]
- Fix vertex and index array memory leaks [bug]
- Fix shader and texture memory leaks [bug]
- Add CRT heap debug functionality for `new` [developer]
- Move CRT debug flag setting to the DLL entry point (renamed to "dllmain.cpp") [developer]
-
Overhaul UI text drawing
- Fix DirectWrite text extent calculation to respect leading and trailing whitespace [bug]
- Fix shader instructions background box [bug]
- Fix preset load UI crash due to negative available lines (rectangles) [bug]
- Maximize reuse of common UI string buffers [change]
- Reuse `SelectedFont()` macro variables [change]
- Unset text background box where and when unused to eliminate left over "gray boxes" [bug]
- Fix "wait string" mode overflowing into menu array and not clearing lines on page change [bug]
- Fix mashup menu display and crashes [bug]
-
Fix keyboard navigation and "wait string" mode
- Fix "wait string" crashes due to unsigned underflow [bug]
- Fix Direct3D 11 "WARNING #352: DEVICE_DRAW_SAMPLER_NOT_SET" by assigning a default sampler to slots 2-5 [preset]
- Fix background paint on first load [bug]
- Save and restore last preset on launch when preset is locked [feature]
-
Avoid UI and context menu discrepancy for currently loaded preset
- Fix `GetCurrentPreset()` synchronization when previous session last preset is loaded [change]
-
Refine fullscreen behavior
- Enable per-instance fullscreen [feature]
- Hide cursor on fullscreen using timer [feature]
- Fix visibility Boolean equation for fullscreen [change]
- Remove `s_in_toggle` [developer]
-
Make code style updates
- Fix variable types for x86 build and portability [developer]
- Use virtual destructor for UI element [developer]
- Fix some IntelliSense warnings and implement suggestions [developer]
- Use pre-increment operator in "for" loops [developer]
- Fix state comments [developer]
- Update and improve build configuration [developer]
0.5.3-rc0 released on: 2025-09-24
- Save and restore last preset on launch when preset is locked [feature]
- Fix `GetCurrentPreset()` synchronization when previous session last preset is loaded [bug]
- Make fullscreen refinements [change]
- Update build configuration [developer]
0.5.2 released on: 2025-09-13
- Hide mouse cursor during fullscreen [feature]
- Implement lint suggestions [developer]
0.5.1 released on: 2025-09-12
- Prevent launching screensaver or display from sleeping when fullscreen [feature]
- Fix unlimited FPS reset [bug]
- Remove `foo_input_sacd.dll` visualization workaround [change]
0.5.0 released on: 2025-09-05
- Fix blank rectangle for song title animation [bug]
- Fix move to 0,0 on PSS resize [bug]
- Fix composite blit flashing/strobing effect on screen edges and remove the "Skip composite shader blending" option [bug]
- Fix vertex shader to pixel shader linkage error due to incompatible signatures in "TEXCOORD" of the composite shader (DEVICE_SHADER_LINKAGE_REGISTERMASK) [bug]
- Fix inconsistent behavior of the preset load menu navigation and display [bug]
- Fix `foo_input_sacd.dll` visualization autoproxy [feature]
- Enable multiple instances of the MilkDrop 2 plugin library [feature]
- Replace `ui_element_common_methods_v2`'s `toggle_fullscreen()` method to fix embedded and popup fullscreen crashes [bug]
- Improve fullscreen behavior when "Always on Top" is set [change]
- Enable `%fb2k_profile_path%` for presets directory [feature]
- Apply Advanced Preferences changes at runtime [feature]
- DLL size reduced by 241.5 KiB (x64, relative to 0.4.0) [feature]
- Adjust scaling and spacing on Preferences page [feature]
- Improve spacing on Preferences page [change]
- Pause visualization loop on Default UI non-visibility [feature]
- Add context menu options to open Explorer to component and preset directories [feature]
- Fix custom spectrum wave drawing crash [bug]
- Fix crash due to race on `m_bPresetListReady` [bug]
- Clip preferences when read from configuration database to legal values [stability]
- Handle `WM_WINDOWPOSCHANGING` and `WM_WINDOWPOSCHANGED` window messages [change]
- Convert Direct3D 11 shim's pointers to smart pointers (`Microsoft::WRL::ComPtr`) [stability]
- Prevent deallocation of uninitialized or already deallocated memory [stability]
- Add dark mode to font dialog [fix]
- Implement alternative D2D text drawing method [change]
- Move Preferences page to "core" dark mode [change]
- Display message box on shader compilation failure (before crash) [change]
- Port fullscreen changes from Default UI to Columns UI [change]
-
Refactor `g_plugin` usage [developer]
- Remove dependence on the global `g_plugin` variable from the `CState` class [developer]
- Remove dependence on the global `g_plugin` variable from the `CMilkMenu` class [developer]
- Remove dependence on the global `g_plugin` variable from the preset search functionality [developer]
- Remove dependence on the global `g_plugin` variable from the static functions [developer]
- Remove dependence on the global `g_plugin` variable from the `CPlugin` class itself [developer]
- Enable multiple instances of the MilkDrop 2 plugin library in UI elements [developer]
- Enable multiple instances of the MilkDrop 2 plugin library on the interactive functionality (IPC, keyboard, mouse) [developer]
- Fix broken multiple instances waveform analysis [developer]
- Update projectM EEL to 1.0.3 [change]
- Update NS-EEL2 to 109ea06 [change]
- Update `checkout` and `download-artifact` actions to v5 [developer]
-
Clean up repository [developer]
- Update project configurations [developer]
- Improve project references [developer]
- Reorganize UI element [developer]
- Rename MilkDrop 2 library precompiled header [developer]
- Do cleanup of minor warnings [developer]
- Remove 3-dimensional title text code [developer]
- Synchronize common syntax with `foo_vis_vumeter` [developer]
- Remove Columns UI color helper [developer]
- Make `DumpDebugMessage()` static [developer]
- Update HLSL shader comments and syntax [developer]
- Fix missing WTL targets in test project's configuration [developer]
- Update copyright year for recently-modified files [developer]
- Update documentation [developer]
0.4.1-beta5 released on: 2025-08-25
- Port fullscreen changes from Default UI to Columns UI [change]
- Improve fullscreen behavior when "Always on Top" is set [change]
- Fix custom spectrum wave drawing crash [bug]
0.4.1-beta4 released on: 2025-08-24
- Replace `ui_element_common_methods_v2`'s `toggle_fullscreen()` method to fix embedded and popup fullscreen crashes [bug]
0.4.1-beta3 released on: 2025-08-23
-
Enable multiple instances of the MilkDrop 2 plugin library [feature]
- Remove dependence on the global `g_plugin` variable from the `CState` class [developer]
- Remove dependence on the global `g_plugin` variable from the `CMilkMenu` class [developer]
- Remove dependence on the global `g_plugin` variable from the preset search functionality [developer]
- Remove dependence on the global `g_plugin` variable from the static functions [developer]
- Remove dependence on the global `g_plugin` variable from the `CPlugin` class itself [developer]
- Enable multiple instances of the MilkDrop 2 plugin library in UI elements [developer]
- Enable multiple instances of the MilkDrop 2 plugin library on the interactive functionality (IPC, keyboard, mouse) [developer]
- Fix broken multiple instances waveform analysis [developer]
- Adjust scaling and spacing on Preferences page [feature]
- Enable `%fb2k_profile_path%` for presets directory [feature]
- Apply Advanced Preferences changes at runtime [feature]
- DLL size reduced by 237 KiB (x64, relative to 0.4.0) [feature]
- Display message box on shader compilation failure (before crash) [change]
- Clamp preferences when read from configuration database to legal values [stability]
- Handle `WM_WINDOWPOSCHANGING` and `WM_WINDOWPOSCHANGED` window messages [change]
- Convert Direct3D 11 shim's pointers to smart pointers (`Microsoft::WRL::ComPtr`) [stability]
- Prevent deallocation of uninitialized or already deallocated memory [stability]
- Add dark mode to font dialog [fix]
- Move Preferences page to "core" dark mode [change]
- Update HLSL shader comments and syntax [developer]
- Make `DumpDebugMessage()` static [developer]
- Remove 3-dimensional title text code [developer]
- Synchronize common syntax with `foo_vis_vumeter` [developer]
- Update copyright year for recently-modified files [developer]
- Fix missing WTL targets in test project's configuration [developer]
0.4.1-beta1 released on: 2025-08-21
- Pause visualization loop on Default UI non-visibility [feature]
- Add context menu options to open Explorer to component and preset directories [feature]
- Implement alternative D2D text drawing method [change]
- Fix blank rectangle for song title animation [bug]
- Fix move to 0,0 on PSS resize [bug]
- Do cleanup of minor warnings [developer]
0.4.1-beta0 released on: 2025-08-18
- Fix inconsistent behavior of the preset load menu navigation and display [bug]
- Fix composite blit flashing/strobing effect on screen edges and remove the "Skip composite shader blending" option [bug]
- Fix vertex shader to pixel shader linkage error due to incompatible signatures in "TEXCOORD" of the composite shader (DEVICE_SHADER_LINKAGE_REGISTERMASK) [bug]
- Update projectM EEL to 1.0.3 [change]
- Update NS-EEL2 to 109ea06 [change]
- Update project configurations [developer]
- Improve project references [developer]
- Reorganize UI element [developer]
- Rename MilkDrop 2 library precompiled header [developer]
- Update documentation [developer]
- Remove Columns UI color helper [developer]
0.4.0 released on: 2025-08-03
- Fix edit mode cursor crash
- Migrate solution format to `*.slnx` [developer]
- Fix foobar2000 SDK patch line endings [developer]
- Update Columns UI SDK to 8.0.0 [developer]
- Update DirectXTK to jul2025 [developer]
- Update projectM EEL to 1.2.0 [developer]
0.3.3 released on: 2025-04-05
- Remove IME message handler to fix multi-monitor behavior during fullscreen
- Build DirectXTK repository instead of using NuGet packages [developer]
- Update foobar2000 SDK patch [developer]
- Simplify project files as the `/permissive-` option is implicitly set by the `/std:c++20` option [developer]
0.3.2 released on: 2025-03-08
- Improve preset shader compatibility
- Add error message on failed shader compile
- Display shader compiler error messages in the GUI
- Move shader loading buffer out of stack memory [developer]
- Use `WINDOWED` mode for component [developer]
- Fix version information attributes [developer]
- Fix misused pragma directives [developer]
- Fix test project configuration in solution [developer]
- Update foobar2000 SDK to 2025-03-07 [developer]
0.3.1 released on: 2025-02-11
- Fix Columns UI window not moving back into its previous position when returning from fullscreen
- Set the same minimum window width and height for all scenarios
- Add library versions to component notes
- Update EEL2 to `c9bc5ff` [developer]
0.3.0 released on: 2025-02-06
-
Enable visualization as a Columns UI panel window (uses SDK 8.0.0-beta.1)
- Add transparency identification
- Add icon to Columns UI window
- Implement Columns UI fullscreen updates
- Update thread pool timer stop function
- Update foobar2000 SDK to 2024-12-03
-
Update DirectXTK to 2024.10.29.1
- Fix ARM64EC builds
- Target Windows 8.1
- Update build configuration
- Update version revision ranges
-
Update library manifest [developer]
- Update settings manifest [developer]
- Set "Fullscreen" option in the context menu as the default
-
Implement categorized logging [developer]
- Wrap console print functions [developer]
- Fix comments [developer]
- Remove `static` from `constexpr` [developer]
0.3.0-rc released on: 2025-01-25
- Enable visualization as a Columns UI panel window (uses SDK 8.0.0-beta.1)
- Update foobar2000 SDK to 2024-12-03
- Update DirectXTK to 2024.10.29.1
- Update library manifest
0.2.0 released on: 2024-11-16
- Fix reinitialization crashes due to improper stack-allocated state/texture memory management
- Make minor quality updates
- Make minor comment updates
0.1.8-beta released on: 2024-09-22
- Plug codehandle leaks on window resize
- Fix all heap-use-after-free and stack-use-after-scope errors from AddressSanitizer
- Fix PFC assertion firing due to accessing invalid list position
0.1.0-beta released on: 2024-09-14
- Fix device lost scenario crash while using a flip model swap chain associated with a window handle and Direct2D
- Fix DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL and rendering of title text
- Fix lingering Direct2D brushes on exit when song title, length and/or position are "displayed" when there is nothing to display
- Prevent crash on right click when no presets are available
- Fix crash due to an empty song name not differentiated from a message timeout
- Fix multiple instances of incorrect code page conversion of preset directory before saving
- Check active playlist size before accessing to avoid exception
- Fix hang on error message display blocked by another message
- Correct minor oversights in previous release
0.0.299-alpha released on: 2024-09-08
- Major Feature: Improve audio waveform resolution from 8-bit samples to use binary32 (IEEE 754 single-precision) floating-point -- this is very noticeable in the reaction of MilkDrop to high frequencies
- Enable song tile and custom message sprites and textures (`T` for title, `Y` for messages, `K` for textures)
- Add album art extraction into visualization's textures or sprites; note this requires an entry in `foobar2000\profile\milkdrop2\milk2_img.ini` for `img100`
- Add back all preset menus, including editing of "waitstring"s and preset parameters
- Update all tooltip and help strings
- Implement thread pool timer instead of the window message timer for rendering -- for higher frame rates and consistent frame-to-frame times (from past release)
- Allow smaller window size than Mode 13h (320x200); lower limit is now 150x150
- Port dark translucent box into DirectX 11
- Add caption icons to visualization window and fonts dialog
0.0.260-alpha released on: 2024-08-18
- MAJOR CHANGE: Implement thread pool timer instead of the window message timer for rendering -- for higher frame rates and consistent frame-to-frame times
- Fix crashes due to non-ASCII characters in foobar2000 installation path
- Fix texture size combo box reset
- Add option to skip composite shader blending
- Create header file for and refactor UI element [developer]
- Rename some variables [developer]
- Update build and release script [developer]
0.0.250-alpha released on: 2024-08-16
- Implement option to customize the lower left title display (F2) format
- Fix unwanted white 1-pixel-thick border around the screen
- Fix crash when entering fullscreen from an embedded window layout
- Enable menu text, in particular the preset deletion prompt from the preset load list
- Remove stale text on UI mode change
- Synchronize currently loaded preset between the load list, the top right preset display (F4) and the right click context menu
- Fix player staying in the foreground on visualization fullscreen when "Always on Top" is enabled
- Update the preferences dialog control positions to accommodate more screen scale factors
- Fix UI action confirmation check key handling
- Fix preset load list directory navigation and crashes when moving to overflow pages
- Fix resetting and/or non-saving presets directory path from advanced preferences
- Update foobar2000 SDK to version 2024-08-07 [developer]
- Refactor keyboard controls into a separate file [developer]
- Add option to skip downconverting audio data into 8 bits (non-functional) [developer]
- Fix duplicate resource ID [developer]
- Update DirectXTK packages to 2024.6.5.1 [developer]
- Update C++ standard to C++20 [developer]
- Change component directory path to a wide string [developer]
- Move the `char*` to `wchar_t*` converter to C++ [developer]
- Add build run option to release script [developer]
- Run ClangFormat to fix minor formatting issues [developer]
- Grab latest version of MSVC in GitHub Actions dynamically [developer]
- Remove unused code for foobar2000 component in text manager [developer]
- Add flags to advanced configuration options [developer]
- Update README, CHANGELOG and licensing information [developer]
0.0.230-alpha released on: 2024-02-20
- Move presets to "profile" directory (without vector allocation errors)
- Fix PgUp/PgDn behavior
- Add menu keyboard controls
- Add most of the menu drawing routines and infrastructure
- Fix preset folder navigation and saving
- Bump preferences version -> preferences will be reset
- Update application version to 0.0.230
- Update definitions [developer]
- Begin cofiguration settings and preference page refactor [developer]
- Try projectM's Expression Evaluation Library instead of Nullsoft/Cockos's [developer]
- Add `m_szComponentDirPath` to library [developer]
- Remove `m_szConfigIniFileA` variable [developer]
- Add `ErrorOutput()` function [developer]
- Update `GetFileAttributes()` calls [developer]
- Replace custom string compare function [developer]
0.0.229-alpha released on: 2024-02-14
- Enable text rendering via Direct2D and DirectWrite.
- Enable full keyboard control.
- Enable synchronized playlist.
- Enable various status displays and fix error message crashes.
- Keep single component configuration for all window instances.
- Fix advanced setting override.
- Target DirectX 11.1 (Direct3D 11.1, DXGI 1.6, Direct2D 1.1, DirectWrite 1.1). [developer]
- Release resources on final plugin window "destroy". [developer]
- Update foobar2000 SDK patch and enable caching. [developer]
- Add component packaging script and fully enable build pipeline. [developer]
- Enable and package ARM64 and ARM64EC builds. [developer]
0.0.227-alpha released on: 2024-02-05
- Fix initialization crash due to corrupt configuration.
0.0.226-alpha released on: 2024-02-04
- Fix fullscreen mode crash.
- Update preferences, might need deleting the "config.sqlite" file if crashes on launch.
0.0.225-alpha released on: 2024-02-02
- First public alpha release.
Unstable functionality:
- Fullscreen mode can crash foobar2000.
- Configurability is incomplete. Some changes may have no effect.
- Several presets have NS-EEL compiler errors. Turn off "Suppress all errors and warnings" in Preferences to see messages in the Console.
In order to complete the port from Winamp and to DirectX 11 large amounts of MilkDrop 2 functionality has been removed, lost, or deprecated:
- Text, image and texture rendering.
- Customization through INI file.
- Older presets break.
- Interactive preset selection and shader editing (Note: only the UI does not show but some of the functionality has not been fully removed, so be careful).
- Desktop mode.
- Fake fullscreen mode and dual header functionality.
- VJ mode.
- Custom messages.