Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OGG Cover Art en Lyrics Not embedding with latest DEV rease AppImage and Self Compile from Latest Source #13

Open
Tribalwarfare opened this issue Oct 2, 2024 · 7 comments

Comments

@Tribalwarfare
Copy link

Tribalwarfare commented Oct 2, 2024

Version: Latest DEV release/Source Tree and AppImage.

Issue: .ogg format cover art,song info and lyrics still not embedding.

Here are logs dumps from console:

[2024-10-03 11:36:47,123 :: gui.main_ui :: gui/mainui.py -> 567:__generate_users_table() :: INFO] -> Accounts table was populated !
[2024-10-03 11:36:47,129 :: gui.main_ui :: gui/mainui.py -> 576: __rebuild_threads() :: INFO] -> Spawning DL thread using session : 3705b0b3-dcd8-4dac-be77-232f8f70fc62
[2024-10-03 11:36:47,130 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 359: run() :: INFO] -> Download worker SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 is running
[2024-10-03 11:37:10,172 :: gui.main_ui :: gui/mainui.py -> 1020:__get_search_results() :: INFO] -> Search clicked with value with url https://open.spotify.com/track/6mON860SlvCL3PTWBjVTQj?si=2d26e171a9184d1c
[2024-10-03 11:37:10,173 :: gui.main_ui :: gui/mainui.py -> 1066: __download_by_url() :: INFO] -> URL download clicked with value https://open.spotify.com/track/6mON860SlvCL3PTWBjVTQj?si=2d26e171a9184d1c
[2024-10-03 11:37:10,173 :: utils :: utils/utils.py -> 115:regex_input_for_urls() :: INFO] -> Parsing url 'https://open.spotify.com/track/6mON860SlvCL3PTWBjVTQj?si=2d26e171a9184d1c'
[2024-10-03 11:37:10,173 :: utils :: utils/utils.py -> 212: get_url_data() :: INFO] -> Parse result for url 'https://open.spotify.com/track/6mON860SlvCL3PTWBjVTQj?si=2d26e171a9184d1c'-> track, 6mON860SlvCL3PTWBjVTQj
[2024-10-03 11:37:10,173 :: gui.main_ui :: gui/mainui.py -> 1207: __send_to_pqp() :: INFO] -> Prepared media for parsing, adding to PQP queue !
[2024-10-03 11:37:10,173 :: gui.main_ui :: gui/mainui.py -> 1087: __download_by_url() :: INFO] -> URL "https://open.spotify.com/track/6mON860SlvCL3PTWBjVTQj?si=2d26e171a9184d1c" added to parsing queue
[2024-10-03 11:37:10,174 :: worker.utility :: worker/utility.py -> 98: run() :: INFO] -> <librespot.core.Session object at 0x7f81fb2868a0>
[2024-10-03 11:37:10,399 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Die Piesangskille"; Allow path separators: False
[2024-10-03 11:37:10,399 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Almal Gly"; Allow path separators: False
[2024-10-03 11:37:10,399 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Inge"; Allow path separators: False
[2024-10-03 11:37:10,399 :: worker.utility :: worker/utility.py -> 69: enqueue_tracks() :: INFO] -> PQP parsing Inge:6mON860SlvCL3PTWBjVTQj <-> track item: Inge:6mON860SlvCL3PTWBjVTQj
[2024-10-03 11:37:10,399 :: worker.utility :: worker/utility.py -> 224: run() :: INFO] -> Finished parsing this item !
[2024-10-03 11:37:10,399 :: worker.utility :: worker/utility.py -> 91: run() :: INFO] -> Waiting for new item to parse
[2024-10-03 11:37:10,876 :: spotutils :: utils/spotify.py -> 60:check_if_media_in_library() :: INFO] -> Checking if item is in library: <Response [200]>
[2024-10-03 11:37:10,877 :: gui.main_ui :: gui/mainui.py -> 488:__add_item_to_downloads() :: INFO] -> Adding item to download queue -> media_type:track, media_id: 6mON860SlvCL3PTWBjVTQj, extra_path:, extra_path_as_root: False, Prefix value: ''
[2024-10-03 11:37:10,877 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 373: run() :: INFO] -> Processing download for track by id '6mON860SlvCL3PTWBjVTQj', Attempt: 0/3
[2024-10-03 11:37:10,878 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Die Piesangskille"; Allow path separators: False
[2024-10-03 11:37:10,878 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Almal Gly"; Allow path separators: False
[2024-10-03 11:37:10,878 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Inge"; Allow path separators: False
[2024-10-03 11:37:13,721 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 197: download_track() :: WARNING] -> Force raw is disabled for track by id '6mON860SlvCL3PTWBjVTQj', media converting and tagging will be done !
[2024-10-03 11:37:13,721 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 201: download_track() :: INFO] -> Downloaded track by id '6mON860SlvCL3PTWBjVTQj'
[2024-10-03 11:37:13,721 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 204: download_track() :: INFO] -> Fetching lyrics for track id: 6mON860SlvCL3PTWBjVTQj, True
[2024-10-03 11:37:13,995 :: spotutils :: utils/spotify.py -> 160: get_track_lyrics() :: ERROR] -> Failed to get lyrics for track id: 6mON860SlvCL3PTWBjVTQj,
[2024-10-03 11:38:39,148 :: gui.main_ui :: gui/mainui.py -> 1020:__get_search_results() :: INFO] -> Search clicked with value with url https://open.spotify.com/track/1AG7YrtmqKDQTe3wpBXKhp?si=d07bb34f5db14b9a
[2024-10-03 11:38:39,148 :: gui.main_ui :: gui/mainui.py -> 1066: __download_by_url() :: INFO] -> URL download clicked with value https://open.spotify.com/track/1AG7YrtmqKDQTe3wpBXKhp?si=d07bb34f5db14b9a
[2024-10-03 11:38:39,148 :: utils :: utils/utils.py -> 115:regex_input_for_urls() :: INFO] -> Parsing url 'https://open.spotify.com/track/1AG7YrtmqKDQTe3wpBXKhp?si=d07bb34f5db14b9a'
[2024-10-03 11:38:39,148 :: utils :: utils/utils.py -> 212: get_url_data() :: INFO] -> Parse result for url 'https://open.spotify.com/track/1AG7YrtmqKDQTe3wpBXKhp?si=d07bb34f5db14b9a'-> track, 1AG7YrtmqKDQTe3wpBXKhp
[2024-10-03 11:38:39,148 :: gui.main_ui :: gui/mainui.py -> 1207: __send_to_pqp() :: INFO] -> Prepared media for parsing, adding to PQP queue !
[2024-10-03 11:38:39,148 :: gui.main_ui :: gui/mainui.py -> 1087: __download_by_url() :: INFO] -> URL "https://open.spotify.com/track/1AG7YrtmqKDQTe3wpBXKhp?si=d07bb34f5db14b9a" added to parsing queue
[2024-10-03 11:38:39,148 :: worker.utility :: worker/utility.py -> 98: run() :: INFO] -> <librespot.core.Session object at 0x7f81fb2868a0>
[2024-10-03 11:38:41,558 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "League of Legends"; Allow path separators: False
[2024-10-03 11:38:41,558 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Steve Aoki"; Allow path separators: False
[2024-10-03 11:38:41,558 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "REMIX RUMBLE (Steve Aoki Remix)"; Allow path separators: False
[2024-10-03 11:38:41,558 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "REMIX RUMBLE"; Allow path separators: False
[2024-10-03 11:38:41,558 :: worker.utility :: worker/utility.py -> 69: enqueue_tracks() :: INFO] -> PQP parsing REMIX RUMBLE:1AG7YrtmqKDQTe3wpBXKhp <-> track item: REMIX RUMBLE:1AG7YrtmqKDQTe3wpBXKhp
[2024-10-03 11:38:41,559 :: worker.utility :: worker/utility.py -> 224: run() :: INFO] -> Finished parsing this item !
[2024-10-03 11:38:41,559 :: worker.utility :: worker/utility.py -> 91: run() :: INFO] -> Waiting for new item to parse
[2024-10-03 11:38:42,109 :: spotutils :: utils/spotify.py -> 60:check_if_media_in_library() :: INFO] -> Checking if item is in library: <Response [200]>
[2024-10-03 11:38:42,110 :: gui.main_ui :: gui/mainui.py -> 488:__add_item_to_downloads() :: INFO] -> Adding item to download queue -> media_type:track, media_id: 1AG7YrtmqKDQTe3wpBXKhp, extra_path:, extra_path_as_root: False, Prefix value: ''
[2024-10-03 11:38:42,110 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 373: run() :: INFO] -> Processing download for track by id '1AG7YrtmqKDQTe3wpBXKhp', Attempt: 0/3
[2024-10-03 11:38:42,111 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "League of Legends"; Allow path separators: False
[2024-10-03 11:38:42,111 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Steve Aoki"; Allow path separators: False
[2024-10-03 11:38:42,111 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "REMIX RUMBLE (Steve Aoki Remix)"; Allow path separators: False
[2024-10-03 11:38:42,111 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "REMIX RUMBLE"; Allow path separators: False
[2024-10-03 11:38:44,442 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 197: download_track() :: WARNING] -> Force raw is disabled for track by id '1AG7YrtmqKDQTe3wpBXKhp', media converting and tagging will be done !
[2024-10-03 11:38:44,442 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 201: download_track() :: INFO] -> Downloaded track by id '1AG7YrtmqKDQTe3wpBXKhp'
[2024-10-03 11:38:44,442 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 204: download_track() :: INFO] -> Fetching lyrics for track id: 1AG7YrtmqKDQTe3wpBXKhp, True
[2024-10-03 11:38:44,962 :: spotutils :: utils/spotify.py -> 157: get_track_lyrics() :: WARNING] -> Failed to get lyrics for track id: 1AG7YrtmqKDQTe3wpBXKhp, statucode: 404, Text:
Failed reading packet! [Errno 104] Connection reset by peer
Exception in thread session-packet-receiver:
Traceback (most recent call last):
File "librespot/core.py", line 1644, in run
File "librespot/crypto.py", line 58, in receive_encoded
File "librespot/core.py", line 1548, in read
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "threading.py", line 1075, in _bootstrap_inner
File "threading.py", line 1012, in run
File "librespot/core.py", line 1657, in run
File "librespot/core.py", line 959, in reconnect
File "librespot/core.py", line 1520, in create
ConnectionRefusedError: [Errno 111] Connection refused
[2024-10-03 11:45:12,160 :: gui.main_ui :: gui/mainui.py -> 1020:__get_search_results() :: INFO] -> Search clicked with value with url https://open.spotify.com/track/6qn9YLKt13AGvpq9jfO8py?si=5b10107a9a014cb7
[2024-10-03 11:45:12,160 :: gui.main_ui :: gui/mainui.py -> 1066: __download_by_url() :: INFO] -> URL download clicked with value https://open.spotify.com/track/6qn9YLKt13AGvpq9jfO8py?si=5b10107a9a014cb7
[2024-10-03 11:45:12,160 :: utils :: utils/utils.py -> 115:regex_input_for_urls() :: INFO] -> Parsing url 'https://open.spotify.com/track/6qn9YLKt13AGvpq9jfO8py?si=5b10107a9a014cb7'
[2024-10-03 11:45:12,160 :: utils :: utils/utils.py -> 212: get_url_data() :: INFO] -> Parse result for url 'https://open.spotify.com/track/6qn9YLKt13AGvpq9jfO8py?si=5b10107a9a014cb7'-> track, 6qn9YLKt13AGvpq9jfO8py
[2024-10-03 11:45:12,160 :: gui.main_ui :: gui/mainui.py -> 1207: __send_to_pqp() :: INFO] -> Prepared media for parsing, adding to PQP queue !
[2024-10-03 11:45:12,160 :: gui.main_ui :: gui/mainui.py -> 1087: __download_by_url() :: INFO] -> URL "https://open.spotify.com/track/6qn9YLKt13AGvpq9jfO8py?si=5b10107a9a014cb7" added to parsing queue
[2024-10-03 11:45:12,160 :: worker.utility :: worker/utility.py -> 98: run() :: INFO] -> <librespot.core.Session object at 0x7f81fb2868a0>
[2024-10-03 11:45:12,161 :: worker.utility :: worker/utility.py -> 227: run() :: ERROR] -> Item parsing failed.. Connection error ! Trying to re init parsing account session !
[2024-10-03 11:45:13,501 :: utils :: utils/utils.py -> 35: re_init_session() :: INFO] -> Connectivity check done ! Status code "200"
[2024-10-03 11:45:16,112 :: worker.utility :: worker/utility.py -> 91: run() :: INFO] -> Waiting for new item to parse
[2024-10-03 11:45:16,112 :: worker.utility :: worker/utility.py -> 98: run() :: INFO] -> <librespot.core.Session object at 0x7f81fb208b00>
[2024-10-03 11:45:17,622 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Rihanna"; Allow path separators: False
[2024-10-03 11:45:17,622 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Calvin Harris"; Allow path separators: False
[2024-10-03 11:45:17,622 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Talk That Talk"; Allow path separators: False
[2024-10-03 11:45:17,622 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "We Found Love"; Allow path separators: False
[2024-10-03 11:45:17,622 :: worker.utility :: worker/utility.py -> 69: enqueue_tracks() :: INFO] -> PQP parsing We Found Love:6qn9YLKt13AGvpq9jfO8py <-> track item: We Found Love:6qn9YLKt13AGvpq9jfO8py
[2024-10-03 11:45:17,622 :: worker.utility :: worker/utility.py -> 224: run() :: INFO] -> Finished parsing this item !
[2024-10-03 11:45:17,622 :: worker.utility :: worker/utility.py -> 91: run() :: INFO] -> Waiting for new item to parse
[2024-10-03 11:45:18,053 :: spotutils :: utils/spotify.py -> 60:check_if_media_in_library() :: INFO] -> Checking if item is in library: <Response [200]>
[2024-10-03 11:45:18,054 :: gui.main_ui :: gui/mainui.py -> 488:__add_item_to_downloads() :: INFO] -> Adding item to download queue -> media_type:track, media_id: 6qn9YLKt13AGvpq9jfO8py, extra_path:, extra_path_as_root: False, Prefix value: ''
[2024-10-03 11:45:18,054 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 373: run() :: INFO] -> Processing download for track by id '6qn9YLKt13AGvpq9jfO8py', Attempt: 0/3
[2024-10-03 11:45:18,054 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Rihanna"; Allow path separators: False
[2024-10-03 11:45:18,054 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Calvin Harris"; Allow path separators: False
[2024-10-03 11:45:18,055 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "Talk That Talk"; Allow path separators: False
[2024-10-03 11:45:18,055 :: spotutils :: utils/spotify.py -> 178: sanitize_data() :: INFO] -> Sanitising string: "We Found Love"; Allow path separators: False
[2024-10-03 11:45:20,214 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 197: download_track() :: WARNING] -> Force raw is disabled for track by id '6qn9YLKt13AGvpq9jfO8py', media converting and tagging will be done !
[2024-10-03 11:45:20,214 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 201: download_track() :: INFO] -> Downloaded track by id '6qn9YLKt13AGvpq9jfO8py'
[2024-10-03 11:45:20,214 :: worker.downloader.SESSION_DL_TH-3705b0b3-dcd8-4dac-be77-232f8f70fc62 :: worker/downloader.py -> 204: download_track() :: INFO] -> Fetching lyrics for track id: 6qn9YLKt13AGvpq9jfO8py, True
[2024-10-03 11:45:20,628 :: spotutils :: utils/spotify.py -> 160: get_track_lyrics() :: ERROR] -> Failed to get lyrics for track id: 6qn9YLKt13AGvpq9jfO8py,

PS: Existing file check and changes work well!

@justin025
Copy link
Owner

justin025 commented Oct 3, 2024

There is quite a bit of history surrounding with ogg cover art. In an mp3 for instance you must tag the artist tag as 'ARTIST' or cover as 'APIC' and all music players will pick that up, but with ogg files there is no such standard. Take a look at the image below for instance, although my file manager and my metadata editor pick up the cover art, vlc does not.

2024-10-03_02-41

There are a number of things you could consider, I do know that almost every music player supports leaving a file in the same directory called 'cover.png/jpeg' which will override any embedded thumbnails ('save album cover' in advanced settings will do this for you). You could also try changing the thumbnail format from png to some other format as some music players support jpeg but not png and vice versa. In summary, ogg files do not have a solid standard like id3 for mp3s.

As for the lyrics, I knew someone would find this issue eventually. It requires a premium account and one of my friends running the family plan I was using stopped using spotify mid development of this feature, I guess I'll have to make a free trial account now. I'll take a look at the lyrics issue sometime tomorrow.

@justin025
Copy link
Owner

justin025 commented Oct 3, 2024

Lyrics issue is fixed in the latest dev appimage, I also changed the cover art format for flac and ogg (not sure if this will fix your problem). Let me know if it works.

https://github.com/justin025/onthespot/releases/dev

@justin025
Copy link
Owner

justin025 commented Oct 6, 2024

Fixes should be bundled in v0.7.1, if the problem persists feel free to reopen the issue
https://github.com/justin025/onthespot/releases/latest

@Tribalwarfare
Copy link
Author

Hi, Sorry for the wait but I have completed a fresh new round of testing with v0.7.1 app image.

A couple of things:

  1. .OGG Cover art and Lyric embeds still do not work.
    image

  2. .MP3 format embeds cover art, can download lyrics file but does not embed lyrics inside .mp3 file:

image

I have attached the settings.json file and one mp3 session log and one session log for one mp3 and .ogg attempton the same song:
config.json
onthespot_mp3_sessions.log
onthespot_ogg.log

Raw Console launch output .txt dump:
raw_console.txt

Here is a screenshot from an .ogg file with lyrics and cover embedded taken with Spytify, maybe it helps figure the storage out:

image
image

I hope this helps narrow down the issue.

@justin025 justin025 reopened this Oct 17, 2024
@justin025
Copy link
Owner

File "/tmp/.mount_OnTheSPjaehe/opt/python3.12/lib/python3.12/site-packages/onthespot/worker/downloader.py", line 215, in download_track
set_audio_tags(filename, {'lyrics': lyrics}, trk_track_id_str)
File "/tmp/.mount_OnTheSPjaehe/opt/python3.12/lib/python3.12/site-packages/onthespot/utils/spotify.py", line 443, in set_audio_tags
if config.get("embed_explicit") and metadata['explicit']:
~~~~~~~~^^^^^^^^^^^^
KeyError: 'explicit'

The application weirdly does not tag this song because the explicit tag is missing on spotify's side. Instead of doing metadata['explicit'] metadata is now collected with metadata.get('explicit', '') meaning that if the value is missing it is set to None

This should (hopefully) be fixed in the latest release, I don't have an appimage yet but you can run the build script and it should compile everything for you on linux.

If this still does not work please send me your distro's iso and the details of your userspace and I will try to run them on this side.

@Tribalwarfare
Copy link
Author

Tribalwarfare commented Dec 5, 2024

Hi Just a small Update:

Tested latest Build v1.0.3 Version on Windows 11:

MP3:

  • MP3 embed cover arts works.
    -Lyrics are hit and MISS.

RAW OGG format:

  • Embed Cover does not work.
    -Lyrics are hit and MISS.
    -Metadata missing.

All the best :)

@justin025
Copy link
Owner

justin025 commented Dec 12, 2024

By raw ogg format do you mean you have 'Raw Media Format' selected? Raw media format does not embed anything as it just dumps the file from spotify and quits. As for the lyrics they ping the spotify endpoint and if available then they are downloaded, perhaps its possible some songs don't have lyrics?

There have been quite a few people who have been successful with ogg formats in the discord, perhaps you can ask around there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants