selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
spotify-saver logo

Self-host spotify-saver

0.7.5

Download Spotify music with metadata for Jellyfin

BetaOpen SourceMIT
Updated10 months ago
LanguagePython
Setup difficultyModerate
MobileResponsive
Stars
169
Port
8000 (API server and web UI)
Requires
Ffmpeg, Spotify API
Docker
ghcr.io/gabrielbaute/spotify-saver
Install with Docker

What is spotify-saver?

SpotifySaver is a self-hosted music downloader that fetches audio from YouTube Music and applies rich Spotify metadata — including album art, synchronized lyrics, and Jellyfin-compatible .nfo files — organizing everything into Artist/Album folders. It offers a command-line interface, a responsive web UI with real-time progress, and a REST API for integrations. The project runs via Docker (ghcr.io/gabrielbaute/spotify-saver), Docker Compose, or direct Python installation (Poetry/pip). It requires a Spotify Developer account for API credentials and FFmpeg for audio conversion. The codebase is MIT-licensed and in active beta development.

Should you self-host spotify-saver?

spotify-saver scores 44/100 on selfhost.directory (how scoring works) and ranks #35 of 59 in Music Streaming. It has 169 GitHub stars.

It shipped 4 stable releases in the past year. The latest, 0.7.5, came out on 23 November 2025. New versions land roughly every 3 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is koel (75/100, 17 320 stars). It scores higher overall, so compare the two before you pick. See spotify-saver vs koel side by side.

Features

  • Album cover download
  • Automatic folder structure
  • Command-line interface (CLI)
  • Download from YouTube Music with Spotify metadata
  • Dry Run Mode
  • Health check endpoint
  • Jellyfin-compatible .nfo metadata filesStill some things to work on
  • MP3 conversion
  • Multiple bitrate support
  • Playlist support
  • RESTful API
  • Synchronized lyrics (.lrc)
  • Web interface (UI)

spotify-saver README

How to install spotify-saver

Install spotify-saver with Docker

Docker Engine
Environment variables
SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, SPOTIFY_REDIRECT_URI, API_PORT, MUSIC_DIR, CONFIG_DIR, LOG_LEVEL

docker pull ghcr.io/gabrielbaute/spotify-saver:latest

docker run -d
--name spotifysaver
-p 8000:8000
-v ./music:/music
-v ./config:/config
-e SPOTIFY_CLIENT_ID=your_client_id
-e SPOTIFY_CLIENT_SECRET=your_client_secret
ghcr.io/gabrielbaute/spotify-saver:latest

Pre-built image from GitHub Container Registry

How to configure spotify-saver

  • API_HOST0.0.0.0Host for the API server

    Host for the API server

  • API_PORT8000API server port

    API server port

  • LOG_LEVELINFOLogging level

    Logging level

    values: DEBUG, INFO, WARNING, ERROR, CRITICAL

  • SPOTIFY_CLIENT_IDID of the Spotify app you created

    ID of the Spotify app you created

  • SPOTIFY_CLIENT_SECRETSecret key generated for your Spotify app

    Secret key generated for your Spotify app

  • SPOTIFY_REDIRECT_URIhttp://localhost:8888/callbackSpotify API Validation URI

    Spotify API Validation URI

  • SPOTIFYSAVER_AUTO_OPEN_BROWSERfalseAuto-open browser on startup

    Auto-open browser on startup

  • SPOTIFYSAVER_LOG_LEVELINFOApplication log level

    Application log level

  • SPOTIFYSAVER_OUTPUT_DIR./MusicCustom directory path for music output

    Custom directory path for music output

  • SPOTIFYSAVER_UI_HOST0.0.0.0Host for the web UI

    Host for the web UI

  • UI_ENABLEDtrueEnable/disable web interface

    Enable/disable web interface

  • YTDLP_COOKIES_PATHCookie file path for YouTube Music age-restricted content

    Cookie file path for YouTube Music age-restricted content

  • YTDLP_FORMATbest[ext=m4a]/bestyt-dlp format selector

    yt-dlp format selector

spotify-saver releases & version history

More in Audio

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…