Changelog

1.48.0 - ????-??-??

  • Changed the default branch from master to main

1.47.0 - 2023-09-03

  • ID3: Allow reading TYER tags in the form of “yyyy-mm-dd” #pr597

  • ID3: Handle negative extended header sizes #pr607

  • ID3: id3 frames fix bad cast due to str.isdigit #pr616

  • MP3: Auto-detect MP3 files without ID3 tags #pr601

  • WAVE: Extensible wave format support #595 #pr596

  • WAVE, AIFF: Handle truncated IFF files #496 #pr517

  • MP4: add a check for wrong offsets in mp4 files #426 #pr462

  • FLAC: Fix cuesheet and seektable saving #pr534

  • TrueAudio: Read sample rate as unsigned and handle zero sample rate #pr609

  • docs: Fixed documentation for id3.ID3.save parameter v2_version

  • docs: Make extlinks compatible with sphinx 6.0 #pr590

  • docs: Fixed various typos #pr602

  • Add some more type annotations #pr622

  • Various minor fixes for issues uncovered by oss-fuzz #pr620 #pr621 #pr623

1.46.0 - 2022-10-09

  • Drop Support for Python 3.5 and 3.6 #pr487 #pr568

  • Add pyproject.toml and switch to poetry for development only #pr513

  • tests: no longer include flake8 in the test suite, it has to be run separately now #pr571

  • Start adding some type annotations and integrate mypy #pr488

  • easyid3: map easyid3 grouping to TIT1 #pr505

  • mutagen-inspect: add usage documentation #pr540

  • wave: Fix bitrate calculation #pr566

  • FLAC: handle files where the first metadata block is not STREAMINFO #pr500

  • Increase buffer size for rewriting files from 256K to 1M to improve performance with network shares #pr570

  • Other changes: code cleanup #pr514, typos #pr565, remove upper limit for python version #pr579

1.45.1 - 2020-07-31

  • Fix flake8 tests when run after calling setup.py build #482

  • No longer use mmap when rewriting files. Fixes slow save performance with Windows network shares, ZFS and more #pr483 #pr484

1.45.0 - 2020-07-11

Fuzzing related:

  • Fuzzing integration with python-afl #pr449

  • Fix various unhandled error cases in ogg, asf, oggvorbis, id3 #pr441, #pr445, #pr446, #pr447, #pr448, #pr454 (Julien Voisin)

  • aac: Fix ZeroDivisionError in case frequency is unknown

  • musepack: handle truncated stream header

  • musepack: handle invalid sample rate index

  • musepack: handle duplicate RG/SH packets

  • oggtheora: handle truncated header packet

  • oggtheora: fail if FRN in the header packet is zero

  • oggtheora: handle empty pages in more cases

  • ogg: handle empty pages in to_packets()

  • aiff: handle overflow in read_float() #pr456

1.43.1 - 2020-07-11

  • Add pickle support for enum types #pr477

  • docs: fix various warnings with sphinx v3

1.44.0 - 2020-02-10

1.43.0 - 2019-11-17

  • Note: 1.43.x might be the last version supporting Python 2

  • Python 3.4 is no longer supported

  • Building requires ‘setuptools’ now, CLI tools depend on ‘pkg_resources’

  • CLI tools are setuptools entry points now

1.42.0 - 2018-12-26

1.41.1 - 2018-08-11

  • MP4: fix rtng, stik, shwm getting saved as 16bit ints instead of 8bit #349

1.41.0 - 2018-07-15

1.40.0 - 2018-01-25

  • APEv2: Ensures tags are saved in a deterministic way #pr329 (cushy007)

  • Restore WinXP support for the CLI tools #332

  • easymp4: Fix EasyMP4.add_tags() when no tags exist #334

  • id3: Fix PyCharm not being able to resolve id3 frame class references #336

  • Support pathlib.Path objects for paths (PEP 519) #337 #pr338 (Andrew Rabert)

  • Use semver for versioning

1.39 - 2017-11-05

  • Tests:

    • Require hypothesis

    • Run pycodestyle/pyflakes tests by default. Skip with --no-quality or -m no quality when using pytest directly.

  • Python 3.3 is no longer supported

  • MP3: Improved bitrate accuracy for files with XING header #328 (thanks Michaël Defferrard)

  • ASF: Fix case where some tags resulted in broken ASFUnicodeAttribute instances #324

  • Add support for filesystems which don’t support opening files read/write (gvfs over fuse for example) #300

  • mid3v2: Add support for USLT #306

  • Minor improvements by Borewit and Evan Purkhiser

1.38 - 2017-06-01

  • Note: New release tarballs are now hosted on github: https://github.com/quodlibet/mutagen/releases

  • ID3:

    • Add iTunes grouping frame id3.GRP1 #304

    • Fix exposing text frames where the text can’t be encoded with the reported encoding due to merging of frames #307

  • OGG: Fix wrong StreamInfo.length (small negative value) for all ogg based formats in rare cases. #308

1.37 - 2017.02.24

  • Relicense “GPLv2” → “GPLv2 or later” #291

  • DSF: add mutagen.dsf module for DSF (DSD Stream File) support #pr283 (Boris Pruessmann)

  • MP3: Add mp3.MPEGInfo.encoder_settings containing a guess of the encoder settings used, for example "-V2" for LAME #66

  • ID3: add iTunes movement related frames id3.MVIN and id3.MVNM

  • MP4: support ©mvi, ©mvc, shwm, stik, rtng, tves, tvsn, plID, cnID, geID, atID, sfID, cmID, akID #130

1.36.3 - 2017.02.24

  • MP3: fix error with xing frames without a frame count #292

1.36.2 - 2017.01.25

  • ID3: Always write little endian utf-16 with BOM. Fixes tests on big endian machines #pr289

1.36.1 - 2017.01.22

  • Support GAE runtime #286

  • FLAC: Fix crash when loading files with zero samples #287

  • MP3: Handle broken lame tags written by older lame versions

1.36 - 2016.12.22

  • ID3: Ignore trailing empty values for v2.3 text frames #276

  • ID3: Write large APIC frames last #278

  • EasyID3: support saving as v2.3 #188

  • FLAC: Add StreamInfo.bitrate #279

  • mid3cp: Add --merge option #277

  • MP4: Allow loading files without audio tracks #272

1.35.1 - 2016.11.09

  • Revert back to distutils #273

1.35 - 2016.11.02

  • Tests: Require pytest

  • Tools: Install .exe launchers on Windows

  • setup.py: Require setuptools

  • ID3:

    • Fix loading files with CRM frames #239

    • Fix loading AENC, LINK, GRID frames with no payload

    • Merge duplicate text frames with same key on load #172

    • Allow parsing of duplicate APIC frames #172

    • Parse utf-16 text fields with missing BOM #267

    • Increase max resyncs for the mpeg frame search #268

1.34.1 - 2016.08.13

1.34 - 2016.07.20

  • ID3:

    • Add CTOC and CHAP frames. New classes: ID3Tags, CTOCFlags. #6

    • Add TCAT, TKWD, PCST frames. #249

    • Validate user provided LNK/LINK frameid. #242

    • Add RVAD, RVA frames

    • Add TST, TSA, TS2, TSP and TSC frames

    • Fix not writing optional fields when saving to v2.3

    • Add default field values for all frames

  • Drop Python 2.6 support

  • EasyID3: Fix TXXX frame encoding when setting a non-latin1 encodable value after a latin1 one. #263

1.33.2 - 2016.07.05

  • Fix loading of small ogg/apev2 files (1.33 regression)

1.33.1 - 2016.06.29

  • Fix Overeager deprecation warnings #261

1.33 - 2016.06.29

  • FileType, Metadata: File-like object support #1

  • mid3v2: Add APIC support. #47

  • EasyID3: Fix handling of RVA2 frames with non-lowercase description #215

  • mid3v2: Add UFID support. #234

  • ID3: Include human-readable representation of the picture type in APIC._pprint() #244

  • EasyID3: make albumartist use TPE2 and move performer to TXXX. #252

  • ID3: id3.ID3TimeStamp comparator: check type #pr260 (Fabian Peter Hammerle)

  • setup.py: follow PEP440 for the development version

  • FileType/Metadata.load/save/delete no longer raise IOError or IOError subclasses. They only raise subclasses of MutagenError.

1.32 - 2016.05.02

  • Add basic SMF (Standard MIDI File) support (mutagen.smf)

  • FLAC: add audio/flac mime type. #235

  • ASF: Fixed crash when object size is longer than the header and file length (Ben Ockmore)

  • ID3: Validate attributes set after frame creation 69368c31e00 (Daniel Plachotich)

  • MP4: validate values in __setitem__ so things don’t fail in save() #236

  • tests: Fix SynchronizedTextSpec test on big-endian machines #247 (Daniel Plachotich)

  • ID3: do type checking in __setitem__ #251

  • Building the documentation now requires sphinx >= 1.3

  • New mutagen.Tags base class for tags

  • Moved from Bitbucket to GitHub

1.31 - 2015.09.10

  • New padding control API for flac/id3/mp4/asf/ogg/aiff and everything based on it, except oggflac #229

  • Mutagen will now reduce padding on save if there is lots of it.

  • delete() will remove padding in addition to tags.

  • ASF:

    • Padding support #201

    • Don’t report negative lengths for some broken files

    • New asf.ASFInfo.codec_type/codec_name/codec_description

    • Implement ASF.delete()

  • OGG: Padding support for Opus/Vorbis/Theora/Speex

  • M4A: Implementation removed. Every operation will raise. Use mp4 instead.

  • Tools: Support Unicode output under Windows #232

1.30 - 2015.08.22

  • FLAC:

    • Fix flac.FLAC.save() in case the source contained a too large (invalid but recovered) image block #226

  • MP3:

    • Improved length and bitrate accuracy:

      • Read lame “Info” tags for improved bitrate/length accuracy

      • Use bytes info of VBRI headers for improved bitrate accuracy

      • Subtract encoder delay/padding from length for improved length accuracy (especially for short tracks)

      • Fix rare false identification of Xing headers #182

    • New mp3.MPEGInfo.encoder_info attribute containing the encoder name and version #66

    • New mp3.MPEGInfo.bitrate_mode attribute exposing if the file is VBR, ABR or CBR #24 #66

    • New mp3.MPEGInfo.channels attribute providing the channel count

    • New mp3.MPEGInfo.track_gain/track_peak/album_gain values exposing the replaygain info provided by the lame header #36

  • ID3:

  • MP4:

    • Fix MP4FreeForm.__eq__ and MP4Cover.__eq__ when comparing with bytes #218

  • Don’t raise on FileType.save() if there are no tags. #227

  • Minor fixes: #228

1.29 - 2015.05.09

  • mid3v2: Fix an error under Python 3 with files without tags #219

  • mid3v2: Various Windows+Python2+Unicode fixes #214

  • Don’t emit warnings during loading (ID3Warning) #223

  • py.test support

1.28 - 2015.03.06

  • Various minor fixes to make mutagen behave the same under Python3 as under Python2.

  • Update gpl text #205

  • Documentation: Add example for how to create a new flac.Picture #209

  • ID3:

    • Various error handling fixes (#110, #211, …)

    • Don’t hide ID3 loading errors with ID3FileType.

    • In case a synch safe marked frame isn’t sync safe, only warn #210

    • Removed PEDANTIC mode

  • Tools:

    • Add signal handling #170

    • mid3cp: Make it work under Windows.

    • mutagen-inspect: Make it work under Windows+Python3 #216

    • Support unicode file paths under Windows+Python2 #214

    • Support file paths with invalid encoding under Unix+Python3.

1.27 - 2014.11.28

1.26 - 2014.11.10

  • MP4:

    • Parse channels/sample_rate/bits_per_sample/bitrate for ALAC files #199 192cfcaf14 (Adrian Sampson, Christoph Reiter)

  • ASF:

    • Support writing multiple values for Author/Title/Copyright/Description/Rating #151

    • Fix read order for multi value tags

    • Various Python3 fixes

  • EasyID3: Add more tag mappings #136 (Ben Ockmore)

  • MPC/SV8: Fix parsing of SH packets with padding #198

  • docs:

1.25.1 - 2014.10.13

  • ID3: Fix parsing of some files with Python 3 #194

1.25 - 2014.10.03

  • Python 3 support (Ben Ockmore et al) #27 Supported: Python 2.6, 2.7, 3.3, 3.4 (CPython and PyPy)

  • All custom exceptions now have a common mutagen.MutagenError base class

  • mutagen.File: prefer theora over vorbis/flac streams in ogg #184

  • New mid3cp script for copying id3 tags #178 (Marcus Sundman, Ben Ockmore)

  • ID3:

    • Parse 2.3/4 frames with 2.2 names #177

    • Try to detect apev2 tags when looking for id3v1 tags #122

    • New id3.Encoding, id3.ID3v1SaveOptions enums #190

  • ASF:

    • Raise a proper exception on invalid utf-16 #127

  • APEv2:

    • Fix UnicodeDecodeError during parsing #174

  • MP4:

    • Fix struct.error exception during parsing #119

    • New AtomDataType enum for MP4FreeForm.dataformat values

    • Read some previously ignored purl/egit atoms

    • Read multi value reverse DNS tags written by foobar2000

    • Read multi value atoms written by MusicBee #165

    • Write back unknown atoms and ones that failed to parse.

1.24 - 2014.08.13

  • Moved to Bitbucket: https://bitbucket.org/lazka/mutagen

  • ID3:

    • Parse utf-16 text frames with wrong termination #169

    • Fix parsing of utf-16 SYLT frames #173

  • WavPack:

    • Fix length calculation if sample count is missing in the header #180

  • setup.py: Don’t install leftover files produced by the test suite #179

  • tests: Fix error with POSIX locale #181

1.23 - 2014.05.14

  • tools: Don’t crash in misconfigured envs, fall back to utf-8.

  • mp3: Return correct mimetype for MP2 files. #163

  • id3: deterministic sorting of frames. #166

  • AIFF support #146 (Evan Purkhiser)

1.22 - 2013.09.08

  • Minimum required Python version is now 2.6

  • Online API reference at https://mutagen.readthedocs.org/

  • EasyID3:

    • Fix crash with empty TXXX values. #135

  • ID3:

    • id3v2.3 writing support #85

    • Add iTunes podcast frames (TGID, TDES, WFED) #141

    • Updated id3v1 genre list

  • MP4:

    • add_tags() will not replace existing tags. #101

    • Don’t ignore tags if parsing unknown atoms fails.

    • Raise on invalid 64bit atom size #132 (Sidnei da Silva)

  • APEv2:

    • Handle invalid tag item count. #145 (Dawid Zamirski)

  • Ogg:

    • Faster parsing of files with large packets.

  • VComment:

    • Preserve text case for field names added through the dict interface #152

  • mid3v2:

    • New -e,–escape switch to enable interpretation of escape sequences and makes escaping of the colon separator possible. #159

  • mid3iconv:

    • Convert COMM frames #128

1.21 - 2013.01.30

  • Fix Python 2.3 compatibility (broken in 1.19).

  • Fix many warnings triggered by -3. #27

  • mid3v2:

    • Add –TXXX support. #62 (Tim Phipps)

    • Add –POPM support. #71

    • Allow setting multiple COMM or TXXX frames with one command line.

  • FLAC:

    • Try to handle corrupt Vorbis comment block sizes. #52

    • Try to handle corrupt Picture block sizes #106 (Christoph Reiter)

    • Don’t leak file handle with PyPy #111 (Marien Zwart)

  • ID3:

    • MakeID3v1: Do not generate bad tags when given short dates. #69

    • ParseID3v1: Parse short (< 128 byte) tags generated by old Mutagen implementations of MakeID3v1, and tags with garbage on the front.

    • pprint: Sort frames by name.

    • Upgrade unknown 2.3 frames #97 (Christoph Reiter)

    • Fix handling of invalid SYLT frames #105 (Christoph Reiter)

  • MP3:

    • Fix error when loading extremely small MP3s. #72

    • Fix rounding error in CBR length calculation #93 (Christoph Reiter)

  • Use ‘open’ rather than ‘file’ everywhere. #74 (Dan Callahan)

  • mid3iconv:

    • Accurately copy QL-style frame encoding behavior. #75

    • Skip unopenable files. #79

  • ID3FileType:

    • Remember which tag type load() was called with even if the file doesn’t yet have any ID3 tags. #89

  • VComment:

    • Prevent MemoryError when parsing invalid header #112 (Jyrki Pulliainen)

  • ASF:

    • Don’t corrupt files on the second save() call #81 (Christoph Reiter)

    • Always store GUID objects in the MetadataLibraryBlock #81

  • OggTheora: Fix length/bitrate calculation. #99 (Christoph Reiter)

  • MP4:

    • Less strict MP4 covr atom parsing. #86 (Lukáš Lalinský)

    • Support atoms that extend to the end of the file. #109 (Sidnei da Silva)

    • Preserve freeform format flags #103 (Christoph Reiter)

  • OggOpus support. #115 (Christoph Reiter)

  • Musepack:

    • Fix SV7 bitrate calculation #7 (Christoph Reiter)

    • Support SV8 #7 (Christoph Reiter)

1.20 - 2010.08.04

  • ASF: Don’t store blocks over 64K in the MetadataObject block; use the MetadataLibraryBlock instead. #60 (Lukáš Lalinský)

  • ID3: Faster parsing of files with lots of padding. #65 (Christoph Reiter)

  • FLAC: Correct check for audio data start. #67

1.19 - 2010.02.18

  • ID3:

    • POPM: ‘count’ is optional; the attribute may not exist. #33

    • TimeStampTextFrame: Fix a TypeError in unicode comparisons. #43

    • MakeID3v1: Translate TYER into ID3v1 year if TDRC is not present. #42

  • mid3v2:

    • Allow –delete followed by –frame, and –genre 1 –genre 2. #37

    • Add –quiet and –verbose flags. #40

  • moggsplit: –m3u option to write an M3U playlist of the new files. #39

  • mid3iconv: Fix crash when processing TCML or TIPL frames. #41

  • VCommentDict: Correctly normalize key names for .keys() iterator. #45

  • MP3: Correct length calculation for MPEG-2 files. #46

  • oggflac: Fix typo in docstring. #53

  • EasyID3: Force UTF-8 encoding. #54

  • EasyMP4: Fix ‘genre’ translation. #56

1.18 - 2009.10.22

  • ASF:

    • Distinguish between empty and absent tag values in ContentDescriptionObjects. #29

  • mid3iconv:

    • Fix a crash when processing empty (invalid) text frames.

  • MAJOR API INCOMPATIBILITY!!!!

    • EasyID3FileType is now in mutagen.easyid3, not mutagen.id3. This change was necessary to restore API compatibility with 1.16, as 1.17 accidentally contained a circular import preventing mutagen.easyid3 from importing by itself. #32

1.17 - 2009.10.07

  • ID3:

    • Support for the iTunes non-standard TSO2 and TSOC frames.

    • Attempt to recover from bad SYLT frames. #2

    • Attempt to recover from faulty extended header flags. #4 #21

    • Fix a bug in ID3v2.4 footer flag detection, #5

  • MP4:

    • Don’t fail or double-encode UTF-8 strings when given a str.

    • Don’t corrupt 64 bit atom sizes when resizing atoms. #17

  • EasyID3:

    • Extension API for defining new “easy” tags at runtime.

    • Support for many, many more tags.

  • OggVorbis, OggSpeex: Handle bitrates below 0 as per the spec. #30

  • EasyMP4: Like EasyID3, but for iTunes MPEG-4 files.

  • mutagen.File: New ‘easy=True’ argument to create new EasyMP3, EasyMP4, EasyTrueAudio, and EasyID3FileType instances.

1.16 - 2009.06.15

  • Website / code repository move.

  • Bug Fixes:

    • EasyID3: Invalid keys now raise KeyError (and ValueError).

    • mutagen.File: .flac files with an ID3 tag will be opened as FLAC.

  • MAJOR API INCOMPATIBILITY!!!!

    • Python 2.6 has required us to rename the .format attribute of M4A/MP4 cover atoms, because it conflicts with the new str.format method. It has been renamed .imageformat.

1.15 - 2008.12.01

  • Bug Fixes:

    • mutagen.File: Import order no longer affects what type is returned.

    • mutagen.id3: Compression of frames is now disabled.

    • mutagen.flac.StreamInfo: Fix channel mask (support channels > 2). #35

    • mutagen.mp3: Ignore Xing headers if they are obviously wrong.

1.14 - 2008.05.31

  • Bug Fixes:

    • MP4/M4A: Fixed saving of atoms with 64-bit size on 64-bit platforms.

    • MP4: Conversion of ‘gnre’ atoms to ‘xa9gen’ text atoms now correctly produces a list of string values, not just a single value.

    • ID3: Broken RVA2 frames are now discarded. (Vladislav Naumov)

    • ID3: Use long integers when appropriate.

    • VCommentDict: Raise UnicodeEncodeErrors when trying to use a Unicode key that is not valid ASCII; keys are also normalized to ASCII str objects. (Forest Bond)

  • Tests: * FLAC: Use 2**64 instead of 2**32 to test overflow behavior.

1.13 - 2007.12.03

  • Bug Fixes:

    • FLAC: Raise IOError, instead of UnboundLocalError, when trying to open a non-existent file. (Lukáš Lalinský, Debian #448734)

    • Throw out invalid frames when upgrading from 2.3 to 2.4.

    • Fixed reading of Unicode strings from ASF files on big-endian platforms.

  • TCP/TCMP support. (Debian #452231)

  • Faster implementation of file-writing when mmap fails, and exclusive advisory locking when available.

  • Test cases to ensure Mutagen is not vulnerable to CVE-2007-4619. It is not now, nor was it ever.

  • Use VBRI header to calculate length of VBR MP3 files if the Xing header is not found.

1.12 - 2007.08.04

  • Write important ID3v2 frames near the start. (Lukáš Lalinský)

  • Clean up distutils functions.

1.11 - 2007.04.26

  • New Features:

    • mid3v2 can now set URL frames. (Vladislav Naumov)

    • Musepack: Skip ID3v2 tags. (Lukáš Lalinský)

  • Bug Fixes:

    • mid3iconv: Skip all timestamp frames. (Lukáš Lalinský)

    • WavPack: More accurate length calculation. (‘ak’)

    • PairedTextFrame: Fix typo in documentation. (Lukáš Lalinský)

    • ID3: Fixed incorrect TDAT conversion. The format is DDMM, not MMDD. (Lukáš Lalinský)

  • API:

    • Metadata no longer inherits from dict.

    • Relatedly, the MRO has changed on several types.

    • More documentation for MP4 atoms. (Lukáš Lalinský)

    • Prefer MP3 for files with unknown extensions and ID3 tags.

1.10.1 - 2007.01.23

  • Bug Fixes:

    • Documentation mentions ASF support.

    • APEv2 flags and valid keys are fixed.

    • Tests pass on Python 2.3 again.

1.10 - 2007.01.21

  • New Features:

    • FLAC: Skip ID3 tags. Added option to delete them on save.

    • EncodedTextSpec: Make private members more private.

    • Corrupted Oggs generated by GStreamer (e.g. Sound Juicer) can be read.

    • FileTypes have a .mime attribute which is a list of likely MIME types for the file.

    • ASF (WMA/WMV) support.

  • Bug Fixes:

    • ID3: Fixed reading of v2.3 tags with unsynchronized data.

    • ID3: The data length indicator for compressed tags is written as a synch-safe integer.

1.9 - 2006.12.09

  • New Features:

    • OptimFROG support.

    • New mutagen.mp4 module with support for multiple data fields per atom and more compatible tag saving implementation.

    • Support for embedded pictures in FLAC files (new in FLAC 1.1.3).

  • mutagen.m4a is deprecated in favor of mutagen.mp4.

1.8 - 2006.10.02

  • New Features:

    • MonkeysAudio support. (#851, Lukáš Lalinský)

    • APEv2 support on Python 2.5; see API-NOTES. (#852)

1.7.1 - 2006.09.24

  • Bug Fixes:

    • Expose full ID3 tag size as .size. (#848)

  • New Features:

    • Musepack Replay Gain data is available in SV7 files.

1.7 - 2006.09.15

  • Bug Fixes:

    • Trying to save an empty tag deletes it. (#813)

    • The semi-public API removal mentioned in 1.6’s API-NOTES happened.

    • Stricter frame ID validation. (#830, Lukáš Lalinský)

    • Use os.path.devnull on Win32/Mac OS X. (#831, Lukáš Lalinský)

  • New Features:

    • FLAC cuesheet and seektable support. (#791, Nuutti Kotivuori)

    • Kwargs can be passed to ID3 constructors. (#824, Lukáš Lalinský)

    • mutagen.musepack: Read/tag Musepack files. (#825, Lukáš Lalinský)

  • Tools:

    • mutagen-inspect responds immediately to keyboard interrupts.

1.6 - 2006.08.09

  • Bug Fixes:

    • IOError rather than NameError is raised when File succeeds in typefinding but fails in stream parsing.

    • errors= kwarg is correctly interpreted for FLAC tags now.

    • Handle struct.pack API change in Python 2.5b2. (SF #1530559)

    • Metadata ‘load’ methods always reset in-memory tags.

    • Metadata ‘delete’ methods always clear in-memory tags.

  • New Features:

    • Vorbis comment vendor strings include the Mutagen version.

    • mutagen.id3: Read ASPI, ETCO, SYTC, MLLT, EQU2, and LINK frames.

    • mutagen.m4a: Read/tag MPEG-4 AAC audio files with iTunes tags. (#681)

    • mutagen.oggspeex: Read/tag Ogg Speex files.

    • mutagen.trueaudio: Read/tag True Audio files.

    • mutagen.wavpack: Read/tag WavPack files.

  • Tools:

    • mid3v2: –delete-frames. (#635)

1.5.1 - 2006.06.26

  • Bug Fixes:

    • Handle ENODEV from mmap (e.g. on fuse+sshfs).

    • Reduce test rerun time.

1.5 - 2006.06.20

  • Bug Fixes:

    • APEv2

      • Invalid Lyrics3v2 tags are ignored/overwritten.

      • Binary values are autodetected as documented.

    • OggVorbis, OggFLAC:

      • Write when the setup packet spans multiple pages.

      • Zero granule position for header packets.

  • New Features:

    • mutagen.oggtheora: Read/tag Ogg Theora files.

    • Test Ogg formats with ogginfo, if present.

1.4 - 2006.06.03

  • Bug Fixes:

    • EasyID3: Fix tag[“key”] = “string” handler. (#693)

    • APEv2:

      • Skip Lyrics3v2 tags. (Miguel Angel Alvarez)

      • Avoid infinite loop on malformed tags at the start of the file.

    • Proper ANSI semantics for file positioning. (#707)

  • New Features:

    • VComment: Handle malformed Vorbis comments when errors=’ignore’ or errors=’replace’ is passed to VComment.load. (Bastian Kleineidam, #696)

    • Test running is now controlled through setup.py (./setup.py test).

    • Test coverage data can be generated (./setup.py coverage).

    • Considerably more test coverage.

1.3 - 2006.05.29

  • New Features:

    • mutagen.File: Automatic file type detection.

    • mutagen.ogg: Generic Ogg stream parsing. (#612)

    • mutagen.oggflac: Read/tag Ogg FLAC files.

    • mutagen.oggvorbis no longer depends on pyvorbis.

    • ID3: SYLT support. (#672)

1.2 - 2006.04.23

  • Bug Fixes:

    • MP3: Load files with zeroed Xing headers. (#626)

    • ID3: Upgrade ID3v2.2 PIC tags to ID3v2.4 APIC tags properly.

    • Tests exit with non-zero status if any have failed.

    • Full dict protocol support for VCommentDict, FileType, and APEv2 objects.

  • New features:

    • mutagen.oggvorbis gives pyvorbis a Mutagen-like API.

    • mutagen.easyid3 makes simple ID3 tag changes easier.

    • A brief TUTORIAL was added.

  • Tools:

    • mid3iconv, a clone of id3iconv, was added by Emfox Zhou. (#605)

1.1 - 2006.04.04

  • ID3:

    • Frame and Spec objects are not hashable.

    • COMM, USER: Accept non-ASCII (completely invalid) language codes.

    • Enable redundant data length bit for compressed frames.

1.0 - 2006.03.13

  • mutagen.FileType, an abstract container for tags and stream information.

  • MP3: A new FileType subclass for MPEG audio files.

  • FLAC:

    • Add FLAC.delete.

    • Raise correct exception when saving to a non-FLAC file.

    • FLAC.vc is deprecated in favor of FLAC.tags.

  • VComment (used by FLAC):

    • VComment.clear to clear all tags.

    • VComment.as_dict to return a dict of the tags.

  • ID3:

    • Fix typos in PRIV._pprint, OWNE._pprint, UFID._pprint.

  • mutagen-pony: Try finding lengths as well as tags.

  • mutagen-inspect: Output stream information with tags.

0.9 - 2006.02.21

  • Initial release.