[{"data":1,"prerenderedAt":93},["ShallowReactive",2],{"project-playvault":3},{"id":4,"title":5,"body":6,"date":67,"description":68,"extension":69,"image":70,"imageAlt":71,"imageCaption":71,"imageHeight":72,"imageWidth":72,"liveLabel":19,"liveUrl":16,"meta":73,"navigation":74,"path":75,"published":74,"seo":76,"stack":77,"stats":83,"status":90,"stem":91,"tags":72,"updated":72,"__hash__":92},"projects\u002Fprojects\u002Fplayvault.md","PlayVault - Save All YouTube Videos in a Playlist",{"type":7,"value":8,"toc":59},"minimark",[9,21,26,29,33,36,40,43,47,54],[10,11,12,13,20],"p",{},"A while back I kept running into the same problem: I collected music videos in a YouTube playlist, and after a while songs would just disappear from it.\nSo I wrote a small Python script that went through the playlist and saved each video's title, uploader, and position.\nI ran it once a week, which gave me a running history of everything I'd been listening to on YouTube.\nIt worked well enough, but getting it running needed a Google\u002FYouTube API key to talk to YouTube's backend.\nThat setup is a hassle, so I looked for an easier way to solve the same problem.\nThe result is ",[14,15,19],"a",{"href":16,"rel":17},"https:\u002F\u002Fplayvault.danobe.dev",[18],"nofollow","PlayVault",".",[22,23,25],"h2",{"id":24},"what-you-get-with-an-account","What you get with an account",[10,27,28],{},"You can sign in with a Google account. That keeps people from spamming the API with requests, and it unlocks the main feature: PlayVault scans your playlist automatically once a week or month, and if a video has been removed, it sends you an email.\nIt's a convenient way to find out when something quietly vanishes from a playlist.",[22,30,32],{"id":31},"dont-want-to-sign-up","Don't want to sign up?",[10,34,35],{},"If you'd rather not create an account, there's another way. Enter a YouTube playlist URL on the website and download a ZIP archive of the whole playlist.\nEach video becomes a .jpg file: the image is the video's thumbnail, and the filename is its position, title, and uploader.\nGrab a playlist like this every so often, and when you want to know what's changed, feed two of these ZIP files into the built-in compare tool.\nIt shows you right in the browser which videos have gone missing and which were added recently.\nThis works fine, but I'd still recommend signing in with a Google account so you get an email automatically whenever a video disappears.",[22,37,39],{"id":38},"house-rules","House rules",[10,41,42],{},"I had to add some rate limiting. You can download up to 20 ZIP archives per day, and the counter resets at midnight.\nThis is necessary because my YouTube API access is limited, so I can't offer unlimited downloads.\nWith a Google account you can monitor up to five playlists, and you can manually scan each one for changes up to three times a day.\nWhen a scan finds a deleted video, you click the \"removed\" button and it shows you exactly which video was taken out of your playlist.",[22,44,46],{"id":45},"future-plans","Future plans",[10,48,49,50,20],{},"For now I've built everything I had in mind for this project. If I come up with more good ideas, I'll add them, but I'm happy with where it is.\nIf you have a suggestion for making it better, feel free to email me anytime at ",[14,51,53],{"href":52},"mailto:hello@danobe.dev","hello@danobe.dev",[55,56],"comment-section",{"section":57,"slug":58},"projects","playvault",{"title":60,"searchDepth":61,"depth":61,"links":62},"",2,[63,64,65,66],{"id":24,"depth":61,"text":25},{"id":31,"depth":61,"text":32},{"id":38,"depth":61,"text":39},{"id":45,"depth":61,"text":46},"2026-06-16","Save the title and uploader of every video in a YouTube playlist, then compare snapshots over time to see which videos have gone private or been deleted.","md","\u002Fimages\u002Fprojects\u002Fplayvault\u002Fweb-interface.webp","Screenshot of the PlayVault website",null,{},true,"\u002Fprojects\u002Fplayvault",{"title":5,"description":68},[78,79,80,81,82],"Nuxt 4","Vue 3","YouTube API","Resend for email","SQLite as database",[84,87],{"icon":85,"text":86},"i-lucide-mail-check","Email alert on removed videos",{"icon":88,"text":89},"i-lucide-git-compare","Snapshot & compare playlists","active","projects\u002Fplayvault","FDN2v5Nf_yoEPQBqFyt8IWi2C-WL0pi4y4J1AP0-bp0",1781563138831]