2 min read

CLIs and Archiving

We're almost exactly two months into the COVID-19 quarantine here in San Antonio, and while my day-to-day hasn't changed too drastically because I work remotely, it's definitely starting to wear on me a bit. In order to distract myself I've been working on some small coding side projects to keep myself busy.


At the end of 2019, I setup a home media / Plex server and created a couple tools to make adding content to it easier. node-shell-batcher is a simple wrapper for Bash commands to let you select a variety of folders or files to target with the same command. Combining it with Don Melton's excellent video transcoding tools allowed me to batch transcode a large set of movies or many seasons of a TV show all at once.

If you're interested in setting up your own Plex server, I highly recommending reading through Casey Liss' post on the topic. It's almost five years old at this point, but all the info there is still relevant, and there's a few tidbits that make it easier to avoid potential issues interfacing with Plex.


After adding my Blu-ray collection, I also wanted to save some of my favorite Internet shows for offline viewing. gb-dl is a CLI for downloading Giant Bomb videos. It utilizes two open-source libraries that are excellent for Node.js projects: Commander.js for the CLI options parsing and Got for handling downloads and other network requests.

It was extra great to be able to share gb-dl with the Giant Bomb community, and it's still makes me really happy that a few members are still using it today.


I listen to a lot of podcasts. Honestly, probably too many. And as more indie podcasts pull their old public feeds after they come to an end, or as podcasts move into walled gardens (like Spotify), I wanted to way to quickly archive the public RSS feed for a podcast.

That's why I wrote podcast-dl, which when used with its simplest options allows you to download all episodes of a podcast feed in one go. There are additional options to pull podcast and episode specific metadata (like episode art), and for targeting a specific chunk of episodes. Inspired by youtube-dl, there's also an --archive option for those who want to run podcast-dl on a schedule and only download new episodes for a selected feed.

podcast-dl Example

Write Small Tools

Working on these CLIs is some of the most fun I've had programming. They're not especially complicated, and the code is a bit messy, but they help solve specific issues related to ownership. I'm glad they exist because I now get to use them — it's just icing on the cake when others do too.