Implementing parental filters with MythTV

The other morning I walked out to my five year old watching Robot Chicken. This isn’t what I would call the highlight of my parenting career, but it did leave me with an immediate need to come up with a solution to stopping the kids from watching inappropriate things now that they’re big enough to work their way through the MythTV user interface without our assistance. Its now quite common for me to wake up in the morning and discover that the kids have turned the monitor on in the living room, have found one of their shows, and are happily watching.

(I guess it says something about the ease of use of the MythTV user interface that my four and five year olds have no trouble navigating it without assistance. Specifically, the video thumbnail of the various recordings is a killer feature because it helps kids who can’t read yet find the shows they want.)

The animated thumbnail of the recording appears in the bottom right of this example image.

Back to my need to filter recordings. Unfortunately this isn’t covered in the MythTV book (Amazon), mainly because it didn’t seem to me to be a killer feature at the time of laying out the chapters, and because we wanted to focus on getting the important aspects of Myth working well. I’m going to make up for that by writing up everything I’ve learnt about it in the last couple of days here.

You’ll find the filtering setup, which can be used for both parental filtering and filtering based on your random other needs (like perhaps only wanting to display sports programs at the moment, or only documentaries when you’re trying to impress visitors), in Utilities / Setup -> Setup -> TV Settings -> Playback -> View Recordings (Recording Groups), which is the fourth screen of the playback settings wizard. That location might be slightly different depending on what theme you are using. The screen looks like this:

Enabling a filter

You can see here my super secret password, which is used to escape the currently active filter, which I will show you how to do in a moment. You can also see that I’ve selected a filter called “Children” as the default filter to use when Media Library -> Watch Recordings is selected. The relevant options on this screen include whether to prompt for a filter when entering the Media Library -> Watch Recordings screen, which I disabled as I want the default to be the Children filter to stop my kids from selecting another filter. You can also have the filter default to whatever it was last time, which doesn’t work for me because that would mean it was almost always set to showing all programs, but might be convenient to others. You can also choose to show the name of the filter instead of the words “All Programs” in the Media Library -> Watch Recordings view — this is useful for reminding you what filter you are currently using, although you should turn this option off if you don’t want people to know that you are using a filter at all.

The list of filters you can apply is based off the categories of the recordings currently in your MythTV database. These are stored in the category column of the recorded table, and for my back end the list is currently like this:

    mysql> select distinct(category) from recorded;
    | category                 |
    | banana                   |
    |                          |
    | Children                 |
    | Sitcom                   |
    | Holiday-children special |
    | Cooking                  |
    | Crime drama              |
    | Reality                  |
    | Documentary              |
    | House/garden             |
    | Talk                     |
    | Special                  |
    | Comedy                   |
    | Children-special         |
    | Animated                 |
    | Science fiction          |
    | Auto                     |
    | Docudrama                |
    | Travel                   |
    | Science                  |
    | Drama                    |
    | Home improvement         |
    | Fantasy                  |
    | Suspense                 |
    24 rows in set (0.00 sec)

The “banana” category is me testing to see if the statement above is really true. It must be, because after I changed a recording to have a category of banana, this was then presented as an option in the user interface:

Bananas make for good filters

The currently active filter is stored in the settings table of the MySQL database. Look for entries named “DisplayRecGroup” if you are inclined to poke around in your database.

This level of filtering is sufficient if you only want to show one category at a time in the Media Library -> Watch Recordings screen. However, there is no facility to filter based on the rating of the program, and no way to combine filters to display more than one category at once. For example, there is no way to display Children’s shows, and Children’s holiday specials at the same time. This is a bit of a shame. Conceivably you could implement custom filtering like this by changing the values for the category column in the recording table, but I wouldn’t recommend this approach.

Anyway, on to how to use the filter now that you have it set up. Go to the Media Library -> Watch Recordings screen with the filter set, and you’ll see that the view has changed to only include those things in your default category. You’ll be able to tell that the filter is on if you selected the option to display the category name instead of “All Programs”. My recordings screen looks like this when filtered to only include children’s recordings:

Filtering to only show Children’s recordings

As opposed to what it used to look like:

No filtering at all

To change the filter, press the menu key on your remote, or the M key on the keyboard. You’ll see this menu:

The recordings menu

Select “Change Group Filter” from the menu. If you configured a password to change between filters, then the user interface to enter that password is displayed:

Entering a password

Enter your super secret password, and then you’ll be prompted with a list of possible filters. If you didn’t enable a password, you will of course end up going directly to this menu:

Selecting a new filter

And you’ve escaped the tyranny of the filter!

It would be nice for the filtering to be more granular, and there have been some proposals in that direction, although that proposal isn’t a perfect solution either.