v0.2.1
New Features
-
Report retention (Settings > Reports): Prune old run reports automatically after each scan. Two independent opt-in rules: max age in days and max total reports kept. Also includes a manual "Prune now" button. Both rules are disabled by default.
-
Compare table: live applied metadata -- the "Current" column in manual review now shows the actual applied state from
libraforge.jsoninstead of a preset field list. ASIN is read fromsidecar.audible.asin; single-file books (direct ID3 writes) read frommarker.audible. All stored fields are shown, including year, subtitle, genre, and ASIN that were previously missing. -
Search from original backup -- manual review includes a checkbox to search Audible using the pre-apply backup title instead of the live tag, with an explanatory note when active.
-
Multifile duration from file cache -- duration for grouped multifile books is now summed from the
file_cacheentries inlibraforge.json. When the cache is missing or files have moved, a concurrent ffprobe fallback (16 workers) is used and results are saved to cache. -
ABS-compatible
metadata.json-- Audiobookshelfmetadata.jsonis now written withauthorsas["Name"]andseriesas["Series #N"](plain string arrays), matching the ABS import format.
Fixes
-
Single standalone mp3 books write direct ID3 tags -- books with a single mp3 file now write tags directly instead of producing a JSON sidecar.
should_write_json_sidecar()only returns true for grouped multifile books. -
"Voidknight Ascension - Book" wrong series -- the
series_number_titleregex was capturing trailing label words (Book, Volume, Part) as part of the series name before more-specific patterns could run. Added a guard to skip matches where the series ends with a label word. -
Path override corrupting series when path merges title + series --
apply_structured_path_overridewas replacing a correct embedded series with a path-derived merge of title + series (e.g. "Magic Eater" -> "Courts Magic Eater"). Added a merge-detection guard so the embedded granular values are preserved. -
Fractional prequel sequences rejected --
strong_identity_overrides_number_conflictwas rejecting matches where the local book number was a fractional prequel (e.g. 0.5) vs. a catalog sequence of 0. Now allows differences smaller than 1.0. -
Tests updated from v4_16 to v5 -- three test files referenced the archived
audible-metadata-fixer-v4_16.py. Updated to v5 and fixed three pre-existing regressions the archived tests had been hiding (series label parsing, title+series merge detection, fractional sequence scoring). -
audible-metadata-fixer-v4_16.pyarchived -- moved toscripts/archive/; auto-discovery now only finds the current v5 fixer.