Download music from Deezer with a nice front end
Python
1,216
332 commits
updated Oct 13, 2026
pip install --user deezer-downloader
The deezer-downloader executable can be found in ~/.local/bin on Linux and C:\Users\<YOUR-USERNAME> \AppData\Roaming\Python\Python3<CURRENT-PYTHON-VERSION>\Scripts\deezer-downloader.exe` on Windows. If you want to use the Docker image, scroll down a bit.
arl cookieOn Firefox or Chrome-based browser:
F12 or Ctrl+Shift+C or Ctrl+Shift+I)Storage tabarl: a ~200 characters alphanumeric keyRetrieve the template:
deezer-downloader --show-config-template > config.ini
You need to set at least:
[deezer]: cookie_arl, your arl cookie[youtubedl]: command, your yt-dlp install pathCheck Settings for further instructions.
deezer-downloader --config config.ini
Unless specified differently in the config file, the default frontend address is: http://localhost:5000. Access it with your favourite web browser.
Check Screenshots if needed.
Enjoy! 🦄
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.
kmille@linbox:deezer-downloader poetry run deezer-downloader --help
usage: deezer-downloader [-h] [-v] [-t] [-c CONFIG]
Download music from Deezer with a nice front end
options:
-h, --help show this help message and exit
-v, --version show version and exit
-t, --show-config-template
show config template. At least you have to insert the ARL cookie
-c CONFIG, --config CONFIG
config file - if not supplied, the following directories are considered looking for deezer-downloader.ini: current working directory, XDG_CONFIG_HOME environment variable, ~/.config, /etc)
kmille@linbox:deezer-downloader poetry run deezer-downloader --config settings.ini
Starting Threadpool
/home/kmille/.cache/pypoetry/virtualenvs/deezer-downloader-NFDPq16k-py3.11/lib/python3.11/site-packages/giphypop.py:241: UserWarning: You are using the giphy public api key. This should be used for testing only and may be deactivated in the future. See https://github.com/Giphy/GiphyAPI.
warnings.warn('You are using the giphy public api key. This '
Worker 0 is waiting for a task
Worker 1 is waiting for a task
Worker 2 is waiting for a task
Worker 3 is waiting for a task
Worker 0 is now working on task: {'track_id': 8086130, 'add_to_playlist': False}
Downloading 'Adele - Set Fire to the Rain.mp3'
Dowload finished: /tmp/deezer-downloader/songs/Adele - Set Fire to the Rain.mp3
Setting state to mission accomplished to worker 0
worker 0 is done with task: {'track_id': 8086130, 'add_to_playlist': False} (state=mission accomplished)
There is a Docker image hosted on hub.docker.com. Please use an ARL cookie of your Deezer account.
mkdir downloads
sudo docker run -p 5000:5000 --volume $(pwd)/downloads/:/mnt/deezer-downloader --env DEEZER_COOKIE_ARL=your_ARL_cookie kmille2/deezer-downloader:latest
xdg-open http://localhost:5000
cd deployment
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
We use it with nginx and ympd as mpd frontend:
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
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
Including mpd and ympd https://github.com/kmille/music-ansible (not maintained anymore)
Search for tracks. You can listen to a 30 second preview in the browser or download the song.

Search for albums. You can list the songs of the album or download them (optionally as zip file).

Search for artists. You can then show the top songs of the artist or show the albums of the artist.

Download songs with youtube-dl

Download a Spotify playlist.

Download a Deezer playlist.

ncmpcpp mpd client.

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
cd deezer-downloader
DEEZER_DOWNLOADER_CONFIG_FILE=settings.ini poetry run pytest -v -s
# If you don't set DEEZER_DOWNLOADER_CONFIG_FILE the default template file will be used. Some tests will fail because there is no valid arl_cookie.
Feel free to contribute. But please create an issue before and let's have a short discussion about it. I don't want you to be sad because I don't want to merge your idea/work. For me this project is (almost) feature complete. I don't have the time and motivation to put more energy in it. But I will maintain and update it in the long run.
... this is not updated anymore. But the project is maintained and works!
arl cookie instead of the sid cookie. This cookie does not expire so we don't need the background thread that keeps the session alive69 followers · starred Jan 2025
117 followers · starred Jan 2025
879 followers · starred Nov 2025
231 followers · starred Dec 2023
Download music from Deezer with a nice front end
Python
1,216
332 commits
updated Oct 13, 2026
pip install --user deezer-downloader
The deezer-downloader executable can be found in ~/.local/bin on Linux and C:\Users\<YOUR-USERNAME> \AppData\Roaming\Python\Python3<CURRENT-PYTHON-VERSION>\Scripts\deezer-downloader.exe` on Windows. If you want to use the Docker image, scroll down a bit.
arl cookieOn Firefox or Chrome-based browser:
F12 or Ctrl+Shift+C or Ctrl+Shift+I)Storage tabarl: a ~200 characters alphanumeric keyRetrieve the template:
deezer-downloader --show-config-template > config.ini
You need to set at least:
[deezer]: cookie_arl, your arl cookie[youtubedl]: command, your yt-dlp install pathCheck Settings for further instructions.
deezer-downloader --config config.ini
Unless specified differently in the config file, the default frontend address is: http://localhost:5000. Access it with your favourite web browser.
Check Screenshots if needed.
Enjoy! 🦄
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.
kmille@linbox:deezer-downloader poetry run deezer-downloader --help
usage: deezer-downloader [-h] [-v] [-t] [-c CONFIG]
Download music from Deezer with a nice front end
options:
-h, --help show this help message and exit
-v, --version show version and exit
-t, --show-config-template
show config template. At least you have to insert the ARL cookie
-c CONFIG, --config CONFIG
config file - if not supplied, the following directories are considered looking for deezer-downloader.ini: current working directory, XDG_CONFIG_HOME environment variable, ~/.config, /etc)
kmille@linbox:deezer-downloader poetry run deezer-downloader --config settings.ini
Starting Threadpool
/home/kmille/.cache/pypoetry/virtualenvs/deezer-downloader-NFDPq16k-py3.11/lib/python3.11/site-packages/giphypop.py:241: UserWarning: You are using the giphy public api key. This should be used for testing only and may be deactivated in the future. See https://github.com/Giphy/GiphyAPI.
warnings.warn('You are using the giphy public api key. This '
Worker 0 is waiting for a task
Worker 1 is waiting for a task
Worker 2 is waiting for a task
Worker 3 is waiting for a task
Worker 0 is now working on task: {'track_id': 8086130, 'add_to_playlist': False}
Downloading 'Adele - Set Fire to the Rain.mp3'
Dowload finished: /tmp/deezer-downloader/songs/Adele - Set Fire to the Rain.mp3
Setting state to mission accomplished to worker 0
worker 0 is done with task: {'track_id': 8086130, 'add_to_playlist': False} (state=mission accomplished)
There is a Docker image hosted on hub.docker.com. Please use an ARL cookie of your Deezer account.
mkdir downloads
sudo docker run -p 5000:5000 --volume $(pwd)/downloads/:/mnt/deezer-downloader --env DEEZER_COOKIE_ARL=your_ARL_cookie kmille2/deezer-downloader:latest
xdg-open http://localhost:5000
cd deployment
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
We use it with nginx and ympd as mpd frontend:
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
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
Including mpd and ympd https://github.com/kmille/music-ansible (not maintained anymore)
Search for tracks. You can listen to a 30 second preview in the browser or download the song.

Search for albums. You can list the songs of the album or download them (optionally as zip file).

Search for artists. You can then show the top songs of the artist or show the albums of the artist.

Download songs with youtube-dl

Download a Spotify playlist.

Download a Deezer playlist.

ncmpcpp mpd client.

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
cd deezer-downloader
DEEZER_DOWNLOADER_CONFIG_FILE=settings.ini poetry run pytest -v -s
# If you don't set DEEZER_DOWNLOADER_CONFIG_FILE the default template file will be used. Some tests will fail because there is no valid arl_cookie.
Feel free to contribute. But please create an issue before and let's have a short discussion about it. I don't want you to be sad because I don't want to merge your idea/work. For me this project is (almost) feature complete. I don't have the time and motivation to put more energy in it. But I will maintain and update it in the long run.
... this is not updated anymore. But the project is maintained and works!
arl cookie instead of the sid cookie. This cookie does not expire so we don't need the background thread that keeps the session alive69 followers · starred Jan 2025
117 followers · starred Jan 2025
879 followers · starred Nov 2025
231 followers · starred Dec 2023