port-wmp-viz

Port Windows Media Player visualization DLLs to ProjectM MilkDrop presets via Ghidra reverse engineering.

5|Updated Jul 12, 2026
One-click install
npx skills add https://github.com/kugg/wmp-viz-ports --skill port-wmp-viz-kugg
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: port-wmp-viz
Source: https://github.com/kugg/wmp-viz-ports/tree/main/skills/port-wmp-viz
Command: npx skills add https://github.com/kugg/wmp-viz-ports --skill port-wmp-viz-kugg

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Classic Windows Media Player visualizations are locked inside legacy COM DLLs and cannot run on modern platforms. This Skill provides a complete reverse engineering workflow to extract, decompile, and port those visualizations into ProjectM MilkDrop .milk presets that render on current hardware. ## Core Features & Use Cases - DLL Extraction and Decompilation: Extract visualization DLLs from CAB-based installers (including embedded CABs at non-standard offsets) and decompile all functions with a Ghidra headless script. - Algorithm Analysis and Mapping: Identify state structs, sin LUTs, audio pipelines, and renderers in decompiled C code, then map them to MilkDrop per-frame, per-pixel, and HLSL shader equations with documented EEL/HLSL limitations and workarounds. - Validation and Testing: Validate presets with a Python syntax checker and a C++ parser harness against the real ProjectM PresetFileParser, then visually test in the ProjectM SDL test UI. - Use Case: Given the Trilogy III installer, extract TrilogyIII.dll, decompile it in Ghidra, reverse engineer the lava renderer, and produce a working lava.milk preset that renders with zero errors in ProjectM. ## Quick Start Ask the AI to port a Windows Media Player visualization DLL to a ProjectM MilkDrop preset, providing the path to the installer or DLL file.

Frequently Asked Questions about port-wmp-viz

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I port a Windows Media Player visualization to ProjectM?

Extract the visualization DLL from its installer with cabextract, decompile it using Ghidra headless with the DumpDecompiled script, analyze the render algorithms, then write a .milk preset mapping the logic to per-frame equations and HLSL composite shaders.

How do I extract a DLL from a WMP visualization installer exe?

Most WMP viz installers are MS CAB self-extracting archives, so cabextract works directly. If the CAB is embedded at a non-zero offset, search the binary for the MSCF magic bytes, slice from that offset, and run cabextract on the extracted slice.

Why does my MilkDrop composite shader render as a black screen?

Black screens usually come from missing MILKDROP_PRESET_VERSION and PSVERSION headers before [preset00], which makes ProjectM default to MilkDrop 1.x without shader support. Also check for fDecay=0.0, gaps in comp_ line numbering, or // comments inside backtick-continued shader lines.

What functions are not available in MilkDrop per-pixel EEL equations?

Per-pixel and per-frame EEL lack floor, ceil, step, smoothstep, lerp, if/else blocks, and loops. Use workarounds like min/max for clamping, ternary if(cond, a, b), and manual smoothstep expansion; reserve floor and tex2D for HLSL shaders.

Can I port a WMP visualization if Ghidra decompilation is too complex?

Yes, use visual approximation instead. Analyze original screenshots with PIL and numpy for color palettes, symmetry, and spatial distribution, then recreate the effect with math-simulated patterns like spirals and radial gradients in a composite shader.

What tools are required for the WMP to MilkDrop porting workflow?

You need Ghidra 12+ with Java 21 for decompilation, cabextract for installer extraction, Python 3 for the syntax validator, a C++ compiler for the parser test harness, and a ProjectM build for visual testing.