GitPedia

Butterchurn

Butterchurn is a WebGL implementation of the Milkdrop Visualizer

From jberg·Updated June 18, 2026·View on GitHub·

Butterchurn is a WebGL implementation of the Milkdrop Visualizer The project is written primarily in JavaScript, distributed under the MIT License license, first published in 2018. It has gained significant community traction with 1,885 stars and 161 forks on GitHub. Key topics include: assemblyscript, music-visualizer, reimplementation, visualization, wasm.

Butterchurn

Butterchurn is a WebGL implementation of the Milkdrop Visualizer

Try it out

Butterchurn Screenshot

Usage

Installation

With pnpm, yarn or npm installed, run

$ pnpm add butterchurn butterchurn-presets
or
$ yarn add butterchurn butterchurn-presets
or
$ npm install butterchurn butterchurn-presets

Create a visualizer

JavaScript
import butterchurn from 'butterchurn'; import butterchurnPresets from 'butterchurn-presets'; // initialize audioContext and get canvas const visualizer = butterchurn.createVisualizer(audioContext, canvas, { width: 800, height: 600 }); // get audioNode from audio source or microphone visualizer.connectAudio(audioNode); // load a preset const presets = butterchurnPresets.getPresets(); const preset = presets['Flexi, martin + geiss - dedicated to the sherwin maxawow']; visualizer.loadPreset(preset, 0.0); // 2nd argument is the number of seconds to blend presets // resize visualizer visualizer.setRendererSize(1600, 1200); // render a frame visualizer.render();

Browser Support

Butterchurn requires the browser support WebGL 2.

You can test for support using our minimal isSupported script:

Javacript
import isButterchurnSupported from "butterchurn/lib/isSupported.min"; if (isButterchurnSupported()) { // Load and use butterchurn }

Integrations

Thanks

License

This project is licensed under the MIT License - see the LICENSE file for details

Contributors

Showing top 5 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from jberg/butterchurn via the GitHub API.Last fetched: 6/19/2026