ferraus declick
Remove clicks, pops, and crackle
Synopsis
ferraus declick <input> [options] [-o <output>]
What it does
Fits an autoregressive model to the audio and flags samples whose forward and backward prediction errors are both outliers (a click), then re-synthesises each flagged run by least-squares AR interpolation. Several passes catch clicks hidden by bigger ones. --auto is the vinyl-crackle preset; --big-pops also repairs wider pops.
This command is also an fx stage and a pipeline op: ferraus fx in.wav -o out.wav --fx "declick:key=value".
Examples
Remove clicks with the defaults
ferraus declick lp-rip.wav -o clean.wav
Vinyl crackle preset
ferraus declick lp-rip.wav --auto -o clean.wav
Catch quieter clicks and wide pops
ferraus declick tape.wav --big-pops on --sensitivity 50% -o clean.wav
Options
| Flag | Type | Default | Meaning |
|---|---|---|---|
--sensitivity | percent | 30% | Detection sensitivity in percent: higher finds quieter clicks (and risks transients) |
--complexity | integer | 16 | AR model order used for detection and interpolation Range: 4..64. |
--max-width | time | 2ms | Widest click to repair (time); wider events are treated as music |
--big-pops | on|off | off | Also repair wide pops up to 20 ms (on|off) |
--passes | integer | 4 | Number of detect-and-repair passes Range: 1..16. |
--auto | flag | — | Vinyl crackle preset: higher sensitivity, more passes, higher order |
--mix | percent | 100% | Dry/wet balance: 0% returns the input unchanged, 100% is fully processed |
Global options
Every command also accepts the global options (-o, --json, --dry-run, --overwrite, --progress, ...). See Global options.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Processing failed |
| 2 | Usage or parameter error |
| 3 | Input missing or unreadable |
| 4 | Unsupported format or codec |
| 8 | Cancelled |
| 70 | Internal error (bug) |
Common mistakes
- Forgetting that outputs are never overwritten: pass
--overwriteor a new-opath when re-running. - Beat-based times (
4b,1/4) need a tempo: pass--bpmor write4b@120. - Percentages accept
80%or the fraction0.8; a bare80means 80x, not 80%.
For models
- MCP tool:
ferraus_declick - Schema:
ferraus schema declick - Pipeline:
{ op: declick, args: { ... } }(flag names with_instead of-) - fx stage: yes
{"command": "declick", "defaults": {"sensitivity": "30%", "complexity": "16", "max_width": "2ms", "big_pops": "off", "passes": "4", "mix": "100%"}}