Puredata! (thread)

Hi everyone, I’m excited to announce that Scheme for Pure Data (aka s4pd) is now code complete for version 0.1 and ready for people to use, though it does still require building from source at the moment.

Scheme for Pd is an open-source external for live-coding and scripting Pd with an embedded s7 Scheme Lisp interpreter. It is a port of most of Scheme for Max, also by me, for Max/MSP. s7 is an embeddable minimal Scheme implementation by Bill Schottstaedt at CCRMA, with many nice features for algorithmic composition and embedding. It’s the Scheme engine used in the Common Music algorithmic composition toolkit and the Snd audio editor, and has keywords, Common Lisp style macros, first-class environments, thread safety, applicative syntax, and a very straight forward FFI (foreign function interface).

Features in beta 0.1:

  • run code from files, and hot reload files during playback
  • evaluate scheme code from Pd messages live with a REPL
  • keeps on playing fine when you go into edit mode
  • output numbers, symbols, lists, vectors (as Pd lists)
  • basic array i/o
  • send messages to named receivers
  • schedule functions with delay, using the Pd scheduler

The GitHub project page is here. Please file issues there if you find bugs or the help is unclear. I’m sure there are still some issues!

If you’ve not used Scheme before, I’ve written a crash course for Scheme for Max which should almost all apply here:

There are various videos on the youtube channel demoing things you can do with the Max version, which might be of interest, as they should mostly port over without issue. I will be making Pd specific ones in the future.

If you can help with testing and making builds on Windows and Linux, please let me know. I think this version should be ready for a binary release now.



Amazing work, Iain! I can’t wait to dig in!

Thanks! Feel free to get in touch or post to github if you hit any snags. I also started a tutorial series on making sequencers with Scheme for Max that is adaptable to Scheme for Pd quite easily. I plan to release a compatibility shim to allow sequencing code to be used between them. Tutorial is here:



I never was that interested in camomile, mostly because it seemed quite complicated to get from a pure data patch to a working camomile plugin. If my understanding is right it works with libpd and therefore only strictly vanilla patches are possible (still really cool though).

Now I found out that it’s possible to have a pd~ subprocess inside of camomile which really turns it into pd as a vst, with live patching, midi, externals and everything :exploding_head:
There is an examplepatch in this github Discussion Using external Pd objects · Discussion #233 · pierreguillot/Camomile · GitHub and it was quite easy to make it work on windows with the information already there :slight_smile:

I think i want to try if i can do concatenative with TimbreID in camomile, or just sequenced fftease stuff…

Anyone here ever tried taking some Norns scripts to this? (PDLua)

It’d be pretty neat to port some onto Organelle.

1 Like

I’ve tried to get excited about Pd for like 20 years now, doing basic tutorial every two years but it never goes anywhere. Tragic :performing_arts:

However I’m glad to report that I’ve had an incredibly fun time trying to use this crazy thing this week. I barely understand anything I’m doing (lol how to even make a thing where number increases) but there are sounds.

Learning basics of synthesis through other means (norns, SuperCollider, Digitone, YouTube videos obvs) seems to be the thing that makes the difference, as well as Automationism as a scaffolding.

[rave on]
| \
|  \

PS. Scheme for Pd works fine, but I didn’t get into it beyond a successful install. Compiled on norns too.

Also running Pd on norns is a no-brainer with

$ pd -nogui -jackname pd &
$ jack_connect pd:output0 softcut:input_1
$ jack_connect pd:output1 softcut:input_2
$ jack_connect pd:output0 crone:input_1
$ jack_connect pd:output1 crone:input_2

I didn’t do anything smart with that :arrow_heading_up:︎ but driving Pd with OSC from norns scripts, little MIDI→OSC gateway, programming environment (I tested Python and Emacs) or ye goode old commandline are all adventures to explore. Puredata files are just text files representing basically graphs G = \langle N, E \rangle where E = \langle N_{source}, N_{target} \rangle, so generating them is possible too.


Not tried it yet, but thought I’d share incase anyone else is looking for the same thing

Another go at getting puredata as a DAW plugin.


Hey radian, thanks for spreading the word, keep in mind that PlugData isn’t finished, and is currently not stable yet. I’ll be working on it a lot coming year, in a few months time it should be in a much better state


I just finished a patch editor with preset morphing for the Nord Drum 3P

It’s possible to save sounds into the patch and also to export the preset banks for each pad as files.
It listens to MIDI on channel 10 (you can change parameters on the device and save them into the patch) and sends MIDI on channels 11-16.
It probably would be possible to add sysex dumps from the device into pure data but i couldn’t get my head around backwards engineering the sysex format.

Morphing all the sounds at once sends A LOT of Midi so it slowed down the sequencer i had running in pure data, but playing morphing sound by hand should be really cool too!

Edit: Replaced the zip because I forgot a preset file.

nd3peditor.zip (13.0 KB)


Pd is pure! Pd is data!

But how can I decide if I should focus my meager learning efforts towards vanilla, Pd-extended or Purr Data :scream:? Which flavour did y’all choose, and why?

  • vanilla
  • extended
  • Purr Data

0 voters

pd-extended has been abandoned: https://puredata.info/downloads/pd-extended

(I’ll also add that the patching experience is much nicer in purr-data so if you’re dabbling or learning slowly, that would be my suggestion)

1 Like

Extended hasn’t been maintained for a few years, now, so I definitely would not recommend it. (I just checked, and it looks like the last release was 2013!) Unfortunately a lot of extant documentation and tutorials still refer to it, but at this point it’s really a non-starter.

Purr Data continues the mission of Extended by providing a lot of bundled externals and some other quality of life improvements. The GUI is all re-written in javascript, and while it provides some nice things like being able to zoom in/out (yes please!) and easily customizing the colours, I also find it to be sluggish. Purr Data lags behind Vanilla a bit, and so you won’t have access to the latest and greatest from upstream (not a huge issue with Pure Data, but just worth mentioning). In my personal experience, I’ve had more frequent crashes with Purr Data (usually something in the GUI will freeze up).

That said, I use Purr Data when I’m on a new/temporary system and I want to get up and running as quickly as possible to try out some ideas. I would recommend it to someone wanting to test the waters or someone with less experience setting up and maintaining development environments.

I use Vanilla on my main system and for any patches that are treated as “final” (i.e., I’m going to perform with them, or record with them, or install them, etc.) Once you’ve added whatever externals you need, the only significant difference between Vanilla and Purr Data will be the GUI.

There is a fork of Vanilla called PD-Next which is effectively Vanilla with a couple of GUI tweaks included, such as the ability to customize colours. PD-Next keeps pace with Vanilla releases, and I know a lot of Pd users who are using PD-Next as their main flavour.

My personal 2 cents: try to use vanilla when/where you can, and be mindful about the technical debt you build up with 3rd party externals–this is harder to do in Purr Data, especially if you’re new to the environment and may not necessarily know when the object you’re using is an external vs a core component. When I started with Pd it was back in the extended days, and all my old patches were made in that environment. I struggle to get many of them to run now due to dependencies on externals which are no longer maintained, or no longer compatible with current CPU architectures. In some cases fixing these issues is simple–just find a modern drop-in replacement. In other cases it has meant that I either need to rewrite the entire patch or I need to just load up Extended and treat that patch as belonging to a totally different system/environment.


I would recommend using vanilla or pd-next, especially if you are programming in the evening some of the different color schemes are easier on the eyes than the vanilla-white.
Vanilla is also the most compatible if you want to share your patches or try things like MobMuPlat for iOS and Android or Camomile to make VST plugins from your patches.

I can also recommend the else library, it was made by Alexandre Torres Porres as a replacement for extended and comes with loads of well documented objects. Lots of higher level stuff like the preset managment system i used in the patch i shared above. You can download it using the Pd internal packet manager and it comes with a tutorial too!


vanilla. purrr’s javascirpt UI is just too slow and fancy for older machines and has a huge dependency pile. it bundles in too much 3rd-party stuff of varying quality, PD should be lean, mean and portable.


Internet has spoken: vanilla :icecream:

Thank you for your insights, that is very generous. These kinds of matters are poorly addressed by search engines and available and accessible documentation.


One of the most frustrating parts of Pd in general!

I believe there’s a current effort to improve vanilla Pd’s extremely lacking documentation. I had some very weird experiences when trying to help with it and am no longer involved, but I would cautiously encourage others to try contributing if they feel motivated to do so!

Pd → crone/SuperCollider
↳ softcut

Watch out for attacky noise 8 secs in.

Next installing ELSE suggested above on norns.

Sound with the above instrument=contraption on the Pd side and some Otis messing around live.

1 Like

I finally got around to trying the prototype module in vcvrack. I will say compiling it for windows was a bit of a pain and I ended up removing the LED widgets because I didn’t need to use them and they were breaking the build, however that might’ve been me cherry-picking the wrong commit from some of the open PRs. Silly pic below of a six operator patch using vcv for some light signal manipulation.

The possibilities with this setup are pretty exciting, one of my favorites things to do with PD are to make little tape patches and if I can plug in a synth to do sample manipulation and that sorta stuff I think it’ll be incredibly fun.


So spent a few more sessions with it, one unfortunate thing is that you can’t update stuff inside the patcher without messages. So no using vsliders in PD as an extra interface without some other patcher window sending OSC or something.