PMDA

PMDA

Docker app from PMDA's Repository

Overview

PMDA (pronounced "pimda") is one music lover's take on building the music library of his dreams — self-hosted, private, and genuinely a joy to use. • Understands your collection — scans huge folders and identifies every album against MusicBrainz, with a smart soft / release-group pass that recovers the covers and metadata other tools give up on. • Keeps it clean — preserves the tags and artwork you trust, quarantines duplicates and incomplete rips, and publishes a fast, PostgreSQL-backed library. • Made for listening — gapless playback with history, cross-user recommendations, clickable artist pages, synced lyrics and waveforms. • Yours everywhere — native iOS and Android apps stream and download your library, lossless FLAC included. • 100% self-hosted — no cloud lock-in, no phoning home, no AI tokens. Your music, your server, your rules. PMDA needs FIVE folders, and asks for all five even if the way you choose to run it uses only some of them — that way you can change your mind later without coming back here. It will NOT start until all five are mapped. Set the Host Path of each — the folder on your server. Do NOT touch the Container Path: /library, /intake, /organised, /quarantine and /config are the addresses PMDA reads, not names to pick, and renaming one stops the container with a message telling you so. Your music (/library) — what you already have. PMDA reads it and never changes it. New music (/intake) — where you drop music you have just got. Empty is normal. The organised folder (/organised) — a tidy version of your library, named and sorted PMDA's way. Set aside (/quarantine) — duplicates, incomplete albums and the trash. Nothing is ever deleted: it is moved, and it can be moved back. PMDA's own files (/config) — its database, your settings, the covers it downloads. This is the one to back up. Want the organised folder built with hard links, at no extra disk cost? Map one more folder: the one that contains both your music and the organised folder. See “Optional: the folder that contains both” below. Keep these five apart. In particular Set aside must NOT sit inside your music, or PMDA keeps finding what it just moved out of the way — it will refuse that layout and tell you so on first run. Made for people who are in love with music. 🎵

Download Statistics

85,038
Total Downloads
20,737
This Month
9,934
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Explore more like this

Explore all

Details

Repository
meaning/pmda:latest
Last Updated2026-10-04
First Seen2025-06-16

Runtime arguments

Web UI
http://[IP]:5005/
Network
host
Shell
sh
Privileged
false

Template configuration

PMDA's own filesPathrw

Leave the Container Path exactly as it is (/config) — that is the address PMDA reads, not a name to choose, and the container refuses to start if it is renamed. Only the Host Path, the folder on your server, is yours to set. PMDA's database, your settings, auth state, logs and the covers it downloads. This is the one to back up. If you install the optional local MusicBrainz mirror, its data (~170 GB) lives here too — put this on a fast pool with room to spare. Keep it outside your music folders.

Target
/config
Default
/mnt/user/appdata/pmda
Value
/mnt/user/appdata/pmda
Your musicPathrw

Leave the Container Path exactly as it is (/library) — that is the address PMDA reads, not a name to choose, and the container refuses to start if it is renamed. Only the Host Path, the folder on your server, is yours to set. The music you already have. PMDA reads it. In read-only mode — the recommended one — it never changes a single file here. Point this at the share that holds your collection.

Target
/library
Default
/mnt/user/Music
Value
/mnt/user/Music
New musicPathrw

Leave the Container Path exactly as it is (/intake) — that is the address PMDA reads, not a name to choose, and the container refuses to start if it is renamed. Only the Host Path, the folder on your server, is yours to set. Where you drop music you have just got. Empty is normal — PMDA watches this folder and identifies whatever lands in it. It must NOT be inside Your music, or PMDA cannot tell what has just arrived from what you already had.

Target
/intake
Default
/mnt/user/PMDA/intake
Value
/mnt/user/PMDA/intake
The organised folderPathrw

Leave the Container Path exactly as it is (/organised) — that is the address PMDA reads, not a name to choose, and the container refuses to start if it is renamed. Only the Host Path, the folder on your server, is yours to set. Where PMDA can keep a tidy version of your library, named and sorted its way. Left empty in read-only mode. If you want it built with hardlinks (no extra disk space at all), it has to be on the SAME filesystem as Your music — two Unraid user shares often are not, and PMDA will tell you when it has to make real copies instead.

Target
/organised
Default
/mnt/user/PMDA/organised
Value
/mnt/user/PMDA/organised
Set asidePathrw

Leave the Container Path exactly as it is (/quarantine) — that is the address PMDA reads, not a name to choose, and the container refuses to start if it is renamed. Only the Host Path, the folder on your server, is yours to set. Duplicates, incomplete albums and the trash go here. Nothing is ever deleted: it is moved, and it can be moved back. It must NOT sit inside your music or your intake folder — PMDA would keep finding what it just moved out of the way, and it refuses that layout on first run.

Target
/quarantine
Default
/mnt/user/PMDA/quarantine
Value
/mnt/user/PMDA/quarantine
Optional: the folder that contains bothPathrw

ONLY if you want the organised folder built with hard links — the option that costs no extra disk space at all, because the same file simply appears in two places. A hard link cannot cross between two mappings, whatever the disk, so PMDA needs one more: the folder on your server that CONTAINS both Your music and The organised folder. If they live in one share, map that share here (for example /mnt/user/Music) and leave the Container Path as /linkroot. PMDA works the rest out on its own. Leave this empty and PMDA makes real copies instead, which always works and uses the space twice.

Target
/linkroot
Docker SocketPathrw

Lets PMDA install and manage the optional local MusicBrainz mirror for you (one click, ~170 GB, answers in a millisecond instead of the public 1 request/second). PMDA only creates and controls its own mirror containers through it. Remove this mapping if you never want the one-click mirror.

Target
/var/run/docker.sock
Default
/var/run/docker.sock
Value
/var/run/docker.sock
Music Root (existing installs)Pathrw

ONLY for installs that were set up before PMDA asked for the five folders above. Those instances have their folders configured under /music and keep working exactly as they are — PMDA validates what each folder is FOR, not what it is called. Leave this empty on a new install.

Target
/music
Review Root (existing installs)Pathrw

ONLY for installs that were set up before PMDA asked for the five folders above, where duplicates and incomplete albums go to /dupes. New installs use Set aside (/quarantine) instead; leave this empty.

Target
/dupes
WebUI Port (host network)Variable{3}

PMDA listens on this port directly on the host (host networking). Change it only if 5005 is already taken on your server, and adjust the WebUI address accordingly.

Target
PMDA_PORT
Default
5005
Value
5005
Enable PMDA AuthVariable{3}

Enable PMDA accounts and session-based access control.

Target
PMDA_AUTH_ENABLED
Default
1
Value
1
Trust Proxy HeadersVariable{3}

Enable when PMDA is placed behind Cloudflare Tunnel or another reverse proxy.

Target
PMDA_AUTH_TRUST_PROXY_HEADERS
Default
false
Value
false
Secure Session CookiesVariable{3}

Set to true when PMDA is served over HTTPS.

Target
PMDA_AUTH_SESSION_COOKIE_SECURE
Default
false
Value
false
Allow Public BootstrapVariable{3}

Leave false for normal installs. Only enable temporarily if first-user setup must happen from outside your LAN.

Target
PMDA_AUTH_ALLOW_PUBLIC_BOOTSTRAP
Default
false
Value
false