OpusTag
OpusTag is a modern, elegant audio metadata manager designed specifically for classical music collectors. It combines a powerful local library organizer with an integrated high-resolution cover art fetcher powered by the iTunes API.
✨ Features
- Apple Music-Inspired UI: A clean, dark-mode interface with frosted glass effects and fluid animations.
- High-Res Cover Art: Search and download original artwork (up to 3000px+) directly from Apple's servers.
- One-Click Embedding: Automatically match and embed cover art into your FLAC files.
- Metadata Editing: Edit album titles, artists, years, genres, and composers with a streamlined bulk editor.
- Local Library: Scan your local music folder and visualize your collection in a beautiful grid.
- Dockerized: Fully containerized for easy deployment and isolation.
🚀 Getting Started
OpusTag can be installed as a Python package or run via Docker.
Prerequisites
- A folder containing your music collection.
Installation (Pip)
Install the latest version from PyPI:
pip install opustag
Start the application pointing to your music directory:
opustag --music-dir /path/to/your/music
This will launch the server and open your default web browser to the OpusTag interface.
Installation (Docker)
Pull and run the pre-built image from Docker Hub:
docker run -d \
-p 8000:8000 \
-v /path/to/your/music:/music \
xiaoran007/opustag:latest
The application will be available at http://localhost:8000.
Development (Build from Source)
If you want to contribute or build from source:
-
Clone the repository:
git clone https://github.com/xiaoran007/OpusTag.git cd OpusTag
-
Start Dev Container:
make dev
The dev application will be available at http://localhost:8001.
📖 Usage Guide
1. Searching for Artwork
- Go to the Search tab (default view).
- Type an artist, album, or composer name (e.g., "Karajan Beethoven 9").
- Browse high-resolution results from Apple Music.
- Click the Search Icon to view the full-size original image in a new tab.
- Click the Download Icon to save the image locally.
2. Managing Your Library
- Switch to the Library tab via the sidebar.
- Click the Refresh button to scan your mapped music folder.
- Your albums will appear in a grid. Albums missing covers will show a placeholder disc icon.
3. Editing & Embedding
- Click on any album to open the Detail View.
- Add/Replace Cover: Click "Auto-Match / Replace Cover". A search window will appear pre-filled with the album's info. Select the correct cover, and OpusTag will automatically download and embed it into all tracks of that album.
- Edit Tags: Click "Edit Metadata" to modify the Album Artist, Title, Year, Genre, or Composer. Changes are applied in bulk to all tracks.
📝 License
This project is open-source and available under the GPL v3.
Release files for opustag 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| opustag-0.2.2.tar.gz | 112.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| opustag-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 225.8 kB
Release files / opustag-0.2.2.tar.gz
| Download URL | opustag-0.2.2.tar.gz |
|---|---|
| Size | 112.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d67fe61b1995231f957c396effe95ae217ffd4edbf42b6dfd462a7e83dedd96
|
|
BLAKE2b-256 checksum How to use checksums |
a43522327eb0e93da2634980b26d843fa463dcf07f6af4579a66b34b0d13cd48
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Release files / opustag-0.2.2-py3-none-any.whl
| Download URL | opustag-0.2.2-py3-none-any.whl |
|---|---|
| Size | 113.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
90e452e4048069b93a0a5aef8038692b59f9dc60be773e96975f2af39a42938e
|
|
BLAKE2b-256 checksum How to use checksums |
35b699374baf5f49134866baef288b0ae27eeacbbda5554f2d08514523053458
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|