Changelog

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 [pr-260] (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 [bb-pr-8] (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] [bb-pr-5] (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:
    • New logo [bb-pr-4] (Samuel Messner)
    • Add examples for handling cover art in vorbiscomment [200]
    • Add examples for id3v2.3

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-existant 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.