Hey guys i have been using Navidrome to stream my music from my server and its been amazing. I primarily use YT Music because of discoverability so I have all of my “primary” playlists (about 8 of them really, but supporting a somewhat arbitrary limit would be nice) in YouTube.
Im looking for an automated way to download the music and keep my navidrome instance updated with a couple playlists. I started working on some Python script to handle it, but its just not working super well so i would prefer to use someone elses solution haha.
Anyone have any good recommendations? I tried this one but I couldn’t actually find the music and it seems to only support one playlist at a time. It would also be nice to download the album art and set some ID3 tags too
Yt-dlp is the gold standard for that.
https://github.com/yt-dlp/yt-dlp
Tag cleanup and album art are their own beast that you’ll wanna tackle post-download, but beets is another gold standard tool that can help with that layer.
Every single tool that downloads from YouTube is just a yt-dlp wrapper 😀
If you prefer Rust, yaydl (disclosure: I wrote it) would be an alternative to yt-dlp. (Patches welcome - right now, I much depend on Invidious to get YouTube contents.)
+1 for Beets - awesome software!
Yeah I am using yt-dlp to download the music, and I can set that on a cronjob no problem.
I am specifically asking for better downloading (I don’t want just the raw YouTube title most of the time), album art, and ID3 tagging. But that beets.io thing looks super cool! I might integrate that into my existing python scripting instead of trying to build it all out myself
Download with yt-dlp. All of it. Even into a single folder if that’s easier.
Then run it all through Picard and that’ll do everything else for you - albumart, metadata, folders, filenames, the lot.
Anything that Picard doesn’t know about, enter it into the MusicBrainz db to give back to the community.
Done.
Just to throw out an easy option: if the music is well-labeled on Youtube, you can get pretty close to that full suite with just yt-dlp by using
--embed-thumbnail
as a stand-in for album art, dumping your files with an “Artist - track - album” naming structure using the--output-template
flag — then using an awk or python script as a second pass to add the artist/track/album names to each file as tags.E: and in case it isn’t self-evident, you don’t have to give yt-dlp a URL for each track; it’ll work fine with a playlist URL.
Haha unfortunately the music on YouTube is not especially well managed. Ive been using YouTube for music for a long time so a lot of my music is uploaded by Vevo or “{Artist} - Topic” and stuff like that. Plus (IIRC) YouTube music doesn’t give things like what album a song is from or when it was released
JDownloader is the best for downloading anything from YouTube. It may also support YouTube Music