syllogi
Configuration

Environment Variables

Comprehensive guide for configuring your application's environment with the `.env` file.

All configuration is supplied through environment variables on the syllogi container.

Required

NameDescription
DATABASE_URLPostgreSQL host and port, e.g. syllogi-postgres:5432.
DATABASE_USERNAMEPostgreSQL username.
DATABASE_PASSWORDPostgreSQL password.
DATABASE_NAMEPostgreSQL database name.
NEXT_PUBLIC_URLPublic URL of the syllogi web UI, e.g. http://localhost:8000. Used for OAuth redirect URIs.
AUTH_SECRET_KEYSecret used to secure sign-in sessions. Set to a long random string in production.

Music server

Configure one of the following providers. If both are configured, set MUSIC_PROVIDER to disambiguate.

NameDescription
JELLYFIN_API_KEYJellyfin API key for the target user with permission to create and manage playlists.
JELLYFIN_URLBase URL of your Jellyfin server, e.g. https://jellyfin.example.com or http://localhost:8096.

Optional

NameDefaultDescription
DOWNLOAD_LIBRARY_NAMEDownloadsName of the Jellyfin media folder that contains the downloads. Jellyfin-only; ignored for Navidrome.
DOWNLOAD_DIR/downloadsFilesystem path inside the container where downloaded tracks are written. Must be a path your music server scans.
DISCORD_WEBHOOK_URL(unset)Discord webhook URL for sync summary notifications. Leave unset to disable.
LOG_LEVELINFOPython logging level (DEBUG, INFO, WARNING, ERROR).
LOG_DIR/logsDirectory inside the container where syllogi.log is written. Mount it as a volume so the Logs tab survives a restart.
AUTHENTIK_CLIENT_ID(unset)Authentik OAuth application client ID. Required only if you want SSO via Authentik.
AUTHENTIK_SECRET(unset)Authentik OAuth application client secret.
AUTHENTIK_ISSUER(unset)Authentik OIDC issuer URL, e.g. https://auth.example.com/application/o/syllogi/.
TZ(unset)Container timezone, e.g. Asia/Singapore. Affects cron scheduling.
ENVIRONMENTproductionSet to development to enable debug features (raw API response dumps).
BRAINZMASH_URLhttps://api.brainzmash.cc/ws/2Primary MusicBrainz-compatible API. Set empty to go straight to MusicBrainz.
MUSICBRAINZ_URLhttps://musicbrainz.org/ws/2Fallback MusicBrainz service used when BrainzMash fails.
MUSICBRAINZ_USER_AGENTsyllogi/<version>Identifier sent to MusicBrainz with requests; <version> is the version of the running image.
BRAINZMASH_USER_AGENTsyllogi/<version>Identifier sent to BrainzMash with requests; <version> is the version of the running image.
LASTFM_API_KEY(unset)Last.fm API key for recommendations and charts. See Last.fm API documentation.
LASTFM_URLhttps://ws.audioscrobbler.com/2.0Override for the Last.fm service address.
LISTENBRAINZ_URLhttps://api.listenbrainz.orgOverride for the ListenBrainz service address.
LISTENBRAINZ_API_KEY(unset)ListenBrainz API key, used to check ListenBrainz usernames on music-server users and to fetch recommendations.
SLSKD_URL(unset)Address of your slskd instance.
SLSKD_API_KEY(unset)API key for slskd, used for downloading audio when tracks are missing from the library.
MUSIC_PROVIDER(unset)Required when both Jellyfin and Navidrome are configured: jellyfin or navidrome.

Metadata API

Charts, track matching, and downloads fetch MusicBrainz data through BrainzMash by default, with the central MusicBrainz API as a fallback.

Running your own mirror

The public BrainzMash pool is shared, so throughput depends on how busy the pool is. Point BRAINZMASH_URL at your own MusicBrainz-compatible mirror to lift that shared ceiling: requests are served by your own instance, so Charts, track matching, and downloads stay responsive instead of queueing behind the pool or falling back to the rate-limited central API.

If you would rather help the pool on top of running your own instance, you can contribute a replica instead - see brainzmash.cc and brainzmash-hearing-aid for details.

Single sign-on

Authentik can be used as an OIDC provider, see Authentik OIDC.

On this page