r/abletonlive • u/Then-Needleworker-55 • 23h ago
Bringing Strudel natively into Ableton Live (a fun open-source experiment!)
Hey everyone,
I've been curiously learning a lot about Strudel, and as a fun side project, I decided to see if I could "port" it as a Max for Live device. And the best of all, it's completely FREE.
I've built an open-source suite of M4L devices that embed the real strudel core engine directly into Ableton Live.
This is highly experimental and definitely not meant to be a polished tool - just a fun exploration of how we can bridge live coding and traditional DAWs.
I'm primarily sharing this because it was a fun learning experience for me, and I thought other amateur producers here might find it interesting (or want to hack on it!). These devices also help you understand and appreciate the mini notation by allowing to translate from/to Ableton.
You can grab it from https://github.com/alienmind/m4l-strudel/releases
These devices run inside Live and lock perfectly to the transport clock of the DAW - launch a clip on the track, or just hit Play, and the pattern starts.
EDIT - v1.1.0 is out, and it's the big one: the main device now runs the REAL strudel.cc, offline, as your instrument.
Not a lookalike, not a re-implementation - the actual app, built from the Strudel repo and bundled into the device. Its own editor, its own scheduler, its own visualisers. You hit REPL, you get strudel.cc in a floating window, and what you evaluate there is the track's audio. Close the window and it keeps playing.
All devices included:
- Strudel: The main device with all of strudel.cc features in a small window, but routed to Ableton and beat-synced with the track.

- Strudel MIDI: Type a pattern and it streams live MIDI to any Ableton instrument. You can even freeze generative sketches into standard MIDI clips!

- Strudel Drums MIDI: Same thing, but maps
bd,sd, etc., straight to a Drum Rack (it does not really usesound())

- Strudel Synth: the other half of the superdough idea - you type a sound instead of a pattern (
s("sawtooth").lpf(800).room(0.3)) and every MIDI note the track sends plays it, from a clip or from your keyboard. Anyslider()in the sound becomes a real automatable knob. - Strudel Drums Sampler: actually plays the drum-machine banks - write
s("bd sd, hh*8"), pick a machine, and it fetches and plays those sounds.

- Strudel Audio FX: Type a chain like
.lpf(800).room(0.3)and it instantly builds a real Max DSP signal chain on your track with automatable dials - with some caveats like these are fixed in order, but whatever ;-) - Strudel Sample Browser: A utility to browse and beat-sync preview all the community sample maps (dough-samples, Dirt-Samples) directly inside Live. Auditioning writes the file next to the device, so you can drag it into a Simpler or a Drum Rack.
More Features:
- Your pattern saves with the Live set. Not in a browser's localStorage - in the
.als, per device instance. Reopen the set, it's there. - Sliders with declared name and units:
slider(500, 100, 1000, 1, { name: 'cutoff', unit: 'Hz' }). The knob readscutoffand its value reads in Hz, and they become real Ableton knobs. Writes("sawtooth").lpf(slider(500, 100, 1000))and the first slider will have adjusted range, a name and automatable, MIDI-mappable, etc, on Push.

- The device view is now a panel with three faces: a small code scratchpad (with syntax highlighting), a bank of faders for whatever the pattern named, and a visualizer so you can see it's alive with the Studio window closed.

You can grab the .amxd files from the releases page or check out the source code (and the crazy architecture it took to make Chromium and Max talk to each other) here: https://github.com/alienmind/m4l-strudel and https://github.com/alienmind/m4l-jweb - there's also a "drawer of failed ideas" documenting everything that didn't work, which was half the fun.
Would love to hear what you people think!
Still broken / known issues in 1.1.0:
- Exporting a pattern to WAV still fails to write the file. It's the top of the fix list.
- The Studio's audio can be choppy on some systems. I've got a solid lead (Max's
jweb~object has a latency/buffer setting we never touched, and its minimum is documented to cause dropouts) but it's not fixed yet.

