Long before high-definition screens and gigabytes of GPU memory, PC enthusiasts, demoscene hackers, and audio lovers sought ways to turn music into interactive visual art. What began as simple oscilloscope waves soon evolved into hypnotic, fluid, and mathematically complex graphics. This article explores the history and evolution of real-time audio visualization, focusing on the pioneering software that defined the genre.
The earliest electronic music visualization did not happen on personal computers, but on analog hardware. The oscilloscope, an instrument designed to show voltage changes over time, was one of the first tools used to render sound. By connecting the left and right audio channels to the X and Y inputs of an oscilloscope, users could generate 2D Lissajous curves (such as a 5:7 frequency ratio pattern) that danced in real-time response to the frequency (the pitch or speed of the sound waves) and phase (the timing alignment between the left and right audio signals) of the music (exhibiting harmonic motion).
While mesmerizing, analog visualizers were limited. They could only display simple vector lines and lacked the ability to retain history or apply complex mathematical warps. It wasn't until the personal computer revolution of the late 1980s and early 1990s that programmers gained the software control needed to build true interactive visualizers.
In 1993, Australian coder Kevin "Zaph" Burfitt started Cthugha (named after the Cthulhu Mythos deity of fire) for MS-DOS, releasing it publicly in 1994 [2]. Cthugha helped define PC music visualization by combining real-time audio input with cellular automata-style feedback loops and palette cycling (rapidly shifting colors through a 256-color index table over time to generate rich, burning, organic textures).
Rather than drawing simple waves that immediately disappeared, Cthugha maintained a grid of indexed color pixels (usually 256 colors). Each frame, the software would:
Cthugha ran in real time on 486-class PCs, using highly optimized assembly loops to perform grid transformations fast enough for live visual output. To preserve this legacy beyond MS-DOS, ports like Cthughanix (and its modern fork on GitHub) brought the vintage MS-DOS code to Linux and X11, keeping the retro flame burning on modern operating systems.
As PCs transitioned from MS-DOS to Windows, media players became the dominant way to consume digital audio (primarily MP3s). Winamp, released in 1997, became one of the most influential Windows media players. To bridge the gap, Cthugha's organic, cellular-decay engine was ported to Windows as an early Winamp visualization plug-in. This allowed users to experience Cthugha's surreal, shifting visualizations directly inside the desktop environment, acting as a crucial transition point from standalone software to integrated media player addons.
Building on this momentum, in 2000, Nullsoft released the Advanced Visualization Studio (AVS) as a native plug-in for Winamp, designed by Winamp creator Justin Frankel [3].
AVS revolutionized the medium by making visualizers modular. Instead of a
hardcoded rendering pipeline, AVS allowed users to create "presets" by
stacking rendering components (lines, particles, custom code equations)
and feedback warps (rotations, zoom, coordinate translations) in a visual
editor. AVS introduced custom math expressions, allowing users to write
equations like r = r + sin(d*4) directly into the rendering
loop to define dynamic movements. This created a massive, passionate
community of preset designers who shared their mathematical artwork
online.
In 2001, Ryan Geiss released MilkDrop for Winamp, pushing the boundary from CPU rendering into hardware-accelerated GPU rendering [4]. Under the hood, MilkDrop was architecturally the same machine as Cthugha — a feedback buffer, a decay pass, a warp, and audio waveform overlays — but with a crucial twist: where Cthugha's warps were fixed, precomputed translation tables, MilkDrop made the warp parametric and scriptable. Each preset carries small "per-frame" and "per-vertex" equations (in a tiny expression language called EEL, inherited from AVS) that drive a handful of motion parameters — zoom, rotation, stretch, ripple, and pan — from the music every frame. Those equations ran on the CPU over a coarse screen-space warp mesh (typically 32×24 to 48×36 grid points); DirectX then interpolated the results smoothly across millions of pixels — the GPU doing the heavy lifting that MS-DOS-era assembly loops once did per pixel.
True per-pixel programmability arrived with MilkDrop 2 in 2007, which added pixel shaders (Shader Model 2/3 HLSL) on top of the warp mesh: a "warp shader" whose effects get baked into the feedback texture and persist frame to frame, and a "composite shader" for display-only finishing touches like gamma, echo, and hue shifts. MilkDrop also became famous for how it switched presets: rather than a hard cut or a plain crossfade, it blends the old and new warp fields through randomized per-vertex wipe patterns — directional sweeps and radial reveals — so that every transition is itself a visual event. Its self-normalizing audio measures (bass, mid, and treble levels scaled so that 1.0 always means "average loudness for this song") let thousands of community presets react meaningfully to any track, at any volume, in any genre.
Today, music visualization has transitioned into the browser. Notable examples include Butterchurn—a WebGL-based implementation of the MilkDrop visualizer used in browser-native players like Webamp—and dedicated WebGL shader visualizers. However, the next frontier belongs to WebGPU and WebAssembly (WASM).
This is where ShoggothOx enters the scene. Named after the Lovecraftian Shoggoth—a shapeless, protoplasmic entity covered in shifting, glowing eyes and mouths—the name mirrors the underlying behavior of a continuous cellular automaton. The grid cells act as a fluid, morphing mass of values that merge, flow, and split, producing concentric waveforms and circular loops that resemble eyes tracking the audio. In Lovecraftian lore, the Shoggoths eventually rebelled against their creators. ShoggothOx adopts a similar rebellious stance: it compiles native Rust to WebAssembly to run complex visualizer logic in the browser, demonstrating that sandboxed web applications can achieve the rendering speeds of historical desktop plugins. The "Ox" suffix also references the Rust language (short for oxidation).
As a spiritual successor to MilkDrop, ShoggothOx shares the core principles of real-time audio Fast Fourier Transforms, beat detection, and complex mathematical feedback equations. However, where MilkDrop was designed as a native Windows application built on desktop C++ and legacy DirectX, ShoggothOx adopts a modern, open-web approach. It executes compiled Rust on WebAssembly and drives cross-platform GPU hardware using WebGPU and WebGL wrappers. Additionally, while MilkDrop distorted a screen-space warp mesh driven by per-vertex equations, ShoggothOx leans closer to Cthugha's 2D cellular-decay feedback system, updating large simulation index grids directly on the GPU via compute shaders to maintain high frame rates even at native high-DPI monitor resolutions.