Config reference
Every preset patch-press exports is described by a YAML file. Scan commands write these for you; the schema is documented here for when you need to hand-tune one.
A minimal config only has to specify what to sample (source) and what to call it (output.name). Everything else — capture range, analysis flags, normalization — has a default (either from the profile you selected or from the code’s built-in fallback).
Anatomy
profile: synth # optional; merges profile defaults first
category: synth # optional; usually set by the profile
source: … # required — see below
capture: … # optional overrides for capture range/timing
analysis: … # optional overrides for the analysis pipeline
output:
name: MyPreset # required — used in filenames and XML
wavetable: … # only present for wavetable presets
Load order: built-in defaults ← profile file ← config file. Every key in your config overrides the profile.
source
Exactly one of the four source types.
VST
source:
type: vst
plugin: /path/to/Plugin.vst3 # required
preset: "Warm Pad" # optional; documentation only when raw_state is set
raw_state: "<base64 blob>" # main path; captured by patch-probe
CLAP
source:
type: clap
plugin: /path/to/Plugin.clap # required
plugin_id: "com.example.plugin" # required
preset: "Warm Pad" # optional
preset_path: /path/to/warm.clap-preset # optional
raw_state: "<base64 blob>" # optional; if set, bypasses preset_path
Library
source:
type: library
path: /path/to/folder-or-file # required
filename_pattern: "regex" # optional; override default note-parsing regex
note: 60 # optional; pin the MIDI root for a single-file source
drumkit: false # true when path is a flat folder of drum one-shots
files: # optional; explicit file list (kit assembly)
- /path/to/hit1.wav
- /path/to/hit2.wav
The files list is used by assemble-kits — when set, the file list is the source of truth and path is retained for provenance.
Wavetable
source:
type: wavetable
path: /path/to/wavetable.wav
capture
Controls how VST/CLAP plugins are played — how many notes, how loudly, for how long. Library sources ignore most of these (the library already IS the capture) but still use tempo_bpm.
| Key | Type | Default | What it does |
|---|---|---|---|
note_range |
[int, int] |
[36, 96] (usually overridden by profile) |
MIDI range to capture. |
note_step |
int |
3 |
Semitones between captured notes. 1 = every note, 12 = every octave. Drums profile uses 1. |
velocities |
list[int] |
[100] |
MIDI velocities to capture. Drums profile uses [64, 100, 127]. scan-from-probe/scan-clap write [40, 90, 127] here when they measure the preset’s timbre (not just its loudness) actually changing with velocity — see analysis/velocity.py and the velocity_shift value in the config’s own # meta comment. Only Bento’s SampInst ships the extra layers as real zones; every other format still collapses to one sample per note regardless, so this is a no-op capture-time cost for them. |
round_robins |
int |
1 |
Number of consecutive captures per (note, velocity). Drums profile uses 3. |
duration_s |
float |
4.0 |
Note hold length in seconds. Pad profile uses 8, pluck uses 2. |
release_tail_s |
float |
2.0 |
Post note-off recording time. Pad uses 5. |
tempo_bpm |
float |
120.0 |
Tempo the plugin is told; also used by loop / envelope BPM-snap detection. |
sample_rate |
int |
48000 |
44100 / 48000 / 96000. |
mono |
bool |
false |
Capture one channel instead of two. Set by the scan when the preset renders the same signal to both channels (see CLAP plugins); flip it to false to force stereo. |
analysis
Controls the analysis pipeline.
| Key | Type | Default | What it does |
|---|---|---|---|
trim |
bool |
true |
Enable silence trim. |
pitch_verify |
bool |
true |
Enable pitch verification. Drums profile sets this false. Auto-skipped for VST/CLAP regardless. |
pitch_tolerance_cents |
float |
50.0 |
Max cents deviation before a sample is flagged out-of-tune. |
loop |
bool |
false |
Whether this preset loops at all. Enabled by pad and synth profiles. |
loop_detect |
bool |
true |
Whether loop points may be derived when the source carries none of its own. false = authored loops only (a WAV smpl chunk, a Bitwig zone); a sample without one ships as a one-shot. Written as false by the scan commands for any library that ships smpl loops — see --loop-detect. |
loop_use_tempo |
bool |
false |
Include BPM-synced candidates in the loop search. |
loop_quality_threshold |
float |
0.75 |
Minimum score for a candidate to be accepted. |
loop_crossfade_ms |
float |
(unset) | Crossfade duration at the loop seam, for detected loops. Unset (default) = adaptive: chosen per note from the fundamental period and the residual seam discontinuity (a fixed millisecond value is wrong across the register — too short to cover one cycle on bass, needlessly long on treble). Set a number to force a fixed length. Authored loops (WAV smpl chunks, Bitwig .multisample) ignore this and keep their own fade. |
tempo_bpm |
float? |
none | Overrides capture.tempo_bpm for analysis-only tempo decisions (leave unset unless you want them different). |
normalize |
str |
per_set |
per_sample, per_set, or none. Scan commands write none (with trim: false) for melodic library sources, so their WAVs reach the card unmodified — see --audio. |
classify_drums |
bool |
false |
Run filename-keyword drum classification. Enabled by drums profile. |
output
output:
name: MyPreset # required
subfolder: "1 BASS" # optional: on-card subfolder tree under the collection
folder: "Bass - MyPreset" # optional, Bento only: the flat patch folder name, verbatim
output.name is what the preset is called. It becomes the XML filename, the SAMPLES subfolder, and the display name inside Deluge browsers. Spaces and slashes are sanitized to underscores.
output.subfolder mirrors the source’s own organisation (a u-he bank, a library’s category folder) as directories under the collection — on the Deluge and Polyend as real subdirectories, on the Bento folded into the one flat folder name.
output.folder is Bento-specific: the patch folder name under SampInst/OneShots/Wavetable, used as-is. Normally unset — the exporter derives a short name from collection + subfolder + name, and patch-press batch names its whole set together so two presets that shorten alike are told apart, writing the choice here in memory. A driver that builds a corpus across several batches persists the set-wide assignment into this field so every per-preset lookup agrees (prepare-sd-cards does); it is also the manual override for a clash nothing automatic resolves. See docs/outputs/bento.md, “Fitting the row”.
wavetable
Only present in wavetable configs. Every 0–1 parameter is a plain fraction that the exporter maps into the Deluge’s signed-32-bit param range.
| Key | Type | What it does |
|---|---|---|
archetype |
str |
sustaining / evolving / percussive (envelope + filter shape) |
tag_hint |
str |
drone / evolving / bass / lead / pad — browser tag only, no effect on the sound |
wt_position |
float |
Starting frame index (0.0 = first, 1.0 = last). |
lfo2_rate |
float |
LFO2 speed (drives the wavetable position sweep). |
lfo2_depth |
float |
How much of the table LFO2 sweeps (0–1). Written as a patch-cable amount (0 to +50 on the Deluge), not a param. |
filter_cutoff |
float |
Initial low-pass cutoff. |
attack / decay / sustain / release |
float |
Amp-envelope shape. |
filter_type |
str |
lpf (only mode currently). |
The archetype’s canned parameter block is what scan-wavetables writes; you can edit any field independently.
performance
How the preset is meant to be played, rather than how it sounds. scan-clap writes it from a u-he .h2p’s voice settings and Usage: note (see CLAP plugins); it is omitted when everything is at its default.
| Key | Type | Default | What it does |
|---|---|---|---|
voice_mode |
str |
poly |
poly / mono / legato |
glide |
float |
0.0 |
Glide time, 0–1 fraction of the plugin’s glide knob. 0 = none. |
mod_wheel |
str |
unset | vibrato / darken / brighten: what the author says the wheel does. |
aftertouch |
str |
unset | vibrato |
An output only acts on what it can reproduce; see each output’s page.
Profiles
Profiles are pre-shipped bundles of capture and analysis defaults that get merged in when you set profile: in your config. Scan commands set the profile automatically; you can override with --profile.
| Profile | Category | Note range | Step | Velocities | RR | Duration | Loop | Normalize |
|---|---|---|---|---|---|---|---|---|
pluck |
synth | 21–108 | 3 | [100] |
1 | 2 s | off | per_set |
synth |
synth | 21–108 | 3 | [100] |
1 | 4 s | on | per_set |
pad |
synth | 24–96 | 3 | [100] |
1 | 8 s | on + tempo | per_set |
drums |
drum | 21–108 | 1 | [64, 100, 127] |
3 | 2 s | off | per_sample |
Auto-selection maps sustain classification to profile:
- pluck →
pluck - sustained (short) →
synth - sustained_with_modulation or long sustained →
pad - kit or drumkit library type →
drums
Override with --profile on any scan command, or with profile: in the YAML.
Example configs
Under examples/ in the repo:
examples/dexed_first.yaml— a VST preset.examples/diva_warmth.yaml— a VST pad with a loop.examples/drum_kit.yaml— a library kit.