ferraus master

Automatic master of a finished mix to a delivery target

Synopsis

ferraus master <input> [options] [-o <output>]

What it does

Runs the automatic mastering chain and writes a release-ready master. Pre-flight: dc-remove, head/tail silence trim at -70 dB, analyze problems (clipping means declip runs first). Corrective EQ: match-eq toward --reference or the genre curve at --match-amount (1/3-octave bands, at most 4 dB per band), static cuts on persistent narrow resonances, 20 Hz high-pass. Dynamics: four-band multiband compression at 1.5:1 to 2:1 with tempo-dependent release, plus glue compression (1.5:1, 30 ms) when the crest factor is above the genre target. Stereo: widen with mono bass below --bass-mono, never letting broadband correlation drop below 0.3. Color: tape saturation and an exciter layer at --warmth. Loudness: gain to the target, then a 4x-oversampled true-peak limiter whose gain reduction is bounded by --intensity; if the target cannot be reached within the bound the master lands as close as possible and the report says so. Output: TPDF dither when writing 16-bit, master verify, the before/after report (--report), and a loudness-matched before/after pair (--ab). Every stage is an ordinary ferraus command; 'master plan' shows the exact chain and 'master --plan' runs an edited one. --stems (best-effort) separates the mix first and treats vocals, drums, bass, and other separately.

Examples

Master for streaming (-14 LUFS, -1 dBTP) with every default

ferraus master mix.wav -o master.wav

Run an edited plan and write the before/after report

ferraus master mix.wav --plan plan.json -o master_v1.wav --report r1.json

Move toward a reference's tonal balance and write an A/B pair

ferraus master mix.wav --reference ref.wav --match-amount 75% --ab -o master.wav

A loud club master

ferraus master mix.wav --target club --genre edm --intensity heavy -o club.wav

Options

FlagTypeDefaultMeaning
--targetstreaming | apple | youtube | club | cd | broadcast | podcast | customstreamingDelivery target: streaming -14 LUFS/-1 dBTP, apple -16/-1, youtube -14/-1, club -8/-0.3, cd -10/-0.3 (16-bit 44.1 kHz), broadcast -23/-1 (EBU R128), podcast -16 stereo or -19 mono/-1, custom (--lufs, --true-peak)
--lufsgain—Integrated loudness for --target custom (e.g. -12LUFS); overrides a named target's loudness
--true-peakgain—True-peak ceiling for --target custom (e.g. -1dBTP, default -1dBTP); overrides a named target's ceiling
--standardebu | atscebuBroadcast standard for --target broadcast: ebu (-23 LUFS, -1 dBTP) or atsc (-24 LKFS, -2 dBTP)
--referencepath—Reference track whose tonal balance the corrective EQ moves toward (replaces the genre curve)
--match-amountpercent50%How much of the measured tonal difference the corrective EQ corrects (each band is capped at 4 dB)
--genreauto | pop | hiphop | edm | rock | acoustic | classical | jazz | podcastautoGenre for the tonal curve and dynamics targets; auto guesses from tempo, spectral tilt, low-end share, and crest factor
--intensitylight | medium | heavymediumHow hard to push: bounds limiter gain reduction (light 2 dB, medium 4 dB, heavy 6 dB) and sets compression ratios; an input that already looks mastered defaults to light
--widthpercent100%Stereo width of the side signal (100% unchanged); never narrower than mono bass or wider than broadband correlation 0.3 allows
--bass-monofrequency120HzSide signal below this frequency is collapsed to mono
--warmthpercent15%Tape saturation and exciter amount (0% skips the color stage)
--no-eqflag—Skip the corrective EQ
--no-widenflag—Skip the stereo stage
--trim-silencetext-70dBTrim head and tail silence below this level (dBFS), or 'off'
--reportpath—Write the before/after report (JSON) here
--abflag—Also write a loudness-matched before/after pair (within 0.2 LU) for listening: <output>.ab-before.wav and <output>.ab-after.wav
--planpath—Run this (edited) plan instead of planning: the JSON from 'master plan'
--stemsflag—Best-effort stem-aware mastering: separate (best verified tier), per-stem chains, then sum and master

Global options

Every command also accepts the global options (-o, --json, --dry-run, --overwrite, --progress, ...). See Global options.

Exit codes

CodeMeaning
0Success
1Processing failed
2Usage or parameter error
3Input missing or unreadable
4Unsupported format or codec
5Model not cached and downloads disabled
6Model download or verification failed
8Cancelled
10Network error
70Internal error (bug)

Common mistakes

  • Forgetting that outputs are never overwritten: pass --overwrite or a new -o path when re-running.
  • Percentages accept 80% or the fraction 0.8; a bare 80 means 80x, not 80%.
  • Gains need a unit when not in dB: 0.5x is a factor, -6 and -6dB are decibels.

For models

  • MCP tool: ferraus_master
  • Schema: ferraus schema master
  • Pipeline: { op: master, args: { ... } } (flag names with _ instead of -)
  • fx stage: no
{"command": "master", "defaults": {"target": "streaming", "standard": "ebu", "match_amount": "50%", "genre": "auto", "intensity": "medium", "width": "100%", "bass_mono": "120Hz", "warmth": "15%", "trim_silence": "-70dB"}}