Introducing calliope

Submitted by hrm on 9 February, 2010 - 14:32

Ever since I started playing with digital TV on my computer(s) 5-6 years ago, I've been intermittently messing around with the idea of writing a video recorder. Until now, I've mostly been using a set of perl scripts I hacked together in the early days. They Worked For Me, but there were several things they didn't do well:

  1. No automatic allocation/resolution of recordings to specific tuners
  2. Only runs on one machine (i.e. won't handle several machines each with tuners in)
  3. Hard to change recording details once set
  4. No series link, or tracking of programmes when they move their weekly timeslot
  5. Poorly-structured metadata

(Before anyone asks, I've looked at MythTV, and it just doesn't seem to work the way I want stuff to work. It's a complete vertical application that includes a whole load of things I don't need, and it doesn't play at all well with my existing workflow. Besides, it's fun to build things.)

I'd [several times] designed and partly-written a system (called calliope, for various reasons) to replace this. Each time I did it, I'd replace one of the hard bits from the previous design with some suitable off-the-shelf component (e.g. custom network API -> SOAP -> REST), and get a little further. Finally, it's all come together after a rewrite from the original C++ to using python, and I have a working system.

So far, there's a very basic web-based UI for setting and cancelling recordings; a central store for recordings; an allocation algorithm to work out what tuners to use for overlapping recordings; and a component to manage tuners. At the moment, it only solves points 1 and 2 on the list above, but the others will come with time.

Find out more about calliope, or browse the source.