No description
Find a file
2023-11-26 01:58:13 +01:00
.cargo Fix download of non search inputs & .cargo config 2021-11-27 09:11:15 +01:00
.github ci: Improve performance and semantics 2023-11-26 01:58:13 +01:00
assets fix: Use forked master branch of librespot to fix downloads 2023-11-26 01:30:24 +01:00
src chore: Lint code 2023-11-26 01:58:00 +01:00
.gitignore chore: Add notice for free users (#48) 2023-11-25 23:41:23 +01:00
build.rs Add initial files 2021-10-11 02:12:22 +02:00
Cargo.lock fix: Use forked master branch of librespot to fix downloads 2023-11-26 01:30:24 +01:00
Cargo.toml fix: Use forked master branch of librespot to fix downloads 2023-11-26 01:30:24 +01:00
LICENSE Add initial files 2021-10-11 02:12:22 +02:00
mp3lame.lib Add initial files 2021-10-11 02:12:22 +02:00
README.md fix: Use forked master branch of librespot to fix downloads 2023-11-26 01:30:24 +01:00
rustfmt.toml format code 2022-01-27 17:08:47 +01:00

DownOnSpot

A Spotify downloader written in Rust

drawing

Build project GitHub license GitHub issues GitHub forks GitHub stars Stability: Experimental

Disclaimer

DownOnSpot was not developed for piracy.
It is meant to be used in compliance with DMCA, Section 1201, for educational, private and fair use.
I am not responsible in any way for the usage of the source code.

Features

  • Works with free Spotify accounts
  • Download 96, 160kbit/s audio with a free, 256 and 320 kbit/s audio with a premium account from Spotify, directly
  • Multi-threaded
  • Search for tracks
  • Download tracks, playlists, albums and artists
  • Convert to mp3
  • Metadata tagging
  • Simple usage over CLI

Building

  1. Clone the repository using git and change to the local repository directory:

    git clone https://github.com/oSumAtrIX/DownOnSpot.git
    cd DownOnSpot
    
  2. Build

    cargo build --release
    

Warning

You need this private SSH key to clone a dependency of DownOnSpot in order to use it with a free Spotify account. Follow this answer by DopeGhoti on stackexchange.com to set up SSH with the private key. A sample ~/.ssh/config file could look like this:

Host github.com
  IdentityFile ~/.ssh/free_librespot_private_key

Note

If you do not want to use free-librespot (i.e. if you are using a paid Spotify account), then remove the git dependency of free-librespot. For that, replace git = "ssh://git@github.com/oSumAtrIX/free-librespot.git" with librespot = "0.4.2" inside the Cargo.toml file.

Warning

If you get a linker error, you might need to download the standard libmp3lame library. On Mac OS, it should be enough to just run brew install lame, provided you have Homebrew installed.

Usage/ Examples

Running DownOnSpot once will create the default configuration file in the same directory as your shell.

$ down_on_spot.exe
Settings could not be loaded, because of the following error: IO: NotFound No such file or directory. (os error 2)...
..but default settings have been created successfully. Edit them and run the program again.

$ down_on_spot.exe
Usage:
down_on_spot.exe (search_term | track_url | album_url | playlist_url | artist_url)

On Mac OS, the settings.json file is created globally for the logged in user and is located in ~/.config/down_on_spot/settings.json.

Apart from your Spotify username and password, you will need to login in to the Spotify developer dashboard and create a new private application. Fill in the client_id and client_secret in your settings.json from your newly created app. All the other settings should be self-explanatory, conversion from Ogg to MP3 is disabled by default.

Note

If you're on a free Spotify account, remember to set down the quality to 160kbit/s at maximum ("Q320" -> "Q160"). Otherwise, you'll get an "Audio Key Error" since the free account can't exceed 160kbit/s.

Template variables

Following variables are available for path and filename_template in the settings.json:

  • %0disc%
  • %0track%
  • %album%
  • %albumArtist%
  • %albumArtists%
  • %artist%
  • %disc%
  • %id%
  • %title%
  • %track%

Additional scripts

Known issues

  • Mp3 downloads slow due to libmp3lame
  • Downloads fail sometimes due to channel error

Authors

License

GPLv3