PMDA: Self-hosted, intelligent music library.
50K+
You have 50,000 albums on a server. Ripped over decades, tagged by five different tools, duplicated across three "I'll sort this later" folders. PMDA is the thing that sorts it later.
Point it at your music. It identifies every release against MusicBrainz, Discogs, iTunes, Deezer and Bandcamp, pulls the real covers, the real biographies, the reviews, the aliases, the labels, the concert dates โ and stores everything it ever finds in PostgreSQL. It never throws anything away. It's an aggregator with taste.
๐ง It doesn't guess โ it hoards evidence. Every bio, cover, and review PMDA finds is kept per source, and the best one wins automatically (a mediocre write-up can never overwrite a great one). Change your mind? Pin the version you prefer with one click. Your choice is final.
๐ค It never deletes your files. Duplicates are only flagged when the content is truly identical โ same tracks, same lengths (and FLAC always beats MP3). Anything it moves goes to a reversible quarantine with a manifest. Different editions aren't "duplicates"; they become a version picker. Incomplete albums get detected, listed, and can even be reassembled from fragments โ automatically.
๐ค Your AI agent is the brain โ not ours. PMDA ships with zero built-in AI and needs zero API keys. Instead, it exposes 50+ MCP tools: download the plugin from the UI, hand the folder to Claude Code, Codex, OpenClaw or any MCP client, and it installs itself and starts proposing things to do โ audit your dupes, hunt incomplete albums, request missing releases. Your model, your billing, your rules.
๐ฅ It closes the loop. Missing release? Hit Request. PMDA drives Lidarr and Autobrr (bring your own indexers โ PMDA never talks to trackers), and a webhook ingests finished downloads into the library within minutes. Spot an album you only have in MP3? Request FLAC upgrade. One artist, all lossy albums? One button.
๐ A home that knows you. On repeat, rediscover what you dropped months ago, the albums you own but never played, new arrivals ranked by your taste, acclaimed records sitting unplayed in your own library โ every card tells you why it's there.
โฑ๏ธ Two questions and you're in. Setup asks where your music lives and what PMDA may do with your files (look, build a clean copy, or tidy up). That's it. Everything else is smart defaults you can override later โ including in the advanced panel, pre-filled and honest.
One container. PostgreSQL, Redis, the works โ all inside.
docker run -d \
--name pmda \
--restart unless-stopped \
-p 5005:5005 \
-e PMDA_AUTH_ENABLED=1 \
-e PMDA_MEDIA_CACHE_ROOT=/cache \
-v /srv/pmda/config:/config \
-v /srv/pmda/cache:/cache \
-v /srv/music:/music:rw \
-v /srv/pmda/review:/dupes:rw \
-v /srv/pmda/musicbrainz-mirror:/musicbrainz-mirror \
meaning/pmda:latest
The /musicbrainz-mirror mount is where the optional local MusicBrainz mirror stores its
database and search index when you enable it (one click, later). Plan ~150 GB on fast storage.
Include the mount from day one even if you are not sure yet: it costs nothing while empty, and
it guarantees the mirror's data lands on a disk you chose โ never inside Docker's own image
file. The mirror is what makes PMDA's matching effectively rate-limit-free.
Open http://localhost:5005, create your admin account, answer the two questions, press GO.
Your first scan starts immediately โ matching, artwork, bios and reviews flow in from there.
Tags: latest (stable) ยท beta (fresh from the lab).
Beta testers: use meaning/pmda:beta. Fixes land on the beta line first โ latest stays
on the current stable release and only moves when a beta has been confirmed and promoted, so a
tester sitting on latest is testing an older build. After switching the tag, recreate the
container (Unraid: Force Update): a restart keeps the image already cached on the host.
React + TypeScript + Vite + Tailwind frontend, Flask + PostgreSQL + Redis backend, one image.
PRs welcome โ the test suite is pytest, the frontend gate is tsc --noEmit, and the repo
ships with an agent toolkit, because of course it does.
Content type
Image
Digest
sha256:29deff6fbโฆ
Size
1003.3 MB
Last updated
about 11 hours ago
docker pull meaning/pmda