No description
Find a file
Broque Thomas 40b48d0b5d
Merge pull request #15 from Nezreka/headless
Headless compatibility
2025-09-11 18:17:45 -07:00
.claude wishlist modal somewhat ready 2025-08-08 13:00:12 -07:00
assets rate limiting 2025-08-11 08:36:51 -07:00
config update 2025-09-03 18:45:05 -07:00
core Improve Docker path handling and filename extraction 2025-09-11 17:46:49 -07:00
database remove 2025-08-18 16:43:35 -07:00
logs Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
services bug fix 2025-08-18 21:19:52 -07:00
ui update version 2025-08-21 18:25:54 -07:00
utils remove pycache 2025-08-14 14:09:11 -07:00
webui Add web-based Spotify and Tidal OAuth flows 2025-09-11 13:24:15 -07:00
.dockerignore Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
.gitattributes Initial commit 2025-07-09 12:07:41 -07:00
.gitignore Update .gitignore 2025-08-14 14:03:37 -07:00
docker-compose.yml Update docker-compose.yml 2025-09-11 17:58:26 -07:00
Dockerfile Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
license.txt Create license.txt 2025-08-16 09:06:13 -07:00
main.py settings page ready 2025-08-22 12:57:20 -07:00
README-Docker.md Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
README.md Update README.md 2025-09-11 18:16:37 -07:00
requirements-webui.txt Update requirements-webui.txt 2025-09-11 13:29:15 -07:00
requirements.txt headless mode foundation 2025-08-21 20:14:16 -07:00
web_server.py Update web_server.py 2025-09-11 18:01:46 -07:00

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.