MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
iTunes·RhythmBox·Amarok·Windows Media Player 간 평점·재생횟수를 양방향 동기화하는 도구
A tool that transfers ratings and playcounts between iTunes, RhythmBox, Amarok, and Windows Media Player, with two-way synchronization support.
미디어Python · HTMLGitHub @esanbock온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기This little piece of insanity is a tool that transfers your ratings and playcounts between various players (iTunes, RhythmBox, and Amarok). Supports two-way synchronization in iTunes Mac, RhythmBox, Amarok, and Windows Media Player
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Transfer your ratings and play counts between music players: iTunes, Rhythmbox, Amarok, and Windows Media Player, with read-only support for Amazon Music.
File inputs are detected automatically: an iTunes XML library or a Rhythmbox rhythmdb.xml is recognized from its contents.
• Python 3
• lxml (all XML-based backends)
Extra packages are needed only for the backends you use:
This installs lxml plus the iTunes/WMP packages for your platform. The Amarok and Amazon Music packages are optional; uncomment them in requirements.txt (or pip install them directly) if you need them.README 전문 보기 ↗Transfer your ratings and play counts between music players: iTunes, Rhythmbox, Amarok, and Windows Media Player, with read-only support for Amazon Music.
| Player | How to specify it | Read | Write |
|---|---|---|---|
iTunes library XML (iTunes Music Library.xml) | path to the file | ✅ | ✅ |
Rhythmbox (rhythmdb.xml) | path to the file | ✅ | ✅ |
| iTunes on macOS (running instance) | itunes | ✅ | ✅ |
| iTunes on Windows (COM API) | itunes | ✅ | ✅ |
| Amarok (MySQL database) | mysql plus the Amarok options | ✅ | ✅ |
| Windows Media Player | wmp | ✅ | ✅ |
| Amazon Music desktop app (Windows) | amazonmusic | ✅ | ❌ |
File inputs are detected automatically: an iTunes XML library or a Rhythmbox rhythmdb.xml is recognized from its contents.
Extra packages are needed only for the backends you use:
| Backend | Package | Installed by requirements.txt |
|---|---|---|
| iTunes on macOS | pyobjc-framework-ScriptingBridge | Yes, on macOS |
| iTunes on Windows, Windows Media Player | pywin32 | Yes, on Windows |
| Amarok | mysqlclient (provides MySQLdb) | No, optional |
| Amazon Music | rleveldb | No, optional |
git clone https://github.com/esanbock/ITunesToRhythm.git
cd ITunesToRhythm
pip install -r requirements.txt
This installs lxml plus the iTunes/WMP packages for your platform. The Amarok and Amazon Music packages are optional; uncomment them in requirements.txt (or pip install them directly) if you need them.
python iTunesToRhythm.py [options] <source> <destination>
<source> and <destination> can each be a file path or one of itunes, mysql, wmp, amazonmusic.
For every song in the destination, the tool looks for the matching song in the source, by file size by default, then copies the rating and play count across.
Nothing is written unless you pass
-w. Without it the tool runs as a dry run and prints what it would change. Back up your library files before writing to them.
| Option | Description |
|---|---|
-w, --writechanges | Write changes to the destination (otherwise a dry run) |
-a, --disambiguate | Prompt you to pick the right song when a match is ambiguous |
-c, --confirm | Pause after every match for confirmation |
-l, --fastandloose | Accept a single file-size match even if the titles differ |
--useSongTitle | Match songs by title instead of file size |
--noratings | Don't update ratings |
--noplaycounts | Don't update play counts |
--twoway | Sync both directions; for each song, the copy with the higher play count wins |
--dateadded | Also copy the "date added" field (iTunes to Rhythmbox only) |
--playdate | Also copy the "last played" date (between iTunes library files and Rhythmbox only) |
Amarok connection options, used with mysql:
| Option | Description |
|---|---|
-s, --server | MySQL server host name |
-d, --database | Amarok database name |
-u, --username | Database user |
-p, --password | Database password |
Copy or mount your music somewhere Rhythmbox can see it. The folder structure doesn't matter.
Import the music into Rhythmbox, then close Rhythmbox so it doesn't overwrite the database.
Copy your iTunes Music Library.xml to the Linux machine.
Do a dry run and review the output:
python iTunesToRhythm.py -a "iTunes Music Library.xml" ~/.local/share/rhythmbox/rhythmdb.xml
Run it again with -w to save the changes:
python iTunesToRhythm.py -w -a "iTunes Music Library.xml" ~/.local/share/rhythmbox/rhythmdb.xml
At the end of each run a summary shows how many songs matched fully, partially, ambiguously, or not at all.
Copy play counts (not ratings) from Rhythmbox to an Amarok MySQL database:
python iTunesToRhythm.py -w --noratings -a ~/.local/share/rhythmbox/rhythmdb.xml mysql -s musicserver -d amarok -u amarokuser -p verysecret
Copy ratings and play counts from Amarok into iTunes on a Mac:
python iTunesToRhythm.py -w mysql -s musicserver -d amarok -u amarokuser -p verysecret itunes
Sync iTunes and Windows Media Player both ways on Windows:
python iTunesToRhythm.py -w --twoway itunes wmp
--useSongTitle.rhythmdb.xml, or it may overwrite your changes when it exits.Each backend module can also be run on its own to print a library's contents, which helps when debugging matches:
python dumpitunes.py "iTunes Music Library.xml"
python dumpAmazonMusic.py
The tests use only the standard library and small sample libraries in tests/fixtures, so they never touch your real music libraries:
python -m unittest discover -s tests
Code is formatted with Black (settings in pyproject.toml): python -m black .
GNU General Public License v3. See LICENSE.txt.
Found a bug or have a feature request? Open an issue.