Self-hosted, multi-user music library automation.
Synthseek searches across music providers, downloads through the sources you enable, such as slskd, Usenet, torrent or yt-dlp, checks that what arrived is what you asked for, and keeps your library organized afterwards. It is multi-user, provider-agnostic, and ships a built-in MCP server so assistants can drive your library.
Website · Documentation · Patch notes
Discover
discover.mp4
Request content
request.mp4
Browse and import your library
library.mp4
importing.mp4
- No API keys to get started. The catalog is provider-agnostic and runs on Deezer by default, so a first run needs nothing you have to register for.
- Seven download sources, and you decide the order. Peer-to-peer, Usenet, torrent, another Subsonic server, and fallbacks to YouTube, SoundCloud and the Internet Archive, chosen per request rather than once globally.
- It treats your library as something to keep honest. Files are checked before they are imported, duplicate copies are only settled when they can be proven identical, and nothing in your library is ever deleted outright.
Requires Docker with Compose. The setup wizard asks for a running slskd, the peer-to-peer source, and lets you continue past a failed connection test if you use other sources.
Use the provided docker-compose.yml as a starting point:
docker compose up -dOpen the web interface and follow the setup wizard: an admin account, slskd, then an optional Plex sign-in and API keys. Your music folder is the /music volume in the compose file. The full walkthrough is in Getting Started.
- Search tracks, albums, artists, and playlists across a provider-agnostic catalog
- Request a single track, a whole album, or an entire playlist
- Choose the quality and the source order per request
- A queue you can reorder, pause, and resume, with live progress
- slskd for peer-to-peer, Usenet through your own indexer and SABnzbd, torrent through your own indexer and qBittorrent, and another Subsonic server, with yt-dlp, SoundCloud and the Internet Archive as fallbacks
- A Usenet or torrent release downloaded for one track is kept for a while, so the other tracks on the same album can come from it
- Every download's tags are checked against your request, and with a free AcoustID key its audio is identified too, so a file whose tags look right but whose audio is by another artist is refused
- A file that positively contradicts your request waits in a review queue for you to approve or discard
Download sources · The download engine
- Synthseek keeps its own index of the audio files on your disk, so music you copied in by hand is found and identified, and you can match or ignore what it cannot recognise
- A file that moved is followed to its new location instead of being counted as one loss and one arrival
- Keep your music in more than one library path, such as a second disk, with rules that decide which music goes where, by artist, genre, year, who asked for it and more
- You decide the folders and filename every track gets in each path, and a preview shows every change before anything moves
- Files already on disk can be brought in line with that format, or left exactly where they are
- Tracks with more than one copy are listed a track at a time, and only copies it can prove are the same recording are settled automatically, which means agreeing on both title and length
- What it cannot prove waits for you, with every copy playable before you choose
- Nothing is deleted outright: replaced files go to a recycle bin with a restore, for as long as the retention window keeps them
- Play your library in the web app, with media keys, a lock screen and a full screen view, and nothing to turn on first
- The player can shrink into the top bar, or pop out into a small floating window where your browser supports one
- Your queue and position are kept on the server, so they survive a reload and are the same ones your phone picks up
- With autoplay on, the queue does not run out: the player adds the closest tracks your library has to what you chose, and you can start a radio from any track, album or artist
- An equalizer, a preamp, a compressor and gapless or blended transitions in the player, with presets or curves of your own, kept per browser
- Volume evened out between tracks
- Once you turn it on, play your library in Subsonic and OpenSubsonic apps such as Feishin and Symfonium, with no media server in between
- Apps can change things, not only play them: favourites, playlists you create and reorder, what you played, and a queue you can pick up on another device
- A stream is converted on the fly when an app asks for a lower quality than the file on disk
- Send what you play to Last.fm and ListenBrainz
- Read the lyrics in the full screen view, following the song where they come with timings
- Sync playlists to Plex, Navidrome or Jellyfin, one at a time or all at once
- Play a track from Plex, Navidrome or Jellyfin when Synthseek has no file for it
- A built-in MCP server, so assistants can search, request, manage your library and run the player
- Discovery mixes from Last.fm and ListenBrainz on a dedicated Discover page
- Lidarr delegation, with tag and monitor-scope selection
- Library import from Spotify, and playlist import from Plex, Navidrome or Jellyfin
- Playlist import from JSPF, XSPF, or CSV, and export as JSPF
- Multi-user, with local accounts or Plex OAuth, member management, and per-user libraries
- Optional approval for members' requests, and download quotas per member and for the whole library
- A responsive web interface that works on a phone as well as a desktop
- Available in English, Español, Deutsch, and Français
- Logs viewer, background job controls, a system status page, and in-app update notifications
- Notifications on Discord, ntfy or Telegram, plus a webhook or Apprise for administrators, with each member picking what they receive
Users and permissions · Configuration
| Overview | What Synthseek is and how the pieces fit |
| Getting Started | Install, first run, and pointing it at your music |
| Features | Everything the app does, in detail |
| Download engine | How a request becomes a file in your library |
| Download sources | All seven sources, and the order they run in |
| Configuration | Environment variables and in-app settings |
| Users and permissions | Accounts, roles, and what members can see |
| Integrations | Plex, Navidrome, Jellyfin, Lidarr, and more |
| AI assistants | The MCP server and its tools |
| Operations | Jobs, logs, health, backups, and updates |
| FAQ | Common questions and troubleshooting |
For bugs or questions, open an issue.
This project is licensed under the MIT License.