Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Butterchurn – A WebGL Implementation of the Milkdrop Visualizer (github.com/jberg)
123 points by podiki on April 14, 2021 | hide | past | favorite | 23 comments



Hey! I run webamp.org which uses Butterchurn.

It's not yet mentioned in the Butterchrun readme, but we recently built compiler that compiles the visualizer preset code to Webassembly in your browser and got a 73% improvement in rendering performance. Blog post here: https://jordaneldredge.com/blog/speeding-up-winamps-music-vi...


This was a fun trip down memory lane, lots of nostalgic good-feels.

I wasn't aware of either effort and this brought back the sense of an era of computing I once loved. It reminds me how transparent (perhaps moving towards ubiquitous computing) certain applications are becoming. I couldn't tell you how many times when listening to background music and working, I'd occasionally switchover to appreciate my current Winamp skin and even take a small break staring off into Milkdrop and then shift back to work. Now, I rarely take time to even look at my music application, it's just a means to an end--really a different era of computing where modern software just doesn't seem to give the same sense of personalization or character.

Thank you for your work!


This sentence in your post

By that metric rendering with the new Wasm version is ~72.6 faster than the JavaScript approach.

Seems like it should says “72.6 times” or “72.6 percent”


73% improvement reads like "almost twice as fast", to me.

100% faster would be twice as fast.


Ah, thanks for catching. It’s 72.6%. I’ll update.


Does webamp currently randomly load MilkDrop Presets from archive.org collection? I was getting many of the same effects trying it out.


That's super cool! Interesting that WASM provides a way to sandbox untrusted code. Did you consider sandboxing JS with iframes as an alternative?


Going to be hard to do real-time audio analysis over postmessage


The audio sample data is pretty low bandwidth, CD audio is ~150 kB/s. Latency is fine for real time too, but even if it wasn't, this is streaming media playback which tolerates relatively big delays in the pipeline as long as you keep a/v sync.


Yeah, this. Iframes or webworkers would have had too much overhead to work inside an animation loop.


The article talks about using WebAssembly.Global to avoid message passing overheads / delays.

One could almost certainly use SharedArrayBuffer to do a very similar shared mutable memory overhead-lowering optimization with webworkers or iframes, and see the same outcome.

I haven't looked in a while but SharedArrayBuffer used to be a core way to communicate with wasm, albeit it seemed super gnarly: if I remember you have to load your wasm program into a SharedArrayBuffer, then run that SharedArrayBuffer to do anything. I still have some hope that some day, some year, some decade, wasm workers might be able to have more than a single Memory at a time, such that we could work with SharedArrayBuffers far more elegantly/slickly, but please no one hold your breath.

And of course, Safari doesn't support SharedArrayBuffer nor SharedWebWorker nor like 50% of the other awesome little platform capabilities that just seem so technically excellent. Makes me very very sad they make such great devices so technically maimed.

To be fair, the spectre/meltdown global freak out ~3 years ago did cause a huge amount of slamming on the breaks & rapidly withdrawing really good standards. SharedArrayBuffer is only just making it back[1]. Would that we ever have a chance of having high resolution time again too, but that's basically never going to happen.

[1] https://developer.chrome.com/blog/enabling-shared-array-buff...


Does anyone know of any other music visualizers that are on the level of Milkdrop? I've never seen anything nearly as enchanting as Milkdrop, and with such a range of visual styles in the presets. As I mentioned in the current Webamp thread [0], I've spent many a good hour with Milkdrop and some good music.

[0] https://news.ycombinator.com/item?id=26811696


Not really a visualizer as it's not in real time to music, but it makes amazing visuals:

https://electricsheep.org/



Been a long time since I tried out projectM, looking to get that Milkdrop goodness back (and not on Windows). And just saw they have a VR mode.....that could be very very cool (and disorienting, in a good way?), can't wait to try that!


+1 for ProjectM. Excellent, even works great on FreeBSD!


Milkdrop was amazing for its time. I used it to do visuals at concerts and music festivals in the mid-00's. It was especially awesome because you could drive it with a microphone input so you could jam and get real time visualizations that synced with what you were playing.


You might enjoy this VJ friendly version of Milkdrop. http://nestimmersion.ca/nestdrop.html

Also a huge library of curated and organized presets (with previews). https://thefulldomeblog.com/2020/02/21/nestdrop-presets-coll...


g-force and whitecap are nice

https://www.soundspectrum.com


This is awesome! Will try to add it to the next release of https://github.com/dvx/lofi


Cool project, will have to check it out! Though, such a thing will just lower my chances of getting work done at the computer ;-)


Didn’t work on safari mobile, unfortunately. I see a message about lack of WebGL 2 or WebAudio support. I’m being directed to a legacy version [1], which currently seems missing.

[1]: https://legacy.butterchurnviz.com/


ermagerrd .. this takes me back




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: