Changelog
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
- ID3: Expose some internals again to make Picard (mostly) work again.
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
- MP4:
- New MP4Info.codec for identifying the contained audio codec
e.g. "mp4a", "alac", "mp4a.40.2", "ac-3" etc.
#b2f22b81c77
- New MP4Info.codec_description: name of the audio codec
e.g. "ALAC", "AAC LC", "AC-3"
- OggOpus:
- AAC:
- New AAC FileType. Supports loading ADTS/ADIF AAC files. #15
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:
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.