Skip to main content

download music from Deezer with a nice front end

Project description

Music Downloader 🎶 🎧 💃 🦄

tests push image to dockerhub docker pulls latest tag Python 3.6 pypi-version pypi-downloads

Features

  • download songs, albums, public playlists from Deezer.com (account is required, free plan is enough)
  • download Spotify playlists (by parsing the Spotify website and download the songs from Deezer)
  • download as zip file (including m3u8 playlist file)
  • 320 kbit/s mp3s with ID3-Tags and album cover (UPDATE: right now only 128bkit/s mp3 works, see #66)
  • download songs via yt-dlp
  • KISS (keep it simple and stupid) front end
  • MPD integration (use it on a Raspberry Pi!)
  • simple REST api
  • proxy support (https/socks5)

How to use it

There is a settings file template called settings.ini.example. You can specify the download directory with download_dir. Pressing the download button only downloads the song/album/playlist. If you set use_mpd=True in the settings.ini the backend will connect to mpd (localhost:6600) and update the music database. Pressing the play button will download the music. If use_mpd=True is set the mpd database will be updated and the song/album/playlist will be added to the playlist. In settings.ini music_dir should be the music root location of mpd. The download_dir must be a subdirectory of music_dir.

As Deezer sometimes requires a captcha to login the auto login features was removed. Instead you have to manually insert a valid Deezer cookie to the settings.ini. The relevant cookie is the arl cookie.

How to use it

with pip

You can run pip install --user deezer-downloader. Then you can run ~/.local/bin/deezer-downloader --help

with Docker

You can use the Docker image hosted on hub.docker.com. Login into your free Deezer account and grab the arl cookie. Then:

mkdir downloads
sudo docker run -p 5000:5000 --volume $(pwd)/downloads/:/mnt/deezer-downloader --env DEEZER_COOKIE_ARL=changeme kmille2/deezer-downloader:latest 
xdg-open http://localhost:5000

with Vagrant

vagrant up
vagrant ssh
sudo vim /opt/deezer/settings.ini # insert your Deezer cookie
cd /opt/deezer && sudo poetry run deezer-downloader --config settings.ini

# On the host:
xdg-open http://localhost:5000 # view frontend in the browser
ncmpcpp -h 127.0.0.1 # try the mpd client

as a service

We use it with nginx and ympd as mpd frontend

  • / goes to ympd
  • /d/ goes to the downloader

The deployment directory contains a systemd unit file and a nginx vhost config file. There is also a patch to add a link to the ympd frontend. The debug tab will show you the debug output of the app.Shortcuts

If you want to debug or build it from source: there is a docker-compose file in the docker directory. The docker/downloads directory is mounted into the container and will be used as download directory. You have to check the permissions of the docker/downloads directory as docker mounts it with the same owner/group/permissions as on the host. The deezer user in the docker container has uid 1000. If you also have the uid 1000 then there should be no problem. For debugging: sudo docker-compose build --force-rm && sudo docker-compose up

developer setup (tested on Ubuntu Jammy)

  sudo apt-get update -q
  sudo apt-get install -qy vim tmux git ffmpeg

  # python3-poetry is too old (does not support groups ...)
  sudo apt-get install -qy python3-pip
  sudo pip install poetry
  git clone https://github.com/kmille/deezer-downloader.git
  cd deezer-downloader
  poetry install
  poetry run deezer-downloader --show-config-template > settings.ini

  # enable yt-dlp
  sudo pip install yt-dlp
  sed -i 's,.*command = /usr/bin/yt-dlp.*,command = /usr/local/bin/yt-dlp,' settings.ini

  # enable mpd
  sudo apt-get install -yq mpd ncmpcpp
  sudo sed -i 's,^music_directory.*,music_directory         "/tmp/deezer-downloader",' /etc/mpd.conf
  sudo systemctl restart mpd
  sed -i 's/.*use_mpd = False.*/use_mpd = True/' settings.ini

  # 1) Adjust the Deezer cookie: vim settings.ini
  # 2) Run tests: DEEZER_DOWNLOADER_CONFIG_FILE=settings.ini poetry run pytest -v -s
  # 3) Run it: poetry run deezer-downloader --config settings.ini
  # 4) Try out: ncmpcpp -h 127.0.0.1 && xdg-open http://localhost:5000
  # 5) Downloaded files are in /tmp/deezer-downloader

ctrl-m: focus search bar
Enter: serach for songs
Alt+Enter: search for albums
ctrl-b: go to / (this is where our ympd is)
ctrl-shift-[1-7] switch tabs

Some screenshots

Search for songs. You can listen to a 30 second preview in the browser.

Search for albums. You can download them as zip file.

List songs of an album.

Download songs with youtube-dl

Download a Spotify playlist.

Download a Deezer playlist.

ncmpcpp mpd client.

Tests

cd deezer-downloader
DEEZER_DOWNLOADER_CONFIG_FILE=settings.ini poetry run pytest -v -s
# if you don't setDEEZER_DOWNLOADER_CONFIG_FILE the default template file will be used. Some tests will fail because there is no valid arl_cookie.

Deployment with Ansible (including mpd and ympd)

https://github.com/kmille/music-ansible (almost always outdated)

Changelog

Version 2.0.0 (27.03.2023)

  • use poetry as build system
  • build package and uploada to pypi
  • worker threads now "daemon threads" (they now just stop if you stop deezer-downloader)
  • update config template (remove http.debug)
  • update dependencies
  • switch to waitress (from gunicorn)

Version 1.3.3 (27.12.2021)

  • replace youtube-dl by yt-dl
  • update third party dependencies

Version 1.3.2 (26.11.2021)

  • fix broken deezer download functionality (#66, removes the ability to download flac quality)
  • update third party dependencies
  • update ubuntu base image for the docker container

Version 1.3.1 (21.01.2021)

  • allow to set download quality (flac|mp3) via environment variable DEEZER_FLAC_QUALITY (#43)

Version 1.3 (05.11.2020)

  • feature: download your favorite Deezer songs
  • automated tests with Github Actions
  • push Docker image to hub.docker.com with Github Actions

Version 1.2 (01.11.2020)

  • breaking change: now use the arl cookie instead of the sid cookie. This cookie does not expire so we don't need the background thread that keeps the session alive
  • add support for flac as download format

Version 1.1 (13.05.2020)

  • thanks to luelista for the contribution!
  • play 30 second preview in browser
  • add Vagrantfile
  • show album cover in search results
  • use a threaded queue for download tasks
  • list album songs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deezer_downloader-2.0.5.tar.gz (835.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deezer_downloader-2.0.5-py3-none-any.whl (836.5 kB view details)

Uploaded Python 3

File details

Details for the file deezer_downloader-2.0.5.tar.gz.

File metadata

  • Download URL: deezer_downloader-2.0.5.tar.gz
  • Upload date:
  • Size: 835.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Linux/6.1.36-hardened1-1-hardened

File hashes

Hashes for deezer_downloader-2.0.5.tar.gz
Algorithm Hash digest
SHA256 128998824dbe7f2ebf1d7139eb5afefea67df25882161bf5cef6ff10309550ac
MD5 71c120a58b07434be7f14bae9a88279e
BLAKE2b-256 3117ea960b0e0c04cfadc894a36ab4a787fc6fecabacc22dc473da9e09b80e04

See more details on using hashes here.

File details

Details for the file deezer_downloader-2.0.5-py3-none-any.whl.

File metadata

  • Download URL: deezer_downloader-2.0.5-py3-none-any.whl
  • Upload date:
  • Size: 836.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Linux/6.1.36-hardened1-1-hardened

File hashes

Hashes for deezer_downloader-2.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ab8faa4804f54f9fce8558383e22839d8b833e919a7389aa8e60e2831068bebf
MD5 5aa76d435b83bc39409d51ca04ac585b
BLAKE2b-256 7f0bdb2b07bb1356119bf1a16bdaad402c5b4f25950c2f9fc279553616975e3a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page