Automated Music Discovery and Collection Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Go to file
Broque Thomas 40b48d0b5d
Merge pull request #15 from Nezreka/headless
5 months ago
.claude wishlist modal somewhat ready 7 months ago
assets rate limiting 7 months ago
config update 6 months ago
core Improve Docker path handling and filename extraction 5 months ago
database remove 6 months ago
logs Add Docker support and improve headless compatibility 5 months ago
services bug fix 6 months ago
ui update version 6 months ago
utils remove pycache 6 months ago
webui Add web-based Spotify and Tidal OAuth flows 5 months ago
.dockerignore Add Docker support and improve headless compatibility 5 months ago
.gitattributes Initial commit 8 months ago
.gitignore Update .gitignore 6 months ago
Dockerfile Add Docker support and improve headless compatibility 5 months ago
README-Docker.md Add Docker support and improve headless compatibility 5 months ago
README.md Update README.md 5 months ago
docker-compose.yml Update docker-compose.yml 5 months ago
license.txt Create license.txt 6 months ago
main.py settings page ready 6 months ago
requirements-webui.txt Update requirements-webui.txt 5 months ago
requirements.txt headless mode foundation 6 months ago
web_server.py Update web_server.py 5 months ago

README.md

SoulSync Logo

🎵 SoulSync - Automated Music Discovery & Collection Manager

Bridge the gap between streaming services and your local music library. Automatically sync Spotify/Tidal/YouTube playlists to Plex/Jellyfin via Soulseek.

ko-fi

What It Does

  • Auto-sync playlists from Spotify/Tidal/YouTube to your media server
  • Smart matching finds what you're missing vs what you own
  • Download missing tracks from Soulseek with FLAC priority
  • Metadata enhancement adds proper tags and album art
  • File organization creates clean folder structures
  • Artist discovery browse complete discographies
  • Wishlist system saves failed downloads for automatic retry
  • Artist watchlist monitors for new releases and adds missing tracks
  • Background automation retries failed downloads every hour

🚀 Three Ways to Run

1. Desktop GUI (Original)

Full PyQt6 desktop application with all features.

git clone https://github.com/Nezreka/SoulSync
cd SoulSync
pip install -r requirements.txt
python main.py

2. Web UI (New!)

Browser-based interface - same features, runs anywhere.

python web_server.py
# Open http://localhost:8008

3. Docker (New!)

Containerized web UI with persistent database.

docker-compose up -d
# Open http://localhost:8008

Quick Setup

Prerequisites

  • slskd: Download from GitHub, run on port 5030
  • Spotify API: Create app at Spotify Dashboard
  • Media Server: Plex or Jellyfin (optional but recommended)

Essential Config

  1. Get Spotify Client ID/Secret from developer dashboard
  2. Set up slskd with downloads folder and API key
  3. Launch SoulSync, go to Settings, enter your credentials
  4. Important: Share music in slskd to avoid bans

Docker Notes

  • Database persists between rebuilds via named volume
  • Mount drives containing your download/transfer folders:
    volumes:
      - /mnt/c:/host/mnt/c:rw  # For C: drive paths
      - /mnt/d:/host/mnt/d:rw  # For D: drive paths
    
  • Uses separate database from GUI/WebUI versions

🎯 Core Features

Search & Download: Manual track search with preview streaming
Playlist Sync: Spotify/Tidal/YouTube playlist analysis and batch downloads
Artist Explorer: Complete discography browsing with missing indicators
Smart Matching: Advanced algorithm prioritizes originals over remixes
Wishlist Management: Failed downloads automatically saved and retried hourly
Artist Watchlist: Add favorite artists to monitor for new releases automatically
Automation: Hourly retry of failed downloads, metadata enhancement
Activity Feed: Real-time status and progress tracking

📁 File Flow

  1. Search: Query Soulseek via slskd API
  2. Download: Files saved to configured download folder
  3. Process: Auto-organize to transfer folder with metadata
  4. Structure: Transfer/Artist/Artist - Album/01 - Track.flac
  5. Import: Media server picks up organized files

🔧 Config Example

{
  "spotify": {
    "client_id": "your_client_id",
    "client_secret": "your_client_secret"
  },
  "plex": {
    "base_url": "http://localhost:32400",
    "token": "your_plex_token"
  },
  "soulseek": {
    "slskd_url": "http://localhost:5030", 
    "api_key": "your_api_key",
    "download_path": "/path/to/downloads",
    "transfer_path": "/path/to/music/library"
  }
}

⚠️ Important Notes

  • Must share files in slskd - downloaders without shares get banned
  • Docker uses separate database from GUI/WebUI versions
  • Transfer path should point to your media server music library
  • FLAC preferred but supports all common formats

🏗️ Architecture

  • Core: Service clients for Spotify, Plex, Jellyfin, Soulseek
  • Database: SQLite with full media library cache
  • UI: PyQt6 desktop + Flask web interface
  • Matching: Advanced text normalization and scoring
  • Background: Multi-threaded with automatic retry logic

Modern, clean, automated. Set it up once, let it manage your music library.