Curatorr is a self-hosted Plex, Jellyfin, and Emby companion for playback tracking, smart playlist generation, artist discovery, and optional Lidarr automation.
Preview
What It Does
- Tracks playback from Plex, Jellyfin, or Emby
- Adds Music Assistant plays through provider matching and per-listener mapping
- Builds per-user smart playlists from real listening behavior
- Supports personal playlists, blended playlists, Curatorr rotating playlists, and configurable Daily Mix
- Adds feature-driven playlist building with BPM, key, Camelot, energy, and danceability filters when analysis data is available
- Surfaces library-based suggestions and external discovery
- Integrates with Lidarr for optional add, queue, and progression workflows
- Supports Last.fm history/station features and ListenBrainz playlist suggestions on supported server paths
- Includes listening reports, reusable playlist templates, artwork controls, and M3U/M3U8 import with scheduled refresh
- Backs up every Curatorr playlist (smart rules, imported and static track lists, system playlist settings) to a file that can rebuild them on a new media server, keeps backup-only copies of Plex playlists, and exports M3U
Media Server Support
- Plex: broadest feature set, including Plex SSO, Plex Home users, native Plex webhooks, optional Tautulli support, Daily Mix, Last.fm station playlists, and ListenBrainz playlist suggestions
- Jellyfin: native server login, library indexing, live playback tracking, smart playlists, personal playlists, blended playlists, discovery, and Lidarr automation
- Emby: native server login, library indexing, live playback tracking, smart playlists, personal playlists, blended playlists, discovery, and Lidarr automation
- Tautulli integration
- Daily Mix sync
- Last.fm station playlists
- ListenBrainz playlist suggestion sync
- Sonic ordering and loudness-aware sequencing
Quick Start
Minimal Docker Compose example:
services:
curatorr:
image: mickygx/curatorr:latest
container_name: curatorr
ports:
- "7676:7676"
environment:
- CONFIG_PATH=/app/config/config.json
- DATA_DIR=/app/data
- BASE_URL=http://localhost:7676
- TRUST_PROXY=true
- TRUST_PROXY_HOPS=1
- SESSION_SECRET=replace-this-with-a-random-secret
- WEBHOOK_SECRET=replace-this-with-a-random-secret
volumes:
- ./config:/app/config
- ./data:/app/data
- ./data/icons/custom:/app/public/icons/custom
network_mode: bridge
restart: unless-stopped
Generate SESSION_SECRET and WEBHOOK_SECRET with:
openssl rand -hex 32
Start Curatorr with:
docker compose up -d
Then open http://localhost:7676/wizard and complete the setup wizard for Plex, Jellyfin, or Emby.
Optional Features
Music Assistant 2.7+ can track plays alongside your primary media server and supply the Overview Now Playing fallback. Configure it in Settings after initial setup. See Music Assistant.
Curatorr supports an optional analyzer sidecar for BPM, musical key, Camelot key, energy, and danceability enrichment. For setup and workflow details, see Track Analysis.
Spotify support is optional and user-specific. Users can connect Spotify accounts to browse and import playlists after app-level credentials are configured on the Curatorr container. Owned Spotify playlists imported through the connected-account flow are the most reliable option, especially for larger playlists. Shared or public Spotify playlist URLs imported through the URL tab depend on whatever Spotify exposes on its public web pages, so some playlists may only preview or import part of the track list. If a shared/public playlist is incomplete, copy its tracks into a new playlist you own in Spotify and import that owned copy from the Spotify tab instead. For setup details, see Spotify in Integrations.
TIDAL support is optional and user-specific. Users can connect TIDAL accounts to browse and import their own playlists after TIDAL_CLIENT_ID and TIDAL_CLIENT_SECRET are configured on the Curatorr container. Public TIDAL playlist links can also be imported from the URL tab without connecting an account. For setup details, see TIDAL in Integrations.
YouTube playlist URL import is optional and server-level. Public YouTube playlists can be previewed and imported when YOUTUBE_API_KEY is configured on the Curatorr container. For setup details, see Integrations.
Documentation
For installation, setup, configuration, and troubleshooting:
- GitHub Wiki
- Wiki Home
- Quick Start
- Configuration
- Authentication and Roles
- Integrations
- Music Assistant
- Overview
- Listening Report
- Track Analysis
- Artist Suggestions and Lidarr Activity
- Discover
- Smart Playlists
- Playlist Imports
- Playlist Backup and Restore
- History
- Tracks
- Blend
- User Profile
- Troubleshooting
- FAQ