ynthseek
v2.5.0
Documentation
ynthseek
v2.5.0

Configuration

The settings and environment variables you are meant to set, and where each one lives.

On this page

Where configuration lives

Synthseek has two configuration surfaces, and the split is deliberate.

Settings, in the application, holds everything you might reasonably change: credentials, engine tuning, behaviour switches. It lives in the database, applies live without a restart, and is the source of truth.

Environment variables hold bootstrap values only: where the database is, what port to listen on, which folders to use, the secret that signs sessions. These cannot live in the database, because they are needed before the database is open.

Settings, by section

General

Available to every member.

SettingWhat it does
ThemeSynthseek, Midnight, or Ocean.
LanguageEnglish, Español, Deutsch, or Français. Switches in place.
API keysCreate and revoke keys for assistant connections. Shown once at creation.
MCPThe public URL of your instance, and connection guidance for assistants.

Members

Administrators only. Covered on the Users and Permissions page. The approval gate lives here too:

SettingDefaultWhat it does
Require approval for membersOffHold a plain member’s requests until an administrator approves them.

Profile

Your own account. Username, email, password, avatar, connected accounts.

Updates

The patch notes timeline, and whether a newer version is available.

Integrations

Administrators only.

slskd. URL, API key, connection status, and the banned-peer list.

Download sources. Enable, disable, and prioritise slskd and yt-dlp. The yt-dlp tuning is on the Download Sources page.

Plex. Connection status, a reconnect button that signs you in at plex.tv and lets you pick a server, and the server URL that sign-in resolved, shown read-only. Plus two independent behaviour switches:

SettingDefaultWhat it does
Library scanOnAsk Plex to rescan after an import.
Playlist syncOnCreate and reconcile playlists on Plex.

And how mirrored playlists are named:

SettingDefaultWhat it does
Playlist username affixOffPrefix or suffix a media server playlist with its owner’s username.
Separator_The character between the name and the affix.

Lidarr. URL, API key, and the quality and metadata profiles available for delegation.

Metadata and artwork. All optional, all free:

KeyWhat it unlocks
AcoustIDVerifying a download by its audio, and identifying a track for tagging when other methods cannot. The most valuable one.
Last.fmSimilar artists, global charts, and your scrobble history.
fanart.tvHigh quality artist images.
MusicBrainz contact emailA higher rate limit against MusicBrainz.
SonglinkA higher rate limit for cross-platform link imports.
DiscogsAdditional metadata depth on the content detail views.

Library sources. Connect Spotify to import your existing library. Requires a Spotify client ID and a public base URL, since the OAuth callback comes back over the internet.

Engine

Administrators only. Most cards have a reset to defaults.

Queue

SettingDefaultRange
Maximum queue size100010 to 10000
Concurrent searches31 to 10
Concurrent pending imports61 to 20

Timeouts

SettingDefaultRange
Search phase15 seconds5s to 120s
Download phase20 minutes1m to 60m
Import phase5 minutes30s to 60m
Peer unresponsive2 minutes15s to 15m
Queue wait, active peer8 minutes30s to 30m
Queue wait, idle peer12 minutes30s to 60m

Import

SettingDefaultWhat it does
Metadata confidence threshold50How closely a file’s tags must match your request before it is accepted. Raise it to reject more, lower it to accept more.

The Download Engine page covers what happens to a file these checks refuse.

Quality

SettingDefaultWhat it does
Upgrades enabledOnAllow replacing a library file with a better copy.
Recycle bin retention30 daysHow long a replaced file stays recoverable. 1 to 365.

Alongside them, what the recycle bin currently holds, and a button to empty it.

Quarantine

SettingDefaultWhat it does
AcoustID identity gateOnFingerprint the audio and identify it before import, so a file whose tags look right but whose contents are something else is refused. Needs an AcoustID key.
Auto-ban after failed attempts0, meaning offBan a peer after this many failures.

Below them, the list of current entries with the reason for each, and a link to the banned-peer list. A quarantined pairing stays excluded until you remove that entry, clear the list, or approve the held file it came from. Reasons are: wrong file, verification failed, fingerprint mismatch, tag mismatch, duration mismatch, and tags unreadable.

Wanted

SettingDefaultRange
EnabledOff
Attempts per run101 to 50
Maximum attempts per track81 to 20

Smart search

Custom mood keywords, which extend the built-in mood classification with terms of your own.

Jobs

Administrators only. Covered on the Operations page.

Logs

Administrators only. Covered on the Operations page. The log level lives here:

SettingDefaultWhat it does
Log levelINFOApplied live, no restart.

Settings that live outside Settings

Two live where you use them rather than in a settings section.

SettingDefaultWhere
Review queue retention14 daysThe footer of the review queue on the Requests screen. 1 to 365.
Per-request format, bitrate, matching, speed, sourceSee FeaturesThe request window, stored on the request itself.

Environment variables

Required

VariableWhat it is
AUTH_SECRETSigns sessions. At least 32 characters. Generate with openssl rand -base64 48. Changing it logs everyone out.

Container identity and paths

VariableDefaultWhat it is
PUID1000The user Synthseek runs as. Must own your mounted folders.
PGID1000The group Synthseek runs as.
WEB_UI_PORT4400The port the web interface listens on.
DATABASE_URLfile:/data/db/synthseek.dbWhere the database lives.
DOWNLOADS_COMPLETE_PATH/downloadsWhere slskd puts completed downloads. Must be writable.
MUSIC_LIBRARY_PATH/musicYour organised library. Read-only is a supported degraded mode.
LOGS_PATH/data/logsWhere logs are written.
IMPORTS_PATH/data/importsStaging for drag-and-drop uploads.
RECYCLE_BIN_PATH/data/recycleWhere replaced files go.
ARTWORK_CACHE_PATH/data/artwork-cacheDisk cache for proxied artwork.

Sessions and cookies

VariableDefaultWhat it is
SESSION_DURATION_HOURS720Thirty days. Range 1 to 8760.
COOKIE_NAMEsynthseek_sessionThe session cookie name.
COOKIE_SECUREfalseSet true when behind an HTTPS reverse proxy.
PLEX_CLIENT_IDENTIFIERsynthseekAdvertised during Plex sign-in.

Public reachability

VariableWhat it is
PUBLIC_BASE_URLThe public HTTPS address this instance is reachable at. Required for assistant connectors and for the Spotify OAuth callback, both of which call back over the internet. Leave empty for local-only use.

Bootstrap credentials

These exist for one situation: upgrading a 1.x instance, where environment variables were the only way to configure anything. On the first boot after the upgrade each one is copied into Settings, and from then on Settings is the source of truth and the variable is never read again. Keep them for that one boot, then remove them.

A fresh install needs none of them. The setup wizard collects the same values and writes them to the same place. Leave them out, because setting either slskd variable also records the instance as an upgrade from before 2.0.0 rather than a new one.

SLSKD_API_URL, SLSKD_API_KEY, PLEX_URL, PLEX_TOKEN, LASTFM_API_KEY, FANART_API_KEY, ACOUSTID_API_KEY, MUSICBRAINZ_CONTACT_EMAIL, SONGLINK_API_KEY.

Tagging

VariableDefaultWhat it is
ENABLE_BEETS_IMPORTtrueWhether to tag and file at all. False leaves files in the downloads folder.
USE_MUSIC_BRAINZtrueIdentify tracks against MusicBrainz when tagging.
USE_ACOUSTIC_IDtrueIdentify tracks by their audio when tagging.
BEETS_COMMANDbeetPath to the beets executable.
BEETS_CONFIG/data/config/beets-config.yamlPath to the beets configuration. A default is created on first boot, and an updated example is written alongside it on every boot.
FPCALC_PATHfpcalcPath to the fingerprinting binary.

One-shot migration

Only when upgrading an existing single-user 1.x instance. Set these on the first boot so your existing library gets an owner, then remove them.

ADMIN_MIGRATION_EMAIL, ADMIN_MIGRATION_USERNAME, ADMIN_MIGRATION_PASSWORD.

The container refuses to start with a clear message if existing data is present and these are missing.