v2.8.0
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 asymmetricMP3GAIN_UNDOvalues 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-sizetrakboxes 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
moovbox 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)
- The default command analyzes each file once instead of twice, roughly halving the runtime of
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
TXXXframes left by other taggers instead of duplicating them (10d04a6) - A malformed
stsdbox 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