Soulify is a hybrid web application that bridges the gap between Spotify and Soulseek, allowing users to search for and download their favorite tracks directly from the Soulseek network.
- Spotify Integration: Search for tracks, albums, and playlists directly from Spotify.
- Soulseek Integration: Download tracks and albums from Soulseek based on your Spotify searches.
- Queue Downloads: Manage multiple downloads with the built-in queueing system.
- Post-Download Processing: Automate metadata updates and organize your music library.
- Spotify Premium account with developer access
- Linux machine for hosting your music files
- Python 3.6+
Create the following folders in your downloads directory:
Music Sorting
- For processed music awaiting final placementMusic New Artists
- For new artists not yet in your libraryMusic Downloads
- Where Soulseek downloads are initially storedMusic Unknown Album
- For albums that can't be automatically categorized
-
Clone the repository:
git clone https://github.com/WB2024/soulify.git
-
Navigate to the project directory:
cd soulify
-
Install dependencies:
pip install -r requirements.txt
-
Spotify Developer Setup:
- Go to Spotify Developer Dashboard
- Create a new app
- Set the redirect URI to
http://[your-local-ip]:5000/callback
- Note your client ID and secret for configuration
-
Create and configure the necessary configuration files:
destination_root=/path/to/your/music/library source_route=/path/to/your/Music Sorting new_artists_dir=/path/to/your/Music New Artists/ Music_Download_Folder=/path/to/your/Music Downloads unknown_albums_dir=/path/to/your/Music Unknown Album
# Soulseek credentials username=your_soulseek_username password=your_soulseek_password # General download settings download_directory=/path/to/your/Music Downloads retain_special_characters=false preferred_file_format=flac # Spotify settings spotify-id=your_spotify_client_id spotify-secret=your_spotify_client_secret
[Server] base_url=http://your-local-ip:5000
update_metadata=true jellyfin_refresh=true # Paths new_artists_dir=/path/to/your/Music New Artists/ unknown_albums_dir=/path/to/your/Music Unknown Album
spotify_client_id=your_spotify_client_id spotify_client_secret=your_spotify_client_secret redirect_uri=http://your-local-ip:5000/callback
-
Run the application:
python SpotWebApp.py
-
Open the displayed URL in your browser and login with your Spotify account.
- Navigate to the Playlists section to view all your Spotify playlists
- Click Queue Download to add the entire playlist to your download queue
- Click on a playlist to view and select individual tracks for download
- Click Browse to see generated playlists based on your Spotify account preferences
- Add these playlists to your download queue as needed
- Click Search and choose to search for an artist, album, or track
- Enter your search term and click search
- For artist searches:
- Click Queue Artist Download to download the entire discography
- Click the artist name to view their discography broken down by album type
- For album views:
- Click Queue Album Download to download the whole album
- Click the album name to see track listings by disc
- Download specific tracks if desired
- Click Downloads from the navigation bar or homepage
- View your queued and running downloads
- Click View Console to start downloading
- In the interactive download console:
- Click Accept for the best matched download
- Use up/down buttons to browse other users' shares
- Choose download options (specific files, entire folder, etc.)
- The download will automatically terminate when finished and start the next queued item
After downloading, the post-download scripts will:
- Run Picard to correct metadata (if configured)
- Move files to your sorting folder
- Scan your library for matching artist folders
- Move cleaned and renamed files to your library
For the best metadata management, we recommend using MusicBrainz Picard with Soulify:
-
Create a Docker container for Picard with this compose file:
services: picard: image: mikenye/picard:latest container_name: picard volumes: - /path/to/your/storage:/data - /path/to/your/storage/DockerAppData/Picard:/config ports: - "5800:5800" restart: unless-stopped
-
Picard Configuration:
- Set the
Music Downloads
directory as your starting directory - In options, set the destination directory as the
Music Sorting
folder - Enable "Move additional files" and include
*.jpg, *.png
for cover art - Ensure "Rename files when saving" is checked
- Edit file naming script with the following or adjust as you like:
$if(%albumartist%, %albumartist%, Unknown )/[$upper($if(%releasetype%,%releasetype%,ALBUM))] [$if(%originalyear%,%originalyear%)] %album%/[$upper($if(%media%,%media%,DIGITAL MEDIA))] [$upper($if(%releasecountry%,%releasecountry%,WW))] [$if(%date%,%originalyear%)]/ $title($if(%media%,%media%,DIGITAL MEDIA)) $pad(%discnumber%,2,0)/ %albumartist% - %album% - $pad(%tracknumber%,2,0) . %title%
- Set the
Y:\Media\Audio\Music\Sources\All\Rock - Goth\Joy Division\[ALBUM] [1980] Closer\[CD] [US] [2007]\CD 01\Joy Division - Closer - 02 . Isolation.mp3
Y:\Media\Audio\Music\Sources\All\Rock - Goth\Joy Division\[ALBUM] [1980] Closer\[12_ Vinyl] [IT]\12_ Vinyl 01\Joy Division - Closer - 02 . Isolation.flac
Y:\Media\Audio\Music\Sources\All\Rock - Goth\Joy Division\[SINGLE] [1980] Atmosphere\[12_ Vinyl] [GB] [1980]\12_ Vinyl 01\Joy Division - Atmosphere - 02 . She's Lost Control.mp3
Y:\Media\Audio\Music\Sources\All\Rap & Hip Hop\The Notorious B.I.G\[EP] [0001] Demo Tape (92-93)\[Unknown] [WW] []\Unknown 01\The Notorious B.I.G. - Demo Tape (92-93) - 01 . Unsigned Hype Demo Tape.mp3