Skip to content

Repository files navigation

patch-press

Captures VST/CLAP plugin presets and sample libraries and exports ready-to-play presets for hardware samplers — Synthstrom Deluge (XML + WAV) or Polyend Tracker (self-contained .pti), picked with --format. The goal is zero manual YAML writing — scan commands auto-generate configs from patch-probe output, CLAP plugin directories, or sample library folders. YAML files are the escape hatch when auto-detection needs a nudge.

Full docs: https://blablack.github.io/patch-press/

Prerequisites

  • Python ≥ 3.14
  • patch-render — companion JUCE-based audio host that drives VST/CLAP rendering
  • A target output location: a Deluge SD card, a Polyend Tracker SD card, or a directory laid out like either (see Output layout)

Installation

pip install -e .

Workflows

Every workflow below ends the same way: batch/sample with --format deluge or --format pti. Examples use deluge; swap the flag (and --path) for a Polyend Tracker .pti instrument instead — see Output layout.

VST presets (via patch-probe)

Use patch-probe to capture raw preset states from the plugin GUI, then:

# Generate one config per preset
patch-press scan-from-probe ~/patch-probe/Dexed configs/Dexed
# Export all presets to the SD card
patch-press batch "configs/Dexed/*.yaml" --path /media/DELUGE/SYNTHS/Dexed --format deluge

CLAP presets

# Scan plugin presets (plugin ID is auto-discovered)
patch-press scan-clap /usr/lib/clap/MyPlugin.clap ~/presets/MyPlugin configs/MyPlugin
# Export
patch-press batch "configs/MyPlugin/*.yaml" --path /media/DELUGE/SYNTHS/MyPlugin --format deluge

Sample library

# Multisample: subfolders contain per-note WAVs
patch-press scan-library "~/samples/Mini From Mars" configs/Mini --type multisample
# Kit: subfolders are instruments, WAVs inside are round-robin layers
patch-press scan-library "~/samples/808 Kit" configs/808 --type kit
# Export
patch-press batch "configs/Mini/*.yaml" --path /media/DELUGE/SYNTHS/Mini --format deluge

Bitwig multisample

# One .multisample archive (ZIP of WAVs + multisample.xml) per preset, searched recursively.# Root notes and loops are read from the XML — no filename parsing or loop detection.
patch-press scan-bitwig "~/Downloads/Orchestral Tools" configs/OrchestralTools
# Export
patch-press batch "configs/OrchestralTools/**/*.yaml" --path /media/DELUGE --format deluge

Commands

CommandPurpose
sample <config.yaml>Run the full pipeline for one config
batch <configs/*.yaml>Run all configs, skip existing outputs
scan-from-probe <probe-dir> <config-dir>Generate configs from patch-probe YAMLs
scan-clap <plugin.clap> <preset-dir> <config-dir>Generate configs from CLAP preset files
scan-library <folder> <config-dir>Generate configs from a sample library
scan-bitwig <folder> <config-dir>Generate configs from Bitwig .multisample archives (recursive)
classify <configs/*.yaml>Print sound type classification without exporting
profilesList available profiles

Global flags:-v (verbose progress), --debug (limit scans to 5 items for quick testing)

Scan options

All scan commands accept:

OptionDefaultDescription
--profileautoOverride profile: pluck / synth / pad / drums
--note-step3Semitones between captured notes (1 = every note, 12 = one per octave)
--duration15.0Sustain capture duration in seconds
--sample-rate4800044100 / 48000 / 96000 — VST/CLAP only
--probe-note60MIDI note used to detect sustain type
--probe-velocity100Velocity used when probing
--tempo-bpm120Tempo used for rhythm detection

Batch options

OptionDefaultDescription
--path PATHrequiredOutput root directory
--format FORMATrequiredOutput format: deluge or pti
--workers N1Parallel analysis threads
--no-skipRe-run even if output already exists

Profiles

Profiles set capture timing and analysis defaults. Scan commands auto-detect the best profile by analysing a few representative notes — override with --profile when needed.

ProfileUse forDurationLoopVelocitiesRR
synthGeneral melodic4 sno[100]1
padSustained, evolving pads8 syes[100]1
pluckShort transients2 sno[100]1
drumsDrum kits2 sno[64, 100, 127]3

Config YAML reference

Scan commands write these automatically. Edit to override any auto-detected value.

profile: synth # baseline defaults — pluck / synth / pad / drumssource:
type: vst # vst | clap | libraryplugin: /path/to/Plugin.vst3preset: "Preset Name"raw_state: "<base64>"# state blob captured by patch-probe; bypasses preset lookupcapture:
note_range: [36, 96] # MIDI note rangenote_step: 3# semitones between captured notesvelocities: [100] # which velocities to captureround_robins: 1# max round-robin layers per noteduration_s: 4.0# note hold durationrelease_tail_s: 2.0# recording time after note offsample_rate: 48000# 44100 | 48000 | 96000analysis:
trim: trueloop: false # attempt loop-point detectionloop_quality_threshold: 0.75normalize: per_set # per_sample | per_set | noneoutput:
name: MyPreset # preset name used in the exported preset and its file paths

Library configs use source.type: library with source.path instead of plugin/preset fields.

Output layout

--format deluge

<--path>/
MyPreset.xml
SAMPLES/
<dir name>/
MyPreset/
note036_T120_V100_RR1.wav
note039_T120_V100_RR1.wav
...

Copy the output directory to the matching location on the SD card (SYNTHS/ or KITS/).

--format pti

Flat — one self-contained .pti file per preset, no companion WAVs:

<--path>/
MyPreset.pti

Copy anywhere on the Tracker's SD card and load from the file browser. Multisamples and kits each collapse to the single sample nearest the preset's root note (the .pti format has no keyzones); see docs/outputs/polyend.md for the full mapping and hardware caveats.

Library filename conventions

Note and round-robin index are parsed from WAV filenames anywhere in the stem:

  • A3.wav → note A3
  • C#2_0001.wav → note C#2, round-robin 1
  • Mini_Patch_A#0_0001.wav → note A#0, round-robin 1

When numbered round-robin files exist for a note, unnumbered base files for the same note are ignored.

About

Capture VST/CLAP plugin presets and sample libraries, then export them into Synthstrom Deluge or Polyend Tracker presets.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages