A lightweight Windows app to sync Spotify playlists to your Shokz OpenSwim Pro (or any MP3 player with limited storage).
Zero Spotify account risk - Uses YouTube matching via spotDL, no direct Spotify downloads.
- π Load any public Spotify playlist
- π Preview changes before syncing (new/existing/removed tracks)
- π Storage gauge to monitor 32GB device limit
- ποΈ Optional auto-cleanup of removed tracks
- πΎ State tracking to avoid re-downloading
- β‘ Simple one-click sync
Before running Swim Sync, you need:
Download from python.org or install via Windows Store.
Verify installation:
python --versionRequired by spotDL for audio conversion.
Option A: Chocolatey (recommended)
choco install ffmpegOption B: Manual Install
- Download from ffmpeg.org
- Extract to
C:\ffmpeg - Add
C:\ffmpeg\binto your system PATH
Verify installation:
ffmpeg -versionInstall via pip:
pip install spotdlVerify installation:
spotdl --version-
Clone or download this repository
-
Install Python dependencies:
pip install -r requirements.txt- Run the app:
python run.pyOr use the batch launcher:
scripts\SwimSync.batswimsync/
βββ src/swimsync/ # Main application package
β βββ app.py # Tkinter GUI
β βββ sync_engine.py # spotDL integration
β βββ state_manager.py # Track manifest
β βββ config_manager.py# Settings
βββ scripts/ # Launcher scripts
βββ docs/ # Documentation (PRD)
βββ tests/ # Test suite
βββ run.py # Quick launcher
βββ pyproject.toml # Python package config
βββ requirements.txt # Dependencies
-
Paste your Spotify playlist URL
Example:https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5Mβ οΈ The playlist must be public (not private/collaborative) -
Select an output folder
Default:C:\Users\[You]\Music\SwimSync -
Click "Load Playlist"
The app will fetch all track metadata
-
Review the track list:
- π’ New - Will be downloaded
- βͺ Exists - Already on disk
- π΄ Removed - No longer in playlist
-
Check the storage gauge to ensure you won't exceed device capacity
-
Optionally check "Delete removed tracks" to clean up old files
-
Click "Sync Now"
-
Wait for downloads to complete (progress shown per-track)
- Connect your Shokz OpenSwim Pro via the magnetic USB cable
- Open the device in File Explorer (appears as "SWIM PRO" or similar)
- Drag all MP3 files from your sync folder to the device
- Safely eject the device
Access via the Settings button:
| Setting | Default | Description |
|---|---|---|
| Audio Bitrate | 320k | Download quality (128k/192k/256k/320k) |
| Storage Limit | 32 GB | Warning threshold for gauge |
| Download Timeout | 120s | Max time per track before retry |
- Ensure spotDL is installed:
pip install spotdl - Check it's in PATH:
spotdl --version - Try reinstalling:
pip uninstall spotdl && pip install spotdl
- Install FFmpeg and ensure it's in your system PATH
- Restart your terminal after installation
- Ensure the playlist is public (check Spotify settings)
- The playlist URL should look like:
https://open.spotify.com/playlist/...
- spotDL uses YouTube matching - some tracks may not have good matches
- Check the spotDL output for specific errors
- Try manually downloading problem tracks with:
spotdl "artist - title"
- This happens occasionally with covers, remixes, or live versions
- Delete the wrong file and manually download the correct one
- Report consistent issues to the spotDL GitHub
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Spotify ββββββββΆβ Swim Sync ββββββββΆβ OpenSwim Pro β
β Public API β meta β (this app) β MP3s β (32GB) β
β β data β β β β
βββββββββββββββββββ ββββββββββ¬βββββββββ βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β spotDL β
β (YouTube DL) β
βββββββββββββββββββ
- Metadata Fetch: Swim Sync uses spotDL to read track info from Spotify's public API (no login needed)
- State Compare: Local manifest tracks what's already downloaded
- Delta Preview: Shows you exactly what will change
- Download: spotDL finds matching audio on YouTube and converts to MP3
- Cleanup: Optionally removes tracks no longer in playlist
Your Spotify account is never at risk because:
- No Spotify login/authentication is used
- Audio comes from YouTube, not Spotify servers
- Only public playlist metadata is accessed
~/Music/SwimSync/
βββ Artist - Song 1.mp3
βββ Artist - Song 2.mp3
βββ ...
βββ .swimsync_manifest.json (hidden, tracks sync state)
To create a single .exe file:
pip install pyinstaller
pyinstaller --onefile --windowed --name "SwimSync" run.pyThe executable will be in dist/SwimSync.exe
MIT License - Free for personal use.