Changelog¶
1.41.0 - 2018-07-15¶
- Documentation fixes #pr342 (Jakub Wilk)
- mid3v2: Add support for WXXX frames #344 #348
- Fix decoding of track_peak from MP3 Info Tag #pr345 (Anton Yuzhaninov)
- MonkeysAudio: set bits_per_sample for older files #347
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:
- 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
andid3.MVNM
- MP4: support
©mvi
,©mvc
,shwm
,stik
,rtng
,tves
,tvsn
,plID
,cnID
,geID
,atID
,sfID
,cmID
,akID
#130
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¶
1.36 - 2016.12.22¶
1.35 - 2016.11.02¶
- Tests: Require pytest
- Tools: Install .exe launchers on Windows
- setup.py: Require setuptools
- ID3:
1.34.1 - 2016.08.13¶
- ID3: Expose some internals again to make Picard (mostly) work again.
1.34 - 2016.07.20¶
- ID3:
- 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 - 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
- Fix
- 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
- Improved length and bitrate accuracy:
- ID3:
- New
id3.PictureType
enum for the picture type used in APIC frames #222
- New
- 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¶
1.28 - 2015.03.06¶
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"
- New
- OggOpus:
- Preserve data after vorbis comment ( See https://tools.ietf.org/html/draft-ietf-codec-oggopus-05#section-5.2) #202
- 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:
- New logo #b728fa75 (Samuel Messner)
- Add examples for handling cover art in vorbiscomment #200
- Add examples for id3v2.3
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:
- 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:
- 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¶
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:
- MP4:
- 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:
- FLAC:
- 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:
- Use ‘open’ rather than ‘file’ everywhere. #74 (Dan Callahan)
- mid3iconv:
- 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:
- OggTheora: Fix length/bitrate calculation. #99 (Christoph Reiter)
- MP4:
- OggOpus support. #115 (Christoph Reiter)
- Musepack:
1.20 - 2010.08.04¶
1.19 - 2010.02.18¶
- ID3:
- mid3v2:
- 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:
- 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.
- APEv2
- 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.