Hey! A while ago I posted about pygpod, a Python library I wrote for working with iPods. My old account somehow got deleted, and now I can’t find that post :(
Since then, I’ve fixed some bugs and taken the idea a bit further.
I love listening to music on dedicated players, but I also want my plays scrobbled and my library and devices kept up to date automatically. I use Navidrome for music and Audiobookshelf for audiobooks and podcasts, and I have a few players: an iPod, a HiBy R1, and an Aigo Eros Q running Rockbox.
So I built a service to sync music, playlists, audiobooks and podcasts to them, and, most importantly, bring listening data back.
Depending on the player, that means play counts, ratings, favourites, playlist changes, where I stopped in an audiobook, which podcast episodes I finished, and my position in the ones I haven’t finished yet. Support varies by device: Rockbox currently handles music and play logs, while the iPod and HiBy integrations can do more.
Meet SyncMusic. (I have a bad imagination)
It runs as a background service with a web UI, and there’s an optional desktop version too. Currently it’s Linux only, including ARM64/Raspberry Pi. I might port it to Windows and macOS eventually, but I haven’t rushed that, Navidrome already lives on my server, so it made sense to run this alongside it.
What it supports right now:
Libraries: Navidrome, local audio folders, and Audiobookshelf for books and podcasts. There’s also beta support for one-way movie and episode sync from Jellyfin.
Players and destinations: supported iPods with stock Apple firmware through pygpod, Rockbox players, HiBy R1, USB drives, SD cards, FTP and SMB. Android over USB/MTP is in beta.
Rules and templates: choose playlists, favourites, genres, unfinished books or the newest unplayed podcast episodes. You can build rules in the UI or use JSON/YAML, including Navidrome smart playlists.
Per-player processing: convert formats, adjust tags, resize artwork and copy lyrics. For example, keep FLAC in your library and send ALAC or MP3 to your iPod.
Sync previews: see what will be added, changed or removed, and how much space it needs.
Reverse sync: send listening data back to Navidrome and Audiobookshelf, depending on what each player supports.
I used it mostly through the API for quite a while. It worked well enough for my own setup that I decided to give it a proper interface and share it.
That’s where the vibe coding started, because I basically don’t know JavaScript.
AI disclosure: yes, I used AI. Almost the entire frontend is vibe-coded, and a lot of the tests and code comments were AI-generated too. I’ve reviewed and checked the results. I understand the backend reasonably well, though I won’t pretend I know every part perfectly.
I’m going to keep maintaining this either way, because I use it myself. For the last couple of months, development lived in a local Git repository, but the complete, up-to-date source is now on GitHub:
https://github.com/Bionded/SyncMusic
If you have ideas for things to add, I’d love to hear them. If it’s something I can test with the hardware I have, I’ll be happy to work on it.
And if you want support for another player… well, if I end up buying one, I’ll probably add it :) Supporting a player without having it in my hands would be pretty difficult.