640 stars · GPL-3.0, read from /blob/0.9.x/LICENSE, the plain unmodified FSF text. The README and docs say 'version 3 of the GPL' while the link beside that text points at a GPL-2.0 page; the file settles it as version 3, and the broken link is a documentation defect rather than a licence ambiguity · v0.9.9 (2025-11-16) — THE YEAR TRAP. /releases/latest read '16 Nov', which would have been recorded as 2026 and ~11 months too new. pypi.org/project/eyeD3/ dates 0.9.9 to 16 November 2025 and settled it. ungh's releases endpoint refused this row · Track this in Scout
Reads and rewrites the artist, album and title tags inside MP3 files, from the command line or from a script.
▶Repo detailsthe review · specs · pros & cons · install
What it does
You run eyeD3 with a file name and it prints that file's tag: artist, album, title, track, and the audio details such as play time, bit rate and sampling frequency. Pass options and it writes the values back into the file. It supports four families of tag format — version 1.x, version 2.2 as read-only, and versions 2.3 and 2.4 — and it ships fourteen plugins for particular jobs, including extracting and setting cover art, generating statistics across a music collection, fixing up a directory, and writing the tag out as JSON or YAML. It is also importable as a Python module, so a script can do the same work in a loop. What it does not do is handle anything but MP3: the documentation describes MP3 and ID3 only, and frames other audio formats as a future possibility rather than a current feature. It also cannot write version 2.2 tags, only read them.
Why it matters
Who it suits. Anyone with a music folder that was assembled over twenty years from a dozen sources, with tags to match. It is at its best in a script: read a thousand files, fix one field, write them back. Skip it if your music is in FLAC, Ogg, M4A or anything else, because none of those are supported, and skip it if you want a window to click in rather than a command to type.
Verdict. Worth twenty minutes if the folder is a mess, and it is the smallest project in this edition at 640 stars. Two facts to hold together. Releases are slow and uneven: there was a gap of about three years between October 2022 and April 2025, and the newest release, 0.9.9, is dated 16 November 2025. But code landed on 26 May 2026, so the project is not dormant and this report does not call it so — a release date is not a code date, and the newer of the two is the one that counts. The licence is GPL-3.0, read from the file and completely unmodified, which matters if you plan to link the library into something you distribute: the documentation's own text says version 3 while the link beside it points at version 2, and the file settles it as version 3. If you need more than MP3, quodlibet/mutagen is the Python library that handles many formats, and it took code on 20 August 2026.
- GPL-3.0 licence, read from the file and plain, with the project maintained by a named individual since 2017.
- Fourteen plugins for specific jobs, including cover art, collection statistics and exporting a tag as JSON.
- Both a command you type and a Python module you import, so one install covers one-off fixes and bulk scripts.
- MP3 only. No FLAC, no Ogg, no M4A, and no metadata format other than ID3.
- Version 2.2 tags can be read but not written, and the newest release is from 16 November 2025.
- The project's own sources disagree about which Python version is needed: the README says 3.10 or newer, the documentation says 3.9, and an installation page still mentions 3.7.
quodlibet/mutagenThe Python library for many audio formats rather than MP3 only, at 1,969 stars, with code on 20 August 2026.
Track this in Scout
taglib/taglibThe long-established C++ library behind a great many music players, at 1,461 stars, with code on 10 October 2026.
Track this in Scout
beetbox/beetsA whole music library manager that looks tags up in an online database and corrects them, at 15,560 stars; broader than tag editing.
Track this in Scout
python3 -m venv venv source venv/bin/activate pip install eyeD3 # Read one file's tag eyeD3 song.mp3 # Write some fields eyeD3 --artist "Some Artist" --album "Some Album" --title "Some Title" --track 3 song.mp3