Code Monkey home page Code Monkey logo

zspotifygui's Introduction

ZSpotifyGUI

A user-friendly desktop app built on the ZSpotify music downloader for Windows, MacOs, and Linux

Discord Server - Matrix Server - Gitea Mirror - Main Site

Take full advantage of the power of ZSpotify with this user-friendly graphical interface.

  • Find and download the music you want faster and easier.
  • Listen to your music directly in ZSpotify with it's fully featured music player.
  • Continue to search for music while downloading.
  • Queue up downloads so you can maximise your downloading potential.
  • Your spotify likes sync into the client, allowing you to easily download them.
  • Easily change settings such as real-time-download, download format, download directory, and search results within the client.

SCREENSHOTS


EASY INSTALLATION

WINDOWS:

  • Download the latest Windows installer from Releases.
  • Run the installer and follow the installation instructions.
  • You will find ZSpotify in your start menu, and Desktop (if chosen).
  • If you did not have VLC installed already, you will need to restart your PC after installation. If you already had it, then a restart is not necessary.

MAC:

  • Download the latest MacOs zip file from Releases.
  • Make sure the zip file you downloaded is inside your Downloads folder.
  • Open the Terminal application and paste the following command:
cd Downloads/;unzip ZSpotifyMacOs.zip; cd ZSpotifyGUI/;sudo chmod u+x install.sh;./install.sh
  • You will be asked to enter a password to complete the installation. Please note that when typing your password, nothing will appear on screen. Just type the password and press enter, and if it is valid the installation will continue.
  • You will find the ZSpotify launcher in your Applications folder, or alternatively in the ZSpotify folder located in your Home folder
  • If you did not have VLC installed already, you will need to restart your PC after installation. If you already had it, then a restart is not necessary.


MANUAL INSTALLATION

  • 64bit VLC can be installed from videolan.org for all operating systems. You will need to restart your pc. Sometimes the VLC website will automatically download the 32bit version. Please ensure you download the 64bit version
  • ffmpeg can be installed via apt for Debian-based distros or by downloading the binaries from ffmpeg.org and placing them in your %PATH% in Windows. Mac users can install it with Homebrew by running brew install ffmpeg.
  • Install the python requirements: pip install -r requirements.txt

/*Git can be installed via apt for Debian-based distros or by downloading the binaries from git-scm.com for Windows.

Usage

  • The primary way to run ZSpotify is by clicking on the launch icon created during the easy installation process. On Windows this is a file called ZSpotify.bat. On Mac this is a file called ZSpotify.command.
  • Alternatively you can run the program directly from the terminal by navigating to the source folder containing appGui.py and running: python appGui.py
  • You may also use the regular ZSpotify CLI as normal.

Command Line Usage

Basic command line usage: python zspotify <track/album/playlist/episode/artist url> 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.

Different usage modes: (nothing) Download the tracks/alumbs/playlists URLs from the parameter -d, --download Download all tracks/alumbs/playlists URLs from the specified file -p, --playlist Downloads a saved playlist from your account -ls, --liked-songs Downloads all the liked songs from your account -s, --search Loads search prompt to find then download a specific track, album or playlist

Extra command line options: -ns, --no-splash Suppress the splash screen when loading. <<<<<<< HEAD

Options that can be configured in zs_config.json: ROOT_PATH Change this path if you don't like the default directory where ZSpotify saves the music ROOT_PODCAST_PATH Change this path if you don't like the default directory where ZSpotify saves the podcasts

SKIP_EXISTING_FILES Set this to false if you want ZSpotify to overwrite files with the same name rather than skipping the song

MUSIC_FORMAT Can be "mp3" or "ogg", mp3 is required for track metadata however ogg is slightly higher quality as it is not transcoded.

FORCE_PREMIUM Set this to true if ZSpotify isn't automatically detecting that you are using a premium account

ANTI_BAN_WAIT_TIME Change this setting if the time waited between bulk downloads is too high or low OVERRIDE_AUTO_WAIT Change this to true if you want to completely disable the wait between songs for faster downloads with the risk of instability

======= --config-location Use a different zs_config.json, defaults to the one in the program directory


### Options:

All these options can either be configured in the zs_config or via the commandline, in case of both the commandline-option has higher priority.  
Be aware you have to set boolean values in the commandline like this: `--download-real-time=True`

| Key (zs-config)              | commandline parameter            | Description
|------------------------------|----------------------------------|---------------------------------------------------------------------|
| ROOT_PATH                    | --root-path                      | directory where ZSpotify saves the music
| ROOT_PODCAST_PATH            | --root-podcast-path              | directory where ZSpotify saves the podcasts
| SKIP_EXISTING_FILES          | --skip-existing-files            | Skip songs with the same name
| SKIP_PREVIOUSLY_DOWNLOADED   | --skip-previously-downloaded     | Create a .song_archive file and skip previously downloaded songs
| DOWNLOAD_FORMAT              | --download-format                | The download audio format (aac, fdk_aac, m4a, mp3, ogg, opus, vorbis)
| FORCE_PREMIUM                | --force-premium                  | Force the use of high quality downloads (only with premium accounts)
| ANTI_BAN_WAIT_TIME           | --anti-ban-wait-time             | The wait time between bulk downloads
| OVERRIDE_AUTO_WAIT           | --override-auto-wait             | Totally disable wait time between songs with the risk of instability
| CHUNK_SIZE                   | --chunk-size                     | chunk size for downloading
| SPLIT_ALBUM_DISCS            | --split-album-discs              | split downloaded albums by disc
| DOWNLOAD_REAL_TIME           | --download-real-time             | only downloads songs as fast as they would be played, can prevent account bans
| LANGUAGE                     | --language                       | Language for spotify metadata
| BITRATE                      | --bitrate                        | Overwrite the bitrate for ffmpeg encoding
| SONG_ARCHIVE                 | --song-archive                   | The song_archive file for SKIP_PREVIOUSLY_DOWNLOADED
| CREDENTIALS_LOCATION         | --credentials-location           | The location of the credentials.json
| OUTPUT                       | --output                         | The output location/format (see below)
| PRINT_SPLASH                 | --print-splash                   | Print the splash message
| PRINT_SKIPS                  | --print-skips                    | Print messages if a song is being skipped
| PRINT_DOWNLOAD_PROGRESS      | --print-download-progress        | Print the download/playlist progress bars
| PRINT_ERRORS                 | --print-errors                   | Print errors
| 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

### Output format:

With the option `OUTPUT` (or the commandline parameter `--output`) you can specify the output location and format.  
The value is relative to the `ROOT_PATH`/`ROOT_PODCAST_PATH` directory and can contain the following placeholder:

| Placeholder     | Description
|-----------------|--------------------------------
| {artist}        | The song artist
| {album}         | The song album
| {song_name}     | The song name
| {release_year}  | The song release year
| {disc_number}   | The disc number
| {track_number}  | The track_number
| {id}            | The song id
| {track_id}      | The track id
| {ext}           | The file extension
| {album_id}      | (only when downloading albums) ID of the album
| {album_num}     | (only when downloading albums) Incrementing track number
| {playlist}      | (only when downloading playlists) Name of the playlist
| {playlist_num}  | (only when downloading playlists) Incrementing track number

Example values could be:
~~~~
{playlist}/{artist} - {song_name}.{ext}
{playlist}/{playlist_num} - {artist} - {song_name}.{ext}
Liked Songs/{artist} - {song_name}.{ext}
{artist} - {song_name}.{ext}
{artist}/{album}/{album_num} - {artist} - {song_name}.{ext}
/home/user/downloads/{artist} - {song_name} [{id}].{ext}
~~~~

### Docker Usage
>>>>>>> 1585133e70ad6ab21c70e07f5c9d98b1127eca3e

<h4>FAQ<h4/>

Will my account get banned if I use this tool?

Currently no user has reported their account getting banned after using ZSpotify.

There have been 2-3 reports from users who received account bans from Spotify for using this tool.

We recommend using ZSpotify 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 not appearing suspicious to Spotify. 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.

Use ZSpotify at your own risk, the developers of ZSpotify are not responsible if your account gets banned.

Why is my program freezing/why are search results not showing up"?

There are currently some issues with losing connection to the Spotify API. Unfortunately until we can find a fix, your best option is to restart the program, and it will work correctly again. If problems persist, please contact us at the Discord server.

Contributing

Please refer to CONTRIBUTING

Changelog

Please refer to CHANGELOG

Common Errors

Please refer to COMMON_ERRORS

zspotifygui's People

Contributors

alphagit avatar andcolla avatar arebokert avatar cclauss avatar cooper7692 avatar davidsalido avatar deadsix27 avatar el-gringo-alto avatar jaredrossberg avatar jayden000 avatar jkemming avatar leithc avatar logykk avatar maxiimillian avatar mazzya avatar mikescher avatar mockuser404 avatar modzilla99 avatar mrbruz avatar nikos9742 avatar packetsurf avatar reduxionist avatar sheeeng avatar shirt-dev avatar sudouser777 avatar thomaslty avatar tkhadimullin avatar vikvdd avatar xx-05 avatar yiannisha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

zspotifygui's Issues

[BUG] Songs not completely downloaded

All the songs I download are a couple seconds too short. I am using Realtime mode to not get banned. I am running a slightly newer version of GUI as the installer had trouble installing it.

[BUG] macOS: No module named 'Cocoa'

Describe the bug
Issue occured while installing on macOS Sonoma 14.5 (Intel based)

Building launch icon in Applications..

Traceback (most recent call last):
  File "/Users/mef/Downloads/ZSpotifyGUI/build_mac_cmd.py", line 3, in <module>
    import Cocoa
ModuleNotFoundError: No module named 'Cocoa'
cp: ZSpotify.command: No such file or directory
cp: ZSpotify.command: No such file or directory

To Reproduce
Steps to reproduce the behavior:

  1. Enter cd Downloads/;unzip ZSpotifyMacOs.zip; cd ZSpotifyGUI/;sudo chmod u+x install.sh;./install.sh

  2. See error

Expected behavior
Just successful installation

System Info:

  • OS: macOS Sonoma 14.5
  • Release: ZSpotifyMacOs.zip
  • Version ZSpotifyGUI 0.2.0

the program has stopped working!

Hello, I used this great program for half a year and everything was fine, but for the last few days it stopped working correctly, the download process of the track stops at 88%! as it turned out, not only me, help fix this error

[BUG] Play button don't work

Describe the bug
Everything in the app is working, except the play buttons, i am unsure if it requires something special for the setup of vlc, or if it has not been implemented yet, or does it require premium? I also tried to download the song first, to see if it was by designed it was not possible to just play

To Reproduce
Removed vlc, and installed VLC 3.0.16 64bit manual
Restarted computer
Reinstalled Zspoifygui and logged in

Expected behavior
Selecting a song start playing

Screenshots
image

System Info:

  • Windows 11, dark mode and dpi scaling in use

Additional context

[BUG] incorrect password, but it's correct

Describe the bug
I am getting incorrect username/password error, but when i login to spotify from the web they work fine.

Expected behavior
be able to login

System Info:

  • OS: Windows 10
  • Release: .exe

[FEATURE]

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Theres no m1 chip support
image

Describe the solution you'd like
A clear and concise description of what you want to happen.

Additional context
Add any other context or screenshots about the feature request here.

[FEATURE] Lyrics integration

Is your feature request related to a problem? Please describe.
None, just a feature in Spotify not yet in ZSpotifyGUI.

Describe the solution you'd like
Integration from some lyrics API to fetch lyrics for current playing song and display.

Additional context
None.

[DOCUMENTATION] All Platform links are down

All Platform links are down

Matrix:
You are not invited to this room

Gitea:
Error 404, no right to visit or doesn't exist

Discord:
Invitation invalid

GitHub Page:
Error 404 There isn't a GitHub Pages site here.

GUI hangs after incorrect credential submission

Every time, after incorrect credentials entered, the GUI hangs. However, this is a problem with the base zspotify app, but it would be nice if there was a way to restart the GUI, or at least the zspotify backend when the librespot incorrect credentials exception is thrown.

[Bug] Not downloading completely

The gui says "Downloaded" but the terminal shows that its stuck on 88/87% all the time, the song file is downloaded but the last 12/13% part of the song isnt there. (3:01 total playtime which should be 3:11 etc)

[FEATURE] Allow media keys to pause, go to next track, go to previous track

Is your feature request related to a problem? Please describe.
Ideally would work globally, so you'd be able to change songs without having to have ZSpotifyGUI focused.

Describe the solution you'd like
Pressing the media keys on keyboard would pause/play, go to next track, and go to previous track in ZSpotifyGUI while applicable.

Additional context
None.

[BUG] Errors when installing components

Describe the bug
When doing a fresh install and select git or vlc

To Reproduce
when doing the first time install, also tried uninstall vlc manually and reinstall the setup

Expected behavior
no errors when installing

Screenshots
image

System Info:

  • OS: Windows 11
  • Release: ZSpotifyGUI-Updater.exe
  • Version 2.0 pre-release

Additional context
the error can be ignored and if following the manual guide it will still work

[FEATURE] Discord RPC

Is your feature request related to a problem? Please describe.
Just a feature on Spotify but not ZSpotifyGUI.

Describe the solution you'd like
A Rich presence client similar to the one Spotify provides for Discord. However having the album art display would require it to be uploaded to the bot's Discord applications site, so that would have to be skipped for the project to be feasible.

Additional context
None.

[BUG] Spamming next/prev track causes unresponsiveness

Describe the bug
Spamming the next/prev track buttons may cause the app to become unresponsive.

To Reproduce
Steps to reproduce the behavior:

  1. Open ZSpotifyGUI.
  2. Go to Your Library or another location with a list of downloaded songs.
  3. Spam the next or previous track button.

Expected behavior
App should continue changing the track as normal.

System Info:

  • OS: Windows 11
  • Release: exe
  • Version: latest release

Additional context
Music continues to play while app is unresponsive.

[BUG] SSLError

System Info:

  • OS: Ubuntu 20.04

Additional context


###SKIPPING: GENERAL DOWNLOAD ERROR: HTTPSConnectionPool(host='audio4-gm-fb.spotifycdn.com', port=443): Max retries exceeded with url: /audio/dc568607a69842af4b9902087df4013b62c2ec3e?Expires=1698274098~FullPath~hmac=Q9dtDoZE5BLy6Bu0wpqu73A_4jj4DBoT-40_Mgy1YgM= (Caused by SSLError(SSLCertVerificationError("hostname 'audio4-gm-fb.spotifycdn.com' doesn't match 'audio-gm-off.spotifycdn.com'")))
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 376, in _make_request
    self._validate_conn(conn)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 996, in _validate_conn
    conn.connect()
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 400, in connect
    _match_hostname(cert, self.assert_hostname or server_hostname)
  File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 410, in _match_hostname
    match_hostname(cert, asserted_hostname)
  File "/usr/lib/python3.8/ssl.py", line 420, in match_hostname
    raise CertificateError("hostname %r "
ssl.SSLCertVerificationError: ("hostname 'audio4-gm-fb.spotifycdn.com' doesn't match 'audio-gm-off.spotifycdn.com'",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sukuna/.local/lib/python3.8/site-packages/requests/adapters.py", line 486, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 436, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='audio4-gm-fb.spotifycdn.com', port=443): Max retries exceeded with url: /audio/dc568607a69842af4b9902087df4013b62c2ec3e?Expires=1698274098~FullPath~hmac=Q9dtDoZE5BLy6Bu0wpqu73A_4jj4DBoT-40_Mgy1YgM= (Caused by SSLError(SSLCertVerificationError("hostname 'audio4-gm-fb.spotifycdn.com' doesn't match 'audio-gm-off.spotifycdn.com'")))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sukuna/Desktop/ZSpotifyGUI/source/track.py", line 192, in download_track
    stream = ZSpotify.get_content_stream(track_id, ZSpotify.DOWNLOAD_QUALITY)
  File "/home/sukuna/Desktop/ZSpotifyGUI/source/zspotify.py", line 160, in get_content_stream
    return cls.SESSION.content_feeder().load(content_id, VorbisOnlyAudioQuality(quality), False, None)
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 736, in load
    return self.load_track(playable_id, audio_quality_picker, preload,
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 797, in load_track
    return self.load_stream(file, track, None, preload, halt_listener)
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 751, in load_stream
    return CdnFeedHelper.load_track(self.__session, track, file,
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 339, in load_track
    streamer = session.cdn().stream_file(file, key, url, halt_listener)
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 438, in stream_file
    return CdnManager.Streamer(
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 575, in __init__
    response = self.request(range_start=0,
  File "/home/sukuna/.local/lib/python3.8/site-packages/librespot/audio/__init__.py", line 629, in request
    response = self.__session.client().get(
  File "/home/sukuna/.local/lib/python3.8/site-packages/requests/sessions.py", line 602, in get
    return self.request("GET", url, **kwargs)
  File "/home/sukuna/.local/lib/python3.8/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/sukuna/.local/lib/python3.8/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "/home/sukuna/.local/lib/python3.8/site-packages/requests/adapters.py", line 517, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='audio4-gm-fb.spotifycdn.com', port=443): Max retries exceeded with url: /audio/dc568607a69842af4b9902087df4013b62c2ec3e?Expires=1698274098~FullPath~hmac=Q9dtDoZE5BLy6Bu0wpqu73A_4jj4DBoT-40_Mgy1YgM= (Caused by SSLError(SSLCertVerificationError("hostname 'audio4-gm-fb.spotifycdn.com' doesn't match 'audio-gm-off.spotifycdn.com'")))```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.