Search
Movies, TV shows & people — everything stays in-app
Keep exploring
An endless mix of movies & shows
Watchlist
Shows and people you follow
Requests
What your household asked for. Approve once, everyone who asked hears about it.
Import
Downloads that need a hand — place them by hand or dismiss
Automations
Video tasks that keep your movie & TV library fresh — separate from the music side
—
Needs attention
Subtitle languages
Playlists
Cast & Crew
Collection
More Like This
Videos
Photos
About
Where to Watch
Review
Acquisition History
—
Needs attention
Subtitle languages
Cast & Crew
Collection
More Like This
Videos
Photos
About
Where to Watch
Review
Acquisition History
Issues
Problems reported on library items
Photos
Known For
Filmography
Films
Search
Find artists, albums, and tracks from any metadata source
Settings
Metadata Source
• Spotify — official Spotify; connect your account with the Spotify tile under Services.
• Spotify (no auth) — the same Spotify catalog with no account needed. It's unofficial and best-effort (may break if Spotify changes its site) and can't read your personal library or playlists.
• Deezer / iTunes — free, no account.
• MusicBrainz — free; the public server is limited to 1 request/sec. Configure a self-hosted server in the MusicBrainz tile under Services.
• Discogs — needs a personal access token.
• JioSaavn — opt in under Advanced → Experimental. Strong for Indian and Bollywood catalogs.
Tip: if you pick Spotify (no auth) and later connect a real Spotify account, it uses the official account normally and only falls back to no-auth while Spotify is rate-limited — then switches back automatically.
TMDB & TVDB are required. The video side matches, enriches and automates everything from these — library matching, artwork, airing shows, collections — so nothing works until both keys are set. Both are free. OMDb and fanart.tv below are optional extras.
API Configuration
Spotify
›iTunes / Apple Music
›Deezer (Favorites & Playlists)
›arl value. Provides playlist access + downloads.
Discogs
›Tidal (Playlists & Metadata)
›Qobuz (Metadata & Enrichment)
›www.qobuz.com/api.json
→ look in the request headers for X-User-Auth-Token
→ copy that value.Concerts
›Last.fm
›Genius
›Pollinations
›MusicBrainz
›AcoustID Verification
›ListenBrainz
›Hydrabase
›API Configuration
TMDB
Required ›TVDB
Required ›OMDb (Ratings)
›fanart.tv (Artwork)
›OpenSubtitles (Subtitles)
›SubDL (Subtitles)
›SubSource (Subtitles)
›Trakt (Audience Rating)
›MDBList (List Collections)
›Community Data (No Key)
›YouTube Extras (No Key)
›Server Connection
Pick the server the video side uses. Fields are pre-filled from your Music settings — edit them to point video at a different server without touching Music.
Server Connections
Video Quality
Ladder, cutoff, rejects & tie-breakersCustom Formats
/x265|hevc/. A
format matches when all "match" terms hit and no
"never" term does;
matching formats add their score to a release's rank (negative buries
without rejecting).
The "this profile" column overrides a format's score for the profile
selected above.
YouTube Quality
Resolution ceiling, codec & container for followed channelsSource Settings
Source, stream & concurrencyDownload Sources
Set up any source here, then put it in the chain on the Downloads tab. A source does not have to be enabled to be configured.www.qobuz.com/api.json
→ look for X-User-Auth-Token in the request
headers → copy that value.arl value.
Quality: 128 kbps MP3 / AAC depending on the upload (anonymous tier). SoundCloud doesn't expose lossless audio to anyone.
Best for full-album grabs. Lidarr is album-first by design — track-name searches usually return nothing useful, so in hybrid mode Lidarr is mostly a no-op for playlists and falls through to your other sources. Use Lidarr Only when you specifically want to grab whole albums via your indexers.
yt-dlp ●
⬢ Prowlarr
Don't have it? Grab Prowlarr from
prowlarr.com
(or your *arr stack). You point Prowlarr at your indexers,
then point SoulSync at Prowlarr.
http://192.168.1.100:9696).
⬢ Torrent Downloader
--rpc-secret in the
Password field.
/data/downloads/music) that's
mounted here at a different path. SoulSync finds the
release by name under this folder. Blank = use the
Soulseek download/transfer folders.
⬢ Usenet Downloader
/data/downloads/music) mounted here at a
different path. SoulSync finds the release by name under
this folder. Blank = use the Soulseek download/transfer
folders.
Music Quality
Profile Format priorities, bitrate, bit depthAcquisition vs retained output: Downsample and Lossy Copy run only after the downloaded file passes this gate. SoulSync remembers the acquired quality, so intentionally retaining 16/44.1 or a lossy-only output does not make the same track appear as an upgrade again.
Selected target or better keeps the Quality Upgrade job proposing replacements until the file reaches the selected rank.
Best quality asks every source, then downloads the highest-quality copy it found — even if a faster source also had a lower-quality one. Slower and more API calls, but you never settle for a worse file when a better one exists.
Either way, the per-source retry limits stay the same.
Off (default): the most likely-correct / fastest copy is downloaded first — the original behaviour.
On: the highest-quality copy (per your target list above) is downloaded first instead; correctness and speed only break ties.
Nothing is skipped and the source order doesn't change, so a track can't go missing — it just prefers the better copy. (This is always how Best quality works, which is why this option only appears for Source priority.)
When on, a file that matches none of your targets (e.g. a 16-bit FLAC or an MP3 when you only listed 24-bit) is accepted anyway as a last resort.
Turn it off to strictly enforce your list — anything off-list is then quarantined instead of completed.
Quality on Import
Profile Apply the profile to manually imported filesNote: imported files are always checked against your Quality Profile's priority list above — there's no separate on/off switch for that, since an empty list (or Fallback turned on) already means "accept anything."
Album Releases
Profile What to import when a Usenet or torrent download is a whole albumAlso the album's other tracks then imports every other track of that album found in the release and not yet in your library. Each one goes through the normal import pipeline with this quality profile, like a wishlist download: a track that fails a check is quarantined on its own, and the tracks that pass are imported.
Post-Download Conversion
Profile Downsample hi-res, make lossy copiesAudio Verification
Profile AcoustID identity match + truncated/silent detection⚠️ Use with care. AcoustID "could not confirm" is common for perfectly good tracks — anything not in its fingerprint database: new/obscure releases, classical, remixes, live cuts, remasters, non-Latin-script titles. With this on, all of those get quarantined, so you may end up with many legitimate files to review and approve by hand. Nothing is lost (quarantined files can be approved), but expect manual cleanup. Leave this off to keep the safer default: unconfirmed tracks import with the ⚠ "unverified" badge so you can review them without anything being blocked. Transient lookup errors (rate-limit / outage) always import, so an AcoustID outage never stalls you. Requires AcoustID enabled.
flac -t, which also verifies
the STREAMINFO MD5. A file that fails is quarantined and
the next candidate is tried, so a damaged replacement can
never take the place of a good file. Off by
default. Fails open — if the flac binary is
missing or the check times out, the file is left alone
rather than quarantined.Quality Profiles
Click a profile's name to view/edit its settings on the left. Changes autosave to that profile, and Save Settings saves it too; viewing never activates it. Per row: ● set as active default, ✏ rename, ✎ save now, ⇩ use for Auto-Import, × delete.
Download Behaviour
Preview source, concurrency & timeoutsRetry Logic
What happens when a download is rejectedAlbum Publishing
When album downloads appear in your librarystorage/album_bundle_staging/<batch id> — it is
not the Staging path set under Library, which is a
different folder for a different job. It is emptied when the batch
finishes. If a crash leaves one behind, the next start moves
anything still holding audio into the Downloads recycle bin
(labelled “Stalled album download”) rather than deleting
it, so a stalled album is recoverable instead of gone. Only affects
full-album and wishlist-album downloads — single tracks and album
top-ups (completeness fills) are unaffected. Tracks stay on your
wishlist until the album is actually published, so an interrupted
album is always retryable.Folders
Downloads and library locationsFolder Paths
../Artist/Album/01 - Song.flac
instead of the full path SoulSync sees, so a saved M3U still
works when the folder is opened from a network share, another
machine or a sync tool. Tracks that don't share a folder with
the playlist keep their full path, and the base path and
prefix rewrite below still apply to those.
/mnt/music).
/data/media/…) plays directly on the
machine that mounts the same storage elsewhere
(M:/media/…). Entries that don't start with
the prefix pass through unchanged. Leave both empty to disable.
Additional Music Libraries
/music2).
Sample Studio Folders
Where downloads arrive
Libraries
4K libraries (optional)
Collections on other drives
Docker volumes
Organization
Naming, layout and file handlingFile Organization
$disambiguation itself, it is added to the
album folder automatically. When a recording carries its own
disambiguation (version note, like “acoustic”)
and your template doesn't place
$track_disambiguation itself, it is added to the
track filename automatically. This keeps same-named releases
and same-titled recordings apart — turn it off and your template is
respected exactly as written.
$albumartist, $artist,
$artistletter, $albumartistletter,
$album,
$albumtype, $title,
$track, $disc (01),
$discnum (1), $cdnum (CD01),
$year, $quality (filename only),
$disambiguation (the release's edition note, like
“baby punk version”; added to the album folder
automatically when your template leaves it out, unless
“Automatically add disambiguation”
above is turned off),
$track_disambiguation (the recording's version
note, like “acoustic”; added to the filename
automatically when your template leaves it out, unless the
same toggle above is turned off),
$explicit ([E] on explicit tracks, nothing
otherwise), $contentrating ([E] or [C]) and
$contentratingfull ([Explicit] or [Clean]); these
stay empty when the source doesn't say, and in a folder they
follow the album, not the track.
To tell same-named artists apart:
$albumartistdisambiguation (MusicBrainz's note,
like “US grunge band”),
$albumartistcountry (US, GB, JM),
$albumartistgenre,
$albumartistinfo (the first of those three the
artist has), $albumartistcomposite (the note, else
country and genre together, like “US Rock”) and
$albumartistclash (the same as info, but
only when another artist in your library shares the name, so
$albumartist ($albumartistclash) keeps unique
artists plain). The $artist versions
($artistinfo and so on) describe the track
artist. They come from enrichment, so an artist that hasn't
been matched to MusicBrainz yet renders nothing. The
three disc variables work in a folder segment as well as in the
filename and are empty on a single-disc album, so
$albumartist/$album/Disc $discnum/$track - $title
gives you a disc folder only where there is more than one disc.
Put any of them in the template and it replaces the automatic
disc folder from “Multi-Disc Folder Label” below.
Use ${var} to append text:
${albumtype}s → Albums
$albumartist
is the release's credit (often Various Artists) and
$artist is whoever recorded the track. To file
compilations exactly like albums, give it the same template
as the album one.
$albumartist, $artist,
$artistletter, $albumartistletter,
$title,
$track (01), $album,
$albumtype, $year,
$quality (filename only). Use ${var}
to append text: ${albumtype}s → Singles
$position
(playlist order), $artist, $album,
$track, $title. Must include
$title and cannot contain "/". Example:
$position - $artist - $title →
01 - Daft Punk - One More Time.flac. Empty = keep
the original library filename.
$artist, $artistletter,
$title, $year. Use ${var}
to append text. Default:
$artist/$title-video
$artist, $track,
$album, $chop (the save name),
$stem (drums/vocals/bass/other, empty for the
full mix). Default:
$artist/$track - $chop. Sample Studio files saved
chops inside the chosen sample folder with this layout; every
rendered file also carries its own tags. Empty segments
collapse — a chop with no album info won't leave a stray
folder. Use ${var} to append text.
Disc 1/). Ignored when your path template already
places the disc itself with $disc,
$discnum or $cdnum — the
template wins.
$albumartist resolves when a release has multiple
artists — this governs the FOLDER your music sorts into for both
albums and singles (the default templates use
$albumartist). "First Listed" uses only the primary
artist for folder names (e.g., "Larry June" instead of "Larry
June, Curren$y & The Alchemist"). Full artist list is always
preserved in file metadata tags.
$artistletter is used in templates: artists
starting with digits, symbols or non-Latin scripts all sort into
a single # folder instead of one folder per
character ("365 Days" → #/, "北京" →
#/). Accented letters fold to their base letter
(Édith Piaf → E/). Off = the literal first
character, exactly as before.
: ? / \ " * | < > in file or
folder names. Off, they become _
(AC_DC). On, they become lookalike characters
that work everywhere (AC∕DC,
What's Going On?), and a trailing dot is kept
(DAMN․). Applies to new downloads; run
Reorganize to rename what's already there.
& matches MusicBrainz/Picard style)
Library Organize
$author, $authorletter,
$narrator, $title,
$series, $seriespos (01),
$year, $asin. Default:
$author/$series/$seriespos - $title. Books with no
series collapse the series folder and its number cleanly, the
same way podcast season folders do. Use ${var} to
append text.
.deleted folder inside
your audiobook library instead of erasing it, so a mis-click can
be undone. The folder is hidden so Audiobookshelf, Plex and
Jellyfin do not keep showing books you removed. Note the space
is not freed until the bin is emptied. Off, deletes are
permanent immediately.
7
Audiobook Quality
What counts as a good file. One profile for every audiobook — the per-author card carries the settings that differ by author.Downloads & Import
Books use the same torrent, usenet and Soulseek clients as music — set those up under Sources.us
audiobooks
3030 is the
standard audiobook category and is deliberately kept OUT of
music searches, so asking for it here costs the music side
nothing. Only change this if your indexer uses a non-standard
ID.
92
7
.m4b with one chapter marker per file
during import. Needs ffmpeg on the server
(the Docker image ships it). The originals are only removed
after the merged file verifies, so a failed merge never
loses the book.
cover.jpg into the book folder. Plex, Jellyfin,
Audiobookshelf and Booksonic all read it from there.
metadata.opf (Audiobookshelf, Plex, Calibre) and
book.nfo (Kodi, Jellyfin, Emby). Both, because the
servers genuinely disagree about which to look for and they are
a few hundred bytes each. These also carry the ASIN, which is
what lets the daily library scan recognise a book you imported
months ago.
$show, $author, $title,
$season (01), $seasonnum (1),
$episode (01), $episodenum (1),
$year, $date (YYYY-MM-DD),
$type. Default:
$show/Season $season/$title. Season and episode
folders collapse cleanly if omitted in feed. Use
${var} to append text.
…
…
…
ss_recycle folder inside the library
instead of being deleted — a safety net if something gets
replaced by mistake.
ss_recycle folder per
library.
en,es). One .srt per
language is written as
<video>.<lang>.srt.
Each code is 2–3 letters;
separate codes with commas, spaces, or semicolons.
.en.srt, .eng.srt,
.English.sdh.srt, or an unlabeled
.srt whose language it detects) and the
file's own embedded tracks.
Ignore image subs if your players
can't show them (or have to transcode for them) and you'd
rather have a text .srt.
ffsubsync Python package on the server;
a failed sync keeps the original file.
faster-whisper Python package on the
server.
Post-Processing
Metadata, tags, conversion, lyricsImport
Folder-artist override, permanent libraryArtist/Album/… (or Artist/Albums/Album/…)
take the top
folder as the album artist — handy for mixtapes/compilations whose
embedded tags
carry DJ names. Turn this off if you drop a mixed
pile of songs
under one container folder: otherwise every file's artist gets
overwritten with
that folder's name (the cause of the "soulsync" mass-mislabel). With
it off, the
metadata-identified artist is always kept.
Filtering
Explicit content & genre whitelistLive, remix, acoustic and instrumental files are normally thrown out on sight when the source didn't ask for one. Picking any of those four here lifts that for the version you picked, so a live take of a similarly titled song can be accepted when the real track is nowhere to be found.
Playlists
M3U export & server playlist syncsoulsync_library.m3u of your entire library,
rewritten after every scan (deep, incremental, or full refresh) so it
stays in sync with the database.
Listening Stats
Play history from your media serverDiscovery
How adventurous your recommendations areVideo Preferences
Trailers & where-to-watch regionDetail Pages
›Security & Access
PIN · user accounts · reverse proxy🔑 Lock with a PIN simple · one shared PIN
👤 User accounts (login) per-person · best for public access
/api/auth/oidc/callback.
New OIDC profiles start with what New sign-ups below sets.
Accounts are matched by the provider's account id, never by email,
and nobody becomes an admin from a provider claim: to sign in as
the admin, save these settings, then connect your own account
at the bottom.
groups). Add
offline_access on Authentik or Authelia so signing
someone out there signs them out here too.
SOULSYNC_OIDC_ONLY_OVERRIDE=off on the
container and restart, then sign in with the admin password.
🌐 Reverse proxy & remote access
Support/REVERSE-PROXY.md.
X-Forwarded-* headers, marks the
session cookie HTTPS-only, and adds security headers.
Leave OFF for direct / LAN access over http://
— it would otherwise break plain-HTTP login. Takes
effect after a restart.
* on its own line
allows any origin (insecure).
Discovery Pool Settings
Lookback & hemisphereUI Appearance
Database Settings
ConcurrencyDatabase Maintenance
Size, vacuum & cleanupIncremental Vacuum enables automatic page reclamation. Requires a one-time full compact to activate. After that, freed pages are reclaimed in small batches automatically.
Logging
Log level & pathSoulSync API
REST keys & inbound endpointREST API Keys
/api/v1/ endpoints.
Keys are shown once at creation — store them securely.
Inbound Request Endpoint
curl -X POST http://<host>:8008/api/v1/request \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"query": "Artist - Track Name"}'
request_id for status polling. Add
"notify_url" to POST results to a webhook on
completion.
Also triggers any Webhook Received automations in
the Automation Hub.
MCP for AI Clients
http://<host>:8008/mcp as an MCP server and
send an API key from above as a Bearer token. A read-only key
can look but not change anything. Settings, keys and profiles
are never reachable.
Lidarr Compatible API
http://<host>:8008/lidarr and paste an
Admin API key from above. Albums it asks for
go on the wishlist of the profile below.
Developer Mode
Advanced log viewerArtwork Cache
Local copies of cover & poster artSidebar Weather
Time, temp & forecast lineMetaSync
Join SIN, the signal network, through the MetaSync companionStep 1 connects SoulSync and MetaSync to each other, on this machine.
Step 2 joins a pool. MetaSync does the joining — SoulSync itself never talks to a pool, it only hands MetaSync your pool key.
Installing MetaSync joins nothing by itself.
Rather type a key? Connect manually instead of pairing
Developer
Preview tools, nothing savedNotifications
Discord, webhooks & TelegramImport Lists
Auto-add movies & shows from a listExperimental
Opt-in preview featuresFeatures in this section are optional, may change without notice, and are not held to the same support standard as core metadata sources.
Hydrabase
API Calls
Tracks
Albums
Artists
Discography
Album Tracks
Response
Network
Peers: --Source Comparisons
When Hydrabase is the active metadata source, searches are compared against Spotify and iTunes in the background.
No comparisons yet. Search with Hydrabase active to generate comparisons.
Chat
Soulseek rooms & private messages
