Skip to content

v0.2.1

Choose a tag to compare

@coconautilus17 coconautilus17 released this 01 Jul 23:24
· 414 commits to main since this release
4b947b1

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.json instead of a preset field list. ASIN is read from sidecar.audible.asin; single-file books (direct ID3 writes) read from marker.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_cache entries in libraforge.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 -- Audiobookshelf metadata.json is now written with authors as ["Name"] and series as ["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_title regex 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_override was 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_conflict was 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.py archived -- moved to scripts/archive/; auto-discovery now only finds the current v5 fixer.