No description
Find a file
Broque Thomas a431ec0bd6 Improve enhanced search UI and increase track results
Increased the number of tracks returned by enhanced search from 10 to 20. Updated CSS for enhanced search sections and artist cards to improve visual appearance, spacing, and responsiveness, including larger artist images, new backgrounds, and better layout for various screen sizes.
2025-12-29 12:37:05 -08:00
.claude download bubbles for discoverp age 2025-11-18 18:58:37 -08:00
assets rate limiting 2025-08-11 08:36:51 -07:00
config Add configurable Soulseek search timeout and buffer 2025-12-28 21:02:01 -08:00
core Add enhanced search with categorized dropdown UI 2025-12-29 09:56:32 -08:00
database Improve artist handling and preserve album data in sync 2025-12-09 10:44:54 -08:00
logs Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
services Improve artist handling and preserve album data in sync 2025-12-09 10:44:54 -08:00
templates Update soulsync.xml 2025-12-10 09:52:23 -08:00
ui connect watchlist settings to scan 2025-11-24 21:43:11 -08:00
utils Add dynamic log level control via Web UI 2025-12-08 12:53:44 -08:00
webui Improve enhanced search UI and increase track results 2025-12-29 12:37:05 -08:00
.dockerignore Update Docker setup and config paths 2025-09-13 15:12:23 -07:00
.gitattributes update readme 2025-11-10 10:46:32 -08:00
.gitignore Update .gitignore 2025-08-14 14:03:37 -07:00
beatport_unified_scraper.py beatport progress 2025-10-01 19:52:22 -07:00
docker-compose.yml Update docker-compose.yml 2025-12-08 15:25:42 -08:00
DOCKER-OAUTH-FIX.md Add Docker OAuth authentication troubleshooting guide 2025-09-13 08:24:40 -07:00
DOCKER-TRANSFER-GUIDE.md Create DOCKER-TRANSFER-GUIDE.md 2025-12-10 13:46:22 -08:00
DOCKER.md Create DOCKER.md 2025-09-11 21:00:41 -07:00
DOCKER_PERMISSIONS.md Add manual track matching and Docker permission docs 2025-10-03 10:48:25 -07:00
Dockerfile unraid fix 2025-11-17 12:58:49 -08:00
entrypoint.sh unraid fix 2025-11-17 12:58:49 -08:00
license.txt Create license.txt 2025-08-16 09:06:13 -07:00
main.py Add dynamic log level control via Web UI 2025-12-08 12:53:44 -08:00
README-Docker.md Add Docker support and improve headless compatibility 2025-09-11 08:26:25 -07:00
README.md Add customizable file organization templates 2025-12-10 09:46:22 -08:00
requirements-webui.txt Update requirements-webui.txt 2025-09-28 13:09:41 -07:00
requirements.txt auto lyric download 2025-09-22 16:04:06 -07:00
UNRAID.md Update database mount path and docs for SoulSync 2025-09-12 09:38:18 -07:00
web_server.py Improve enhanced search UI and increase track results 2025-12-29 12:37:05 -08:00

SoulSync Logo

🎵 SoulSync - Automated Music Discovery & Collection Manager

Bridge streaming services to your local music library. Automatically sync Spotify/Tidal/YouTube playlists to Plex/Jellyfin/Navidrome via Soulseek with intelligent matching, metadata enhancement, and automated discovery.

⚠️ CRITICAL: Configure file sharing in slskd before use. Users who only download without sharing get banned by the Soulseek community. Set up shared folders at http://localhost:5030/shares.

📢 Development Focus: New features are developed for the Web UI version. The Desktop GUI receives maintenance and bug fixes only.

Core Features

Sync & Download

  • Auto-sync playlists from Spotify/Tidal/YouTube to your media server
  • Smart matching against your existing library
  • FLAC-priority downloads from Soulseek with automatic fallback
  • Customizable file organization with template-based path structures
  • Synchronized lyrics (LRC) for every track via LRClib.net

Metadata & Organization

  • Enhanced metadata with album art and proper tags
  • Flexible folder templates: $albumartist/$album/$track - $title
  • Automatic library scanning and database updates
  • Clean, organized music collection

Discovery & Automation

  • Browse complete artist discographies with similar artist recommendations
  • Intelligent music discovery using your watchlist (music-map.com integration)
  • Curated playlists: Release Radar, Discovery Weekly, Seasonal Mixes
  • Beatport chart integration for electronic music
  • Artist watchlist monitors new releases automatically

Management

  • Comprehensive library browser with search and completion tracking
  • Wishlist system with automatic retry (30-minute intervals)
  • Granular wishlist management (remove individual tracks or entire albums)
  • Dynamic log level control (DEBUG/INFO/WARNING/ERROR)
  • Background automation handles retries and database updates

🚀 Installation

# Using docker-compose
curl -O https://raw.githubusercontent.com/Nezreka/SoulSync/main/docker-compose.yml
docker-compose up -d

# Or run directly
docker run -d -p 8008:8008 boulderbadgedad/soulsync:latest

# Access at http://localhost:8008

Web UI (Python)

git clone https://github.com/Nezreka/SoulSync
cd SoulSync
pip install -r requirements.txt
python web_server.py
# Open http://localhost:8008

Desktop GUI

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

Quick Setup

Prerequisites

API Credentials

Spotify

  1. Create app → Settings
  2. Add redirect URI: http://127.0.0.1:8888/callback
  3. Copy Client ID and Secret

Tidal

  1. Create app
  2. Add redirect URI: http://127.0.0.1:8889/callback
  3. Add scopes: user.read, playlists.read
  4. Copy Client ID and Secret

Plex

  • Get token from any media item URL: ?X-Plex-Token=YOUR_TOKEN
  • Server URL: http://YOUR_IP:32400

Jellyfin

  • Settings → API Keys → Generate new key
  • Server URL: http://YOUR_IP:8096

Navidrome

  • Settings → Users → Generate API Token
  • Or use username/password
  • Server URL: http://YOUR_IP:4533

Configuration

  1. Launch SoulSync and go to Settings
  2. Enter API credentials for streaming services and media server
  3. Configure slskd URL (http://localhost:5030) and API key
  4. Set download and transfer paths
  5. Customize file organization (optional):
    • Enable custom templates in Settings → File Organization
    • Default: $albumartist/$albumartist - $album/$track - $title
    • Variables: $artist, $albumartist, $album, $title, $track, $playlist
    • Example: Music/$artist/$year - $album/$track - $title
  6. Share files in slskd to avoid bans

📁 File Organization

SoulSync supports customizable path templates with validation and fallback protection.

Default Structure

Transfer/
  Artist/
    Artist - Album/
      01 - Track.flac
      01 - Track.lrc

Template System

  • Albums: $albumartist/$albumartist - $album/$track - $title
  • Singles: $artist/$artist - $title/$title
  • Playlists: $playlist/$artist - $title

Available Variables

  • $artist, $albumartist, $album, $title
  • $track (zero-padded: 01, 02...)
  • $playlist (playlist name)

Features

  • Client-side validation prevents invalid templates
  • Reset to defaults button in settings
  • Automatic fallback if template fails
  • Changes apply immediately to new downloads

🐳 Docker Notes

Path Configuration

volumes:
  - ./config:/app/config          # Settings persist
  - ./logs:/app/logs              # Log files
  - /mnt/c:/host/mnt/c:rw        # Mount Windows drives
  - /mnt/d:/host/mnt/d:rw

Use /host/mnt/X/path in settings where X is your drive letter.

OAuth from Remote Devices When accessing from a different machine, Spotify redirects may fail:

  1. Complete OAuth flow - get redirected to http://127.0.0.1:8888/callback?code=...
  2. Edit URL to use your server IP: http://192.168.1.5:8888/callback?code=...
  3. Press Enter to complete authentication

See DOCKER-OAUTH-FIX.md for details.

📊 Workflow

  1. Sync: Select Spotify/Tidal/YouTube playlist
  2. Match: SoulSync compares against your library
  3. Download: Missing tracks queued from Soulseek
  4. Process: Files enhanced with metadata, lyrics, and album art
  5. Organize: Moved to transfer folder with template-based structure
  6. Scan: Media server automatically rescans library
  7. Update: SoulSync database syncs with your collection

🐛 Troubleshooting

Enable Debug Logging

  • Settings → Log Level → DEBUG
  • Check logs/app.log for detailed information
  • Change takes effect immediately

Common Issues

Files not organizing properly

  • Verify transfer path points to your music library
  • Check template syntax in Settings → File Organization
  • Use "Reset to Defaults" if templates are broken
  • Review logs for path-related errors

Docker drive access

  • Ensure drives are mounted in docker-compose.yml
  • Restart Docker Desktop if mounts fail
  • Verify paths use /host/mnt/X/ prefix

Wishlist tracks stuck

  • Remove items using delete buttons on wishlist page
  • Auto-retry runs every 30 minutes
  • Check logs for download failures

Multi-library setups

  • Select correct library from dropdown in settings (Plex/Jellyfin)
  • Test connection to verify credentials

🏗️ Architecture

  • Services: Spotify, Tidal, Plex, Jellyfin, Navidrome, Soulseek clients
  • Database: SQLite with automatic library caching and updates
  • UI: PyQt6 Desktop + Flask Web Interface
  • Matching: Advanced text normalization and fuzzy scoring
  • Metadata: Mutagen + LRClib.net for tags and lyrics
  • Automation: Multi-threaded with retry logic and background tasks

📝 Recent Updates

  • Customizable file organization with template-based paths and validation
  • Log level control without restart
  • Jellyfin library selector for multi-library setups
  • Enhanced wishlist management with track/album removal
  • Docker config persistence between container restarts

Support on Ko-fi

Star History