downtify

downtify

Docker app from athuull's Repository

Overview

Downtify is an open-source music downloader backend powered by FastAPI, yt-dlp, and ffmpeg. It provides an automated download engine and queue management for companion clients like Hera.


Downtify

Self-hosted music downloader. Paste a Spotify link, get a perfectly tagged audio file — no API keys, no account, no hassle.

Downtify 3.0: paste a Spotify link, get the music. The home screen, the full-screen player and the mobile app.

Overview

Downtify is a self-hosted web app that turns Spotify and YouTube Music links into a tagged audio library. It never touches the Spotify API, and it needs no account and no Premium subscription. It also plays that library back, so what you download is one tab away from listening.

Spotify embed page  →  YouTube Music search  →  yt-dlp + ffmpeg + mutagen
   (metadata)             (audio match)            (download & tag)
  1. Metadata. Track, album and playlist links are resolved from the public open.spotify.com/embed pages, so no Spotify credentials of any kind are needed.
  2. Audio match. ytmusicapi finds the best YouTube Music result by comparing durations. When there is no good match, standard YouTube is searched automatically (details).
  3. Download and tag. yt-dlp fetches the audio, ffmpeg converts it to the format you chose, and mutagen embeds title, artist, album, year and cover art.

All of it runs inside a single Docker container. See How it works for the full pipeline.

Features

Download Spotify tracks, albums, playlists and artists (their releases and top songs); YouTube Music songs, albums, playlists and artists; free-text search; CSV imports from Soundiiz, TuneMyMusic and Exportify. MP3, FLAC, M4A, OGG or OPUS at the bitrate you pick. See Download settings and Library import.
Charts Browse Deezer's global "what's trending" chart — tracks (with a 30-second preview, downloadable straight from the list), plus albums, artists and playlists to explore. See Charts.
Finder Discover's search box: search Deezer, then explore an artist in Finder-style columns: their profile and bio, their whole discography, and any album's tracks with previews, ready to download. See Finder.
Tags and lyrics Title, artist, album, year and cover art embedded in every file. Plain and time-synced lyrics from LRCLIB and NetEase, tried in the order you choose. See Lyrics.
Playlist Monitor Watch Spotify or YouTube Music playlists and artists; new tracks and new releases download on a schedule you set. Artist watches can be limited to albums, singles or EPs, and to releases from now on. See Playlist Monitor.
Built-in player Full-screen Now playing with synced lyrics, an editable queue, a sleep timer, keyboard shortcuts, media keys and a ten-band equalizer (experimental). See Built-in player.
Liked songs Tap the heart on a song and a Liked songs playlist of everything you have liked appears, in Downtify and in your media server. See Liked songs.
Podcasts Subscribe by RSS feed, Spotify link or name; new episodes download, tag and keep their resume position on their own. See Podcasts.
Discover Artists, albums and playlists you don't have yet, suggested from your library, liked songs and what you play — from Deezer first, with Spotify's picks added as they arrive, no account or API key. Artists and Deezer albums open in the Finder; preview any album's or playlist's songs before downloading, and hide any artist you never want suggested. See Discover.
Users & activity Sign in with a username and password; admins add accounts for the rest of the house, users get General, Apps and About settings of their own, and an activity log shows who signed in and who is playing what. See Users & sign-in.
Mobile apps (experimental) Pair a phone app by QR code and stream your library to it — original quality or transcoded for mobile data — with offline copies and casting. The server side is ready; the Android app itself is still in development. See Mobile apps.
Library Albums, artists, playlists and tracks in a grid or a list, with filtering, multi-select and download as a ZIP. Create your own playlists (and rename them), and add songs from downloads or extra folders (imported Spotify/YouTube playlists stay read-only). Existing music folders import a collection you already have (tags stay on disk; artists are matched to the library). Upgrade library repairs small covers, missing lyrics and incomplete tags on music you already have, without re-downloading, and Replace audio swaps a wrongly matched song for the version you pick, keeping it in its playlists. Pick a real photo and banner for an artist from YouTube Music, Deezer, Spotify or your own upload. See Library catalog, Existing music folders, Upgrade library, Replace audio and Artist photo & banner.
Playlist files Standard M3U files that Jellyfin, Navidrome and Plex pick up, plus each playlist's own cover art, saved before its tracks. A flat folder layout or one folder per artist. See M3U export, Playlist cover art and File organization.
Integrations Optionally download from Soulseek through your own slskd server and mirror playlists into Navidrome, each with a Test connection button in Settings. See slskd & Navidrome.
Interface Light and dark themes, one layout from phone to widescreen, an installable app (PWA), live download progress, update notices and eight languages.

Quick start

You only need Docker.

docker run -d -p 8000:8000 --name downtify \
  -v /path/to/downloads:/downloads \
  -v downtify_data:/data \
  ghcr.io/henriquesebastiao/downtify

Open http://localhost:8000, sign in as admin / downtify, change that password in Settings → General (or turn accounts off with DOWNTIFY_DISABLE_AUTH=true on a server only you can reach), then paste a link and start the download. Replace /path/to/downloads with the folder where you want your music.

/downloads holds your audio files and /data holds Downtify's database and settings. Keep both persistent, or settings, likes and playlist tracking are lost when the container is recreated.

Docker Compose

services:
  downtify:
    container_name: downtify
    image: ghcr.io/henriquesebastiao/downtify:latest
    ports:
      - '8000:8000'
    volumes:
      - ./downloads:/downloads
      - downtify_data:/data
    restart: unless-stopped

volumes:
  downtify_data:

To serve it on another port, set DOWNTIFY_PORT and map the same port (or choose it in Settings → Server → Port and change the mapping to match):

ports:
  - '30321:30321'
environment:
  - DOWNTIFY_PORT=30321

The remaining deployment options (timezone, monitor sync time, cookies file, IPv4) are listed under Environment variables. Everything else is configured from Settings in the web interface.

Home server platforms

Platform
Umbrel Install on Umbrel
CasaOS Install on CasaOS
HomeDock OS Install on HomeDock

What you can paste in

Input Example
Spotify track, album, playlist or artist open.spotify.com/track/…
YouTube Music playlist music.youtube.com/playlist?list=…
YouTube Music artist music.youtube.com/channel/UC… or music.youtube.com/@artist
YouTube or YouTube Music video youtube.com/watch?v=…
Deezer track, album, playlist or artist deezer.com/track/…
Free-text search The Night Owls Do I Still Recall
Library export (CSV) Soundiiz, TuneMyMusic, Exportify

An artist link opens the artist's page, with their releases and a Top Songs button to pick from their most popular songs and download them, optionally as a playlist (details). Artists in your Library also get a Top songs tab with their first five Spotify top songs, kept in a per-artist file for a week, and a 30-second preview of each song you haven't downloaded yet; an artist's bio, genre and links are also filled in, in your language, in the background as their first track finishes downloading (details). Artists can also be watched for new releases with the Playlist Monitor — just albums, singles or EPs if you like, and optionally only what comes out from now on, skipping the back catalogue. Deezer links can be downloaded but not watched.

Downtify for Android

An Android app is being built: it pairs with your server by scanning a QR code from Settings → Apps, then browses your library, plays it in the original quality or a smaller one for mobile data, keeps songs on the phone for offline listening and casts to a Chromecast.

[!WARNING] The app is still in development and no version has been published yet — there is nothing to install for now, and how it works may still change. The server side of it already ships with Downtify, which is why Settings → Apps is marked experimental.

Repository: henriquesebastiao/downtify-android

Anything that talks to the server can be built against the same API — see the mobile client contract.

Troubleshooting

Most download problems share one cause: YouTube wants a signed-in session. Upload a cookies.txt in Settings → YouTube cookies and they usually go away. If YouTube still rate-limits you, raise Delay between downloads, lower Parallel downloads, then try DOWNTIFY_FORCE_IPV4=1.

See Troubleshooting for the full list of symptoms and fixes, and YouTube cookies for how to export the file.

Translations

The interface is available in English, Spanish, Brazilian Portuguese, French, Turkish, Hungarian, Greek and Bulgarian. Switch language in Settings → Language; the choice is saved in the browser and applies without a reload.

Contributing translations

Adding a language is a small change and needs no tooling beyond the existing Vite setup:

  1. Copy frontend/src/i18n/locales/en.js to a new file named after an IETF language tag (de.js, it.js, pt-PT.js).
  2. Translate the values. Keep the keys and placeholder tokens ({count}, {name}, {file}) unchanged, and set language.name to the language's native name.
  3. Register the locale in frontend/src/i18n/index.js.

Missing keys fall back to English, so a partial translation is welcome. The full walkthrough, with the registration snippet and tips, is in Internationalization.

Documentation

Getting started Installation, Docker Compose, one-click installs and environment variables
Features One page per feature, with every option explained
How it works The metadata, matching and tagging pipeline
Troubleshooting Symptoms, causes and fixes
API reference Every endpoint the web interface uses
Changelog What changed in each release

[!WARNING] Users are responsible for their actions and any legal consequences. Downtify does not support unauthorized downloading of copyrighted material and takes no responsibility for user actions.

Contributing

Contributions, issues and feature requests are welcome. Check the issues page or open a pull request.

Before sending a pull request, read CONTRIBUTING.md. It covers local setup, the coding and formatting standards (Ruff for Python, Prettier for the frontend), testing requirements, commit conventions and the pull request checklist.

If Downtify has been useful to you, a star on GitHub helps other people find it.

Contributors

Thanks for your contribution to the project!

Contributors Avatars

Support

There are many ways to support Downtify:

Buy Me A Coffee

License

Licensed under the AGPL-3.0 License.

Icons by Font Awesome (Free, CC BY 4.0), loaded via Iconify.

Download Statistics

92,103
Total Downloads

Related apps

Details

Repository
henriquesebastiao/downtify:latest
Last Updated2026-09-11
First Seen2026-09-13

Runtime arguments

Web UI
http://[IP]:[PORT:8000]
Network
bridge
Privileged
false

Template configuration

API PortPorttcp

HTTP port for Downtify API

Target
8000
Default
8000
Downloads DirectoryPathrw

Download directory where files will be stored (must match Hera's music download directory)

Target
/downloads
Default
/mnt/user/data/media/music