This folder contains example PD effects that demonstrate the mesh PD effect format.
- Create a folder in your
mesh-collection/effects/directory - The folder name becomes the effect ID (e.g.,
my-effect) - Create two required files:
metadata.json- Effect configuration and parameters{folder-name}.pd- The Pure Data patch (must match folder name)
mesh-collection/
effects/
externals/ # Shared PD externals (.pd_linux, .pd_darwin, .dll)
models/ # Shared model files (.ts, .onnx, etc.)
my-effect/
metadata.json # Effect metadata
my-effect.pd # Main patch file (must match folder name)
helper.pd # Optional: additional abstractions
{
"name": "Display Name",
"category": "Category",
"description": "Optional description",
"latency_samples": 0,
"sample_rate": 48000,
"requires_externals": ["nn~"],
"params": [
{
"name": "Param Name",
"min": 0.0,
"max": 1.0,
"default": 0.5,
"unit": "%"
}
]
}| Field | Required | Description |
|---|---|---|
name |
Yes | Display name shown in UI |
category |
Yes | Category for grouping (e.g., "Delay", "Filter", "Neural") |
description |
No | Brief description of the effect |
latency_samples |
Yes | Processing latency at the specified sample rate |
sample_rate |
No | Sample rate for latency calculation (default: 48000) |
requires_externals |
No | List of required PD externals |
params |
No | Up to 8 parameters for hardware knob mapping |
| Field | Required | Description |
|---|---|---|
name |
Yes | Parameter name |
min |
No | Minimum value (default: 0.0) |
max |
No | Maximum value (default: 1.0) |
default |
Yes | Default value (should be normalized 0-1) |
unit |
No | Display unit (e.g., "%", "ms", "Hz") |
Your patch MUST have:
inlet~/inlet~- Stereo audio input (left, right)outlet~/outlet~- Stereo audio output (left, right)
Your patch SHOULD receive parameters via:
r $0-param0throughr $0-param7- Normalized parameter values (0-1)r $0-bypass- Bypass state (0 = active, 1 = bypassed)
The $0 prefix is critical - it creates instance-scoped receives so multiple
instances of your effect can run independently.
#N canvas 0 0 400 300 12;
#X obj 100 50 inlet~;
#X obj 200 50 inlet~;
#X obj 100 200 outlet~;
#X obj 200 200 outlet~;
#X obj 100 100 *~;
#X obj 200 100 *~;
#X obj 300 100 r \$0-param0;
#X connect 0 0 4 0;
#X connect 1 0 5 0;
#X connect 4 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 4 1;
#X connect 6 0 5 1;
If your effect uses external objects (like nn~ for RAVE), list them in
requires_externals. Users must place the external files in:
effects/externals/folder
External file naming:
- Linux:
external~.pd_linux - macOS:
external~.pd_darwin - Windows:
external~.dll
For neural audio effects using RAVE:
- Place
nn~external ineffects/externals/ - Place your
.tsmodel file either:- In
effects/models/(shared) - In your effect folder (bundled)
- In
- Reference the model in your patch:
nn~ my_model.ts encode
See rave-percussion/ for a complete example.
Effects are discovered at mesh startup. To add new effects:
- Place the effect folder in
mesh-collection/effects/ - Restart mesh
Effects with missing dependencies (externals) will be marked unavailable but still shown in the effect list.