If something can be automated, I often want it automated. Doing things once is ok, but if you do the same things over and over it bores me. There is a drawback to automation, in that any change becomes an inconvenience. Leading to wanting to reduce any changes.

Say you download various things via bittorrent. In principle there’s various steps to this. You need to know what you want to download, do the actual download and eventually you need to clean up everything that you’ve downloaded.

First thing that I did is automating the cleanup of what I’ve downloaded. Ideally that should be done somewhat intelligently. Meaning, don’t remove anything that’s still seeding, figure out if I’ve looked at what I’ve downloaded, etc. This keeps my disk space ok and helps to avoid me buying bigger and bigger hard drives.

For automatically downloading there’s multiple parts. You need to have a list of things you want. This can be as easy as writing this in a text file. Then there’s the site you want to download from. Lastly, the bittorrent software you use. Over the years the various parts changed unfortunately.

Enter FlexGet. Instead of a script that does exactly what is needed, it has loads of plugins and a Yaml based configuration. Its plugins are divided into input, filters, site integration and output plugins. So it supports multiple different sites as well as rss, html, etc. It supports various download programs (rtorrent, transmission) and way more than just bittorrent related ones. Instead of explaining everything, I’ll just give a few examples:

  • Download every movie released since 2014 rated 7.5 or higher on IMDB.
  • Download every tv series première in 720p, but only once.
  • Download some tv serie as the episodes become available in at least 720p quality and wait a few hours to see if 1080p shows up.
  • Remember the tv series and episodes downloaded to avoid downloading the same thing twice. But make exceptions in case there really was a problem with the initial version.

The possibilities are quite extensive. Then it also has extra options like being able to reuse the cookies from your browser, notify your phone, etc. All very flexible. Though that’s also a slight drawback (e.g. it doesn’t automatically use the cookies from your browser).

I’m quite happy with FlexGet. Because it does so much more than what I appreciate that I could tinker with it and maybe do more. Further, it is written in Python, seems actively maintained and I’ve seen that they’ve integrated various contributions.

FlexGet has existed for a while and never heard about it. Probably because of what it is mostly used for. Anyway, if you’re a distribution packager, please package it.