Music Sync is a minimal macOS menu bar helper that keeps a local Swinsian library mirrored to a remote music share via rsync. The app adds a 🎵 icon to the menu bar; use it to trigger a sync on demand, review the last sync time, or open the configuration file for quick tweaks.
- macOS with the built-in
rsyncbinary available. - Python 3.9+.
- A working
launchctlenvironment if you want the app to run automatically. - Access to the remote host defined in your
~/.music-sync/config.json.
- Clone the repository and move into it:
git clone <repo-url> cd music-sync
- Create the virtual environment and install dependencies:
python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install rumps - Prime the configuration file by starting the app once:
This writes
python music_sync.py
~/.music-sync/config.json. Adjust the settings to match your library root, remote server credentials, and Plex preferences.
- Menu bar controls:
- Sync Now kicks off
rsyncusing the configured paths. - Last Sync updates after each successful transfer.
- View Log… launches Terminal and runs
tail -f ~/.music-sync/debug.logfor live updates.
- Sync Now kicks off
- Logs and stdout/stderr land in
~/.music-sync/(seedebug.log,stdout.log,stderr.log) to help diagnose issues.
- Edit
com.user.musicsync.plistso theProgramArgumentsentry points at your checkout and user path. - Copy it into
~/Library/LaunchAgents/. - Load the agent:
Reload after any changes with
launchctl load ~/Library/LaunchAgents/com.user.musicsync.plistlaunchctl unloadfollowed bylaunchctl load.
The agent runs launch.sh, which activates the virtual environment and executes music_sync.py. Update launch.sh if you relocate the project.
- The sync button stays disabled: check
~/.music-sync/debug.logfor the latest stack trace. rsyncfailures generally stem from SSH connectivity; verify keys or credentials outside the app first.- If the app shows a dock icon, ensure
LSUIElementremains set totruein the LaunchAgent plist.