-
Notifications
You must be signed in to change notification settings - Fork 0
Spotify Downloader
Downloads single tracks, complete playlists and albums. Metadata comes from the official Spotify Web API, the audio from the best matching YouTube source.
Enter your Client ID and Client Secret once, see Getting Started. Without credentials the downloader still works for YouTube URLs, but Spotify URLs show the "API Credentials Required" message.
+------------------------------------------------------------------+
| DeuMediaDownloader v1.5.11 [gear] [_][#][X] |
+------------------------------------------------------------------+
| Spotify URL [.........................] [Paste] [Clear] |
+------------------------------------------------------------------+
| Format [MP3 (320 kbps)] Save to [...] [Browse] [Download] |
+------------------------------------------------------------------+
| Download Queue (3) [Clear Done] |
| Title - Artist [========--] Downloading |
+------------------------------------------------------------------+
| Log [Clear] |
+------------------------------------------------------------------+
The window is drawn without a system frame and has its own title bar. It can be dragged,
minimized and maximized by double-clicking the title bar. Size and position are stored in
sp_win_geo and restored on the next start.
| Type | Pattern |
|---|---|
| Track |
https://open.spotify.com/track/{id} or spotify:track:{id}
|
| Playlist |
https://open.spotify.com/playlist/{id} or spotify:playlist:{id}
|
| Album |
https://open.spotify.com/album/{id} or spotify:album:{id}
|
| YouTube | Also recognized and handled through the YouTube path |
Playlists and albums are paged through completely, past the API page limit of 100 entries. Podcast episodes inside playlists are skipped.
-
Resolve the URL The app detects track, playlist or album and fetches for every entry: title, artists (all of them, comma separated), album, cover URL, duration in milliseconds and release year.
-
Fill the queue Each entry becomes its own
DownloadTaskwith its own UUID. -
Already present? If "Skip Existing Files" is enabled and the target file already exists, the entry is marked as done immediately.
-
Searching Five YouTube results for
Artist - Titleare queried and the one whose duration is closest to the Spotify duration wins. This noticeably reduces wrong matches such as live versions, remixes or videos with long intros. If the search returns nothing, the app falls back to a simple single-result search. -
Downloading yt-dlp downloads using
bestaudio/best. The progress bar covers 0 to 80 percent here. -
Converting FFmpeg converts to the selected format and bitrate through the
FFmpegExtractAudiopostprocessor. With "Normalize Audio" enabled theloudnormfilter is applied as well. Progress 80 to 90 percent. -
Embedding metadata mutagen writes title, artist, album and year. With "Embed Cover Art" enabled the album artwork is fetched via
requestsand embedded too. Progress 90 to 100 percent. -
Done If "Open Folder When Done" is enabled and every queue entry has finished or failed, the output folder opens in Explorer.
The Spotify API only provides metadata, never audio data. The app therefore takes the metadata from Spotify and the audio track from YouTube Music. This has one practical consequence: the source delivers at most around 256 kbps AAC or Opus. A lossless format such as FLAC would only be an inflated transcode, which is why it is deliberately absent from the format list. WAV is included because some programs require it as an input format, see Formats and Quality.
| Status | Meaning |
|---|---|
| Queued | Waiting for a free worker |
| Searching | Finding the matching YouTube result |
| Downloading | yt-dlp is fetching the audio |
| Converting | FFmpeg is converting to the target format |
| Embedding | mutagen is writing tags and cover art |
| Done | The file is in the output folder |
| Error | The cause is shown in the log |
Gear icon in the top right, "Settings" tab:
| Option | Default | Effect |
|---|---|---|
| Client ID | empty | Spotify API credentials |
| Client Secret | empty | Spotify API credentials |
| Concurrent Downloads | 2 | Number of parallel workers |
| Filename | {artist} - {title} |
Naming scheme, see [[Filename Templates |
| Skip Existing Files | on | Do not re-download tracks that already exist |
| Embed Cover Art | on | Write the album artwork into the audio file |
| Normalize Audio | off |
loudnorm filter for consistent volume |
| Open Folder When Done | on | Open Explorer once everything has finished |
A second tab "Uninstall" holds the actions described in Installation.
The full reference of all keys is in Settings.
- Large playlists: raise concurrent downloads to 3 or 4. Much higher values give little benefit because YouTube throttles beyond a certain rate.
- Resuming: if a run breaks off, simply queue the same URL again. With "Skip Existing Files" enabled, finished tracks are skipped.
- Wrong match: if the duration comparison still picks the wrong video, download that track individually through the YouTube Downloader using the specific video URL.
-
Special characters: the pipe and colon characters are replaced by visually identical
Unicode lookalikes so Windows accepts the filename. The characters
\ / * ? " < >are removed.
DeuMediaDownloader - for personal use only, with content you have the right to download. Respect the terms of service of Spotify, YouTube and TikTok as well as applicable copyright law.