mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 23:55:10 -05:00
Major update since basic Spotify playlist injection: Added web UI for admin dashboard with playlist management, track matching, and manual mapping controls. Lyrics system with prefetching, caching, and manual ID mapping. Manual track mapping for missing tracks with persistent storage. Memory leak fixes and performance improvements. Security hardening with admin endpoints on internal port. Scrobbling fixes and session cleanup. HiFi API integration with automatic failover. Playlist cache pre-building for instant loading. Three-color progress bars showing local/external/missing track counts.
190 lines
8.0 KiB
Plaintext
190 lines
8.0 KiB
Plaintext
# ===== BACKEND SELECTION =====
|
|
# Choose which media server backend to use: Subsonic or Jellyfin
|
|
BACKEND_TYPE=Subsonic
|
|
|
|
# ===== REDIS CACHE =====
|
|
# Enable Redis caching for metadata and images (default: true)
|
|
REDIS_ENABLED=true
|
|
|
|
# Redis data persistence directory (default: ./redis-data)
|
|
# Redis will save snapshots and append-only logs here to persist cache across restarts
|
|
REDIS_DATA_PATH=./redis-data
|
|
|
|
# ===== SUBSONIC/NAVIDROME CONFIGURATION =====
|
|
# Server URL (required if using Subsonic backend)
|
|
SUBSONIC_URL=http://localhost:4533
|
|
|
|
# ===== JELLYFIN CONFIGURATION =====
|
|
# Server URL (required if using Jellyfin backend)
|
|
JELLYFIN_URL=http://localhost:8096
|
|
|
|
# API key for authentication (get from Jellyfin Dashboard > API Keys)
|
|
JELLYFIN_API_KEY=
|
|
|
|
# User ID (get from Jellyfin Dashboard > Users > click user > check URL)
|
|
JELLYFIN_USER_ID=
|
|
|
|
# Music library ID (optional, auto-detected if not set)
|
|
JELLYFIN_LIBRARY_ID=
|
|
|
|
# ===== MUSIC SOURCE SELECTION =====
|
|
# Music service to use: SquidWTF, Deezer, or Qobuz (default: SquidWTF)
|
|
MUSIC_SERVICE=SquidWTF
|
|
|
|
# Path where downloaded songs will be stored on the host (only applies if STORAGE_MODE=Permanent)
|
|
DOWNLOAD_PATH=./downloads
|
|
|
|
# Path where favorited external tracks are permanently kept
|
|
KEPT_PATH=./kept
|
|
|
|
# Path for cache files (Spotify missing tracks, etc.)
|
|
CACHE_PATH=./cache
|
|
|
|
# ===== SQUIDWTF CONFIGURATION =====
|
|
# Different quality options for SquidWTF. Only FLAC supported right now
|
|
SQUIDWTF_QUALITY=FLAC
|
|
|
|
# ===== DEEZER CONFIGURATION =====
|
|
# Deezer ARL token (required if using Deezer)
|
|
# See README.md for instructions on how to get this token
|
|
DEEZER_ARL=your-deezer-arl-token
|
|
|
|
# Fallback ARL token (optional)
|
|
DEEZER_ARL_FALLBACK=
|
|
|
|
# Preferred audio quality: FLAC, MP3_320, MP3_128 (optional)
|
|
# If not specified, the highest available quality for your account will be used
|
|
DEEZER_QUALITY=
|
|
|
|
# ===== QOBUZ CONFIGURATION =====
|
|
# Qobuz user authentication token (required if using Qobuz)
|
|
# Get this from your browser after logging into play.qobuz.com
|
|
# See README.md for detailed instructions
|
|
QOBUZ_USER_AUTH_TOKEN=
|
|
|
|
# Qobuz user ID (required if using Qobuz)
|
|
# Get this from your browser after logging into play.qobuz.com
|
|
QOBUZ_USER_ID=
|
|
|
|
# Preferred audio quality: FLAC, FLAC_24_HIGH, FLAC_24_LOW, FLAC_16, MP3_320 (optional)
|
|
# If not specified, the highest available quality will be used
|
|
QOBUZ_QUALITY=
|
|
|
|
# ===== GENERAL SETTINGS =====
|
|
# External playlists support (optional, default: true)
|
|
# When enabled, allows searching and downloading playlists from Deezer/Qobuz
|
|
# Starring a playlist triggers automatic download of all tracks and creates an M3U file
|
|
ENABLE_EXTERNAL_PLAYLISTS=true
|
|
|
|
# Playlists directory name (optional, default: playlists)
|
|
# M3U playlist files will be created in {DOWNLOAD_PATH}/{PLAYLISTS_DIRECTORY}/
|
|
PLAYLISTS_DIRECTORY=playlists
|
|
|
|
# Explicit content filter (optional, default: All)
|
|
# - All: Show all tracks (no filtering)
|
|
# - ExplicitOnly: Exclude clean/edited versions, keep original explicit content
|
|
# - CleanOnly: Only show clean content (naturally clean or edited versions)
|
|
# Note: This only works with Deezer, Qobuz doesn't expose explicit content flags
|
|
EXPLICIT_FILTER=All
|
|
|
|
# Download mode (optional, default: Track)
|
|
# - Track: Download only the played track
|
|
# - Album: When playing a track, download the entire album in background
|
|
# The played track is downloaded first, remaining tracks are queued
|
|
DOWNLOAD_MODE=Track
|
|
|
|
# Storage mode (optional, default: Permanent)
|
|
# - Permanent: Files are saved to the library permanently and registered in the media server
|
|
# - Cache: Files are stored in /tmp and automatically cleaned up after CACHE_DURATION_HOURS
|
|
# Not registered in media server, ideal for streaming without library bloat
|
|
# Note: On Linux/Docker, you can customize cache location by setting TMPDIR environment variable
|
|
STORAGE_MODE=Permanent
|
|
|
|
# Cache duration in hours (optional, default: 1)
|
|
# Files older than this duration will be automatically deleted when STORAGE_MODE=Cache
|
|
# Based on last access time (updated each time the file is streamed)
|
|
# Cache location: /tmp/allstarr-cache (or $TMPDIR/allstarr-cache if TMPDIR is set)
|
|
CACHE_DURATION_HOURS=1
|
|
|
|
# ===== SPOTIFY PLAYLIST INJECTION (JELLYFIN ONLY) =====
|
|
# REQUIRES: Jellyfin Spotify Import Plugin (https://github.com/Viperinius/jellyfin-plugin-spotify-import)
|
|
# This feature intercepts Spotify Import plugin playlists (Release Radar, Discover Weekly) and fills them
|
|
# with tracks auto-matched from external providers (SquidWTF, Deezer, Qobuz)
|
|
# Uses JELLYFIN_URL and JELLYFIN_API_KEY configured above (no separate credentials needed)
|
|
|
|
# Enable Spotify playlist injection (optional, default: false)
|
|
SPOTIFY_IMPORT_ENABLED=false
|
|
|
|
# Sync schedule: When does the Spotify Import plugin run?
|
|
# Set these to match your plugin's sync schedule in Jellyfin
|
|
# Example: If plugin runs daily at 4:15 PM, set HOUR=16 and MINUTE=15
|
|
SPOTIFY_IMPORT_SYNC_START_HOUR=16
|
|
SPOTIFY_IMPORT_SYNC_START_MINUTE=15
|
|
|
|
# Sync window: How long to search for missing tracks files (in hours)
|
|
# The fetcher will check every 5 minutes within this window
|
|
# Example: If plugin runs at 4:15 PM and window is 2 hours, checks from 4:00 PM to 6:00 PM
|
|
SPOTIFY_IMPORT_SYNC_WINDOW_HOURS=2
|
|
|
|
# Matching interval: How often to run track matching (in hours)
|
|
# Spotify playlists like Discover Weekly update once per week, Release Radar updates weekly
|
|
# Most playlists don't change frequently, so running once per day is reasonable
|
|
# Set to 0 to only run once on startup (manual trigger via admin UI still works)
|
|
# Default: 24 hours
|
|
SPOTIFY_IMPORT_MATCHING_INTERVAL_HOURS=24
|
|
|
|
# Playlists configuration (JSON ARRAY FORMAT - managed by web UI)
|
|
# Format: [["PlaylistName","SpotifyPlaylistId","first|last"],...]
|
|
# - PlaylistName: Name as it appears in Jellyfin
|
|
# - SpotifyPlaylistId: Get from Spotify URL (e.g., 37i9dQZF1DXcBWIGoYBM5M)
|
|
# Accepts: spotify:playlist:ID, full URL, or just the ID
|
|
# - first|last: Where to position local tracks (first=local tracks first, last=external tracks first)
|
|
#
|
|
# Example:
|
|
# SPOTIFY_IMPORT_PLAYLISTS=[["Discover Weekly","37i9dQZEVXcV6s7Dm7RXsU","first"],["Release Radar","37i9dQZEVXbng2vDHnfQlC","first"]]
|
|
#
|
|
# RECOMMENDED: Use the web UI (Link Playlists tab) to manage playlists instead of editing this manually
|
|
SPOTIFY_IMPORT_PLAYLISTS=[]
|
|
|
|
# ===== SPOTIFY DIRECT API (RECOMMENDED - ENABLES TRACK ORDERING & LYRICS) =====
|
|
# This is the preferred method for Spotify playlist integration.
|
|
# Provides: Correct track ordering, ISRC-based exact matching, synchronized lyrics
|
|
# Does NOT require the Jellyfin Spotify Import plugin (can work standalone)
|
|
|
|
# Enable direct Spotify API access (default: false)
|
|
SPOTIFY_API_ENABLED=false
|
|
|
|
# Spotify Client ID from https://developer.spotify.com/dashboard
|
|
# Create an app in the Spotify Developer Dashboard to get this
|
|
SPOTIFY_API_CLIENT_ID=
|
|
|
|
# Spotify Client Secret (optional - only needed for certain OAuth flows)
|
|
SPOTIFY_API_CLIENT_SECRET=
|
|
|
|
# Spotify session cookie (sp_dc) - REQUIRED for editorial playlists
|
|
# Editorial playlists (Release Radar, Discover Weekly, etc.) require authentication
|
|
# via session cookie because they're not accessible through the official API.
|
|
#
|
|
# To get your sp_dc cookie:
|
|
# 1. Open https://open.spotify.com in your browser and log in
|
|
# 2. Open DevTools (F12) → Application → Cookies → https://open.spotify.com
|
|
# 3. Find the cookie named "sp_dc" and copy its value
|
|
# 4. Note: This cookie expires periodically (typically every few months)
|
|
SPOTIFY_API_SESSION_COOKIE=
|
|
|
|
# Date when the session cookie was set (ISO 8601 format)
|
|
# Automatically set by the web UI when you update the cookie
|
|
# Used to track cookie age and warn when approaching expiration (~1 year)
|
|
SPOTIFY_API_SESSION_COOKIE_SET_DATE=
|
|
|
|
# Cache duration for playlist data in minutes (default: 60)
|
|
# Release Radar updates weekly, Discover Weekly updates Mondays
|
|
SPOTIFY_API_CACHE_DURATION_MINUTES=60
|
|
|
|
# Rate limit delay between API requests in milliseconds (default: 100)
|
|
SPOTIFY_API_RATE_LIMIT_DELAY_MS=100
|
|
|
|
# Prefer ISRC matching over fuzzy title/artist matching (default: true)
|
|
# ISRC provides exact track identification across different streaming services
|
|
SPOTIFY_API_PREFER_ISRC_MATCHING=true
|