Plugin wrapper around Pure Data to allow patching in a wide selection of DAWs.
plugdata is a plugin wrapper for Pure Data, featuring a new GUI made with JUCE. This is still a WIP, and there are probably still some bugs. By default, it ships with the ELSE collection of externals and abstractions. The aim is to provide a more comfortable patching experience for a large selection of DAWs. It can also be used as a standalone replacement for pure-data.
This fork adds pd-repente — describe what you want to hear. A working Pure Data patch appears on the canvas and plays immediately.
pd-repente embeds a prompt bar directly into plugdata. Type a musical idea in plain language — "a filtered noise burst with slow attack" — and a valid Pure Data patch is generated, placed on the canvas, and starts running. No switching windows, no copy-pasting.
The LLM is context-aware: every request includes the current canvas state as a system message, so the model knows what is already on the canvas. Conversation history is maintained across turns — say "now add reverb" and it knows what "it" refers to. History persists across restarts.
pd-repente is local-first: works with any OpenAI-compatible server — Ollama, llama-server, LM Studio, or the OpenAI API — and defaults to localhost.
- Natural language → patch — free text → LLM → pd patch, pds commands, or Lua, auto-detected and executed
- Context-aware + multi-turn — canvas injected as system message; prior exchanges included each turn
- Analysis mode —
/analyze <question>asks the LLM about the patch; nothing executed - Merge mode — toggle in prompt bar; generated patches merge into current canvas instead of new tab
- pd-script REPL —
/pds create / connect / delete / move / listdirectly manipulate canvas objects - Sugar syntax —
@osc~,~filter~,-> dac~,$lastshortcuts - Lua scripting —
{ }blocks run inline Lua with fullpds.*API - Object Tree Panel — sidebar shows all canvas objects grouped by type (DSP / UI / Control)
- Persistent config — LLM URL, model, API key, merge mode, and conversation history stored across restarts
git clone --recursive https://github.com/dobidu/plugdata.git
cd plugdata
cmake -S . -B build -G Ninja
cmake --build build --target plugdata_standalone_Standalone -j$(nproc)Connect an LLM:
/config url http://localhost:11434 # Ollama running locally
/config model llama3.2
/config test # verify connection
Make sound:
make a sine wave at 440 Hz connected to output
A patch with osc~ 440 → dac~ appears and plays.
| Command | Description |
|---|---|
<free text> |
Send to LLM; canvas state + history injected automatically |
/analyze <question> |
Ask LLM about the patch — text only, no execution |
/history |
Show conversation turn count |
/history clear |
Wipe conversation history |
/pds <cmd> |
pd-script REPL (create / connect / delete / move / list) |
/config |
Show / set LLM settings (url / model / key / test) |
/canvas |
Print serialized canvas state (debug) |
/help [topic] |
Help topics: pds · sugar · lua · llm · commands · builtin |
/clear |
Clear console |
| Phase | Status | Description |
|---|---|---|
| 01 — Foundation | ✓ Done | CI matrix (Win/Mac/Linux), PromptBar, baseline tests |
| 02 — pd-script REPL | ✓ Done | REPL engine, sugar syntax, ObjectTreePanel, Lua+pds API |
| 03 — Repente Bridge | ✓ Done | HTTP client, LLM → patch, /config, SettingsFile persistence |
| 04 — Bidirectionality | In progress | Canvas context injection, /analyze, merge mode, multi-turn history |
| 05 — V1.0 Polish | Planned | Auto-layout, clickable object tree, Ollama auto-detect, public release |
Full feature documentation: apps/pd-repente/README.md
Join the Discord here, for sharing patches, reporting issues or requesting features: https://discord.gg/eT2RxdF9Nq
-Windows:
- Get the installer from the latest official release
-MacOS:
- Option 1: Get the installer from the latest official release
- Option 2: Install the homebrew cask. I do not maintain this so it may be outdated.
-Linux:
-
Option 1: OBS repository/packages The repository contains the packages plugdata, plugdata-vst3 and plugdata-lv2 (lv2-plugdata and vst3-plugdata on some distros). If you get a package without the repo, it will only contain the standalone version.
- Plugin versions can be found here:
-
Option 2: Arch User Repository (Arch only). Has the plugdata-bin package for the latest stable version, or the plugdata-git package for the latest experimental build.
-
Option 3: Get the binaries from the latest official release
You can also download a recent experimental build from our website
git clone --recursive https://github.com/plugdata-team/plugdata.git
cd plugdata
mkdir build && cd build
cmake .. (the generator can be specified using -G"Unix Makefiles", -G"XCode" or -G"Visual Studio 16 2019" -A x64)
cmake --build .
Important:
- plugdata requires cmake 3.21 or later to build CLAP plugins. If you use an older version of cmake, CLAP plugin builds will be disabled.
- Ensure that the git submodules are initialized and updated! You can use the
--recursiveoption while cloning orgit submodule update --init --recursivein the plugdata repository . - On Linux, Juce framework requires to install dependencies, please refer to Linux Dependencies.md and use the full command.
- The CMake build system has been tested with Unix Makefiles, XCode, Visual Studio 17 2022 and Visual Studio 16 2019
- Extra build options:
- -DQUICK_BUILD=1 will skip objects that take a long time to compile (All Gem objects, sfz~ and ffmpeg based audio players)
- Gem, sfz~ and ffmpeg can also be disabled separately by passing "-DENABLE_GEM=0", "-DENABLE_SFIZZ=0", "-DENABLE_FFMPEG=0"
- You can enable Google Perfetto performance tracing library by passing -DENABLE_PERFETTO=1. This blog post gives more insight on how to use it.
- To trace function calls and get performance information, add
TRACE_COMPONENT()to function bodies you want. - A faster way is a Python 3 script
Resources/Scripts/add_perfetto_tracepoints.pythat will addTRACE_COMPONENT()calls to matched function bodies in provided.cppfiles. This means you don't have to addTRACE_COMPONENT()everywhere by hand. To use the script you must have a recentllvm(>= 19.1.3) and compatiblelibclangpackage installed. - Recommended compiling with
Releasemode on for most accurate profiling information.
- To trace function calls and get performance information, add
You can use externals inside plugdata's plugin version by recompiling the externals along with plugdata. This can be achieved by making the following modification to plugdata:
- Add your sources to the "externals" target inside Libraries/CMakeLists.txt. Alternatively the source files can be placed inside the Libraries/ELSE/Source folder, as all .c files in that folder will be compiled automatically.
- In Source/Pd/Setup.cpp, add the setup function for your external. The best place to call your setup function is inside libpd_init_pdlua. initialiseELSE and initialiseCyclone will also work, but it has the side-effect that the externals will also be available under the else/* and cyclone/* prefix.
This project uses the JUCE framework, which is licensed under the GNU Affero General Public License (AGPL-3.0). Because of this, the compiled application (the full program built with JUCE) is distributed under the terms of the AGPL-3.0.
The plugdata source code that is directly included in this repository (not in any third-party submodule) is licensed under the regular GPL-3.0
Third-party components (pure-data, pd-else, pd-cyclone, pd-lua, libwebp, liblzma, heavylib, fftw3, ffmpeg, sfz~ and many more) included with plugdata are licensed under their own respective licenses.
- Logo designed by Joshua A.C. Newman, executed by Bas de Bruin
- Camomile by Pierre Guillot
- ELSE by Alexandre Torres Porres
- cyclone by Krzysztof Czaja, Hans-Christoph Steiner, Fred Jan Kraan, Alexandre Torres Porres, Derek Kwan, Matt Barber and others (note: Cyclone is included to offer an easy entry point for Max users but ELSE contains several alternatives to objects in Cyclone and Pure Data Vanilla itself also has some alternatives. Not only that, but objects that weren't cloned into Cyclone also have alternatives in ELSE, see: this)
- pd-lua by Claude Heiland-Allen, Albert Graef, and others
- Pure Data by Miller Puckette and others
- libpd by the Peter Brinkmann, Dan Wilcox and others
- Heavy/hvcc originally by Enzien Audio, maintained and modernised by Wasted Audio
- Juce by Raw Material Software Ltd.
- Inter font by Rasmus Andersson


