Skip to content

CLI Commands ​

The per-command reference for the sonare CLI: what each command does, its options and defaults, and what it prints. Global options, exit codes, stereo handling and the list of which CLI carries which command are on the CLI Reference. Whole shell workflows are on CLI Examples.

Which command for which task ​

I want to...CommandWhere
Get tempo, key and a full summaryanalyze, bpm, key, beatsAnalysis Commands
Find verses, choruses and other sectionssections, boundariessections, boundaries
Read the chord progressionchordschords
Measure loudnesslufs, dynamics; meter (native only)More analysis
Summarize spectral featuresmel, chroma, spectralFeature Commands
Track a melody or list a singer's notespitch, vocal-notespitch, Scale correction and vocal notes
Split a mix into partshpss, decompose-stemshpss, decompose-stems
Turn audio into a MIDI filetranscribeCLI Examples
Fix a damaged recordingrepair, decliprepair
Master a track for deliverymastering, master, eqMastering and Repair
Change pitch, tempo or level of a filepitch-shift, time-stretch, normalize, trim-silenceEditing
Cut a take at its silencessplit-silencesplit-silence
Estimate or simulate a roomacoustic, estimate-room, synthesize-rir, room-morphRoom commands
Mix stems into a scenesuggest-mix, mix, mix-stripMixing Workflow
Render a project or MIDI through the synthproject bounce, midi-renderSynthesis
Render movie audio to speakers or headphonesplaybackPlayback Renderer
Check a number or a conversionpower-to-db, frames-to-samples, ...CLI Utilities

Analysis Commands ​

analyze ​

Full music analysis including BPM, key, time signature, and beats.

bash
sonare analyze music.mp3
sonare analyze music.mp3 --json
OptionDefaultDescription
--with-seventhoffSearch the full chord template set instead of triads only
--no-hpssoffDisable harmonic-percussive separation
--chroma-highpass80.0High-pass cutoff for chroma analysis in Hz
--meter-candidates3,4,6Comma-separated meter numerators to score
--meter-denominator4Beat unit reported for the detected meter

Without --with-seventh, chord recognition matches against major, minor, diminished, and augmented triads only. With it, all 24 qualities per root are in play — the sevenths and ninths, the sixths, 7sus4, the elevenths and thirteenths, and the altered dominants.

The meter search only ever reports a numerator it was asked to score, and the default set is 3,4,6 — so a 5/4, 7/8, or 11/8 piece comes back as one of those three unless you widen the set with --meter-candidates 3,4,5,7. The list takes 1 to 16 entries, each between 2 and 32. --meter-denominator sets the beat unit the result is reported in and does not affect the search. See Meter and grouping for what the two numbers mean.

Output:

  > Estimated BPM : 120.50 BPM  (conf 95.0%)
  > Estimated Key : C major  (conf 85.0%)
  > Time Signature: 4/4
  > Beats: 240

With --json, analyze prints one object holding every result above plus timbre, dynamics, rhythm and form; its fields are walked through under The analyze JSON.

bpm ​

Detect tempo (BPM) only.

bash
sonare bpm music.mp3
sonare bpm music.wav --json

Output:

  BPM: 128.00

key ​

Detect musical key.

bash
sonare key music.mp3
sonare key music.mp3 --json
sonare key music.mp3 --candidates 5 --profile temperley --modes major-minor

Output:

  Key: A minor (confidence: 82.0%)

JSON Output:

json
{"root": 9, "mode": 1, "confidence": 0.82, "name": "A minor"}

Useful options:

OptionUse
--candidates NShow the top N ranked key candidates, not only the winner
--use-hpssAnalyze harmonic content for cleaner key detection on drum-heavy material
--loudness-weightedWeight chroma frames by RMS so quieter passages contribute less
--high-pass-hz FREQIgnore low-frequency energy before key analysis
--modes NAMELimit candidate modes
--profile NAMEChoose the key-profile family
--genre-hint HINTLet the CLI choose a profile from a genre hint
What are key profiles, genre hints, and --high-pass-hz?
  • Key profile — a template of how prominent each of the 12 pitch classes tends to be in a given key. The detector compares your song's chroma against these templates and picks the best match. Different families (ks / krumhansl, temperley, shaath / keyfinder, the Faraldo EDM profiles, bellman / bellman-budge) were tuned on different material, so one may fit your genre better than another.
  • Genre hint — instead of naming a profile directly, you tell the CLI the rough style and it picks a matching profile for you (e.g. an EDM hint selects an EDM-tuned profile).
  • --high-pass-hz — a high-pass filter removes energy below the given frequency before key analysis, so bass rumble or sub kick doesn't skew the chroma. A value like 80–120 Hz is typical.

beats ​

Detect beat times.

bash
sonare beats music.mp3
sonare beats music.mp3 --json

Output:

  Beat times (240 beats):
    1. 0.520s
    2. 1.020s
    3. 1.520s
    ... (237 more)

onsets ​

Detect onset times (note attacks).

bash
sonare onsets music.mp3
sonare onsets music.mp3 --json

sections ​

Split a song into sections (intro, verse, chorus and so on) and name its overall form. See Section structure for what the labels mean.

bash
sonare sections music.mp3
sonare sections music.mp3 --json
OptionDefaultDescription
--min-duration4.0Shortest section to keep, in seconds
--threshold0.3Native CLI only. Boundary detection threshold
--n-fft, --hop-length2048, 512Analysis framing

JSON Output:

json
{"form": "?", "count": 1, "sections": [{"type": "unknown", "start": 0, "end": 6, "energy": 1, "confidence": 0}]}

form is the overall pattern as letters, or ? when no repeated structure was found. count is the number of entries in sections, each with its type, start and end in seconds, energy and confidence.

Feature Commands ​

mel ​

Compute a Mel spectrogram and print its dimensions.

bash
sonare mel music.mp3
sonare mel music.mp3 --n-mels 80
sonare mel music.mp3 --fmin 40 --fmax 16000 --htk
OptionDefaultDescription
--fmin FREQ0Lowest Mel-band frequency in Hz
--fmax FREQ0Highest Mel-band frequency in Hz; 0 uses the Nyquist frequency
--htkoffUse the HTK Mel scale instead of the Slaney scale

Output:

  Mel Spectrogram:
    Shape: 128 mels x 8520 frames

chroma ​

Compute chromagram (pitch class distribution).

bash
sonare chroma music.mp3
sonare chroma music.mp3 --json

Output:

  Chromagram: 12 bins x 8520 frames
  Mean energy per pitch class:
    C  0.1250 #############
    C# 0.0450 #####
    D  0.0820 ########
    ...

spectral ​

Compute spectral features: centroid, bandwidth, rolloff, flatness, ZCR (zero-crossing rate), and RMS (root mean square level).

bash
sonare spectral music.mp3
sonare spectral music.mp3 --json

Output:

  Spectral Features:
  Feature          Mean       Std        Min        Max
  centroid         2150.5     850.2      120.5      8500.0
  bandwidth        1850.2     520.8       50.2      4200.5
  rolloff          4520.8    1200.5      200.0     10000.0
  flatness         0.0250     0.0180     0.0010     0.1520
  zcr              0.0850     0.0420     0.0020     0.2500
  rms              0.0520     0.0280     0.0001     0.1850

pitch ​

Track pitch over time with the YIN or pYIN fundamental-frequency estimator.

bash
sonare pitch music.mp3
sonare pitch music.mp3 --algorithm yin
OptionDefaultDescription
--algorithmpyinPitch algorithm: "yin" or "pyin"
--threshold0.1YIN threshold (> 0 and <= 1)
--fmin65.0Minimum tracked frequency in Hz
--fmax2093.0Maximum tracked frequency in Hz
--hop-length512Hop length in samples (redeclared locally with domain checks, distinct from the global --hop-length)
--framesoffWith --json, add the per-frame times, f0, voiced_flag and voiced_prob arrays to the summary

Output:

  Pitch Tracking (pyin):
    Frames:    8520
    Median F0: 285.5 Hz
    Mean F0:   302.8 Hz

hpss ​

Harmonic-Percussive Source Separation (HPSS, see Source Separation): splits a mix into its harmonic component (vocals, melody, sustained tones) and its percussive component (drums, transients).

bash
sonare hpss music.mp3 -o separated
sonare hpss music.mp3 -o separated --json
OptionDefaultDescription
--kernel-harmonic <int>31Harmonic median-filter kernel size
--kernel-percussive <int>31Percussive median-filter kernel size
--harmonic-onlyoffWrite only the harmonic component
--percussive-onlyoffWrite only the percussive component
--with-residualoffAlso separate and write a residual component
--hard-maskoffUse a hard mask instead of the default soft mask

--harmonic-only, --percussive-only, and --with-residual are mutually exclusive.

Output:

  HPSS: 3980000 samples
  Harmonic energy:   0.025000
  Percussive energy: 0.018000
  Wrote: separated_harmonic.wav, separated_percussive.wav

With --json the levels are harmonic_mean_abs and percussive_mean_abs (plus residual_mean_abs with --with-residual), each the mean absolute sample value of that component.

decompose-stems ​

Split a mix into non-negative matrix factorization (NMF) components (see Source Separation) — a data-driven separation that finds recurring spectral patterns instead of the fixed harmonic/percussive split hpss applies.

bash
sonare decompose-stems band.wav -o stems.wav
sonare decompose-stems band.wav -o stems.wav --n-components 6 --init nndsvd --json
OptionDefaultDescription
--n-components <int>4Number of components to factor the mix into
--n-iter <int>100NMF update iterations
--beta2.0Beta divergence: 2 is Frobenius, 1 is Kullback-Leibler
--initrandomNMF initialization: random or nndsvd
--mask-power1.0Soft-mask exponent (>= 1); 2 gives the Wiener-style power ratio

-o names the set rather than one file: both CLIs write <base>_component1.wav … <base>_componentN.wav, stripping a trailing .wav from the path you gave. Every component keeps the source's phase, so the components sum back to the input and each one is listenable on its own. That is the difference from the library's bare decompose, which returns the factors of a magnitude spectrogram and leaves you needing a phase estimator to hear anything.

Output:

  Stems: 4 components
     1. energy 0.031200  stems_component1.wav
     2. energy 0.018400  stems_component2.wav
     3. energy 0.009100  stems_component3.wav
     4. energy 0.004700  stems_component4.wav

More Commands ​

Beyond the core set above, both CLIs carry many more subcommands; the ones marked "native CLI only" need sonare-cli. Audio-file analysis and feature commands share the common options (--json, --n-fft, etc.) and take a file argument. Listing and preset-inspection commands have their own smaller option sets. Editing commands write a WAV when you pass -o/--output.

More analysis ​

Room-acoustic command terms

Equivalent room means a useful model inferred from audio, not exact measured geometry. RIR means room impulse response. Room morphing is a creative room effect, not dereverberation.

The metrics these commands report are decay and clarity descriptors: RT60 is the reverberation time, EDT the early decay time, C50 and C80 clarity ratios, and DRR the direct-to-reverberant ratio. Each field is defined in Room Acoustics.

CommandDescriptionNotable options
sonare downbeats music.mp3Downbeat times (seconds)—
sonare chords music.mp3Chord progressionSee chords
sonare rhythm music.mp3Rhythm primitives (syncopation, groove, regularity)--start-bpm (120.0), --bpm-min (60.0), --bpm-max (200.0)
sonare dynamics music.mp3Dynamics / loudness summary--window-sec (0.4)
sonare timbre music.mp3Timbre / spectral-shape summary—
sonare lufs music.mp3EBU R128 loudness in LUFS (Loudness Units relative to Full Scale, the standard perceptual loudness unit — see Delivery targets)--series (also emit momentary/short-term series)
sonare acoustic room.wavRoom-acoustic estimate (RT60/EDT/C50/C80)See acoustic and estimate-room
sonare estimate-room room.wavEquivalent room estimate: volume, dimensions, absorption, DRR, confidenceSee acoustic and estimate-room
sonare synthesize-rir --length 7 --width 5 --height 3 -o rir.wavMono RIR from shoebox geometrySee synthesize-rir and room-morph
sonare room-morph dry.wav --length 12 --width 9 --height 4 -o wet.wavCreative room-character morph toward a target roomSee synthesize-rir and room-morph
sonare boundaries music.mp3Structural transitions plus the novelty curve they were picked fromNative CLI only. See boundaries
sonare melody music.mp3Melody contour summary: whether a melody was found, pitch range in octaves, mean frequency, pitch stability, vibrato rate, and the pitch-point countNative CLI only. --threshold (0.1), --hop-length (512), --fmin (80.0), --fmax (1000.0)
sonare meter music.wavBasic level meters: peak, RMS, crest, true peak, clipping ratio, silence ratio, DC offsetNative CLI only. --clip-threshold, --oversample
sonare clipping music.wavClipped sample and region detectionNative CLI only. --threshold, --min-region
sonare dynamic-range music.wavPercentile RMS dynamic rangeNative CLI only. --window-sec, --hop-sec, --low-percentile, --high-percentile
sonare stereo left.wav --reference right.wavStereo correlation and width from left/right filesNative CLI only
sonare phase left.wav --reference right.wavPhase-scope summary from left/right filesNative CLI only

chords ​

Chord progression as timed chord symbols. The defaults suit most pop and rock material; reach for the HMM and key-context options when a progression flickers between neighboring chords.

bash
sonare chords music.mp3 --json
sonare chords music.mp3 --use-hmm --key-context --key-root C --key-mode major
OptionDefaultDescription
--min-duration0.3Shortest chord kept, in seconds
--smoothing-window2.0Chroma smoothing window, in seconds (above 0)
--threshold0.5Chord detection confidence threshold
--triads-onlyoffRestrict output to triad qualities
--nnlsoffUse NNLS chroma instead of the STFT chroma
--no-beat-syncoffDisable beat-synchronous chroma pooling
--use-hmmoffDecode the chord sequence with a hidden Markov model
--hmm-beam-width24HMM decoder beam width; 0 keeps the full search
--key-contextoffBias detection with a key context
--key-rootCRoot pitch class for --key-context (for example F#)
--key-modemajorMode for --key-context (for example minor)
--detect-inversionsoffReport inversions (bass note)

boundaries ​

Native CLI only. boundaries exposes the whole structural-boundary detector, so it reports the novelty curve along with the boundaries picked from it.

OptionDefaultDescription
--threshold0.3Relative threshold: share of the largest novelty event within --reference-window
--absolute-threshold0.005Absolute floor on novelty
--kernel-size64Novelty kernel size in frames
--n-mfcc13MFCC coefficients in the feature stream
--n-chroma12Chroma bins in the feature stream
--peak-distance2.0Minimum spacing between boundaries, in seconds
--reference-window60One-sided span for the relative threshold, in seconds; 0 disables the relative threshold
--no-mfcc, --no-chromaoffDrop one feature stream
--n-fft, --hop-length2048, 512Analysis framing

The two thresholds do different jobs. --threshold is relative, so it cannot ask whether anything changed at all; --absolute-threshold is the floor that can. detectBoundaries(request) explains the pair and what lowering the floor will and will not recover. Giving both --no-mfcc and --no-chroma is refused, because the two streams are combined frame for frame and neither leaves nothing to combine.

acoustic and estimate-room ​

acoustic measures decay and clarity from a recording. estimate-room goes one step further and infers an equivalent room.

OptionDefaultDescription
--iroffacoustic: treat the input as an impulse response
--n-bands6acoustic: number of octave bands reported
--min-decay-db30.0acoustic: minimum decay depth, in dB
--noise-floor-margin-db10.0acoustic: margin above the noise floor, in dB
--aspect-lw1.0estimate-room: length-to-width prior
--aspect-lh1.0estimate-room: length-to-height prior
--reference-absorption0.15estimate-room: absorption prior
--sabineoffestimate-room: use the Sabine model instead of the default Eyring model
--n-octave-bands (alias --n-bands)library defaultestimate-room: analyzer octave-band count; 0 is the library default

synthesize-rir and room-morph ​

synthesize-rir builds a mono room impulse response from shoebox geometry. room-morph moves a dry recording toward a target room as a creative effect. Both take the same room options.

OptionDefaultDescription
--length, --width, --height7.0, 5.0, 3.0Room dimensions in metres
--absorption0.2Uniform wall absorption, 0 to 1
--source-x, --source-y, --source-z1.0, 1.0, 1.2Source position in metres
--listener-x, --listener-y, --listener-z5.0, 4.0, 1.7Listener position in metres
--ism-order3Image-source reflection order
--seed1Seed for the late tail, so a render repeats exactly
--max-seconds0Cap on the RIR or tail length in seconds; 0 is the natural length
--sabineoffUse the Sabine late-reverb model instead of the default Eyring model
--sample-rate48000synthesize-rir only: output sample rate
--wet0.5room-morph only: target-room mix, 0 to 1
--suppression0.5room-morph only: how strongly the source room's tail is suppressed, 0 to 1
--receiver-spacing0.5room-morph only: metres between the two receivers (above 0 up to 4). Used for a two-channel file, which is morphed as a stereo pair and written as a stereo file

More features ​

CommandPython CLINative CLIDescription
sonare onset-envelope music.mp3YesYesOnset strength envelope (how strongly notes attack over time); the native CLI's --json carries the full values array plus mean/std/min/max
sonare onset-env music.mp3NoYesSame envelope, summary only: frame count, peak time, peak strength, mean — no array
sonare tempogram music.mp3YesYesAutocorrelation tempogram
sonare plp music.mp3YesYesPredominant local pulse
sonare nnls-chroma music.mp3YesYesNNLS chromagram
sonare cqt music.mp3NoYesConstant-Q transform summary. --n-bins, --bins-per-octave, --hop-length, --fmin
sonare vqt music.mp3NoYesVariable-Q transform summary. --n-bins, --bins-per-octave, --gamma, --filter-scale, --hop-length, --fmin
sonare mel-to-audio music.mp3 -o recon.wavNoYesReconstruct audio from a computed Mel spectrogram with Griffin-Lim. --n-iter, --n-mels, --fmin, --fmax
sonare mfcc-to-audio music.mp3 -o recon.wavNoYesReconstruct audio from computed MFCCs via Mel + Griffin-Lim. --n-mfcc, --n-iter, --n-mels, --fmin, --fmax
sonare tonnetz music.mp3NoYesTonal centroid features. --n-fft, --hop-length
sonare pcen --values ... --n-bins 128 --n-frames 10NoYesPer-channel energy normalization over a flattened matrix. Takes --values like the numeric helpers, plus --n-bins, --n-frames, --sample-rate, --time-constant, --gain, --bias, --power, --eps, --hop-length
sonare fourier-tempogram music.mp3NoYesFourier tempogram
sonare tempogram-ratio music.mp3NoYesTempo-ratio features

The Python CLI intentionally prints summaries for matrix features rather than dumping full arrays. For full feature matrices, use Python API or JavaScript API.

Editing ​

These transform audio and write a WAV with -o. Per-note editing and scale correction are walked through in CLI Examples.

CommandDescriptionOptions
sonare pitch-correct vocal.wav -o out.wavPitch-correct toward a target MIDI note--current-midi (69.0), --target-midi (69.0)
sonare pitch-correct-timevarying vocal.wav -o out.wavTrack a pYIN contour and correct it to one note or a scale--mode midi|scale, --target-midi, --scale-root, --scale-mode-mask (a 12-bit mask or a mode name such as minor), --reference-midi, --hop-length, --retune-amount (1.0), --max-correction-semitones (12), --retune-speed-ms (50), --vibrato-threshold-cents (20)
sonare note-move take.wav --target-onset 48000 -o out.wavMove one note region to a sample offset--onset, --offset, --target-onset (sample indices)
sonare note-stretch take.wav -o out.wavTime-stretch a single note region--onset, --offset (sample indices; --offset omitted stretches to the end of the input), --ratio (1.0)
sonare scale-quantize 68.7Quantize one MIDI value to a scale--root, --mode-mask (a 12-bit mask or a mode name), --reference-midi
sonare voice-change vocal.wav -o out.wavVoice change (pitch + formant)--pitch-semitones (0.0), --formant-factor (1.0), --formant-mode relative|absolute (relative)
sonare pitch-shift vocal.wav --semitones 3 -o out.wavTranspose without changing length--semitones (required)
sonare time-stretch take.wav --rate 1.2 -o out.wavChange length without changing pitch--rate (required)
sonare normalize mix.wav -o out.wavPeak or RMS normalization--mode peak|rms, --target-db
sonare trim-silence take.wav -o out.wavTrim leading/trailing silence. By default it cuts below an absolute -60 dBFS, like the library's trim; --top-db switches to the peak-relative rule of trimSilence--top-db, --threshold-db (-60)
sonare resample music.wav --target-sr 44100 -o out.wavResample--target-sr
sonare polyphonic-notes chord.wavList the notes a polyphonic analysis found—
sonare vocal-notes vocal.wavList the notes a vocal edit session finds in a monophonic take, with each note's pitch in cents from the nearest note--segmentation-threshold-cents (50), --min-note-ms (30), --fmin-hz (65), --fmax-hz (2093), --reference-hz (440), --frame-length-samples, --hop-length-samples, --yin-threshold, --voiced-threshold, --no-centered
sonare polyphonic-render chord.wav -o out.wavRe-render that analysis with per-note edits--edit NOTE.FIELD=VALUE (repeatable)
sonare project align-takes --in project.json --reference-source 1 -o aligned.jsonAlign every take in a project to one reference source and write the project back with a warp map per take; reads the source files; a take recorded at another rate is resampled onto the reference's grid and the anchors are written at the project rate (see Recording and Takes)--in, --reference-source (required), --audio SOURCE_ID=WAV (repeatable), --resolve-audio, --hop-length, --bins-per-octave

--top-db and --threshold-db are mutually exclusive, alternate silence selectors: passing neither defaults --threshold-db to -60; passing --top-db switches to a top-dB-relative-to-peak selector instead.

Both CLIs provide the file-writing edit commands above. hpss also requires -o and writes <base>_harmonic.wav and <base>_percussive.wav while printing its energy summary.

No inert defaults

--semitones and --rate have no default, because any default would make the command a silent no-op. Leaving either out exits 3. The same rule holds for pitch-correct-timevarying --mode, which accepts only midi or scale; anything else is a usage error (exit 2) instead of a fallback.

The native CLI includes the shared edit commands and adds lower-level processing commands:

Native commandRequired or notable option
sonare gain music.wav -o out.wav-o, --gain-db (required)
sonare fade music.wav -o out.wav-o, --fade-in and/or --fade-out (seconds)
sonare filter music.wav -o out.wav-o, --type hp|lp|bp|notch; use --cutoff for hp/lp or --center + --bandwidth for bp/notch; --order (2), --zero-phase
sonare preemphasis speech.wav -o out.wav, sonare deemphasis speech.wav -o out.wav-o; --coef (0.97)

filter --order takes 2 or 4, and 4 is accepted for hp/lp only — a fourth-order bp or notch is rejected. --zero-phase runs the filter forwards and then backwards (filtfilt) so the result has no phase shift, at the cost of doubling the effective slope and of needing the whole file in hand.

split-silence ​

split-silence finds where a take is quiet without altering it: it prints the non-silent intervals as sample ranges, and only writes audio when you ask it to slice by those intervals. Both front-ends carry it and take the same options.

bash
sonare split-silence take1.wav
sonare split-silence take1.wav --json

Output:

Non-silent intervals: 3
  28160 - 116224
  153088 - 241152
  287232 - 394752

JSON Output:

json
[{"start_sample": 28160, "end_sample": 116224}, {"start_sample": 153088, "end_sample": 241152}, {"start_sample": 287232, "end_sample": 394752}]

With --report, the JSON becomes an object, {"intervals": [...], "report": {...}}.

OptionDefaultDescription
--input WAV—Another take of the same part, repeatable
--top-db60.0Silence threshold below the peak, in dB
--write-takes PREFIX—Write every take sliced at every interval
--reportoffWith --json, add a report object: silence_ceiling_db (the largest --top-db at which any silence still shows; with several takes, the least headroom among them), plus max_signal_intervals and min_signal_intervals (the interval counts of the most and least fragmented single take)
--n-fft, --hop-length2048, 512Analysis framing

With more than one take, a cut falls only where every take is quiet. The multi-take form, --write-takes and the errors are walked through under Splitting Takes at Silence.

-o/--output is a usage error (exit code 2): the command's result is the interval list or the sliced take files, never a single rendered output file.

Realtime voice presets ​

These commands inspect, validate, or render the realtime voice-changer preset chain:

CommandDescriptionOptions
sonare voice-change vocal.wav -o out.wavRender through the realtime voice preset chain when --preset, --preset-json, --preset-pack, or --set is supplied--preset, --preset-json, --preset-pack, --set PATH=VALUE
sonare voice-presetsList realtime voice changer preset ids--json
sonare voice-presetPrint one preset's config as JSON--preset (neutral-monitor), --json
sonare voice-preset-validate preset.jsonValidate and normalize a preset JSON file or preset pack--preset when validating a pack, --set PATH=VALUE, --json

Without realtime preset options, voice-change uses the simple pitch/formant helper controlled by --pitch-semitones, --formant-factor and --formant-mode. With relative (the default) the formant factor is a warp in [0.55, 1.65] applied after the pitch shift, so the formants follow the pitch (a factor outside the range is refused); with absolute it is the formant shift relative to the input whatever the pitch shift (1.0 keeps the formants where they were), and a request the formant warp cannot reach is refused with the reachable range. --json reports the requested formant_factor on both CLIs. With preset options, it uses the realtime voice chain; combining preset options with any of the three simple controls is rejected as an invalid-parameter error.

Preset selection is explicit: choose a built-in --preset ID, a --preset-json FILE, or the pair --preset-pack FILE --preset ID. The pack file and entry ID form one selector; --preset-pack without --preset is rejected (there is no first-entry fallback). --preset-json cannot be combined with a pack, and --set PATH=VALUE requires a preset selector.

Playback ​

playback renders movie audio (mono, stereo, 5.1 or 7.1) to speaker layouts or binaural headphones, and is the only command that keeps 5.1 and 7.1 channels. Options: --target (headphones, stereo, 5.1, 7.1), --input-layout (auto, mono, stereo, 5.1, 7.1), --config FILE, --no-upmix, --night (0 to 1), --dialogue-db (-12 to 12), --program-lufs (-70 to 0; measured from the input when omitted), --target-lufs (-40 to -5), --room (none, living_room, home_theater, screening_room) and --hrtf FILE. Both CLIs render through an existing renderer's offline path, so the output matches the library's renderOffline for the same configuration. The stages, config keys and examples are on Playback Renderer.