Integrations
June 5, 2026 ยท View on GitHub
Curatorr supports Plex, Jellyfin, and Emby as its primary media server.
Plex
Curatorr uses Plex for:
- sign-in and Plex Home user selection
- music library indexing
- smart playlist creation and updates
- live playback webhooks when playback source is set to
Plex - optional Tautulli live playback or gap-fill support
- Plex-only generated playlist integrations like Last.fm stations, ListenBrainz playlist suggestions, Daily Mix, Curatorr rotating playlists, sonic ordering, and loudness-aware sequencing
Plex setup
In Settings -> Plex:
- Set local and/or remote Plex URL
- Retrieve the Plex token
- Retrieve the machine ID
- Select the music libraries Curatorr should monitor
- Save
You can also use Refresh libraries later if you add or remove Plex music libraries after initial setup.
Plex webhook behavior
Curatorr can register the Plex webhook automatically from the wizard or Settings.
Plex is the recommended live playback source for most installs.
Jellyfin
Jellyfin is supported as a primary Curatorr media server.
Curatorr uses Jellyfin for:
- native sign-in
- music library indexing
- live playback tracking through the Curatorr Jellyfin webhook and native session polling
- smart playlist creation and updates
- personal, blended, and rule-based playlist sync
Jellyfin setup
In Settings -> Jellyfin:
- Set the Jellyfin URL
- Add the API key
- Select the music libraries Curatorr should monitor
- Save
Jellyfin does not use Tautulli inside Curatorr.
Emby
Emby is supported as a primary Curatorr media server.
Curatorr uses Emby for:
- native sign-in
- music library indexing
- live playback tracking through the Curatorr Emby webhook and native session polling
- smart playlist creation and updates
- personal, blended, and rule-based playlist sync
Emby setup
In Settings -> Emby:
- Set the Emby URL
- Add the API key
- Select the music libraries Curatorr should monitor
- Save
Emby does not use Tautulli inside Curatorr.
Tautulli
Tautulli is optional.
Curatorr uses Tautulli for either:
- optional live playback events, if playback source is set to
Tautulli - history backfill and repair through the Tautulli API
Tautulli setup
In Settings -> Tautulli:
- Set local and/or remote Tautulli URL
- Add the API key
- Save
- Optionally click
Register webhook in Tautulli
Important distinctions
- Gap-fill/backfill only needs the URL and API key.
- The Tautulli webhook is only needed for live Tautulli playback ingestion.
- If playback source is still
Plex, live Tautulli webhooks are ignored.
Library filtering
Tautulli imports now respect the selected Plex music libraries:
- live webhooks from unselected libraries are ignored
- gap-fill rows from unselected libraries are ignored
Tautulli is Plex-only. It is not used on Jellyfin or Emby installs.
Last.fm
Last.fm is optional and is used in two separate ways.
Shared Last.fm API key
Configured in Settings -> Discovery.
This powers:
- Trending Artists
- Trending Tracks
- Because You Like
Per-user Last.fm account features
Configured in User Profile.
Users can set:
- Last.fm username
- station playlist types
- Loved tracks playlist
- Top Tracks playlist and period
- full-history backfill controls
Last.fm history sync is not a replacement for webhook playback tracking. It is best used as historical backfill or as a supplement.
Spotify
Spotify is optional and user-specific.
Current support is for:
- connecting a Spotify account from
User Profile - browsing owned Spotify playlists
- importing Spotify playlists into Curatorr as managed custom playlists
- refreshing imported Spotify playlists against the current library
Important restrictions:
- The connected-account Spotify tab is intended for playlists owned by the connected Spotify user and is the most reliable import path for larger playlists.
- Shared or public Spotify playlist URLs from the
URLtab rely on Spotify's public web pages, not full authenticated playlist access, so Spotify may expose only part of the playlist to Curatorr. - If a shared/public playlist does not show all expected tracks, copy its contents into a new playlist you own in Spotify, then import that owned playlist from the Spotify tab instead of the URL tab.
Spotify Premium requirements:
- Importing personal/private Spotify playlists via the connected-account tab requires Spotify Premium on the connecting user's account.
- Public playlist import via the
URLtab does not require Premium. - The Spotify account used to create the Developer App (
SPOTIFY_CLIENT_ID/SPOTIFY_CLIENT_SECRET) must also have an active Premium subscription โ this is a Spotify platform restriction for apps in Development mode. If you see the errorActive premium subscription required for the owner of the app, the fix is on the Developer App owner's account, not the Curatorr user account.
Spotify requires app-level credentials on the Curatorr container:
SPOTIFY_CLIENT_IDSPOTIFY_CLIENT_SECRET
Spotify app setup
- Go to the Spotify Developer Dashboard.
- Sign in with a Spotify account.
- Click
Create app. - Give it a name and description, then select
Web API. - Open the app settings.
- Add a redirect URI that matches your Curatorr base URL.
- Save the app settings.
- Copy the
Client IDintoSPOTIFY_CLIENT_ID. - Click
View client secretand copy that value intoSPOTIFY_CLIENT_SECRET.
The Spotify developer app must also include a redirect URI that matches your Curatorr base URL, for example:
http://localhost:7676/user-settings/spotify/callbackhttps://curatorr.example.com/user-settings/spotify/callback
These credentials identify the Curatorr app, not a single Spotify account. Each Curatorr user still connects their own Spotify account separately through OAuth.
YouTube
YouTube playlist URL import is optional and server-level.
Current support is for:
- previewing public YouTube playlists from the Playlists page URL import tab
- importing matched tracks from public YouTube playlists into Curatorr as managed custom playlists
- refreshing imported YouTube playlists against the current library
YouTube requires a container-level API key:
YOUTUBE_API_KEY
YouTube API setup
- Go to the Google Cloud Console.
- Create or select a project.
- Enable
YouTube Data API v3. - Create an API key credential.
- Put that key into
YOUTUBE_API_KEYon the Curatorr container.
Unlike Spotify, YouTube playlist URL import does not require each Curatorr user to connect a personal YouTube account. It works against public playlist metadata exposed by the YouTube Data API.
ListenBrainz
ListenBrainz is optional and user-specific.
Configured in User Profile.
Current support is for playlist suggestions synced into Plex:
- Daily Jams
- Weekly Jams
- Weekly Exploration
Matching prefers MusicBrainz recording MBIDs when ListenBrainz provides them, and falls back to artist + track-title matching when it does not. This does not currently import ListenBrainz listening history.
Logging is available under the ListenBrainz filter in the Curatorr log view.
ListenBrainz playlist sync is currently Plex-only.
Track analysis import
Track analysis is optional.
Curatorr can enrich tracks with:
- BPM
- musical key
- Camelot key
- energy
- danceability
Curatorr supports two analysis paths from Settings -> General -> Track Analysis Import:
Analyzer sidecarCustom command
The recommended Docker deployment is the sidecar. It keeps Python audio-analysis dependencies out of the main app container while letting Curatorr run analysis automatically through Track Analysis Pipeline.
Minimal same-stack example:
curatorr_analyzer:
image: mickygx/curatorr-analyzer:latest
container_name: curatorr_analyzer
depends_on:
- curatorr
environment:
- PORT=8765
volumes:
- ./data:/app/data
# Mount your music library at the same absolute path Plex reports for track files.
# - /path/to/music:/media/music:ro
network_mode: "service:curatorr"
restart: unless-stopped
Sidecar mode should normally use:
Analyzer sidecar URL:http://127.0.0.1:8765Feature manifest path:/app/data/track-features.jsonAnalyzer results path:/app/data/track-features.results.json
Curatorr also ships with an export helper so external analyzers can work from Curatorr's library data:
npm run features:export-template
Important behavior:
- BPM/key-driven presets and numeric feature filters ignore tracks that do not have the required analysis data yet.
Track Analysis Pipelineruns in chunks and imports results as chunks complete.- If a run is interrupted, the next run starts again from chunk
1of the remaining missing-track set, not from the whole library.
Full workflow details are documented in Track Analysis.
Lidarr
Lidarr is optional.
When enabled, Curatorr can:
- add artists to Lidarr
- choose a starter album
- queue search commands
- retry and fall back to release grabs when searches fail
- progressively unlock more albums as engagement improves
Weekly quotas can be configured per role, and the app also supports automatic-add quotas for eligible users.
Feature gaps on Jellyfin and Emby
Core playback tracking, artist scoring, smart playlists, personal playlists, blended playlists, discovery, and Lidarr automation are supported.
The main Plex-only gaps at the moment are:
- Tautulli integration
- Daily Mix sync
- Last.fm station playlists
- ListenBrainz playlist suggestion sync
- Sonic ordering and loudness-aware sequencing