Skip to content

Optional integrations

Lumastra can connect to metadata providers, media servers, and AI services. Each one is optional. Add the services you want in the first-run setup wizard, or later under Admin → Settings. Enter the service URL and API key in the UI; you don’t need to edit environment variables.

Every external integration is optional and skips gracefully when its key or URL is unset: an unconfigured integration never fails the app or degrades its health. Data only leaves your server for the integrations you explicitly enable.

  • During setup: the wizard asks about your integrations and checks the connections and credentials you enter. You can skip optional services and add them later.
  • After setup: open Admin → Settings to add or change provider keys and service connections. Changes take effect without a restart.
  • Environment variables: available as an alternative for deployments managed through configuration files. The variable names below are a reference for that path, not required setup steps.

If TMDB rejects the key, Save & continue stays on the setup step with a message to check the key. If TMDB can’t be reached, the key is saved with a warning that metadata requests will retry automatically.

Enter provider keys during setup or later in Admin → Settings. The last column lists optional environment-variable alternatives.

IntegrationWhat it addsEnvironment alternative
TMDBMetadata, posters/backdrops, search, discovery (strongly recommended)TMDB_API_KEY
MusicBrainzMusic metadata enrichment(built-in)
AcoustIDIdentifies music without MusicBrainz tags by its sound (free key)ACOUSTID_API_KEY
MDBListTrending and Popular shows rows, aggregated ratings, rich keyword tags (recommended)MDBLIST_API_KEY
AniDBAnime-specific metadata; an alternate to TMDB, selectable per library pathANIDB_CLIENT + ANIDB_CLIENT_VER
Last.fmMusic popularity dataLASTFM_API_KEY
DiscogsArtist / album enrichmentDISCOGS_TOKEN

Most integration settings can be configured in Admin → Settings. Some are also requested during the first-run setup wizard.

For integrations offered during setup, the wizard asks for and verifies the connection details. You can also add or change connections later in Admin → Settings. For Jellyfin sync, enter your Jellyfin server URL and API key in the UI. If you don’t run a Jellyfin server yet, see the official Jellyfin installation guide. The JELLYFINURL and JELLYFINAPIKEY variables are optional alternatives.

Jellyfin can also supply metadata without watch sync. Configure the URL and API key and set FEATURE_JELLYFIN_SYNC=false for metadata only. Private addresses are supported, provided the Lumastra server can reach them.

Jellyfin watch-state sync works in both directions. How users and titles are matched, and what to do when they don’t match, is covered in Jellyfin watch-state sync below. Both servers can use the same media folders while you try Lumastra.

IntegrationWhat it addsEnvironment alternative / option
JellyfinMetadata, optional bidirectional watch-state sync and “now streaming” sessionsJELLYFINURL + JELLYFINAPIKEY
Jellyfin-compatible /j APIConnect existing Jellyfin / Streamyfin TV & mobile apps to Lumastra (no Jellyfin server required)(built-in)
SubsonicUse any Subsonic music clientEnable OpenSubsonic API Compatibility under Settings → Music, or set FEATURE_SUBSONIC_COMPAT=true (off by default)
AudiobookShelfAudiobook library, see AudiobooksAUDIOURL + AUDIOAPIKEY
KavitaBooks / manga / comicsKAVITAURL + KAVITAAPIKEY
Sonarr / RadarrRelease calendarSONARRURL / RADARRURL + keys
SeerrMedia requestsSEERRURL + SEERRAPIKEY

Open Settings → Connections → Connect a Jellyfin app to generate a client password or a separate read-only token for tools that observe your library.

Lumastra keeps each person’s watch state in step with Jellyfin, in both directions: played and unplayed status, and resume positions for partly watched titles. Watch state is exchanged every 5 minutes. Marking a title played in Jellyfin later is imported too, even if its last-played date hasn’t changed.

Users. A Jellyfin user syncs with the Lumastra account that has the same username (capitals don’t matter). If the names differ, open the user under Admin → Users, open Identities, and enter their Jellyfin login name.

Titles. Titles are matched by their TMDB or IMDb IDs first. Movies and episodes without provider IDs pair automatically by file path and size: the same file must be in both libraries. Lumastra compares the path relative to each library root, or the identical full path. A file that holds several episodes is never paired, and neither is a title with more than one possible match. If you rename a file in Jellyfin, the new name is picked up at the next file check, which runs at most every 30 minutes.

Episodes scanned after the first Jellyfin listing pair automatically too. In Admin → Library, a series without provider IDs shows as linked to Jellyfin once all its episodes with files are linked.

Conflicts. For resume positions, the newest stop wins: Jellyfin’s last-played time is compared with Lumastra’s playback event time. With push-only sync, Lumastra always pushes its position. If you mark a title unwatched in Lumastra, a newer “played” from Jellyfin wins.

What to check when sync stops:

  • Admin → Settings → Connections lists Jellyfin titles that could not be paired, with a count and a few examples. A title appears after it has been unpaired for 15 minutes.
  • An admin notice lists Jellyfin users who have no Lumastra account to sync to. Link them under Admin → Users, or create accounts with matching names. Until then, their watched status does not sync.

Connection problems. The setup wizard checks the address and API key before it saves them. If the check fails, the message says what to fix:

  • Rejected key (HTTP 401): copy the API key again from Jellyfin under Dashboard → API Keys. If a reverse proxy sits in front of Jellyfin, it must pass the Authorization header through.
  • Unreachable address: the message names the address it tried and the cause, such as connection refused, host name not found, or timed out. Check the address and that Jellyfin is running.
  • Invalid characters: the API key contains characters that are not allowed. Copy it again.
  • User name and password in the address: remove them. Jellyfin connects with the API key only.

Jellyfin under a subpath works. Enter the full address, such as http://media.example.lan/jellyfin.

ComponentWhat it addsEnable with
Audio analysis (Essentia, built into the x86-64 image)Tempo, key, energy, beat grid and intro/outro markers for DJ crossfades and mood pickson by default; DISABLE_MUSIC_ANALYSIS=true turns it off
Sonic embedder sidecarSound-alike tracks, the sonic smart queue, Sonic Collections, Smart Mixes, Song Paths, Music Map, Sound Searchdocker compose --profile sonic up -d, SONIC_EMBEDDER_URL, then FEATURE_MUSIC_SONIC and the per-feature flags in Music discovery

Choose your providers and enter their keys in the setup wizard or later in Admin → Settings. Use the separate embedding and chat fields for the two features.

AI recommendations (vector embeddings, stored in pgvector) and the AI chat assistant are two separate features with separate keys: there’s no fallback between them. Bring a Voyage AI or OpenAI key for embeddings; Voyage is preferred when both keys are set. A custom EMBEDDING_BASE_URL with EMBEDDING_API_KEY takes precedence over both. Bring an OpenAI or Anthropic key for chat. See The AI assistant for what the chat assistant does, its limits, and where its settings live.

Optional environment variablePurpose
OPENAI_API_KEYEmbeddings only (OpenAI)
VOYAGE_API_KEYAlternative embedding provider
EMBEDDING_DIMENSIONSMust match the embedding model (else AI features error)
OPENAI_CHAT_API_KEYChat assistant only (OpenAI), separate from OPENAI_API_KEY
ANTHROPIC_API_KEYChat assistant only (Anthropic)

Keys and connections added after install take effect without a restart. Saving a Jellyfin connection, a Last.fm key or an MDBList key starts the matching tasks right away, and changing the GPU acceleration setting makes Lumastra check the hardware again. A TMDB key added under Admin → Settings → Metadata also scans libraries that were waiting for a match again, and the items are identified in place.