Runs problem detection, applies the available corrective EQ recipes, and measures the result. It writes a separate file so you can audition the changes against your original.
Requires the phantom-audio[processing] extra. Add it with: uv tool install "phantom-audio[processing]" --python 3.13 --force
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| file_path | string | required | Path to audio file to fix |
| problems | list[string] | null (auto-detect) | Specific problems to fix: "hum", "sibilance", "mud", "harshness", "dc_offset", "resonant_peak". If omitted, runs detect_problems first and fixes every detected problem that has a recipe. |
| output_path | string | null (auto-named) | Where to write the fixed file. Defaults to <name>_fixed.wav inside Phantom's output directory (~/.phantom/output, or PHANTOM_OUTPUT_DIR) -- not next to the input. Paths outside that directory are rejected. |
Example Output
Illustrative summary; MCP responses use structured JSON.
fix_audio
What It Fixes
Every fix is static EQ. There is no de-esser, limiter, or other dynamics processing in the recipe set.
| Problem | How it fixes it |
|---|---|
hum | Deep notch (-30 dB, Q 30) at each detected harmonic |
sibilance | Parametric cut at 7 kHz, -5 dB, Q 0.7 |
mud | High-pass at 80 Hz plus a low shelf cut at 300 Hz, -4 dB |
harshness | Parametric cut at 3 kHz, -4 dB, Q 1.5 |
dc_offset | Subsonic high-pass at 5 Hz |
resonant_peak | Parametric cut at each detected resonance, -6 dB, Q from the measurement |
What It Cannot Fix
detect_problems reports these, but fix_audio will not act on them — naming one in problems changes nothing. They need a different take or a re-render, not corrective EQ.
clipping, inter_sample_peak, noise_floor, snr, lossy_codec
Output format
Phantom 1.6.0 writes a 32-bit float WAV. This preserves processing headroom, including peaks above 0 dBFS, without clipping them during the write. Check the result before converting to an integer delivery format.
Reading the Result
fix_audio re-runs problem detection on the file it wrote, so before and after are full detect_problems payloads and you can see what actually moved. improvements and regressions summarise that diff per problem type, with status being one of resolved, improved, unchanged, worsened, or new_problem. A non-empty regressions list means the corrective EQ introduced something that wasn’t there before — worth listening to before you keep the output.
When to Use It
Run this after detect_problems flags issues in your stems. It’s most useful during the early stages of mixing when you want to clean up recordings before making creative decisions. Think of it as a cleanup pass, not a replacement for intentional EQ choices.
Pro tip
You can target specific problems if you only want to fix some of them. For example, “fix the hum
in bass.wav but leave the sibilance alone” will pass problems: ["hum"] and skip the 7 kHz cut.
Typical Prompts
- “Fix all the problems in vocals.wav”
- “Remove the 60 Hz hum from bass.wav”
- “Cut the sibilance on the vocal and save it as vocals_clean.wav”
- “Run problem detection on all stems, apply the supported fixes, and report any remaining issues”