# ===== 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 # Playlists configuration (SIMPLE FORMAT - recommended for .env files) # Comma-separated lists - all three must have the same number of items # # 1. Playlist IDs (get from Jellyfin playlist URL: https://jellyfin.example.com/web/#/details?id=PLAYLIST_ID) SPOTIFY_IMPORT_PLAYLIST_IDS= # # 2. Playlist names (as they appear in Jellyfin) SPOTIFY_IMPORT_PLAYLIST_NAMES= # # 3. Local track positions (optional - defaults to "first" if not specified) # - "first": Local tracks appear first, external tracks at the end # - "last": External tracks appear first, local tracks at the end SPOTIFY_IMPORT_PLAYLIST_LOCAL_TRACKS_POSITIONS= # # Example with 4 playlists: # SPOTIFY_IMPORT_PLAYLIST_IDS=4383a46d8bcac3be2ef9385053ea18df,ba50e26c867ec9d57ab2f7bf24cfd6b0,8203ce3be9b0053b122190eb23bac7ea,7c2b218bd69b00e24c986363ba71852f # SPOTIFY_IMPORT_PLAYLIST_NAMES=Discover Weekly,Release Radar,Today's Top Hits,On Repeat # SPOTIFY_IMPORT_PLAYLIST_LOCAL_TRACKS_POSITIONS=first,first,last,first # # Advanced: JSON array format (use only if you can't use the simple format above) # Format: [["PlaylistName","JellyfinPlaylistId","first|last"],...] # Note: This format may not work in .env files due to Docker Compose limitations # SPOTIFY_IMPORT_PLAYLISTS=[["Discover Weekly","4383a46d8bcac3be2ef9385053ea18df","first"],["Release Radar","ba50e26c867ec9d57ab2f7bf24cfd6b0","last"]] # ===== 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= # 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