Strawberry Playlist Sync Tool
Sync your Strawberry Music Player playlists to disk M3U files with duplicate detection, automatic backups, and smart conflict resolution.
Features
- Duplicate Detection: Find and remove duplicate tracks within playlists
- Exact duplicates (same file added multiple times)
- Optional fuzzy matching (same title/artist, different files)
- Playlist Sync: Export database playlists to M3U files
- Creates timestamped backups before overwriting
- Shows what's added/removed before syncing
- Add-only mode to preserve disk entries
- Recursive subdirectory scanning
- Multiple playlist directory support
- Backup Rotation: Automatically clean up old backup files
- Keep N backups per playlist (default: 3)
- Delete backups older than N days (default: 60)
- Count takes priority (always keeps minimum backups)
- Never-Sync List: Skip utility playlists you don't want exported
- Managed via neversync.txt in your playlist folder
- Interactive prompts to add playlists during review
Requirements
- Python 3.6+ (standard library only, no pip installs needed)
- Linux, macOS, or Windows
Installation
- Save the script to your preferred location, e.g.:
~/.local/share/strawberry/strawberry/strawberry-playlist-sync.py
- Make it executable (Linux/macOS):
chmod +x strawberry-playlist-sync.py
- Optionally create a desktop shortcut (see below).
Usage
Interactive Mode
./strawberry-playlist-sync.py
Presents a menu to choose between duplicate checking, syncing, and backup cleanup.
Command-Line Mode
Dry run (preview changes without writing):
./strawberry-playlist-sync.py -s -p ~/Music/playlists --dry-run
Dry run with full track details:
./strawberry-playlist-sync.py -s -p ~/Music/playlists --dry-run -v
Sync playlists to disk:
./strawberry-playlist-sync.py -s -p ~/Music/playlists
Sync including subdirectories:
./strawberry-playlist-sync.py -s -p ~/Music/playlists -r
Check for duplicates:
./strawberry-playlist-sync.py -d
Include fuzzy duplicates (same song, different files):
./strawberry-playlist-sync.py -d --fuzzy
Clean up old backups:
./strawberry-playlist-sync.py -c -n 5 -a 30
(Keep 5 backups, delete those older than 30 days)
Run all operations:
./strawberry-playlist-sync.py -d -s -c -p ~/Music/playlists
Automated mode (no prompts):
./strawberry-playlist-sync.py -s -p ~/Music/playlists -y
Multiple Directories
./strawberry-playlist-sync.py -s -p ~/Music/playlists -p /media/usb/playlists
Command-Line Options
┌─────────────────────────┬─────────────────────────────────────────────────┐
│ Option │ Description │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -d, --check-duplicates │ Find and remove duplicate tracks │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ --fuzzy │ Include fuzzy duplicates in check │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -s, --sync │ Sync database playlists to disk │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -c, --cleanup-backups │ Clean up old backup files │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -p, --playlist-dir PATH │ Playlist folder (can be used multiple times) │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -r, --recursive │ Scan subdirectories for M3U files │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ --add-only │ Only add tracks, preserve existing disk entries │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ --db-path PATH │ Path to strawberry.db (auto-detects if not set) │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -n, --keep-count N │ Backups to keep per playlist (default: 3) │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -a, --max-age DAYS │ Max backup age in days (default: 60) │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ --dry-run │ Preview changes without writing │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -v, --verbose │ Show full track details (with --dry-run) │
├─────────────────────────┼─────────────────────────────────────────────────┤
│ -y, --yes │ Skip confirmation prompts │
└─────────────────────────┴─────────────────────────────────────────────────┘
Never-Sync List
To exclude playlists from syncing (e.g., utility playlists for finding missing metadata):
- During interactive review, when you skip a playlist, you'll be asked if you want to add it to the never-sync list.
- Or manually edit neversync.txt in your playlist folder:
Playlists listed here will be skipped during sync operations.
NoComposerSP
BitrateLessThan129SP
UnratedSP
Desktop Shortcut (Linux)
Create a shell script on your desktop:
#!/bin/bash
Strawberry Playlist Sync
~/.local/share/strawberry/strawberry/strawberry-playlist-sync.py -s -p ~/Music/playlists -r
Save as strawberry-playlist-sync.sh and make executable with chmod +x.
Database Locations
The script auto-detects Strawberry's database in these locations:
- Linux: ~/.local/share/strawberry/strawberry/strawberry.db
- macOS: ~/Library/Application Support/Strawberry/strawberry/strawberry.db
- Windows: ~/AppData/Local/strawberry/strawberry/strawberry.db
Use --db-path to specify a custom location.
Notes
- Safe to run with Strawberry open: The script only reads from the database (except for duplicate removal), so syncing while Strawberry is running is fine. For
duplicate removal, close Strawberry first.
- Backups: Before overwriting any M3U file, a timestamped backup is created in a backups/ subfolder.
- M3U Format: Uses extended M3U with #EXTINF:seconds,Artist - Title lines.
- Path Handling: Automatically converts database file:// URLs to filesystem paths and handles URL-encoded characters.
License
Public domain / CC0. Use however you like.
Created by me and Claude Code tonight.