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 - Linux —
bitcrust(in~/.local/binafterbin/install.sh) - Windows —
C:\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> --helpThe top-level commands are:
| Command | Purpose |
|---|---|
info | Print build and environment information |
params | List and inspect APVTS parameters |
preset | List, inspect, validate, and diff presets |
render | Render 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 infoUse 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]| Option | Purpose |
|---|---|
-v, --verbose | Show range, default, and display name alongside the ID |
--group PREFIX | Filter by parameter ID prefix (e.g. voice1_, fx_slot2_) |
--format text | json | Machine-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 jsonpreset
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 intojq.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
| Option | Purpose |
|---|---|
-p, --preset NAME | Preset name to load (required unless --all-presets) |
--all-presets | Batch mode — render every factory preset into <dir> |
--group NAME | In batch mode, restrict to one preset group (e.g. --group Lead) |
What to play
| Option | Default | Purpose |
|---|---|---|
-m, --midi FILE | — | MIDI file input (overrides --note/--chord) |
--track N | merge all | Pick a specific track in the MIDI file |
--note NOTE | C3 | Single note, scientific pitch (C3, F#4…) |
--chord N1,N2,… | — | Comma-separated chord, e.g. C3,E3,G3 |
--velocity N | 100 | MIDI velocity 1–127 |
--duration DUR | 2s | Note-on length (s / ms / beats) |
--tail DUR | 1s | Post-note-off tail captured in the render |
--tempo BPM | 120 | Host BPM used by the arp, sequencer, and MIDI |
Output format
| Option | Default | Purpose |
|---|---|---|
-o, --output P | — | WAV file (single preset) or directory (--all-presets). Required. |
--sample-rate HZ | 44100 | Render sample rate |
--bit-depth N | 24 | 16 or 24 bit PCM |
--block-size N | 512 | Processing 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— success1— 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 jsonoutput throughjqfor structured queries. - Pair
bitcrust render --all-presetswith a small post-process script to tag and organise renders into your sample library. bitcrust preset validateis a lightweight pre-commit hook if you version user presets alongside a project.