Post Mortem: Anime Downloader CLI

Summary

To this day if I had to name one of my most successful projects it would be my Anime downloader. At the time of it’s creation, I did not have a subscription to Funimation or Crunchyroll, so I was streaming anime from various ad and virus ridden websites. If there was a series that I was particularly interested in then I would torrent the whole season and keep it on my media drive (which is a topic for another post.) I discovered that the group known as HorribleSubs had an IRC channel where direct downloads can be sent to you. I wrote a software to automate the searching of the online database for the file of the episode of the series I would look for. This project is the first one that has been used by other people as a useful utility, and is the first project which I have worked on with other people. Grand assisted in the development with several pull requests. I intend to break down the program flow for future interpretation in this post.

Program Flow

The program starts by prompting the user for the title of the anime. The program then searches the online HorribleSubs database for the Packlist of the anime. Any English or Japanese title will be returned by the HorribleSubs online search. The website returns a table containing the information of the quality, and which bots would have the copy of the file. I parse this information and present it to the user. Allow me to explain: inside the IRC channel there would be several bots who would host the files, mostly for redundancy and speed concerns I would imagine. My program would hide the results from the user if the bot was not online in the IRC channel. It would also note if different episodes were available in certain qualities. Originally I had planned for the program to source from multiple different groups, but the HorribleSubs system worked for mostly any anime that I desired. Nonetheless, after the user picked the choice of Anime, they would be prompted with the choices of downloading either all, some, or one episode of the show. My typical workflow would be to download all of the show so that I could binge them all at the same time later. A series of different substitution regex would then change the title of the file so that I could easily browse the folder structure for the show I was looking for.

Retrospective

Looking back, if I were to write this again I would try to work concurrent downloading of the episodes into the program. The IRC library that I used could only handle the one download at a time, but I believe that the protocol allows for multiple simultaneous connections. Currently the program no longer functions as the HorribleSubs group know longer hosts the episodes on the IRC, thus the program no longer has a way to source the episodes. I believe that I read that the cause of the group closing their doors was related to the COVID pandemic, but I am unsure. As I now have a subscription to both Crunchyroll and Funimation I have no desire to find a new sources for the downloader. It is essentially a piece of my programming history: a wonderful reminder of what projects I can complete when motivated. Going forward, I would like to use the knowledge I gained here to create a book downloader, as the #bookz channels on certain IRC servers fuinction in a similar way, and a friendly interface to that is slightly lacking. If I were to do this I would love to write it in Rust, and write the IRC protocol myself as a challenge!

The code for the original AnimeDownloaderCLI is available on github.