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.