Munager is a music library management helper that have several functions:
- Automatically search for lyric files on online services like Netease Music, etc.
- Syncs your music library between devices with customizable transcoding rules.
If you wanna compile yourself, just clone this project and run go build ..
If you just want to run the binary, find it in Releases or Github Actions Artifacts for CI Build.
Munager is quite self-explained. Use --help for explainations.
Type munager lyric for help. It have several subcommand which does:
queryQuerys lyric for given keyword.fetchFetches lyrics for every songs in provided path.
Type munager sync for help. It have several subcommands which does:
clientStarts a client. It can automatically discover server side and syncs local music library with server side. You can also transcode your received songs to another format (FFmpeg) using--transcodeflag.serverStarts a server. It broadcasts its existance to local network, and serves local music library as you expected.
Now you have an folder which contains some songs:
THE BOOK
├── 01. Epilogue.flac
├── 02. アンコール.flac
├── 03. ハルジオン.flac
├── 04. あの夢をなぞって.flac
├── 05. たぶん.flac
├── 06. 群青.flac
├── 07. ハルカ.flac
├── 08. 夜に駆ける.flac
├── 09. Prologue.flac
└── cover.png
1 directory, 10 filesTo fetch lyric for it, just run
$ munager lyric fetch --path="./THE BOOK/"
2023-07-14 09:43:53 [I] Found 9 songs without lyrics
100% |███████████████████████████████████████████████████████████████████████████████████████████| (9/9, 7 it/s)
2023-07-14 09:43:55 [I] Done!
Then you should see some .lrc files in your sweet folder.
THE BOOK
├── 01. Epilogue.flac
├── 01. Epilogue.lrc
├── 02. アンコール.flac
├── 02. アンコール.lrc
├── 03. ハルジオン.flac
├── 03. ハルジオン.lrc
├── 04. あの夢をなぞって.flac
├── 04. あの夢をなぞって.lrc
├── 05. たぶん.flac
├── 05. たぶん.lrc
├── 06. 群青.flac
├── 06. 群青.lrc
├── 07. ハルカ.flac
├── 07. ハルカ.lrc
├── 08. 夜に駆ける.flac
├── 08. 夜に駆ける.lrc
├── 09. Prologue.flac
├── 09. Prologue.lrc
└── cover.png
1 directory, 19 filesImagine you have two devices which contains music library that is not synced.
server
└── THE BOOK
├── 01. Epilogue.flac
├── 01. Epilogue.lrc
├── 02. アンコール.flac
├── 02. アンコール.lrc
├── 03. ハルジオン.flac
├── 03. ハルジオン.lrc
├── 04. あの夢をなぞって.flac
├── 04. あの夢をなぞって.lrc
├── 05. たぶん.flac
├── 05. たぶん.lrc
├── 06. 群青.flac
├── 06. 群青.lrc
├── 07. ハルカ.flac
├── 07. ハルカ.lrc
> ├── 08. 夜に駆ける.flac
> ├── 08. 夜に駆ける.lrc
> ├── 09. Prologue.flac
> ├── 09. Prologue.lrc
└── cover.png
client
└── THE BOOK
├── 01. Epilogue.flac
├── 01. Epilogue.lrc
├── 02. アンコール.flac
├── 02. アンコール.lrc
├── 03. ハルジオン.flac
├── 03. ハルジオン.lrc
├── 04. あの夢をなぞって.flac
├── 04. あの夢をなぞって.lrc
├── 05. たぶん.flac
├── 05. たぶん.lrc
├── 06. 群青.flac
├── 06. 群青.lrc
├── 07. ハルカ.flac
├── 07. ハルカ.lrc
└── cover.png
4 directories, 34 filesOn server side, just run munager sync server, and on client side, just run munager sync client. After they do their stuff, the music library should be synced.
Adding a --transcode flag can also achieve this:
server
└── THE BOOK
├── 01. Epilogue.flac
├── 02. アンコール.flac
├── 03. ハルジオン.flac
├── 04. あの夢をなぞって.flac
├── 05. たぶん.flac
├── 06. 群青.flac
├── 07. ハルカ.flac
├── 08. 夜に駆ける.flac
├── 09. Prologue.flac
└── cover.png
client
└── THE BOOK
├── 01. Epilogue.opus
├── 02. アンコール.opus
├── 03. ハルジオン.opus
├── 04. あの夢をなぞって.opus
├── 05. たぶん.opus
├── 06. 群青.opus
├── 07. ハルカ.opus
├── 08. 夜に駆ける.opus
├── 09. Prologue.opus
└── cover.png
4 directories, 20 files
- Netease API is somehow encrypted, I took some code from mxget for reference.