1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# Producer
Local speech cleanup and mastering for voice recordings. Noise removal uses `DeepFilterNet3`. Filtering, dynamics and loudness normalization are `FFmpeg`.
`producer.sh` bootstraps its own managed Python environments and downloads
dependencies and models automatically.
## Requirements
- glibc
- `uv` (or Python 3)
- NVidia driver and toolkit (optional)
## Usage
```bash
git clone https://git.historia.vg/git/producer
./producer.sh setup
./producer.sh recording.wav
```
First run installs the runtime into `lib/runtime/` and may take a few minutes.
The `process` keyword is optional; `./producer.sh process recording.wav` is
equivalent.
The master WAV is always **mono, 32-bit PCM**, at 48 kHz (default) or 44.1
kHz; stereo inputs must be downmixed to mono first. MP3 is encoded as
constant bitrate at 192 kb/s by default. Loudness is normalized to **-19
LUFS with a -1.5 dBTP true-peak ceiling**.
### Examples
# Optional MP3 alongside the WAV
./producer.sh recording.wav --mp3
# Other sound profiles
./producer.sh recording.wav --profile narrator
./producer.sh recording.wav --profile radio
# Process several files at once
./producer.sh take1.wav take2.wav --mp3
# Write outputs somewhere else
./producer.sh recording.wav --output-dir delivery --mp3
# Skip AI noise removal (FFT fallback or none at all)
./producer.sh recording.wav --denoiser fft
./producer.sh recording.wav --no-denoise
# LibriVox-style delivery file: 44.1 kHz, 128 kbps CBR, -19 LUFS, mono
./producer.sh recording.wav \
--sample-rate 44100 --mp3 --mp3-bitrate 128 \
--target-lufs -19 --true-peak-db -1.5
```
All of these settings are configurable; run `./producer.sh config` to see every
setting and its default, or `--help` on any command for the flags. A
`config.toml` in the same directory as `producer.sh` is loaded automatically:
`./producer.sh config` then shows those resolved values, and an explicit
`--config FILE` or any CLI flag still overrides it. The shipped `config.toml`
documents every setting.
## Profiles
| Profile | Sound |
| -------------- | --------------------------------------------------------- |
| `natural` | Mild EQ, 2:1 compression, light de-essing (default) |
| `narrator` | Gentler compression, slower attack, wider loudness range |
| `radio` | Stronger compression, more warmth/presence, tighter range |
| `cleanup-only` | Denoise + highpass only; no EQ, dynamics or normalization |
Test the difference on your own audio before committing:
```bash
./producer.sh preview recording.wav --start 10 --duration 30
```
## Troubleshooting
- **Bootstrap fails:** the first run needs `uv` or Python 3 with venv support
and network access to PyPI. Install the missing tool and rerun.
- **CUDA unavailable:** run `./producer.sh doctor`, check `nvidia-smi` and the
driver, then retry `./producer.sh setup --device cuda`. Or use `--device cpu`.
- **Sounds watery or thin:** lower the denoise strength (`--denoise-strength
0.65`) or compare profiles with `preview`.
## License
[0BSD](LICENSE).
Upstream components (DeepFilterNet, PyTorch, FFmpeg, uv)
carry their own licenses
|