diff --git a/INSTALLATION.md b/INSTALLATION.md new file mode 100644 index 0000000..12a9e94 --- /dev/null +++ b/INSTALLATION.md @@ -0,0 +1,32 @@ +### Installing Zotify + +> **Windows** + +This guide uses *Scoop* (https://scoop.sh) to simplify installing prerequisites and *pipx* to manage Zotify itself. +There are other ways to install and run Zotify on Windows but this is the official recommendation, other methods of installation will not receive support. + +- Open PowerShell (cmd will not work) +- Install Scoop by running: + - `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` + - `irm get.scoop.sh | iex` +- After installing scoop run: `scoop install python ffmpeg-shared git` +- Install pipx: + - `python3 -m pip install --user pipx` + - `python3 -m pipx ensurepath` +Now close PowerShell and reopen it to ensure the pipx command is available. +- Install Zotify with: `pipx install https://get.zotify.xyz` +- Done! Use `zotify --help` for a basic list of commands or check the *README.md* file in Zotify's code repository for full documentation. + +> **macOS** +- Open the Terminal app +- Install *Homebrew* (https://brew.sh) by running: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` +- After installing Homebrew run: `brew install python@3.11 pipx ffmpeg git` +- Setup pipx: `pipx ensurepath` +- Install Zotify: `pipx install https://get.zotify.xyz` +- Done! Use `zotify --help` for a basic list of commands or check the README.md file in Zotify's code repository for full documentation. + +> **Linux (Most Popular Distributions)** +- Install `python3`, `pip` (if a separate package), `ffmpeg`, and `git` from your distribution's package manager or software center. +- Then install pipx, either from your package manager or through pip with: `python3 -m pip install --user pipx` +- Install Zotify `pipx install https://get.zotify.xyz` +- Done! Use `zotify --help` for a basic list of commands or check the README.md file in Zotify's code repository for full documentation. \ No newline at end of file diff --git a/README.md b/README.md index ec861e7..7e18f23 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ ### A highly customizable music and podcast downloader.

- + Zotify logo

-### Featues +### Features - Downloads at up to 320kbps* - Downloads directly from the source** - Downloads podcasts, playlists, liked songs, albums, artists, singles. @@ -40,12 +40,13 @@ Basic command line usage: zotify Downloads the track, album, playlist or podcast episode specified as a command line argument. If an artist url is given, all albums by specified artist will be downloaded. Can take multiple urls. Basic options: - (nothing) Download the tracks/alumbs/playlists URLs from the parameter - -d, --download Download all tracks/alumbs/playlists URLs from the specified file + (nothing) Download the tracks/albums/playlists URLs from the parameter + -d, --download Download all tracks/albums/playlists URLs from the specified file -p, --playlist Downloads a saved playlist from your account -l, --liked Downloads all the liked songs from your account -f, --followed Downloads all songs by all artists you follow - -s, --search Searches for specified track, album, artist or playlist, loads search prompt if none are given. + -s, --search Searches for specified track, album, artist or playlist, loads search prompt if none are given. + -h, --help See this message. ``` ### Options @@ -67,7 +68,7 @@ Be aware you have to set boolean values in the commandline like this: `--downloa | DOWNLOAD_FORMAT | --download-format | The download audio format (aac, fdk_aac, m4a, mp3, ogg, opus, vorbis) | DOWNLOAD_QUALITY | --download-quality | Audio quality of downloaded songs (normal, high, very_high*) | TRANSCODE_BITRATE | --transcode-bitrate | Overwrite the bitrate for ffmpeg encoding -| SKIP_EXISTING_FILES | --skip-existing-files | Skip songs with the same name +| SKIP_EXISTING_FILES | --skip-existing | Skip songs with the same name | SKIP_PREVIOUSLY_DOWNLOADED | --skip-previously-downloaded | Use a song_archive file to skip previously downloaded songs | RETRY_ATTEMPTS | --retry-attempts | Number of times Zotify will retry a failed request | BULK_WAIT_TIME | --bulk-wait-time | The wait time between bulk downloads @@ -82,7 +83,18 @@ Be aware you have to set boolean values in the commandline like this: `--downloa | PRINT_DOWNLOADS | --print-downloads | Print messages when a song is finished downloading | TEMP_DOWNLOAD_DIR | --temp-download-dir | Download tracks to a temporary directory first -*very-high is limited to premium only +*very-high is limited to premium only + +### Configuration + +You can find the configuration file in following locations: +| OS | Location +|-----------------|---------------------------------------------------------| +| Windows | `C:\Users\\AppData\Roaming\Zotify\config.json`| +| MacOS | `/Users//.config/zotify/config.json` | +| Linux | `/home//.config/zotify/config.json` | + +To log out, just remove the configuration file. Uninstalling Zotify does not remove the config file. ### Output format @@ -133,7 +145,7 @@ If you see this, don't worry! Just try logging back in. If you see the incorrect Currently no user has reported their account getting banned after using Zotify. It is recommended you use Zotify with a burner account. -Alternatively, there is a configuration option labled ```DOWNLOAD_REAL_TIME```, this limits the download speed to the duration of the song being downloaded thus appearing less suspicious. +Alternatively, there is a configuration option labeled ```DOWNLOAD_REAL_TIME```, this limits the download speed to the duration of the song being downloaded thus appearing less suspicious. This option is much slower and is only recommended for premium users who wish to download songs in 320kbps without buying premium on a burner account. ### Disclaimer diff --git a/zotify/app.py b/zotify/app.py index 9f61b57..f15821b 100644 --- a/zotify/app.py +++ b/zotify/app.py @@ -152,7 +152,7 @@ def search(search_term): try: int(splits[index+1]) except ValueError: - raise ValueError('Paramater passed after {} option must be an integer.\n'. + raise ValueError('Parameter passed after {} option must be an integer.\n'. format(split)) if int(splits[index+1]) > 50: raise ValueError('Invalid limit passed. Max is 50.\n') diff --git a/zotify/config.py b/zotify/config.py index ff7e929..802d5ce 100644 --- a/zotify/config.py +++ b/zotify/config.py @@ -54,7 +54,7 @@ CONFIG_VALUES = { TRANSCODE_BITRATE: { 'default': 'auto', 'type': str, 'arg': '--transcode-bitrate' }, SKIP_EXISTING: { 'default': 'True', 'type': bool, 'arg': '--skip-existing' }, SKIP_PREVIOUSLY_DOWNLOADED: { 'default': 'False', 'type': bool, 'arg': '--skip-previously-downloaded' }, - RETRY_ATTEMPTS: { 'default': '1', 'type': int, 'arg': '--retry-attemps' }, + RETRY_ATTEMPTS: { 'default': '1', 'type': int, 'arg': '--retry-attempts' }, BULK_WAIT_TIME: { 'default': '1', 'type': int, 'arg': '--bulk-wait-time' }, OVERRIDE_AUTO_WAIT: { 'default': 'False', 'type': bool, 'arg': '--override-auto-wait' }, CHUNK_SIZE: { 'default': '20000', 'type': int, 'arg': '--chunk-size' },