Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Spotify Web Downloader

Make the download button actually download.

No pasting links, no hunting for URLs. It sits inside Spotify's web player and downloads what you're already looking at: one song, a full album, or your entire Liked Songs, as real tagged files on your disk.

Manifest V3 Python yt-dlp ffmpeg

⚠️ UPDATE 24/08/2026

Current method is patched. Will invest time later to fix.

Why this one

Every other Spotify downloader is the same tool: a blank box where you paste a URL, wait, then do it again for the next track. Downloading a library that way is an afternoon of tab-switching.

This one is actually integrated into the web player. You browse Spotify like normal, and the download button is right there on the track, the album, or the Liked Songs list you're on. Click it and the whole thing queues at once. You don't leave the page. A panel tracks every download and lets you pause or cancel.

It writes proper tags and cover art, pulls synced lyrics, and records your Spotify liked-order so you can rebuild that exact list in a real music player. More on that below.

What it actually does

Spotify's own download button doesn't give you files. It caches songs inside the app for offline listening, locked to your subscription, and gone the day you cancel.

This gives you the actual song, saved as an MP3 (or M4A / Opus) in whatever folder you point it at, with cover art, artist, album and track number already in the tags.

Under the hood it reads the track details off the page, finds the closest match on YouTube with yt-dlp, converts it with ffmpeg, and tags it with mutagen. The audio comes from YouTube matched by title and artist, so you're getting a very good copy, not a lossless rip.

Two components only:

  • The extension which is local. It adds the controls, reads the page, and shows a downloads panel with live progress.
  • The service is a small Python program running on your machine. It does the fetching and tagging.
image

Requirements

  • Windows 10/11
  • Python 3.9 or newer
  • ffmpeg on your PATH
  • A Chromium browser (Chrome, Edge, or Brave)

Setup

1. Start the service

pip install -r service/requirements.txt
winget install ffmpeg          # skip if you already have ffmpeg
python service/companion.py

You should see:

Spotify Web Downloader service on http://127.0.0.1:8937
Saving to C:\Users\you\Music
Ctrl+C to stop

Leave that window open. It needs to be running whenever you download.

2. Load the extension

  1. Go to chrome://extensions
  2. Turn on Developer mode (top right)
  3. Click Load unpacked and pick the extension folder
  4. Open open.spotify.com and log in
image

Using it

  • On a single track, hit the download control and it saves that song.
  • On a playlist, album, or your Liked Songs, it scans the whole list and queues every track. Long lists take a moment to scan because the web player lazy-loads rows on scroll, but the extension handles that.
  • The panel shows per-track progress and lets you pause or cancel a running job.
  • The gear icon opens settings.

Settings

Setting What it does
Format mp3 is the most compatible; m4a and opus are smaller at the same quality
Quality high, medium, or low
Filename template placeholders: {artist}, {title}, {album}, {year}
Concurrent downloads how many tracks grab at once; 2-3 is the sweet spot before YouTube throttles you
Download lyrics pulls synced lyrics from lrclib, saves a .lrc beside the file and embeds the text
Skip existing files leave already-downloaded songs alone

Keeping your Spotify liked-order in foobar2000

Spotify lists your Liked Songs newest-first. Once those files land in a folder, that order is gone. Sorting by date added just gives you the release date, not the day you liked the track.

So every track from a collection download gets a LIKED_ORDER tag: a zero-padded position where the most recently liked song gets the lowest number. In foobar2000 that shows up as %liked_order%.

To make it a sortable column:

  1. Ctrl+P > Display > Default User Interface > Playlist View

  2. Under Columns, Add New

  3. Name it Liked and the pattern [%liked_order%]

    (the square brackets leave non-liked files blank instead of showing a ?)

  4. Apply, then click the column header to sort. Newest liked ends up on top, exactly like Spotify.

image

Re-running a Liked Songs download backfills this tag onto files you already have without re-downloading the audio, so you can drop it into an existing library.

Backfilling lyrics

Downloaded a pile of songs before turning lyrics on? Don't re-download them. Point the backfill tool at your folder and it reads the tags on each file, looks the lyrics up, and drops a synced .lrc next to it:

python service/backfill_lyrics.py                 # your download folder
python service/backfill_lyrics.py "D:\Music"      # a specific folder
python service/backfill_lyrics.py --dry-run       # preview, write nothing
python service/backfill_lyrics.py --force         # redo files that already have a .lrc

Alternatively, if you're using foobar200, you can just use the OpenLyrics component for lyrics.

How it works

Spotify page  ->  extension  ->  localhost:8937  ->  yt-dlp  ->  ffmpeg  ->  mutagen  ->  your folder
                 (scrapes)       (service)          (finds)   (converts)   (tags)

Good to know

  • ffmpeg has to be installed and findable, or the conversion step fails. The service warns at startup if it can't locate it.
  • Keep the service running. Close its window and downloads stop; the panel will tell you to restart it.
  • Age-restricted YouTube videos won't download. They need a signed-in account, so the job marks them failed and moves on. It's a small slice of tracks and not worth making everyone log in for.
  • Matching is automatic. For obscure tracks or ones with a dozen identical-looking uploads, it can occasionally pick the wrong version.

A note on use

This is for personal use with music you already have access to. You're responsible for staying within Spotify's terms and your local copyright law. Don't redistribute what you pull.

About

Download Spotify songs straight from the web player for completely free (yt-dlp + mutagen)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages