Note: Yes, this is an AI-powered project!
Treats your broken tags — An intelligent MP3 auto-tagger with a sleek dark UI.
This project was born out of personal interest to solve the "messy library" problem, specifically helping with accurate tagging for Techno and electronic music genres where standard taggers often fail.
I'm opening this up to the public and would love to develop it further based on community interest. Feature requests and contributions are highly welcome!
- Auto-Tagging — Scans your MP3 library and automatically identifies tracks via audio fingerprinting and metadata APIs.
- Specialized Web Scrapers — Enhanced identification for electronic music via custom scrapers for popular platforms (improves results where standard APIs fail).
- Manual Search & Tagging — Batch search and manually select perfect metadata from multiple providers.
- Audio Playback — Built-in player with volume, seeking, and real-time EQ visualization to preview your tracks.
- Cover Art — Automatic cover art embedding + manual JPG upload support.
- Before/After Comparison — Review original vs. proposed tags side-by-side in the Tag Details modal.
- Backup & Restore — Automatic backups before writing tags, with one-click restoration.
Modern dark UI with live progress and playback controls
Dr. Tagger uses a combination of official APIs and specialized web scrapers to provide the best possible data for electronic music:
| Source | Method | Description |
|---|---|---|
| AcoustID | API | Core audio fingerprinting for initial identification |
| Discogs | API | Massive database for releases, genres, and styles |
| Beatport | Scraper | Specialized for Techno/House, provides BPM and Key data |
| Traxsource | Scraper | Excellent for underground House and Nu-Disco |
| Juno Download | Scraper | Broad electronic music coverage and release dates |
| Bandcamp | Scraper | Direct-from-artist metadata and high-quality covers |
Note
The web scrapers are custom-built to help bridge the gap for techno-specific subgenres and titles that often aren't fully indexed in generic databases. They are continuously being refined to handle page layout changes.
| Layer | Technology |
|---|---|
| Backend | Python, FastAPI, Uvicorn |
| Frontend | Vanilla HTML/CSS/JS |
| Database | SQLite (WAL mode) |
| Audio | Mutagen (ID3), Chromaprint |
| APIs | Discogs, Beatport, Traxsource |
The easiest way to run Dr. Tagger is using Docker.
- Docker Desktop installed and running.
- WSL 2 enabled (for Windows users).
# Clone the repository
git clone https://github.com/akadawa/dr.tagger.git
cd dr.tagger
# Copy environment template
cp .env.example .env
# Build and start
docker-compose up --build -dThen open http://localhost:3003 in your browser.
- Open Container Manager on your Synology NAS.
- Go to Project and click Create.
- Set a project name (e.g.,
dr-tagger) and choose a path. - Select Create docker-compose.yml and paste the following:
services:
drtagger:
image: akadawa/drtagger:latest
container_name: drtagger
ports:
- "3003:80"
environment:
- DISCOGS_API_KEY=your_discogs_api_key_here
volumes:
- /volume1/music:/app/audiofiles
restart: unless-stopped- Click Next and complete the wizard.
- Open your Dockge interface.
- Click + Compose to create a new stack.
- Name it
dr-tagger. - Paste the following into the editor:
services:
drtagger:
image: akadawa/drtagger:latest
container_name: drtagger
ports:
- "3003:80"
environment:
- DISCOGS_API_KEY=your_discogs_api_key_here
volumes:
- /path/to/your/music:/app/audiofiles
restart: unless-stopped- Click Deploy.
- Open Portainer and navigate to Stacks.
- Click Add stack.
- Name it
dr-tagger. - Use the Web editor to paste the following:
services:
drtagger:
image: akadawa/drtagger:latest
container_name: drtagger
ports:
- "3003:80"
environment:
- DISCOGS_API_KEY=your_discogs_api_key_here
volumes:
- /path/to/your/music:/app/audiofiles
restart: unless-stopped- Click Deploy the stack.
- Open your Dockhand environment.
- Create a new stack named
dr-tagger. - Paste the following configuration:
services:
drtagger:
image: akadawa/drtagger:latest
container_name: drtagger
ports:
- "3003:80"
environment:
- DISCOGS_API_KEY=your_discogs_api_key_here
volumes:
- /path/to/your/music:/app/audiofiles
restart: unless-stopped- Deploy the stack.
If you prefer to run it natively without Docker:
- Python 3.10+
- fpcalc (Chromaprint CLI tool)
- Windows: Place
fpcalc.exein the project root. - Linux: Install via package manager:
sudo apt install libchromaprint-tools
- Windows: Place
# Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # Or .\.venv\Scripts\activate on Windows
# Install dependencies
pip install -r requirements.txt
# Copy and edit .env
cp .env.example .env
# Run server
python -m uvicorn backend.main:app --host 0.0.0.0 --port 8002Then open http://localhost:8002 in your browser.
dr.tagger/
├── backend/
│ ├── main.py # FastAPI server, API endpoints, WebSocket
│ ├── database.py # SQLite database layer
│ └── tagger_engine.py # Audio fingerprinting, API lookups, tag writing
├── frontend/
│ ├── index.html # Main UI
│ ├── script.js # Frontend logic
│ ├── style.css # Dark theme styles
│ └── logo.png # Dr. Tagger mascot
├── audiofiles/ # Drop your MP3 files here
├── backup/ # Auto-created backups before tagging
├── covers/uploaded/ # Manually uploaded cover art
├── .env.example # Environment template
├── requirements.txt # Python dependencies
└── README.md
- Drop MP3 files into the
audiofiles/directory (subdirectories supported) - Click "Start Scan" to begin automatic identification
- Review results — tracks show status badges (FOUND, NOT FOUND, etc.)
- Manual search — Click the 🔎 icon on unidentified tracks to search manually
- Upload covers — Open Tag Details (✏ icon) and click "Upload JPG"
- Click "Write Tags" to apply all changes to your files
- Restore — Use the Restore button to revert any changes from backups
MIT
We're just getting started! Here's what's planned for future releases:
- Linux Compatibility — Abstract
fpcalcpath handling to support Linux systems natively. - Docker Support — Create a
Dockerfileanddocker-compose.ymlfor easy deployment. - Official Docker Image — Basic image structure created.
- Expand Search APIs — Integrate more metadata providers (e.g., MusicBrainz API directly, SoundCloud).
- UI/UX Polishing — Refine the dark theme, improve mobile responsiveness, and add more micro-animations.
- Batch Metadata Editing — Allow editing multiple tracks simultaneously.
If you see an error like client version 1.52 is too new. Maximum supported API version is 1.43:
- Step 1: In your deployment tool (e.g. Dockhand or Portainer), go to the Environment Variables (Umgebungsvariablen) section of the stack/project.
- Step 2: Add this exact variable:
DOCKER_API_VERSION=1.43
- Step 3: Redeploy.
This tells the Docker client to "speak" an older version that your Synology can understand.
Feel free to open an issue if you'd like to see a specific feature!


