TagPy is a a set of Python bindings for Scott Wheeler's TagLib. It builds upon Boost.Python, a wrapper generation library which is part of the Boost set of C++ libraries.
Just like TagLib, TagPy can:
- read and write ID3 tags of version 1 and 2, with many supported frame types for version 2 (in MPEG Layer 2 and MPEG Layer 3, FLAC and MPC),
- access Xiph Comments in Ogg Vorbis Files and Ogg Flac Files,
- access APE tags in Musepack and MP3 files.
- access ID3 version 2 tags in WAV files
All these have their own specific interfaces, but TagLib's generic tag reading and writing mechanism is also supported.
You can find examples in the test/ directory.
If you're lucky (Python 3.7-3.9 on x86 Linux currently), you can probably just run pip install tagpy
which will use the precompiled wheels. If this fails due to compilation
issues, you'll need to install some things first.
- Debian:
apt-get install libboost-python-dev libtag1-dev
- Fedora:
dnf install boost-python3-devel taglib-devel
- Alpine 3.17:
apk add taglib-dev boost1.80-python3
(or anotherboost*-python3
for other alpine versions) Other setups are not currently supported, but patches with CI checking for others are welcomed.
TagPy works with
- TagLib 1.4
- Boost.Python 1.74
- gcc 10.2.1
Slightly older versions of gcc and Boost.Python should be fine, but the 1.4 requirement for TagLib is firm. Anything newer is probably ok, and please file bugs for anything that fails.
Using TagPy is as simple as this:
>>> import tagpy
>>> f = tagpy.FileRef("la.mp3")
>>> f.tag().artist
u'Andreas'
The test/
directory contains a few more examples.
In general, TagPy duplicates the TagLib API, with a few notable exceptions:
-
Namespaces (i.e. Python modules) are spelled in lower case. For example,
TagLib::Ogg::Vorbis
is nowtaglib.ogg.vorbis
. -
Enumerations form their own scope and are not part of any enclosing class scope, if any.
For example, the value
TagLib::String::UTF16BE
from the enumTagLib::String::Type
is nowtagpy.StringType.UTF16BE
. -
TagLib::String
objects are mapped to and expected as Python unicode objects. -
TagLib::ByteVector
objects are mapped to regular Python string objects.