Skip to content
← All articles

Phantom v1.5.0: Live Metrics, Tunable Analysis, and a Lighter Install

FadeLabs Team
FadeLabs Team -

Three things in this one: a new tool, a tuning system, and a smaller install.

read_live_metrics

Phantom has always analyzed files. You render, you analyze, you read the numbers. That loop is fine for mastering and slow for mixing, because by the time you’ve bounced a stem you’ve lost the thing you were listening for.

read_live_metrics is the twentieth tool, and it reads a meter snapshot from the Phantom Studio plugin while it runs in your DAW: integrated, short-term and momentary loudness, true peak per channel, stereo correlation and width, per-band energy, and the plugin’s own verdicts.

Read the live metrics -- is the stereo image collapsing in the chorus?

Snapshots carry an age, and anything older than about ten seconds is flagged stale so a frozen DAW doesn’t quietly feed you numbers from five minutes ago. If several plugin instances are running you can name one, or omit the ID and get the most recent.

One caveat, stated plainly: the Phantom Studio plugin hasn’t shipped yet. The tool is in the server and the contract is stable, but without the plugin there’s no snapshot to read. It’s on the waitlist if you want to know when it lands. Everything else in Phantom works on files and needs nothing extra.

40 environment variables

Every threshold in the analysis is now a knob.

Phantom’s defaults come from what we use, and what we use isn’t universal. If your material is quiet and clean, the noise floor thresholds are wrong for you. If you work on dense electronic music, the masking severity bands are conservative. Previously the answer was to live with it.

There are now 40 PHANTOM_* variables covering paths and limits, analysis thresholds, FFT and frame sizes, and behaviour flags. Polarity detection, crest factor, the GCC-PHAT correlation window, noise floor and SNR bands, resonance prominence, masking severity splits, spectral frame and hop sizes — all adjustable.

PHANTOM_MASKING_SEVERITY_HIGH=0.5 phantom analyze mix.wav

Settings resolve per call, so there’s no restart. The analysis cache keys on them too, which means a tuned run never gets served a result computed under different settings.

Run phantom doctor to see the full list with whatever value each one currently has in your environment. That table is generated from the same registry the runtime reads, so it can’t drift out of date.

One thing worth knowing: changing frame sizes changes the analysis geometry, so results stop being comparable with the built-in genre profiles, which are calibrated to the defaults. Tune thresholds freely; tune frame sizes deliberately.

Stem separation moved out

Demucs brings PyTorch, and PyTorch is about 2.5 GB. Everyone installing Phantom was paying that cost in install time and disk whether or not they ever separated a stem.

Separation now lives in a sibling package, phantom-audio-separation. The [separation] extra still works and pulls it in, so nothing changes if you were already using it. If you weren’t, the core install is a lot lighter.

# core only, around 50 MB
uv tool install phantom-audio --python 3.13

# everything, including separation
uv tool install "phantom-audio[all]" --python 3.13

Under the hood

The analyzers now go through a shared registry rather than each tool wiring up its own path. Adding a new analysis dimension is one entry instead of edits scattered across the server, the CLI, and the comparison code. It also means the composite tools, the CLI, and the MCP wrappers all populate and reuse the same cache.

There’s a pile of robustness work too: non-finite samples and measurements are rejected rather than propagating NaN through the analysis, decoded array size is capped per file and in aggregate across a batch, sample magnitude is bounded so the analyzers can’t overflow, and error-text path redaction now handles spaced and UNC paths that previously slipped through.

Block RMS and near-silence detection are memoized on the audio object, so the analyzers that need them stop recomputing the same values.

Updating

uv tool install "phantom-audio[all]" --python 3.13 --force

The --force matters. uv tool install builds an isolated environment, so adding extras later without it puts them somewhere your phantom command can’t see.

← All articles