Pure Data is a wonder: a free and open source environment for creating your own musical and multimedia creations with graphical programming, from Miller Puckette, the original creator of Max. You can produce everything from interactive sequencers and drum machines to synths to video performance tools by connecting patch cables visually, and you can run on virtually any platform, from BeagleBoards and Rasberry Pi to Mac, Windows, and Linux desktop. Via libpd, you can target other development languages and environments, embed engines in games, or work with Android and iOS.

What hasn’t been so wonderful, of course, is Pd’s graphical editing environment, which can be charitably described as “bare-bones.” That is, until now. Pd-extended 0.43 massively improves performance and usability of the GUI in a ground-up rewrite and new plug-in architecture, and it’s just about ready for prime time. That gives you new patching and debugging tools, many familiar to users of Pd’s proprietary cousin, Max/MSP, but which are finally available to Pd, too.

It’s so important, in fact, that CDM invites Hans-Christoph Steiner, one of the key developers of Pd-extended, to give us a tour of what’s new. (Note: because Pd-extended includes various additional objects or “externals” that Pd Vanilla lacks, you should be careful when building patches for libpd. What I like to do is use Pd-extended as my editing environment, then double-check patches by opening them in Vanilla to make sure I haven’t accidentally used an object that’s not part of the bare-bones version. I can then substitute an object, copy an abstraction, or if necessary build that external.) -Ed.

The Pd-extended 0.43 release has been brewing an extra long time, about 18 months now, mostly because there are lots of big improvements. We wanted to make sure we got it right, so your patches all work, but the improvements all shine, so its taken a while. It’s now solidly beta, so we’re looking for testers. Download a beta build to try here:

http://puredata.info/downloads/pd-extended/releases/0.43.1

First off, the pd-gui side of Pd has been rewritten from scratch. The focus for most of the recent work has been on the editing experience, making your patching experience as productive and flexible as possible. To give some background, Pd has always been made up of two programs: pd is the core engine and pd-gui is the GUI. Since basically all computers now come with multiple CPU cores, this means that pd-gui will usually run on a separate CPU core than pd, so they don’t step on each other’s toes. pd can entirely take over its own core. If you want to make your patch use more CPU cores, then check out the [pd~] object introduced in the last release, but fine-tuned in this one.

There are so many ideas for making a better editing experience in Pd; this release makes big strides to address the editing experience. There are new features like Magic Glass, Autotips, Autopatch and Perf Mode, all available on the Edit menu.

Awesome new Pd features: now in Pd-extended, on the Edit menu. Messy patch: Peter’s. (Hint: yours may look better.)
  • Magic Glass lets you magically see the messages as they pass through the cords. Just turn it on and hover above a cord, and you’ll see the messages as they go by. You can even look at signal/audio cords.
  • Autotips gives you tips about what an object does, what its inlet expects, and what comes out of the outlets.
  • Autopatch mode automatically connects objects as you create them.
  • Perf Mode, is a mode for performance that makes it harder to accidentally close windows that are part of your performance.

A whole new Pd Window

The Pd Window is also majorly overhauled. First of all, it’s fast. Much much faster than the old one. You can now print thousands of messages per second to the Pd Window and still edit your patch. No more will an accidental dump of info cause the GUI to freeze up (well, okay, maybe if you send 10,000 messages/second, but that is way too many). There are also five levels of printing messages to the Pd Window: fatal, error, normal, debug, all. If you are only interested in fatal errors, switch the Pd Window to 0 – fatal, and you’ll only see the worst problems. You want to see every single message to debug? Switch to 4 – all, and you’ll drink from the firehose.

There is also the new log library, which lets you easily send messages for those different levels. And all messages logged with the objects from the log library are clickable: when you Ctrl-Click or Cmd-click (Mac OS X) on the line in the Pd Window, it’ll pop up the patch where the message came from, and highlight the specific object that printed it. That even works for many messages from other objects, as well.

The Pd Window also includes very basic level meters for monitoring the input and output levels. And for those who want to play with the GUI in realtime, you can type Tcl code in the Tcl entry field, and directly modify and probe the running GUI.

Customize the GUI with Plugins

One thing that you can do now is customize the GUI using GUI plugins. You can change all sorts of colors, some fonts, and many behaviors. Want to create a new object when you triple-click? Try the tripleclick example plugin Want to make the patch cords disappear when you leave Edit Mode? Check out the “only show cords in edit mode” example. Those are the simple ones. There is also Tab Completion, a search engine for the docs, a category browser for the right-click menu, a buttonbar for creating objects, and more.

You can find many GUI plugins in the new section of the downloads page as well as documentation for making your own. (What kind of GUI plugin will you write?)

Write Pd objects in more languages

Traditionally, Pd objects are written in Pd (abstractions), C and some in C++. This new release includes two “loaders”, Lua and Tcl, which allow you to write regular Pd objects in either Lua or Tcl. Pd is not the best for processing strings, so if you need to do that, you can now easily use Lua or Tcl, both very easy scripting languages for working with strings. Lua is often used for OpenGL work, so you can also run Lua objects to work in conjunction with Gem. Also, the Tcl loader lets you write GUI objects in pure Tcl, no C needed.

Multi-processing, Pd-style!

The [pd~] object now works out of box. In case you missed the introduction of the [pd~] object in the last release, we’ll introduce you now. [pd~] is Pd itself incapsulated into an object. You can run any patch inside that instance of Pd, the difference is that the Pd in the [pd~] object runs in a totally separate process. So if your computer has multiple CPU cores, which basically all computers do these days, then the Pd process inside the [pd~] object will run on a separate core. This means you can have a heavy Pd patch spread across multiple cores or CPUs. Or for people who work with video and audio together, you can have one instance for video running at a normal priority, then another instance for audio running at a high priority to make sure there aren’t clicks in the audio caused by heavy video processing.

Autotips, generated from help patches

This release also provides a new “autotips” feature to provide instant information about objects and their inlets and outlets. It is one of the first new developments to showcase all of the meta data that is now included in all of the help patches. (Check out the [pd META] subpatches.) When you hover above an inlet or the object itself in Edit Mode, you’ll see a short text description pop up on the lower left corner. But, of course, using a GUI plugin, you could customize how they are displayed to make it how you want to see it. If you want to add autotips to your object, then just add a [pd META] subpatch to your objects’ help patches, and fill out the description, etc. Voila! They’ll have instant information.

What’s next?

The core pd process still handles a lot of the GUI stuff, but we are working on splitting that out for the 0.44 release. That is a big chunk of work, but it will also bring big gains. In particular, it means that it will be possible for people to write their own GUIs for Pd, covering not just the display of the patch, but also the editing, and everything else. You like OpenFrameworks, Python, iOS, JUCE, Qt, etc.? Write your own pd-gui using the toolkit of your choice. That’s the idea at least. That will take a solid chunk of work, so we are looking for people to join that effort.

Try it yourself:

http://puredata.info/downloads/pd-extended/releases/0.43.1
http://puredata.info/downloads/pd-extended

Where to learn Pd:

Resources to start learning

-Hans-Christoph Steiner for CDM

  • Stefano Papetti

    the refined multi-core features together with the improved GUI make Pd-extended look great indeed!

  • papernoise

    Looks good indeed! Actually the GUI was the biggest drawback of PD. 

  • Simon Kirby

    How long before we might get a pdgui for iPad running libpd as its engine? *dream*

  • Warrior Bob

    Wow, great to see pd getting such nice features! I haven’t used it in a long time. I really should get it set up again and make something cool.

  • Jordan Colburn

    Love PD, it’s nice to see all the improvements.  I appreciate all the work everyone has put in.

  • Blob

    This makes me want to go back to patching!

  • http://twitter.com/optal Alexandr Chernenko

    long live PD! God bless!

  • http://twitter.com/headchant headchant

    Is there a tutorial(or usable docs?) on using lua in pd-extended?

    • http://www.facebook.com/jmmmpais João Pais

      It should be enough to look at the help file of the Lua objects coming in Pd-Ext. To use Lua itself, you should report to the Lua documentation – this doesn’t get sent with Pd. Or ask in the Pd-list, some people there use Lua regularly.

  • umma08

    one of the best things about Pd (apart from the free bit) is the fact that the patching community that  surrounds and supports it, is one of the best. 

  • Olav Slonovski

    Unfortunately, the moment I launch Pd, my apogee duet craps out with infamous “metallic distortion”.
    Switching S/R or replugging the cable to “fix” that makes Pd quit.

    • http://pkirn.com/ Peter Kirn

      Whoa… that’s peculiar. For one thing, Pd doesn’t even start with the audio engine on, so this is really strange indeed. Can you try switching the Mac’s default audio I/O to the internal sound, then selecting your Apogee in Pd? (You’ll want JACK or CoreAudio as your audio driver.)

    • Olav Slonovski

      Yeah, funky stuff. Never had such issues with previous versions.
      It just won’t play ball with duet directly.
      Only workaround I’ve found so far is to route duet through soundflower set as Pd output.

  • http://www.skyron.org/ SkyRon™

    I’m opening up a patch I made a few weeks ago (in .42 extended) in the new version. Having trouble getting into and out of edit mode – - seems a little buggy right now, or am I doing something wrong? 

  • Poopoo

    Fantastic, looks great.

    I’ve been using a hacked old version of puredata that let you make VST and VSTi’s out of your patches  ( http://crca.ucsd.edu/~jsarlo/pdvst/ ).  It is not updated and in the mean time pd (and pd_extended) keep on getting better.  I wish the VST functionality could be incorporated into pd-extended (the biggest issue is probably the steinberg license).

  • Pissypaw

    Pd’s graphs, arrays and the possibility to have a sub-patch “graph on parent” puts Pd ahead of MaxMSP for me. Pd is an exciting and alive schizophrenic jumble of possibilities whilst Max is locked in to its slick (and very expensive) package. May Pd live a long and happy life under the spiritual protection of Stallman’s beard (and those weird things he eats off his feet)!

  • david

    Gosh, finally. Good bye 1998!  

  • Bjørn Nesby

     Beta, the moment when good software goes public. Love it.

  • Krellmusician

    Suggestion to the developers: If possible/feasible, consider making a version of Pd as an Eclipse plugin.  

  • http://at.or.at/hans/ Hans-Christoph Steiner

    One thing I forgot to mention in this write-up is that Pd-extended 0.43 also includes a translated interface.  We have already included pretty complete translations for Brazilian Portuguese, Castilian Spanish, Mexican Spanish, Catalan, French, Italian, Japanese, Greek, German, Hungarian and Latvian.   Also in the works are Traditional Chinese, Gaelic, Dutch, Portugal Portuguese, and Swedish.  If you want to help create or improve translations, its all happening on this website: https://www.transifex.net/projects/p/puredata/resource/templatepot/

    • Hans-Christoph Steiner

      Oops, I forgot there are also Canadian English and UK English translations as well, for those of you who miss their colours.

  • http://profiles.google.com/danomatika Dan Wilcox

    Awesome, great work guys! It’s been a long time coming and worth the wait.