No Description

Aesir 998e7e554e #73 explicit 4 months ago
alembic 9c54f29147 force merge albums #44 8 months ago
api 4c9d6e2c7c discography api and concurrency #47 8 months ago
app d146eaa988 refactor 10 months ago
chimera 1144f69843 #74 handle napster track stream errors 4 months ago
cli bf1562b845 gpm reset option 5 months ago
config 630c37a889 tagging 10 months ago
db 9c54f29147 force merge albums #44 8 months ago
deezer 998e7e554e #73 explicit 4 months ago
generic 998e7e554e #73 explicit 4 months ago
gpm d146eaa988 refactor 10 months ago
img 1532fa7a98 readme 10 months ago
napster 998e7e554e #73 explicit 4 months ago
qobuz 998e7e554e #73 explicit 4 months ago
soundcloud 645190819f snd 10 months ago
tests 7bb917144f deezer tests 5 months ago
tidal 998e7e554e #73 explicit 4 months ago
tokens 66c980b9de init 10 months ago
.gitignore 66c980b9de init 10 months ago 66c980b9de init 10 months ago
LICENSE 66c980b9de init 10 months ago 6716d75578 readme 9 months ago
alembic.ini 66c980b9de init 10 months ago 9c54f29147 force merge albums #44 8 months ago
optional-requirements.txt 1363c731a8 deezer decrypt 10 months ago
requirements.txt 1229ac463d req bump 5 months ago 66c980b9de init 10 months ago



multiple source music downloader
Base code found here:


command                      | deezer   | tidal    | qobuz    | soundcloud | napster  | gpm      |  dtq    |  Spotify    
--------                     | -------- | -------- | -------- | --------   | -------- | -------- |-------- |----------
login                        |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   N     |   N  
grab track <id>              |   Y      |   Y      |   Y      |   Y        |   Y      |   Y      |   N     |   Y        
grab album <id>              |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   N     |   N        
grab playlist <id>           |   Y      |   Y      |   Y      |   Y        |   Y      |   Y      |   N     |   Y 
grab discography <artist id> |   Y      |   Y      |   Y      |   N        |   N      |   N      |   N     |   N 
grab saved                   |   Y      |   N      |   Y      |   N        |   N      |   N      |   N     |   Y  
search track [ENTER]         |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   Y     |   N   
search album [ENTER]         |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   Y     |   N   
search isrc <id>             |   Y      |   N      |   N      |   N        |   N      |   N      |   N     |   N   
show track <id>              |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   N     |   N   
show playlists               |   Y      |   Y      |   Y      |   Y        |   Y      |   Y      |   Y     |   Y    
track quality <id>           |   Y      |   Y      |   Y      |   N        |   Y      |   Y      |   N     |   N  

Exclusive: Deezer

grab show <id> (podcast)
grab episode <id> (single episode from a podcast)

Exclusive: Tidal

search video [ENTER]
grab video <id>
show video <id>

Exclusive: Qobuz

Download a complete label with it's ID.
Label metadata gets cached under import/cache/label_[label_id].pkl.
If that file is older than 4 days it gets deleted and recreated.
Donwload could possibly crash, so I would advise you to change the album download settings, to not overwrite and check_db to True.
Folder Path: Music Root\<Label Name>\Albums

grab label <id>

For a complete usage use the help page or look in the source code of around line 420



Chimera has an api interface see:

python --api

Audio Fingerpinting

Feature like Shazam, for integration see:



  • Concurrency added (multiple downlod workers)
  • new commands: show status and show queue

When you grab an track, album or playlist with concurrency enabled you will not get any feedback. Use show status to monitor the progress.


  • New dependency install with pip install -r requirements.txt
  • Faster decryption for deezer track
  • MQA support (again) for tidal


  • Playlists can now be downloaded as a compilation
    Track NR in Tags changes to position
    Album Tag changes to playlist name
    Everything gets saved in a single playlist folder


  • GooglePlayMusic added, uses gmusicapi which does not come with the requirements.txt file, because it has to many dependecies install it with pip install gmusicapi There is a config option to enable it, if you don't install gmusicapi everything else will still work Supports:
    • grab [track | album | playlist (use the public share token)]
    • search [track | album]
    • show playlists (shows user playlist, to download you still have to share it and use that token)


  • Napster added, supports (M4A_320(AAC), M4A_192(AAC), M4A_64(AAC))
  • napster [login | grab track [id | url] | grab album [id | url] | grab playlist id | show playlists]

Info: official track id starts with tra.365693021 => just use the 365693021 without tra.


grab track 365693021  
grab track
grab album
show playlists
grab playlist mp.272317212
grab playlist pp.234543479
search track [new input for query]
search album [new input for query]


  • Smart CLI Added, just input any url from deezer, tidal or qobuz
    and it will start downloading (supported: track, album, playlist)
    current active service does not matter.
grabbing The Man by Taylor Swift ID: 737967312
downloading: 23.0MB [00:05, 4.38MB/s]
decrypting: 100% 4/4 [00:03<00:00,  1.10it/s]

grabbing qobuz album Live and Loud
grabbing Radio Friendly Unit Shifter by Nirvana ID: 69299877
downloading: 35.2MB [00:02, 13.6MB/s]


  • New Config System
  • use setup chimera to populate new config


Requires Python 3.7.4 (for audio fingerprinting 64bit is required)

  1. download python from here
  2. download the latest source code from here
  3. unzip and open a terminal in that folder
  4. not required but recommended to create a virtual env
    you can skip this if you only installed python for this project
  5. install requirements with pip pip install -r requirements.txt

Short video:
Thanks to Bas Curtiz for creating it.


If you created an virtual env: workon chimera


First Run

If the file db\db.sqlite does not exists, it gets created with default values. Furthermore your default webbrowser gets opened to http://localhost:5000/configure where you can configure chimera.


To configure chimera after your initial run. You can use setup chimera if you are in the cli mode.


After each new version, run this command to update the DB scheme:

Resources used


  • Chimera was developed for educational and private use only.
  • Not intended for distibuting and pirating music!
  • I am not responsible for the usage of others.
  • It may be illegal to use this in your country, inform yourself!