Skip to content

v2.8.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 05:52

This release focuses on latent-bug discovery, bug fixes, and performance improvements, all identified and implemented by Claude Fable 5.

Highlights

  • Lossless undo for channel-specific and wrap-mode gain — files adjusted with -l (single channel) or -w (wrap mode) previously could not be restored losslessly: undo collapsed asymmetric MP3GAIN_UNDO values into one number and ignored the stored wrap flag. Undo now tracks both channel deltas independently and wraps back when the tag says so. (10d04a6)
  • Hardened MP4/AAC parsing against malformed files — corrupt or truncated MP4 files could panic an entire batch run or hang it forever. Box sizes and sample tables (stsz/stsc/stco/co64) are now validated before use, zero-size trak boxes no longer stall the scan, and extreme gain values no longer overflow. (9471354, #195)
  • Performance improvements across the board:
    • The default command analyzes each file once instead of twice, roughly halving the runtime of mp3rgain <files> (7d90443)
    • APE tag reads touch only the file tail — a 1000-file tag scan now reads a few hundred KB instead of the full audio data (#192)
    • AAC applies walk the bitstream once instead of twice, and MP4 codec detection reads only the moov box instead of the whole file (#193)
    • MP3 apply/undo now works on a single in-memory buffer — one read and one write instead of up to five reads and two writes per file (10d04a6)
    • GUI: Find Max Amplitude, Undo, and Delete Tags now process files in parallel, and the file table is virtualized so large libraries stay responsive (#194)

Fixes

  • The album summary in the default command now also appears when some files fail to analyze, computed from the files that succeeded (7d90443)
  • ID3v2 ReplayGain writes replace case-variant TXXX frames left by other taggers instead of duplicating them (10d04a6)
  • A malformed stsd box that undersizes itself is now treated as having no AAC track instead of reading codec data from past the box end (#195)

Other Changes

  • Internal deduplication: CLI per-file fan-out boilerplate, dry-run clipping summaries, the MP3 frame-walk loop, MP4 box navigation, and temp-file naming (#195, fd425a9)
  • Dependency updates: id3 1.17.0 (#185), GitHub Actions bumps (#186, #187)
  • Package manifest updates for v2.7.3 (winget, MacPorts, AUR)

Full Changelog: v2.7.3...v2.8.0