1 Introduction
Traditionally, software development has relied on text-based programming languages, where code is written line by line and later executed to reveal its results. While efficient and powerful for those with formal training, this approach often poses a significant barrier to artists, musicians, and creative practitioners who are less familiar with symbolic logic or syntactic precision. The abstract nature of traditional code can be daunting—especially for those who are more at home in visual, embodied, or sensory modes of making.
An alternative paradigm has emerged through graphical and modular environments, where functions are represented as visual elements and assembled through spatial composition rather than text. In this model, creative practitioners can construct interactive systems by literally drawing connections between components—building programs as if sketching ideas in space. Such environments privilege immediacy and iteration, allowing users to hear, see, and modify the behavior of systems in real time. This shift not only enhances accessibility, but also aligns with tactile and intuitive forms of creative inquiry.
The design principles behind these tools often resonate with the traditions of analog modular synthesis, where sonic processes were shaped by routing signals through a network of interconnected modules. The visual and spatial logic of such systems enables a fluid interplay between structure and experimentation. Translating this model into a digital environment supports an approach to coding that feels more like composing, sculpting, or improvising—where signal flow and behavior are not predefined but discovered through interaction.
Working within such environments encourages a rethinking of programming itself—not merely as an engineering task, but as a medium for composing with systems. Whether developing real-time sound processors, generative structures, or interactive instruments, the act of coding becomes a form of sonic thinking. Algorithms are not just functional mechanisms, but artistic gestures; control flows become expressive tools. In this way, creative coding fosters a hybrid mindset that embraces both analytical precision and artistic openness, offering a powerful foundation for experimentation at the intersection of sound, interaction, and computation.
1.1 What is Pure Data?
Pure Data (or Pd) is a real-time graphical programming environment for audio, video, and graphical processing. Pd is commonly used for live music performance, VeeJaying, sound effects, composition, audio analysis, interfacing with sensors, using cameras, controlling robots or even interacting with websites. Because all of these various media are handled as digital data within the program, many fascinating opportunities for cross-synthesis between them exist. Sound can be used to manipulate video, which could then be streamed over the internet to another computer which might analyze that video and use it to control a motor-driven installation.
Programming with Pd is a unique interaction that is much closer to the experience of manipulating things in the physical world. The most basic unit of functionality is a box, and the program is formed by connecting these boxes together into diagrams that both represent the flow of data while actually performing the operations mapped out in the diagram. The program itself is always running, there is no separation between writing the program and running the program, and each action takes effect the moment it is completed.
The community of users and programmers around Pd have created additional functions (called “externals” or “external libraries”) which are used for a wide variety of other purposes, such as video processing, the playback and streaming of MP3s or Quicktime video, the manipulation and display of 3-dimensional objects and the modeling of virtual physical objects. There is a wide range of external libraries available which give Pd additional features. Just about any kind of programming is feasible using Pd as long as there are externals libraries which provide the most basic units of functionality required.
The core of Pd written and maintained by Miller S. Puckette and includes the work of many developers, making the whole package very much a community effort.
1.2 Why Pd?
Pd is a powerful, open-source environment for creative coding, offering a uniquely visual approach to programming that is especially suited for artists, musicians, and interactive media designers. Its intuitive interface and modular structure make it a flexible and accessible tool for developing real-time audio and visual projects—from live performances to experimental installations.
One of Pd’s standout features is its graphical programming interface, which replaces traditional lines of code with visual objects and patch cords. This allows users to construct complex behaviors by connecting elements on screen, making it easier to prototype and refine creative ideas. Real-time processing capabilities mean that audio and visual data can be generated, modified, and responded to instantly—ideal for performances, generative art, or interactive systems that react to sensors or user input.
Beyond its creative potential, Pd offers practical advantages: it is cross-platform, running on Windows, macOS, and Linux, and integrates easily with tools like Arduino, Raspberry Pi, and Max/MSP, enabling hybrid systems that combine digital and physical components. A rich ecosystem of external libraries supports advanced functions like synthesis, visualization, and computer vision. Its open-source nature encourages exploration and collaboration, with a supportive community, extensive documentation, and countless tutorials available. Because it’s free and widely used in education, Pd is not only an effective tool for artistic expression but also a valuable learning resource for developing a strong foundation in programming and multimedia design.
1.3 What is Creative Coding?
Creative coding is the practice of using programming as a tool for artistic expression. It transforms code from a purely functional medium into a creative one, enabling the development of visual art, music, interactive experiences, and experimental media. This approach encourages artists, designers, and technologists to explore beyond the limits of traditional art forms, embracing code as a flexible and dynamic means of invention and communication.
The applications of creative coding are diverse, ranging from generative visuals and algorithmic design to responsive installations and live audiovisual performances. Creators often use languages and environments specifically designed to support creative work, such as Processing, OpenFrameworks, Max/MSP, and Pd. These platforms make it easier to manipulate data, control media in real time, and experiment with unconventional interfaces and outputs.
Importantly, creative coding transcends the boundaries of specific disciplines. It can intersect with visual art, music, dance, theater, architecture, and even narrative writing. What unites these practices is the use of code as an expressive tool—one that invites innovation, play, and conceptual exploration. Closely tied to the values of the open-source movement, creative coding thrives in a culture of sharing, where artists and developers freely exchange code, tutorials, and ideas. This collaborative ecosystem fosters continuous learning and reinvention, empowering creators to expand what is possible through digital technology.
For an in-depth exploration of creative coding, consider checking out these resources:
- Awesome Creative coding - A curated list of resources, libraries, and tools for creative coding.
- Creative Code Berlin - A collection of creative coding resources, tutorials, and projects.
1.4 Getting Started
This section will guide you through the installation of Pd Vanilla, the official and minimal distribution of Pd, on Windows, macOS, and Linux systems. The installation process is straightforward and will have you up and running in no time.
To get the most out of this book, you should have a basic understanding of programming and some familiarity with the Pd language.
1.4.1 Tools, Manuals, and Resources
If you are new to Pd or programming, there are many online resources that can help you get started. Pd may initially appear intimidating—its blank, minimalistic interface offers no hints or prompts, and users are often left wondering where to begin. What objects are available? How do they function? This curated list of resources is intended to guide newcomers and experienced users alike by offering clear pathways into the Pd ecosystem.
Resource | Author/Source | Description |
---|---|---|
Pd Tutorials Browser | Built-in | Beginner tutorials within Pd (Help → Browser → Manuals ) covering audio, visuals, networking |
Object Help Patches | Built-in | Contextual help for any object via right-click → Help , with embedded examples |
Pd FLOSS Manual | Community | Beginner-friendly comprehensive guide covering installation to advanced techniques |
Official Pd Documentation | Miller Puckette | Definitive reference by Pd’s creator, accessible via Help → HTML Manual |
Theory and Techniques of Electronic Music | Miller Puckette | Canonical text accompanying Pd’s audio examples, focuses on DSP concepts |
puredata.org | Official | Main website with news, documentation, FAQs, and community resources |
YouTube/Vimeo Tutorials | Various | Video tutorials with step-by-step demonstrations |
Patchstorage | Community | Platform for sharing and discovering Pd patches from beginner to advanced |
Pd Workshop Files | Max Neupert, Frank Barknecht | Workshop materials including motion detection examples |
Designing Sound | Andy Farnell | Patches and tutorials focused on procedural audio and sound design |
Loadbang | Johannes Kreidler | Online tutorial and book with practical creative coding projects |
Kunstuniversität Graz | IEM Graz | Extensive collection of tutorials and example patches |
Multimedia Programming with Pd | Bryan Chung | Book covering digital media authoring: images, animations, audio, videos |
Electronic Music and Sound Design Vol. 1 | Bianchi, Cipriani, Giri | Theory and practice overview with glossary and student evaluation tests |
Live Electronics Tutorial | Alexandre Torres Porres | Theory and practice of live electronics and computer music synthesis/DSP |
Programming Sound with Pure Data | Tony Hillerson | Introduces and explores Pure Data, building understanding of sound design concepts along the way |
Ekran.org Gem Tutorials | Ekran.org | Tutorials on Gem for audiovisual composition and |
1.4.2 Recommended Pd distributions
This book is based on Pd Vanilla distribution, which is the most widely used version. You can download it from the Pd official website.
This version is maintained by the original author, Miller Puckette1, and is the most stable supported version of Pd. It includes all the core features and libraries needed for most projects, making it a great starting point for beginners and experienced users alike. Pd Vanilla is a free, open-source and available for Windows, macOS, and Linux operating systems.
In addition to Pd Vanilla, there are several other distributions and versions of Pd that you may find useful:
- Purr Data – A fork of Pd-l2ork that focuses on usability and accessibility, with a more polished interface and additional features. Purr Data serves the same purpose, but offers a new and much improved graphical user interface and includes many 3rd party plug-ins. Like Pd, it runs on Linux, macOS and Windows, and is open-source throughout.
- Plugdata – plugdata is a plugin wrapper designed for Miller Puckette’s Pd, featuring an enhanced graphical user interface (GUI) created using JUCE, headed by Timothy Schoen. this project is still a work in progress, and may still have some bugs. By default, plugdata comes with the cyclone and ELSE collections of externals and abstractions.
- Pd Ceammc - a general purpose Pd distribution and library that is used for performance, sound-design and education purposes in Centre of electroacoustic music of Moscow Conservatory (CEAM).
1.4.3 Recommended libraries and externals
The following libraries are recommended to be used with Pd. They are not included in the Pd Vanilla distribution, but they can be easily installed and used with it:
Library | Description & Usefulness |
---|---|
cyclone | A large collection of Max/MSP-compatible objects. Useful for porting Max patches and advanced DSP tasks. |
ELSE | Extensive library for audio, control, math, and UI |
iemlib | Collection of general purpose objects and filters for Pd |
list-abs | Tools for advanced list manipulation and data processing |
zexy | Essential utilities for math, signal, and control operations. Adds many missing core features. |
Gem | Graphics Environment for Multimedia. Enables real-time visuals and video. |
ceammc | library used for work and education purposes in Centre of electroacoustic music of Moscow Conservatory (CEAMMC) and ZIL-electro studio |
comport | Serial port communication. Useful for connecting Pd to Arduino, sensors, and hardware |
mrpeach | Networking and OSC support. Essential for interactive and networked Pd projects |
freeverb~ | High-quality reverb effect. Simple way to add spatialization to audio patches |
jmmmp | Collection of GUI and utility objects. Enhances user interface design in Pd patches |
mapping | Tools for mapping data (e.g., sensors to sound). Useful for interactive installations and performances |
These libraries provide additional objects and features that can enhance your projects and make it easier to work with sound synthesis, data visualization, and interactive installations.
1.4.4 Installing Pd Vanilla
The following is a step-by-step installation of Pd Vanilla, the official and minimal distribution of Pd, on Windows, macOS, and Linux systems.
1.4.5 Installing on Windows
1.4.5.1 Download the Installer
- Visit the official Pd website: https://puredata.info/downloads/pure-data
- Scroll down to the Windows section.
- Click the latest version link (e.g.,
pd-0.55-2.windows-installer.exe
).
1.4.5.2 Run the Installer
- Locate the downloaded
.exe
file in your Downloads folder. - Double-click to run the installer.
- Follow the installation wizard:
- Choose the installation location (default is fine).
- Allow the program to create a Start Menu shortcut.
1.4.5.3 Verify Installation
- After installation, open Pd from the Start Menu or desktop shortcut.
- The main Pd window should appear with a blank patch ready.
1.4.6 Installing on macOS
1.4.6.1 Download the Disk Image
- Visit: https://msp.ucsd.edu/software.html
- Scroll to the macOS section.
- Download the
.dmg
file (e.g.,Pd-0.54-1.dmg
).
1.4.6.2 Install the Application
- Open the downloaded
.dmg
file. - Drag the Pd icon into the
Applications
folder.
1.4.6.3 Open Pd
- Open your
Applications
folder. - Right-click (or Ctrl + click) the Pd icon and select Open.
- The first time, macOS may warn that the app is from an unidentified developer.
- Confirm to proceed.
1.4.6.4 Optional: Enable Audio Permissions
- If prompted, allow Pd to access the microphone.
- Open
System Preferences > Security & Privacy > Microphone
and ensure Pd is enabled.
1.4.7 Installing on Linux
Pd is available in the package repositories of most major Linux distributions. Below are instructions for popular systems.
1.4.7.1 Debian/Ubuntu-based Systems
sudo apt update
sudo apt install puredata
1.4.7.2 Fedora
sudo dnf install puredata
1.4.7.3 Arch Linux
sudo pacman -S puredata
1.4.7.4 Verify Installation
- Open a terminal and type
pd
. - The Pd GUI should launch, displaying a blank patch.
- If you encounter issues, check your package manager or consult the Pd community for troubleshooting.
1.4.8 Installing Externals
Pd’s functionality can be extended through the use of externals—additional libraries that provide new objects and features. These externals are created by the Pd community and can add everything from new audio effects to advanced data processing tools. Installing externals is straightforward thanks to Pd’s built-in package manager.
1.4.8.1 1. Open Pd
- Launch Pd on your computer.
- Make sure you are using the Vanilla version for best compatibility with the package manager.
1.4.8.2 2. Access the “Find Externals” Tool
- In the Pd menu, go to Help → Find Externals…
This opens the Deken package manager, which allows you to search for and install externals directly from within Pd.
1.4.8.3 3. Search for an External
- In the search bar, type the name of the external or library you want to install (for example,
zexy
,cyclone
, oriemlib
). - Press Enter or click the Search button.
- A list of matching externals will appear, showing available versions for your platform.
1.4.8.4 4. Install the External
- Click on the desired external in the list.
- Choose the version that matches your operating system and Pd version.
- Click Install.
- The external will be downloaded and placed in your Pd externals folder (typically
~/Documents/Pd/externals
on macOS and Linux, orC:\Users\<YourName>\Documents\Pd\externals
on Windows).
1.4.8.5 5. Add the External to Your Pd Path (if needed)
- Most externals are automatically available after installation.
- If Pd cannot find the external, you may need to add its folder to Pd’s search path:
- Go to Preferences → Path…
- Click New and add the path to the external’s folder (for example,
~/Documents/Pd/externals/cyclone
). - Click OK and restart Pd.
1.4.8.6 6. Use the External in Your Patch
In your patch, create an object with the name of the external’s library, followed by the object you want to use.
For example, to use thecounter
object from thecyclone
library:[cyclone/counter]
Some libraries require you to load them with a special object, such as
[declare -lib cyclone]
at the top of your patch.
1.4.8.7 7. Verify Installation
- If the object appears without errors (no red box), the external is installed correctly.
- If you see errors, double-check the installation path and that you are using the correct object/library name.
1.4.8.8 Manual Installation (Advanced)
If you need to install an external manually:
- Download the external from https://deken.puredata.info/ or the developer’s website.
- Extract the files to your Pd externals folder.
- Add the folder to Pd’s path as described above.
Tip: Always check the documentation for each external, as installation steps or requirements may vary.
For more details, see the official Pd documentation on externals.
1.4.9 Setting Up a Virtual MIDI Bus
Establishing a virtual MIDI bus allows MIDI messages to be routed between different applications on the same computer, or to create intricate internal MIDI configurations within applications. This setup is particularly useful for integrating software instruments, sequencers, or custom-built Pd patches into a single ecosystem, enabling real-time interaction across programs.
1.4.9.1 macOS
macOS provides a native solution for virtual MIDI routing through the IAC Bus (Inter-Application Communication Bus), a built-in MIDI driver that allows you to create multiple virtual MIDI ports.
To enable and configure the IAC Bus:
Open the Audio MIDI Setup application (found in
/Applications/Utilities
), then select Window → Show MIDI Studio from the top menu.In the MIDI Studio window, double-click the IAC Driver icon to open its configuration panel.
Enable the virtual bus by checking Device is online. This activates the driver.
You may rename the default port if desired, for better identification in your DAW or software environment.
To add additional virtual MIDI ports, click the + button. Each new bus functions as a separate virtual cable and can be independently addressed.
Once activated, these ports will appear as MIDI input and output options within your software (e.g., Pd, Live, Max), supporting the full range of MIDI messages including Note, Control Change, and MIDI Sync.
1.4.9.2 Windows
Unlike macOS, Windows does not include a built-in virtual MIDI bus. However, several reliable third-party tools are freely available:
- loopMIDI, developed by Tobias Erichsen, provides a robust solution for creating virtual MIDI ports and supports multiple concurrent buses. It is compatible with both 32-bit and 64-bit systems and is widely recommended for use with modern DAWs and programming environments.
- MIDI Yoke is a legacy solution bundled with MIDI-OX, offering basic virtual MIDI routing. However, MIDI Yoke is 32-bit only, and therefore not compatible with 64-bit software, including Live 10 and later. Use with caution and only in legacy setups.
When setting up virtual MIDI buses in Windows, ensure that your audio software and any MIDI-routing utilities are operating with compatible bit-depths and permissions. Proper driver installation and restart may be necessary to expose the new virtual ports in your system’s MIDI routing options.
Virtual MIDI buses are essential tools for building interactive sound systems, enabling communication between modular audio software, DAWs, and real-time instruments. Whether you are sending MIDI from Pd to a DAW, or routing control signals between applications, setting up a virtual MIDI infrastructure is a crucial foundational step.
Miller Puckette is a computer music researcher and the creator of Pd. He has been involved in the development of various software tools for music and multimedia, including Max/MSP and Pd. His work has had a significant impact on the field of computer music and interactive media. More information about Miller Puckette can be found on his website.↩︎