[GH-ISSUE #29] [Feature Request] Whole Library Lyric Downloader #24

Closed
opened 2026-02-27 04:57:09 +03:00 by kerem · 8 comments
Owner

Originally created by @PandaBear80 on GitHub (Jul 8, 2025).
Original GitHub issue: https://github.com/Googolplexed0/zotify/issues/29

Originally assigned to: @Googolplexed0 on GitHub.

command that scans an existing music library (folder and subfolders) and downloads all missing lyrics files.

Originally created by @PandaBear80 on GitHub (Jul 8, 2025). Original GitHub issue: https://github.com/Googolplexed0/zotify/issues/29 Originally assigned to: @Googolplexed0 on GitHub. command that scans an existing music library (folder and subfolders) and downloads all missing lyrics files.
kerem 2026-02-27 04:57:09 +03:00
Author
Owner

@Googolplexed0 commented on GitHub (Jul 8, 2025):

Maybe. Couldn't this functionality be achieved already by turning on ALWAYS_CHECK_LYRICS, SKIP_EXISTING, SKIP_PREVIOUSLY_DOWNLOADED and then running through the albums/playlists that compose your music library?

<!-- gh-comment-id:3048613342 --> @Googolplexed0 commented on GitHub (Jul 8, 2025): Maybe. Couldn't this functionality be achieved already by turning on ALWAYS_CHECK_LYRICS, SKIP_EXISTING, SKIP_PREVIOUSLY_DOWNLOADED and then running through the albums/playlists that compose your music library?
Author
Owner

@PandaBear80 commented on GitHub (Jul 19, 2025):

Would I have to do that using a link to my Spotify library? I'm wondering if it could work in reverse where the only reference it has to work from is titles of the tracks. I don't have a database of Spotify links for my downloaded library but I do have all the tracks already downloaded.

<!-- gh-comment-id:3092392484 --> @PandaBear80 commented on GitHub (Jul 19, 2025): Would I have to do that using a link to my Spotify library? I'm wondering if it could work in reverse where the only reference it has to work from is titles of the tracks. I don't have a database of Spotify links for my downloaded library but I do have all the tracks already downloaded.
Author
Owner

@PandaBear80 commented on GitHub (Jul 19, 2025):

Maybe. Couldn't this functionality be achieved already by turning on ALWAYS_CHECK_LYRICS, SKIP_EXISTING, SKIP_PREVIOUSLY_DOWNLOADED and then running through the albums/playlists that compose your music library?

If I did this, how would running though the albums/playlists work? Would I manually have to do them all one at a time?

<!-- gh-comment-id:3092393546 --> @PandaBear80 commented on GitHub (Jul 19, 2025): > Maybe. Couldn't this functionality be achieved already by turning on ALWAYS_CHECK_LYRICS, SKIP_EXISTING, SKIP_PREVIOUSLY_DOWNLOADED and then running through the albums/playlists that compose your music library? If I did this, how would running though the albums/playlists work? Would I manually have to do them all one at a time?
Author
Owner

@Googolplexed0 commented on GitHub (Jul 19, 2025):

I'm wondering if it could work in reverse where the only reference it has to work from is titles of the tracks.

Fundamentally, there isn't any reason why it couldn't perform a search based on each track's title. The problem is that wouldn't be reproducible, couldn't guarantee success, and isn't the purpose of this application. This tool exists to take your music from an external source and copy it to your local computer. Working backwards isn't something I want to do (as far as modifying the functionality of the program) and this isn't a lyrics manager (the lyrics are just a nice bonus when downloading some tracks).

I do have all the tracks already downloaded.

Did you download them using this tool or was it done externally? If through this tool, I may still put together a small --verify-library mode that could do something similar to lyric checking using .song_archive/.song_id files. If external, my help won't be too useful.

If I did this, how would running though the albums/playlists work? Would I manually have to do them all one at a time?

You can always create your own simple automation to call this tool for each track/album individually (time consuming but guaranteed accurate) or create something that picks the first search result (completely automatic but likely to mismatch something). Alternatively, you could create one giant playlist on the music platform with everything in your downloaded library you want to download and run the playlist mode on that.

Go into your local copy of the tool, hardcode a skip to always return true (change track.py line 289 to if True:) to never redownload any music, make sure ALWAYS_CHECK_LYRICS is True in your config, and it should always download a lyric file if available.

<!-- gh-comment-id:3092577382 --> @Googolplexed0 commented on GitHub (Jul 19, 2025): > I'm wondering if it could work in reverse where the only reference it has to work from is titles of the tracks. Fundamentally, there isn't any reason why it couldn't perform a search based on each track's title. The problem is that wouldn't be reproducible, couldn't guarantee success, and isn't the purpose of this application. This tool exists to take your music from an external source and copy it to your local computer. Working backwards isn't something I want to do (as far as modifying the functionality of the program) and this isn't a lyrics manager (the lyrics are just a nice bonus when downloading some tracks). > I do have all the tracks already downloaded. Did you download them using this tool or was it done externally? If through this tool, I may still put together a small `--verify-library` mode that could do something _similar_ to lyric checking using .song_archive/.song_id files. If external, my help won't be too useful. > If I did this, how would running though the albums/playlists work? Would I manually have to do them all one at a time? You can always create your own simple automation to call this tool for each track/album individually (time consuming but guaranteed accurate) or create something that picks the first search result (completely automatic but likely to mismatch something). Alternatively, you could create one giant playlist on the music platform with everything in your downloaded library you want to download and run the playlist mode on that. Go into your local copy of the tool, hardcode a skip to always return true (change `track.py` line 289 to ```if True:```) to never redownload any music, make sure ALWAYS_CHECK_LYRICS is True in your config, and it should always download a lyric file if available.
Author
Owner

@PandaBear80 commented on GitHub (Jul 20, 2025):

A lot of the library was downloaded using this tool and that functionality would be super useful but some of it was downloaded using draftkinner's fork of zotify. I'm wondering if it'd still work for that portion of the library though...

<!-- gh-comment-id:3092704768 --> @PandaBear80 commented on GitHub (Jul 20, 2025): A lot of the library was downloaded using this tool and that functionality would be super useful but some of it was downloaded using draftkinner's fork of zotify. I'm wondering if it'd still work for that portion of the library though...
Author
Owner

@Googolplexed0 commented on GitHub (Jul 27, 2025):

@PandaBear80 try out the new v0.9.0, hopefully the implementation works for your mutant library. -v does require that your library be recorded in the global .song_archive (config option DISABLE_SONG_ARCHIVE = False at the time of downloading) to work. Let me know if you encounter any issues.

<!-- gh-comment-id:3124190901 --> @Googolplexed0 commented on GitHub (Jul 27, 2025): @PandaBear80 try out the new v0.9.0, hopefully the implementation works for your mutant library. `-v` does require that your library be recorded in the global `.song_archive` (config option `DISABLE_SONG_ARCHIVE = False` at the time of downloading) to work. Let me know if you encounter any issues.
Author
Owner

@PandaBear80 commented on GitHub (Aug 13, 2025):

@PandaBear80 try out the new v0.9.0, hopefully the implementation works for your mutant library. -v does require that your library be recorded in the global .song_archive (config option DISABLE_SONG_ARCHIVE = False at the time of downloading) to work. Let me know if you encounter any issues.

Will do! Thanks for implementing this!

<!-- gh-comment-id:3184831562 --> @PandaBear80 commented on GitHub (Aug 13, 2025): > [@PandaBear80](https://github.com/PandaBear80) try out the new v0.9.0, hopefully the implementation works for your mutant library. `-v` does require that your library be recorded in the global `.song_archive` (config option `DISABLE_SONG_ARCHIVE = False` at the time of downloading) to work. Let me know if you encounter any issues. Will do! Thanks for implementing this!
Author
Owner

@PandaBear80 commented on GitHub (Oct 17, 2025):

@PandaBear80 try out the new v0.9.0, hopefully the implementation works for your mutant library. -v does require that your library be recorded in the global .song_archive (config option DISABLE_SONG_ARCHIVE = False at the time of downloading) to work. Let me know if you encounter any issues.

I'm hitting an error:

" zotify -v

[∙∙∙] Logging in...                                                             [∙∙∙] Fetching genre information...                                                                                                                     

WARNING: NO GENRES FOUND

Track_Name: Billie Jean

    [∙∙∙] Fetching lyrics...                                                                                                                                
                                                                           Traceback (most recent call last):                                               

File "/home/michael/.local/bin/zotify", line 7, in
sys.exit(main())
~~~~^^
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/main.py", line 119, in main
args.func(args)
~~~~~~~~~^^^^^^
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 321, in client
update_track_metadata(track_ids[i], track_path, tracks[i])
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/track.py", line 160, in update_track_metadata
mismatches = compare_audio_tags(track_path, reliable_tags, unreliable_tags)
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 272, in compare_audio_tags
reliable_tags_onfile, unreliable_tags_onfile = get_audio_tags(track_path)
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 217, in get_audio_tags
genres = conv_genre_format(tags[GENRE].values)
File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 155, in conv_genre_format
return genres[0]
~~~~~~^^^
IndexError: list index out of range"

<!-- gh-comment-id:3413405360 --> @PandaBear80 commented on GitHub (Oct 17, 2025): > [@PandaBear80](https://github.com/PandaBear80) try out the new v0.9.0, hopefully the implementation works for your mutant library. `-v` does require that your library be recorded in the global `.song_archive` (config option `DISABLE_SONG_ARCHIVE = False` at the time of downloading) to work. Let me know if you encounter any issues. I'm hitting an error: " zotify -v [∙∙∙] Logging in... [∙∙∙] Fetching genre information... ### WARNING: NO GENRES FOUND ### ### Track_Name: Billie Jean ### [∙∙∙] Fetching lyrics... Traceback (most recent call last): File "/home/michael/.local/bin/zotify", line 7, in <module> sys.exit(main()) ~~~~^^ File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/__main__.py", line 119, in main args.func(args) ~~~~~~~~~^^^^^^ File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 321, in client update_track_metadata(track_ids[i], track_path, tracks[i]) ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/track.py", line 160, in update_track_metadata mismatches = compare_audio_tags(track_path, reliable_tags, unreliable_tags) File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 272, in compare_audio_tags reliable_tags_onfile, unreliable_tags_onfile = get_audio_tags(track_path) ~~~~~~~~~~~~~~^^^^^^^^^^^^ File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 217, in get_audio_tags genres = conv_genre_format(tags[GENRE].values) File "/home/michael/.local/share/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/utils.py", line 155, in conv_genre_format return genres[0] ~~~~~~^^^ IndexError: list index out of range"
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/zotify#24
No description provided.