# Producer configuration. This file is loaded automatically because it sits # next to producer.sh. Flat TOML: no section headers. Named CLI flags override # these values; --set KEY=VALUE overrides named flags. Use --profile, not # --set profile=... All explicit values below override preset defaults, even # with --profile radio. Remove settings you want a different profile to supply. profile = "narrator" # natural, narrator, radio, cleanup-only denoiser = "clearvoice" # MossFormer2_SE_48K; compare with deepfilter on your voice; fft or none also available device = "auto" # auto, cpu, cuda; explicit cuda fails if unavailable denoise_strength = 0.85 # 0..1; a little dry signal can preserve consonants, but also retains noise fft_reduction_db = 8.0 # 0.01..30; FFT reduction is scaled by denoise_strength highpass = true highpass_hz = 80.0 # 20..300 lowpass = false lowpass_hz = 16000.0 # 4000..22000; must be below output Nyquist when enabled hum_hz = 0 # 0 (off), 50 or 60; notches fundamental and next two harmonics # One static gain adjustment for the whole recording, not automatic gain riding. leveling = true level_target_db = -23.0 # -40..-12; heuristic speech level in dBFS, not LUFS max_gain_db = 18.0 # 0..30; caps both gain and attenuation expansion = false expansion_threshold_db = -50.0 # -90..-20 expansion_ratio = 1.5 # 1..4 expansion_range_db = 12.0 # 0..40 # Silence pauses without shortening them. Off by default: Silero VAD analyzes # PRE-denoise speech; protected word margins and smooth fades reduce clipped # consonants. First use installs a small CPU detector and downloads # hash-checked weights. VAD can miss whispers/breaths; audition the result, # not just the meter. The values below only apply when you enable it. pause_silence = false pause_threshold = 0.35 # 0.1..0.9; LOWER keeps more possible speech pause_pre_ms = 120.0 # 30..500; keep this much before detected speech pause_post_ms = 120.0 # 30..1000; preserve word endings and decay pause_fade_ms = 10.0 # 2..100; fades outside protected speech pause_min_ms = 80.0 # 20..1000; minimum zero core, in addition to margins/fades # Optional pacing EDIT, not noise removal. Long gaps are shortened to # gap_pad_s. With pause_silence enabled, only near-zero cores are eligible; # gap_threshold_db is used only when pause_silence is disabled. trim_silence = false max_gap_s = 1.5 # 0.5..10; gaps longer than this are shortened gap_pad_s = 0.6 # 0.1..3; total silence kept around each trimmed gap (< max_gap_s) gap_threshold_db = -50.0 # -90..-20; blocks below this count as silence eq = true warmth_db = 0.5 # -12..12; 140 Hz mud_db = -1.5 # -12..12; 300 Hz presence_db = 1.0 # -12..12; 3500 Hz compression = true compressor_threshold_db = -21.0 # -50..-5 compressor_ratio = 2.0 # 1..10 compressor_attack_ms = 15.0 # 0.1..200 compressor_release_ms = 150.0 # 10..2000 deess = true deess_intensity = 0.15 # 0..1 deess_amount = 0.4 # 0..1 # Two-pass normalization plus export verification; target misses warn only. # Turning normalize off leaves limiter on unless you also disable limiter. # normalize=true requires limiter=true. Previews force both on, even cleanup-only. normalize = true target_lufs = -19.0 # -30..-12; mono delivery target, not ACX certification loudness_range = 9.0 # 1..20 LU limiter = true true_peak_db = -1.5 # -9..-0.5 dBTP; MP3 can overshoot, inspect report warnings # Final exports are always mono, 32-bit PCM WAV, with an optional MP3 sidecar. sample_rate = 48000 # 44100 or 48000; intermediate processing is 48 kHz float mp3 = false mp3_bitrate = 192 # 128, 160, 192, 224, 256 or 320 kb/s