Bitcrust / Manual

CLI usage

The Bitcrust Standalone binary doubles as a command-line interface. Run it with no arguments to open the GUI app; run it with a subcommand to drop into headless CLI mode — useful for scripting, CI, offline rendering, and preset validation.

The CLI is embedded in the same binary that hosts the Standalone plugin; there is no separate download or install step beyond the regular installer.

Invocation

The binary name depends on the platform:

  • macOS/Applications/Bitcrust.app/Contents/MacOS/Bitcrust
  • Linuxbitcrust (in ~/.local/bin after bin/install.sh)
  • WindowsC:\Program Files\Bitcrust\bitcrust.exe

Examples below use bitcrust as a shorthand; substitute the full path for your platform (or add the install dir to your PATH).

bitcrust <command> [options]
bitcrust --help
bitcrust <command> --help

The top-level commands are:

CommandPurpose
infoPrint build and environment information
paramsList and inspect APVTS parameters
presetList, inspect, validate, and diff presets
renderRender a preset to a WAV file (offline)

info

Prints the Bitcrust build version, JUCE version, plugin format support, sample rate / block size defaults, and other environment info. No options.

bitcrust info

Use it as a sanity check that the binary runs and reports the version you expect.

params

Lists every parameter exposed through the JUCE AudioProcessorValueTreeState (APVTS) — the same parameters the GUI exposes, the same the host automates.

bitcrust params [--verbose] [--group PREFIX] [--format text|json]
OptionPurpose
-v, --verboseShow range, default, and display name alongside the ID
--group PREFIXFilter by parameter ID prefix (e.g. voice1_, fx_slot2_)
--format text | jsonMachine-readable JSON or human-readable text (default text)
# Every parameter ID
bitcrust params

# Only VCO 1 parameters, verbose
bitcrust params --verbose --group voice1_

# Machine-readable for a scripted rig
bitcrust params --format json

preset

Works with factory and user presets. Has four subcommands:

bitcrust preset list     [--group G] [--tag T] [--format text|json]
bitcrust preset show     <name>     [--format text|json]
bitcrust preset validate <path>
bitcrust preset diff     <name1> <name2>
  • list — enumerate available presets, optionally filtered by group (Bass, Lead, …) or by tag (see the Tag vocabulary in Presets).
  • show — print every parameter value for a preset. Good for ad-hoc inspection or for piping into jq.
  • validate — load a user preset XML from <path> and report whether it parses, whether all referenced parameters exist, and whether its tags and group string match the controlled vocabulary.
  • diff — print parameter-level differences between two presets, handy when tracing “what changed?” between A/B snapshots or between two of your own saves.
# List leads, JSON
bitcrust preset list --group Lead --format json

# Dump one preset
bitcrust preset show "Classic Saw Lead"

# CI gate: fail if a user preset is malformed
bitcrust preset validate my-patch.xml

# Compare two factory presets
bitcrust preset diff "Classic Saw Lead" "PWM Lead"

render

Renders a preset to a WAV file offline — no audio device needed. Plays a note (or chord, or a supplied MIDI file), captures the output, writes the WAV.

bitcrust render -p <preset> -o <path> [options]
bitcrust render --all-presets -o <dir>  [options]

Input

OptionPurpose
-p, --preset NAMEPreset name to load (required unless --all-presets)
--all-presetsBatch mode — render every factory preset into <dir>
--group NAMEIn batch mode, restrict to one preset group (e.g. --group Lead)

What to play

OptionDefaultPurpose
-m, --midi FILEMIDI file input (overrides --note/--chord)
--track Nmerge allPick a specific track in the MIDI file
--note NOTEC3Single note, scientific pitch (C3, F#4…)
--chord N1,N2,…Comma-separated chord, e.g. C3,E3,G3
--velocity N100MIDI velocity 1–127
--duration DUR2sNote-on length (s / ms / beats)
--tail DUR1sPost-note-off tail captured in the render
--tempo BPM120Host BPM used by the arp, sequencer, and MIDI

Output format

OptionDefaultPurpose
-o, --output PWAV file (single preset) or directory (--all-presets). Required.
--sample-rate HZ44100Render sample rate
--bit-depth N2416 or 24 bit PCM
--block-size N512Processing block size

Parameter overrides

--param KEY=VALUE (repeatable) overrides an APVTS parameter for this render after the preset loads. Use bitcrust params to discover the keys.

Examples

# Quick audition of one preset at C3
bitcrust render -p "Classic Saw Lead" -o lead.wav

# A chord with more tail
bitcrust render -p "PWM Strings" --chord C3,E3,G3 --duration 4s --tail 3s \
                -o strings.wav

# Drive a preset from a MIDI file at 92 BPM, 48 kHz
bitcrust render -p "FM Sub" -m bassline.mid --tempo 92 --sample-rate 48000 \
                -o bassline.wav

# Override parameters on top of a preset
bitcrust render -p "Wobble Bass" \
                --param voice1_cutoff=0.7 \
                --param fx_slot1_enabled=1 \
                -o wobble.wav

# Batch-render every lead into a folder
bitcrust render --all-presets --group Lead -o renders/leads/

Batch mode is useful for building preset demo reels, smoke-testing after a DSP change, or producing A/B regression corpora against a reference build.

Exit codes

  • 0 — success
  • 1 — any error (bad flag, missing required argument, preset not found, output path unwritable, MIDI file invalid, validation failure)

Scripts can branch on $? / %ERRORLEVEL% for CI gates.

Tips

  • Pipe --format json output through jq for structured queries.
  • Pair bitcrust render --all-presets with a small post-process script to tag and organise renders into your sample library.
  • bitcrust preset validate is a lightweight pre-commit hook if you version user presets alongside a project.