Skip to content

Mtx 0.2.0 - #1

Merged
projectoverseer merged 2 commits into
mainfrom
mtx-0.2.0
Aug 29, 2026
Merged

projectoverseer merged 2 commits into
mainfrom
mtx-0.2.0

Conversation

@projectoverseer

Copy link
Copy Markdown
Owner

No description provided.

projectoverseer and others added 2 commits August 29, 2026 14:19
Implements the change requests raised in the 2026-08-29 Listening Room
session, verified against purchased audio rather than fixtures.

R1  --stems reaches the digest. A ## STEMS section, one row per stem
    (lvl_vs_mix, lufs_delta, LUFS-I, crest, crest10s, tilt(R2), side/mid,
    corr, sub%, air%), the separation model named in the block and in the
    header, and the caveat carried as a FLAGS line. The budget grows by 4 KB
    when the table renders: those numbers exist nowhere else in the
    paste-able output, and analysis.json never leaves the machine.

R2  --blind writes the digest without printing it and prints predict.md, the
    headline as a form with FLAGS and METHOD intact and no values anywhere.
    DETAIL and CORPUS ROW are omitted from the sheet because both restate the
    headline. mtx predict --check scores a filled sheet: signed error,
    absolute error, interval hit or miss, sorted by |error| x confidence.
    Arithmetic only; it never says whether a prediction was good.

R3  The corpus row gains PSR min, PSR median, DR14, Crest (loudest 10s) and
    an mtx run line (version / schema / profile / sha256, plus the stem model
    when stems were separated), and corpus_row.json is written alongside the
    digest: the same row already typed, keyed by property name, unmeasurable
    fields null rather than guessed.

R4  batch --csv-schema corpus renames the columns a corpus database has
    properties for, and carries mtx_run. CSV values are rounded to 3 decimals;
    analysis.json keeps the unrounded number. A corpus run under --profile
    quick now warns that the True peak column will be empty in every row.

R5  --sections (by group or block name) and --digest-budget. An unrecognised
    section name is an error listing the valid ones, never a silent no-op.
    A budget below the never-dropped sections is reported as not met rather
    than met by dropping provenance.

R6  Band-envelope correlation reaches the digest as off-diagonal
    min/median/max/mean plus the two least-correlated pairs and the most
    correlated pair; the full 8x8 matrix stays in the JSON. Priority 3, not 5:
    234 bytes for the clearest broadband-vs-multiband tell in the tool should
    not die alongside the 700-byte processing block.

R7  mtx validate-dr <file> --published <DR> records this build's DR14 against
    a published rating for a track the user owns. FLAGS and METHOD then report
    what the record says -- [validated against N track(s)], [disputed], or
    [unverified] -- instead of a disclaimer that stays true forever.

Also fixes a crash found on a purchased file with non-Latin-1 tags:
subprocess.run(..., text=True) decodes with the machine's locale codec, so
ffprobe output on such a file killed the reader thread, proc.stdout came back
None, and json.loads(None) raised an uncaught TypeError. Every helper call now
states encoding="utf-8", errors="replace", run_ffprobe warns on empty output,
and a test fails if any future call site omits an explicit encoding.

params.profile.skipped_in_quick no longer lists stems: separation is opt-in
through --stems at either profile and was never a profile switch. The params
block is what makes a number traceable, so it cannot be the part that is wrong.

Schema 1.1.0, additive only: dr14.validation.record, and the off-diagonal
summary and extreme pairs under band_envelope_correlation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The output directory was named after the file, so a track ripped as
"07. Man I Need.flac" landed in mtx_out/07. Man I Need/ and told you
nothing about what it held.

Take the name from the embedded title and artist tags instead, falling
back to the filename when a file carries no title. Multi-value artist
tags (";", NUL or " / " joined) collapse to "A, B" with accent-folded
deduplication, and the result is sanitised for Windows path rules: no
reserved characters, no trailing dot or space, 150 characters at most.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@projectoverseer
projectoverseer merged commit 425d1b1 into main Aug 29, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant