Integrations Guide
soundspan works standalone, but these integrations unlock additional discovery and playback workflows.
For environment and secret setup, see CONFIGURATION_AND_SECURITY.md.
Lidarr
Connect soundspan to Lidarr to request/download new music and trigger imports.
What you get
- Browse artists/albums you do not own
- Request downloads from soundspan
- Discover Weekly playlist import flows
- Automatic library sync via webhook
Setup
- Open Settings in soundspan
- Go to the Lidarr section
- Set Lidarr URL (for example
http://localhost:8686) - Set Lidarr API key (Lidarr -> Settings -> General)
- Test and save
Networking note
Lidarr must reach the soundspan callback URL.
- AIO: default callback uses
host.docker.internal:3030 - Split stack: usually
http://backend:3006on compose network - Custom Docker networking: set
SOUNDSPAN_CALLBACK_URLto a reachable soundspan address
environment:
- SOUNDSPAN_CALLBACK_URL=http://YOUR_SOUNDSPAN_IP:3030
Audiobookshelf
Connect your Audiobookshelf instance for audiobook playback in soundspan.
Setup
- Open Settings -> Audiobookshelf
- Set URL (for example
http://localhost:13378) - Set API token (Audiobookshelf user settings)
- Test and save
Soulseek
soundspan can connect directly to Soulseek for discovery/download flows.
Disclaimer: You are responsible for legal use in your jurisdiction.
Setup
- Open Settings -> Soulseek
- Enter Soulseek username/password
- Save
Notes
- Discovery results include filename, size, bitrate, and parsed metadata
- Download progress appears in Activity Panel
- Quality/availability depends on peer uptime and speed
YouTube Music
Stream unowned tracks via per-user YouTube Music OAuth.
Disclaimer: Uses unofficial libraries (
ytmusicapi,yt-dlp) and requires YouTube Music Premium.
Requirements
- Running
ytmusic-streamersidecar - Google OAuth client configured as "TVs and Limited Input devices"
Admin setup
- Create OAuth client in Google Cloud Console
- Open soundspan Settings -> YouTube Music
- Enable and set client ID/secret
- Save
Per-user setup
- Open Settings -> YouTube Music
- Click Link YouTube Music Account
- Enter device code at Google authorization page
- Choose quality and save
Quality settings
| Setting | Approximate bitrate |
|---|---|
| Low | ~64 kbps |
| Medium | ~128 kbps |
| High | ~256 kbps |
| Lossless | Best available |
API access modes
All routes below still require soundspan authentication and ytMusicEnabled=true.
| Mode | Endpoints |
|---|---|
| OAuth-free browse/search/stream | GET /api/browse/ytmusic/charts, GET /api/browse/ytmusic/categories, GET /api/browse/ytmusic/playlist/:id, POST /api/ytmusic/search, POST /api/ytmusic/match, POST /api/ytmusic/match-batch, GET /api/ytmusic/stream-info-public/:videoId, GET /api/ytmusic/stream-public/:videoId |
| Per-user OAuth required | GET /api/ytmusic/album/:browseId, GET /api/ytmusic/artist/:channelId, GET /api/ytmusic/song/:videoId, GET /api/ytmusic/stream-info/:videoId, GET /api/ytmusic/stream/:videoId, GET /api/ytmusic/library/songs, GET /api/ytmusic/library/albums |
Track Mapping and Playlist Import APIs
soundspan also exposes provider mapping and playlist import routes for cross-provider workflows:
| Endpoint | Purpose |
|---|---|
POST /api/browse/playlists/parse |
Parse Spotify/Deezer playlist URLs before import |
GET /api/track-mappings/album/:albumId |
Read provider mappings for an album's local tracks |
POST /api/track-mappings/batch |
Persist multiple mapping links in one request |
POST /api/import/preview |
Resolve playlist tracks (local/YT/TIDAL) without creating a playlist |
POST /api/import/execute |
Create a playlist from a resolved import |
TIDAL Streaming
Stream unowned tracks via per-user TIDAL OAuth.
Disclaimer: Requires TIDAL subscription and uses
tiddllibrary.
Requirements
- Running
tidal-downloadersidecar - TIDAL enabled in admin settings
Per-user setup
- Open Settings -> TIDAL Streaming
- Click Link TIDAL Account
- Enter device code at TIDAL authorization page
- Choose quality and save
Streaming auth is separate from admin download auth.
Quality settings
| Setting | Format |
|---|---|
| Low | AAC 96 kbps |
| High | AAC 320 kbps |
| Lossless | FLAC 16-bit / 44.1 kHz |
| Max / Hi-Res | FLAC 24-bit / 192 kHz |
TIDAL Downloads
Use TIDAL as a download source for tracks/albums.
Disclaimer: Intended for personal use with your own subscription.
Setup
- Ensure
tidal-downloaderservice is running - Open Settings -> TIDAL
- Authenticate via device-code flow
- Choose download quality and naming template
- Save
File naming template examples
# Default
{album.artist}/{album.title}/{item.number:02d}. {item.title}
# Disc-track format
{album.artist}/{album.title}/{item.volume}-{item.number:02d} {item.title}
# With year
{album.artist}/{album.title} ({album.date:%Y})/{item.number:02d}. {item.title}
Default template:
{album.artist}/{album.title}/{item.number:02d}. {item.title}
TIDAL sidecar environment values
| Variable | Default | Description |
|---|---|---|
TIDAL_TRACK_DELAY |
3 |
Delay between track downloads |
MUSIC_PATH |
/music |
Path for downloaded music |
TIDDL_PATH |
/data/.tiddl |
Sidecar cache/config path |
DEBUG |
(unset) | Enable debug logging |
Main-channel image:
docker pull ghcr.io/soundspan/soundspan-tidal-downloader:main
OpenSubsonic API Compatibility
soundspan exposes a Subsonic/OpenSubsonic-compatible /rest surface.
- Full contract and known-gap policy:
OPENSUBSONIC_COMPATIBILITY.md - Split deployment client URL guidance: use frontend base URL
- Backend-direct deployments can target backend URL directly
Local smoke check:
cd backend
npm run test:smoke:subsonic-proxy
See also
- Configuration and Security — Secret handling and external access settings
- Environment Variables — Complete env var reference by container
- Deployment Guide — Docker and compose deployment options
- Usage Guide — Navigation, playback behavior, and administration