Mercury Thirteen (@mercury0x0d)
Posted
1 replies · 0 reposts · 1 likes
Introducing MYTChM For a long time now, I've had no need to keep my Google account. GMail has been a dumpster fire for years, and I really don't use any of Google's current offerings in a way that makes the account feel worth keeping around - except for YouTube, the sole reason this account has hung around for the nearly two decades that it has. My desire to track new releases from some of my favorite channels is the only reason I haven't kicked the whole mess to the curb ages ago. Several years back, I had the thought, Wouldn't it be nice if I had some automated way of monitoring all of the channels to which I subscribe and grabbing any new videos they publish, without me having to do anything? A personal tool that watches a list of channels I care about and then automatically downloads the things I would already been downloading manually anyway - PalmPilots need a little help, after all. (Fun fact: yes, I actually listen to some of my favorite YouTubers on my Zire 72s!) The idea sat on the back burner for a long time because, like most side projects, it would compete with everything else on which I was working if I actually tried to put it into production. Even though I mostly knew what I wanted - that it should invoke yt-dlp, track its findings in some kind of state file, employ some sort of scheduler, and have a nice easy-to-use GUI - I've never used any kind of graphical toolkit in my code before, and the effort involved in learning QT put this project at a very low priority for me; if it couldn't be hammered out over a weekend, it would just have to wait. Fast-forward several years to now, when AI has arrived and LLM-powered coding tools have become good enough to be interesting. Hot on the heels of the AI-assisted success I had modifying the code for this site, I was looking for another test to throw its way. Something bigger, more in-depth, with more "moving parts". Something with file handling, process management, a GUI, error handling and a long enough development cycle to expose whether AI assistance actually helps with a project of larger scale, or just creates the same kind of mess I could have done myself, but faster. Once again, I wanted to see if I could get the LLM to screw up, or simply give up. And if it did, I wanted to see how far it could get into a project of this size before it happened. So I drug this project back off the shelf and repurposed it as a litmus test, of sorts. The result is "MYTChM" - the Mercury YouTube Channel Manager. MYTChM (pronounced "Mitchum") is a Qt/C++ application for managing a list of YouTube channels and downloading videos from them using your system-installed copy of yt-dlp. At a high level, it lets you: - Maintain a list of channels - Scan channels for new content on a regular schedule - Choose whether to include regular videos, Shorts, and/or live content - Automatically download newly detected content - Allow manual download of individual videos on-demand - Download audio-only versions of videos - Download subtitles automatically - Queue subtitle and metadata-related work without freezing the app - Retry failed downloads on future scans - Skip scheduled video download based on keywords or duration - Recognize existing downloaded files, including files from older MYTChM builds - Manage channel metadata - Use either a CLI or a Qt Widgets-based GUI - Download subtitle-only sidecar files without re-downloading the media - Use SponsorBlock to ignore, mark, or omit matching segments - Configure SponsorBlock and subtitle behavior globally or per-channel - Safely delete tracked downloads and matching subtitle sidecars - Run dependency checks for yt-dlp, curl, and ffmpeg - Store state as plain or compressed JSON, with or without pre-scan backup Despite all those features, though, the important part is that it tries to stay simple on purpose. It's not Plex, and it's not trying to be a replacement for YouTube itself. It's simply a small tool which does one fairly specific thing: monitor the channels I care about and get local copies of the videos I want. This is exactly what made it a great test case. If it works, cool. I'll have a nice useful program as a result. If it doesn't, oh well. We tried. Continued on my blog at https://mercurycoding.com/blog?post=DE4FA273A545B0432DB97A92C488B97E