Newbie Questions: Autoplay/Binge and Other Devices

I’ve never used a Tivo. The rest are all cableco-supplied crap, and I’ve never had any of those.

Well, for a long time I’ve had almost no time to set things up for myself, so it was easier to go with whatever was supplied. We moved to a new home we built ourselves about 2 years ago. There has been so many things to fix up and to work on for this place that I’m only recently getting time to start doing things the way I want to.

When we first moved in, it was easiest to just get satellite internet (which was Viasat, or Viasuck - pathetic service and lots of lies, and I don’t say that kind of thing very often about businesses) and DISH TV. (Cable doesn’t come out here, so we’ve got limited choices.) I found a good alternative to get internet that’s far better than Viasuck and now I’m working on getting things set up so I can switch to an OTA DVR.

The first I tried was Tablo. I seriously considered setting up a MythTV box - still might want to, but I’m not going to have time to do that for another year or so. I need something I can unbox and use.

I checked your links - thanks for including them! (You can see my reply to adam1991 for my comments about time - it’s just been too hard to take the time to set things up the way I want for several years!) With something like capto and wrapto, I could easily automate a system to export programs from a Tablo to one of my computers. (I did see that capto, at least, works on a Mac, which is what I have.) I can easily write a program to compare what’s on the drive and what’s on the Tablo and keep them in sync every hour or two.

The easiest way, at that point, would be a program like VLC - I can just load up the playlist.

My first choice is usually to avoid proprietary solutions when I can. (If I had time to check out what I need for hardware and setup options, I’d probably get a box with a few hard drives and 4 tuners and set up a MythTV box - but there are advantages to something that’s already working - especially if the specs are open and you can do things like offload the programs.)

I was trying to get info on a TiVo forum to do that kind of thing with the TiVo, but I was only getting answers from one person and just could not get a direct answer on anything. I appreciated his help, but I couldn’t get the simple info I needed.

Sadly, I don’t use Windows, so I can’t use Tablo Ripper, but I might be able to use the source code to figure the Tablo API and write my own program to do what I need - when I have time.

As I said in some other replies, I would be interested in using MythTV as an all-in-one base for media - but for now I need an easy out-of-the-box solution to use for a year or so.

Do you know if that Plex option is configurable?

Ahem… there’s always SurLaTablo (just saying).

Generally, it’s pointless getting into replies with him - as there is no point or maybe his omnipotent one is the one and only.

Ok, so you’re not a “typical consumer”… sorry for the misunderstanding. My “media center” is simple using basic file sharing - basically just to 2 systems. When I tried Myth it wasn’t recognizing my tuner cards, and it look bloated for my needs… since I’m in a rural area without true wired broadband internet. The software I’d been using to record Me-TV stopped development. I found tablo my best fit, discovered capto and it was great I could just implement it into the setup I have in place.

I store the shows one system (not a dedicated file server or NAS) set up file sharing with gigbit home networking. Mounting shares on systems provides instant access to everything. I like a simple, utility-like UI, so the overly user friendly stuff may be great for many users, just not me.
VLC would do, I’ve found smplayer more suiting to my needs because it allows to set jump keys for like 1min, 30sec & 15sce - great for commercial skipping. (VLC may have this now, but it also does way more than I need)

WHY??

If you want to use Windows, then it is sad you’re not. But why do you feel sad for not using Windows ?? or feel you need to make some kind of apology for it?? or imply not using Windows greatly limits you??
There’s an entire section #tablo-apps:third-party-apps-plex – several are not Window specific! Either not platform dependent or not Windows compatable [period]. There’s 1 or 2 for mobile devices yet.

As mentioned SurLaTablo. I’ve not used it, but if you have an issue - you can reach out and the developer will surla get back to you. I believe it has some commercial skip/removal process. Options to store at various size/resolutions Python script - not platform dependent.

Still in beta (at least under development) is APL Tablo Client. This is very feature rich, not quit as much with export. Yes, you can, but he hasn’t gotten to allow custom naming and it’s a GUI, so there’s no automation. But there is a lot of great features missing in tablo’s UI, lots of sorting, filters, auto record (not yet released) schedule of recordings, etc. It’s java, …you know, platform independent.

Back to capto used with wrapto to allow for custom naming works great for scripting and automating scheduling exports. Lets me have enough control, while letting it take care of things without interaction.

Again, old-school I use a browser UI for my streaming services. Amazon Video [Prime] and BritBox, as well as playing my recorded shows. As for watching TV, I just press the TV button on my remote. But yes, I have a simple, perhaps sad - just me, setup.

As for plex. I do believe there are several Plex users here. If you made a more prominent question, I’d bet you’d get a lot of specifics – from people who know.

You’ll find most of the users that stop in the Community Forum often aren’t typical users and many have over the top elaborate setups.

Sorry for the delay before I could reply. We’re renovating an old barn that was on the property when we bought it and sometimes that takes a lot of time and energy to deal with it.

The “Sadly” in reference to Windows was more about that I’m not able to use Tablo Ripper. If I had more time, depending on the language it’s in, if the source code is available, I’d be interested in seeing if I could get it to run on Linux or Mac.

Referring to being a “typical consumer:” You got that right. In this case, though, time is a factor. Not in terms of a race against time, but in terms of time available to me. (Well, it is a bit of a race against time - each month I don’t get a new system set up is another month paying for crappy DISH TV.) (That barn project is a serious time and energy sink!) Ideally, I’d spend a few weeks looking into all the DIY options, like MythTV, Plex, and so on, but at this point, if I tried to do that, it’d take me months to read up and find out what fits my needs best, then I’d have time to experiment and get my settings to what I wanted before I dropped satellite service.

I’m going to look over SurLaTablo (got the hint @cjcox! - one thing about that: I’m not clear on whether it copies all files, lists files, or just what - do you have a summary, somewhere, of what it does?) and the APL Tablo Client info and see what that’s like. It looks like there are programs to pull recordings off the Tablo, which means I can binge watch them through Plex or any program that lets me binge watch files on my drive. That may be enough to make things work for me.

If that’s the case, I may go on and get a Tablo, since it’s a quick and easy setup, use Plex for binging, and, after that, I can take my time deciding what to use long term.

1 Like

I missed you didn’t have a tablo yet/already.
I am strong proponent of open source, but through no fault of their own - NDA, I know capto can do what you need, but that’s because I haven’t used SurLa Tablo, nor have a Windows system for T Ripper. In the end, if you have a “PC” based viewing system you should make/get tablo to work your way.

[edit; cleaned up typos and spelling errors from trying to use a tablet when I need a full blown keyboard and mouse]

SurLaTablo stricly is about what is recorded on your Tablo. It can be used to query your recordings and it can be used to extract the recordings (with lots of different options and controls). It is not a local media manager. For me, I wrote it so that I could easily pull recordings off my Tablo (via nice searches) and put them into a scanned Plex Library (where Plex does the media management).

By default SurLaTablo will no ovewrite a file that exists on your local filesystem. So you could constantly tell SurLaTablo to pull “everything” for example, and it will just do the work for things that are not already present (you’ll get a message that the extracted file already exists and it will move on to the next thing).

SurLaTablo is extensible in that you can add custom functions via what I (probably not a great name) call transcoders. Originally the main purpose was for transcoding, but now it’s more generic and can be used for different things.

Let’s just say SurLaTablo started out small and blossomed into something much larger, but still focused on just extracting recordings.

What will future versions of SurLaTablo do? Not sure. Could be additional offerings that I create. Maybe a ProxyLaTablo… people would really really like that one. Maybe something that replaces a lot of the functionality of the Tablo app itself? Maybe. All just takes time…

1 Like

It looked like SurLaTablo is open source. I think I did see the source code - but wanted to hear what you had to say instead of trying to just work it all out myself.

Does SurLaTablo also track deleted recordings? For example, if I my Tablo is recording 2 episodes of Bewitched every day, but I’ve told it to keep only a maximum of 20 episodes, when the Tablo deletes an episode, and I use SurLaTablo, will it delete the now trashed episodes on my hard drive? And if it doesn’t do it automatically, would it be easy to get a list of recorded episodes so I could compare them to what I have and delete, from my hard drive, what is no longer on the Tablo?

I’m not sure how much/long tablo even does this. Got a strong idea - NO.

Once it’s deleted from tablo, you can’t use anything to watch/export it. Most exporters have an option to delete from tablo. Example record 2 episodes everyday - tablo just records. Have “something” export and delete from tablo on some regularity. No, once the season come full circle, you’ll have to stop recording them. If they’re random… that’s another struggle.

I do know APL Tablo has abilities to export “all kinds of stuff” in a cvs files. If you want to keep them on the tablo after exporting then delete them later? As for automating deleting the recordings - I suppose editing an exporting list and some shell scripting, maybe. Or point and click manually, APL Tablo has a GUI which allows multiple selection.

Now I’m regretting not giving SuLaTablo a try, I’m really not familiar with it’s capabilities, but I understand it to be feature rich for what is does.

No, SurLaTablo, while it certainly understand deleted things (it does a very fast initial sync when run to update it’s cache … or database if you will). It’s all about the current state of what is on your Tablo and the ability to extract those recordings. Again, for off-Tablo media management, you would use something else like Plex, noting that Plex is standalone and doesn’t try to keep up in any way with changes on your Tablo.

With that said, Delete is a “transcode” option of SurLaTablo. So, if you every wanted to delete like a whole season in bulk or multiple things based on some sort of match… you can do this quickly with SurLaTablo rather than painstakingly going through the Tablo UI.

Just remember to refresh the cache after deletes… SurLaTablo by default refreshes its cache every time it’s run, and while the sync is fast (very fast), it does require a call out to your Tablo, which you could view as “slow”. So, there is a -n option to force no syncing of the cache. Useful when you’re not doing Deletes. SurLaTablo Delete prompts for confirmation, DeleteX just does it without interaction… you probably want the latter when doing large scale bulk deletes off your Tablo.

There is a SurLaTablo thread in the 3rd party area… might be better to discuss more details and questions there. That and I can be long winded.

3 Likes

I get what you’re saying and I do have more questions, but I also have one question and I don’t think I expressed myself well.

First, I’m assuming, when you talk about a cache, you mean the storage area on my drive with copies of the Tablo recordings. Am I correct?

I use rsync for backups, so the backup can mirror what I have on my drive. That’s about what I want to do with Tablo. On my first time running SurLaTablo, I would want to copy over all the recordings on the Tablo to my cache. That would include, say, 20 episodes of “Stargate.” Then when I run it again, say, 24 hours later. By that time, my Tablo has recorded 2 more episodes of Stargate, but also deleted the 2 oldest episodes. What I’d like to do, at that point, when I run SurLaTablo, is to have it copy the 2 new Stargate episodes to my cache. But, also, I would want it to see that the 2 old episodes are no longer on the Tablo and, also, delete the copies of them from the cache.

So whatever I have in my cache mirrors what is on the Tablo. It doesn’t copy videos to the cache and leave them there forever. If a video is in the cache, but no longer on the Tablo, then I’d like to delete that video.

Now, granted, there are multiple ways to do that. If I can get a list of all videos on the Tablo, then I can write a script or program to compare that list on the Tablo to the list of files in the cache and delete the old ones myself.

SurLaTablo maintains a cache of recording ids (so it can quickly know what is new/changed from the last run) and also keep a meta-data cache for each recording. That is the description, format, name, etc. for each recording.

The id cache looks like:

{
    "ids": [
        "/recordings/series/episodes/2263226",
        "/recordings/series/episodes/2263225",
        "/recordings/series/episodes/2260295",
        "/recordings/series/episodes/2260294",
        "/recordings/series/episodes/2258792",
        "/recordings/series/episodes/2258790",
        "/recordings/series/episodes/2258791",
        "/recordings/series/episodes/2256694",
        ... etc....

The metadata cache is a combination of information from the Tablo and some augmented data, again, for each recording:

"/recordings/movies/airings/2130531": {
    "air_date": "2019-07-05T16:00Z",
    "air_date_day": "05",
    "air_date_hour": "16",
    "air_date_minute": "00",
    "air_date_month": "07",
    "air_date_string": "2019-07-05 16:00",
    "air_date_year": "2019",
    "air_date_year_day": "186",
    "cast_": "William Powell;Myrna Loy;James Stewart;Elissa Landi;Joseph Calleia;Jessie Ralph;Alan Marshal;Penny Singleton;William Law;Sam Levene;George Zucco",
    "channel_affiliate": "MVIES",
    "channel_num": "27.2",
    "channel_res_height": "480",
    "channel_res_name": "480i",
    "channel_res_width": "720",
    "channel_resolution": "sd",
    "channel_sign": "Movies!",
    "description": "Recently returned home from vacation, private detective Nick Charles (William Powell) and his socialite wife, Nora (Myrna Loy), are back on the case when Nora's cousin, Selma (Elissa Landi), reports her husband Robert (Alan Marshal) missing. As the duo search for the disreputable Robert, Selma's friend David Graham (James Stewart), who secretly pines for her, aids the investigation. When the three begin to unravel Robert's secret life, the missing persons case turns into one of murder.",
    "friendly_title": "After the Thin Man (1936)",
    "genres_": "",
    "lair_date": "2019-07-05T11:00-0500",
    "lair_date_day": "05",
    "lair_date_hour": "11",
    "lair_date_minute": "00",
    "lair_date_month": "07",
    "lair_date_string": "2019-07-05 11:00",
    "lair_date_tz": "Central",
    "lair_date_year": "2019",
    "lair_date_year_day": "186",
    ... etc...

The idea with SurLaTablo is you can query your recordings. And then, for a query, you can optionally have actions done. For example, extract each to an .mp4 file.

An empty (no parameters) run of SurLaTablo update the “caches” (databases) above. As it runs, it show the new shows added and also shows you shows deleted. Again, the “cache” represents the current state of your Tablo recodings (not the actually media recording, but basic info about what has been recorded).

No parameter run might look like:

prompt> surlatablo.py
  Bless This Mess - s02e04 - Bang for Your Buck
  blackish - s06e04 - When I Grow Up (to Be a Man)
  This Is Us - s04e04 - Flip a Coin
  *RECORDING/BUSY* blackish - s06e02 - Every Day I'm Struggling
  Madam Secretary - s06e02 - The Strike Zone
  This Week With George Stephanopoulos - s00e41 - Sen. Bernie Sanders (I-Vt.) 2019-10-13 09:30
  Meet the Press - s00e39 - Former Defense Secretary James Mattis 2019-10-13 09:00
  FOX News Sunday With Chris Wallace - s00e41 - Sen. Chris Van Hollen (D-Md.) 2019-10-13 08:00
  The Masked Singer - s02e04 - Once Upon a Mask
  Riverdale - s04e02 - Chapter Fifty-Nine: Fast Times at Riverdale High
Trying to remove /recordings/sports/events/1037482
REMOVED:{
REMOVED:    "air_date": "2019-10-06T20:25Z", 
REMOVED:    "air_date_day": "06", 
REMOVED:    "air_date_hour": "20", 
REMOVED:    "air_date_minute": "25", 
REMOVED:    "air_date_month": "10", 
REMOVED:    "air_date_string": "2019-10-06 20:25", 
REMOVED:    "air_date_year": "2019", 
REMOVED:    "air_date_year_day": "279", 
REMOVED:    "cast_": "Green Bay Packers;Dallas Cowboys", 
REMOVED:    "channel_affiliate": "FOX", 
REMOVED:    "channel_num": "4.1", 
REMOVED:    "channel_res_height": "720", 
REMOVED:    "channel_res_name": "720p", 
REMOVED:    "channel_res_width": "1280", 
REMOVED:    "channel_resolution": "hd_720", 
REMOVED:    "channel_sign": "KDFW-DT", 
REMOVED:    "description": "NFL Football - Green Bay Packers at Dallas Cowboys", 
REMOVED:    "episode_number": 0, 
REMOVED:    "friendly_title": "Green Bay Packers at Dallas Cowboys (2019-2020)", 
REMOVED:    "game_date": "2019-10-06", 
REMOVED:    "game_date_day": "06", 
REMOVED:    "game_date_month": "10", 
REMOVED:    "game_date_year": "2019", 
REMOVED:    "genres_": "", 
REMOVED:    "home_team": "Dallas Cowboys", 
REMOVED:    "lair_date": "2019-10-06T15:25-0500", 
REMOVED:    "lair_date_day": "06", 
REMOVED:    "lair_date_hour": "15", 
REMOVED:    "lair_date_minute": "25", 
REMOVED:    "lair_date_month": "10", 
REMOVED:    "lair_date_string": "2019-10-06 15:25", 
REMOVED:    "lair_date_tz": "Central", 
REMOVED:    "lair_date_year": "2019", 
REMOVED:    "lair_date_year_day": "279", 
REMOVED:    "lang": "en", 
REMOVED:    "long_description": "NFL Football - Green Bay Packers at Dallas Cowboys", 
REMOVED:    "meta_type": "Sports", 
REMOVED:    "path": "/recordings/sports/events/1037482", 
REMOVED:    "qualifiers_": "cc", 
REMOVED:    "rec_id": 1037482, 
REMOVED:    "season": "2019-2020", 
REMOVED:    "season_number": 2019, 
REMOVED:    "season_type": "regular", 
REMOVED:    "sort_title": "Green Bay Packers at Dallas Cowboys", 
REMOVED:    "sport_path": "/recordings/sports/959330", 
REMOVED:    "sport_type": "NFL Football", 
REMOVED:    "tablo_ip": "192.168.1.231", 
REMOVED:    "teams_": "Green Bay Packers;Dallas Cowboys", 
REMOVED:    "title": "Green Bay Packers at Dallas Cowboys", 
REMOVED:    "tms_id": "EP000031282090", 
REMOVED:    "video_duration": 16637, 
REMOVED:    "video_durationh": "4:37:17", 
REMOVED:    "video_height": 720, 
REMOVED:    "video_offsetend": 5524, 
REMOVED:    "video_offsetstart": -15, 
REMOVED:    "video_size": 10732732416, 
REMOVED:    "video_sizeh": "10.0GiB", 
REMOVED:    "video_state": "finished", 
REMOVED:    "video_width": 1280
REMOVED:}
  S.W.A.T. - s03e03 - Funny Money
  Dancing With the Stars - s28e05 - Disney Night
  The Flash - s06e02 - A Flash of the Lightning
  FBI - s02e04 - An Imperfect Science

So, just a default run refreshes and synchronizes the cache info. Initial run on a new installation with no cache will sync the id and metadata for everything recorded on your Tablo. While syncing doesn’t take long, if you have a lot of recordings the initial sync might take a minute or two or three depending on just how many recordings you have. Future syncs, if done regularly will happen fairly quickly as it only has to handle changes (adds and deletes).

Querying the data is done with a query search parameters and optional formatting parameter. By default, without any formatting, you’ll get the pretty printed JSON data that is stored in the cache db file (the -n says to not do a sync, not needed if we just did one, you know?):

prompt> surlatablo.py -n -q Belushi
"/recordings/movies/airings/756977": {
    "air_date": "2019-04-05T02:00Z", 
    "air_date_day": "05", 
    "air_date_hour": "02", 
    "air_date_minute": "00", 
    "air_date_month": "04", 
    "air_date_string": "2019-04-05 02:00", 
    "air_date_year": "2019", 
    "air_date_year_day": "095", 
    "cast_": "John Belushi;Dan Aykroyd;Lorraine Gary;Ned Beatty;Treat Williams;Nancy Allen;Robert Stack;Tim Matheson;Toshir\u00f4 Mifune;Christopher Lee;Warren Oates;Bobby Di Cicco;Dianne Kay;Murray Hamilton;Slim Pickens;Eddie Deezen;John Candy", 
    "channel_affiliate": "THIS", 
    "channel_num": "33.3", 
    "channel_res_height": "480", 
    "channel_res_name": "480i", 
    "channel_res_width": "720", 
    "channel_resolution": "sd", 
    "channel_sign": "ThisTV", 
    "description": "After Japan's attack on Pearl Harbor, residents of California descend into a wild panic, afraid that they might be the next target. Among them are Wild Bill Kelso (John Belushi), a crazed National Guard pilot; Sgt. Frank Tree (Dan Aykroyd), a patriotic, straight-laced tank crew commander; Ward Douglas (Ned Beatty), a civilian willing to help with the American war effort at any cost; and Maj. Gen. Joseph W. Stilwell (Robert Stack), who tries his hardest to maintain sanity amid the chaos.", 
    "friendly_title": "1941 (1979)", 
    "genres_": "", 
    "lair_date": "2019-04-04T21:00-0500", 
    "lair_date_day": "04", 
    "lair_date_hour": "21", 
    "lair_date_minute": "00", 
    "lair_date_month": "04", 
    "lair_date_string": "2019-04-04 21:00", 
    "lair_date_tz": "Central", 
    "lair_date_year": "2019", 
    "lair_date_year_day": "094", 
    "lang": "en", 
    "long_description": "After Japan's attack on Pearl Harbor, residents of California descend into a wild panic, afraid that they might be the next target. Among them are Wild Bill Kelso (John Belushi), a crazed National Guard pilot; Sgt. Frank Tree (Dan Aykroyd), a patriotic, straight-laced tank crew commander; Ward Douglas (Ned Beatty), a civilian willing to help with the American war effort at any cost; and Maj. Gen. Joseph W. Stilwell (Robert Stack), who tries his hardest to maintain sanity amid the chaos.", 
    "meta_type": "Movie", 
    "movie_path": "/recordings/movies/756978", 
    "path": "/recordings/movies/airings/756977", 
    "qualifiers_": "cc", 
    "rating": "pg", 
    "rec_id": 756977, 
    "release_year": 1979, 
    "sort_title": "1941", 
    "tablo_ip": "192.168.1.231", 
    "title": "1941", 
    "tms_id": "MV000000130000", 
    "video_duration": 9081, 
    "video_durationh": "2:31:21", 
    "video_height": 480, 
    "video_offsetend": 65, 
    "video_offsetstart": -15, 
    "video_size": 1766821888, 
    "video_sizeh": "1.6GiB", 
    "video_state": "finished", 
    "video_width": 640
}

So, maybe that is sort of ugly, thus you can specify a query format to make things simpler… again, so far, we just querying what is recorded on your Tablo, but because it uses synced data, the queries aren’t actually going to the Tablo (that is, we’re being device friendly) and rather is using the already obtained cached id and db data.

Now a query with format.

prompt> surlatablo.py -n -q Belushi -Q '${friendly_title}'
1941 (1979)

Smaller…but maybe we want more? At this point, maybe it’s good to discuss surlatablo2.conf which is a file where you can configure all sorts of things (btw, it must contain the IP addresses of your Tablos). We could add a much much more sophisticated query format at the default. Just to change things up a bit, rather than a query that matches a movie (above), I’m switching to something matches a TV episode (so you can see Plex naming convention fully at work).

Inside my surlatablo2.conf (which goes in your home directory):

SURLATABLO_ROOT = '/tmp/SLT'
TABLO_IPS = ['192.168.1.203','192.168.1.231']
options['queryformat'] = '## (${rec_id}) ${friendly_title} ##\n\t${friendly_date}\n\t${channel_sign}(${channel_affiliate}) - ${channel_res_name} [${video_durationh}]\n\tTablo: ${tablo_ip}\n\n\tDescription:\n\t${Wlong_description}\n\n\t${cast_}\n'
options['wrapwidth'] = 80
options['wrapindent'] = '\t'
options['wrapsubindent'] = '\t'

And query run for all Season 6 shows for Flash:

prompt> surlatablo.py -n -q 'Flash - s06' 
## (1043659) The Flash - s06e02 - A Flash of the Lightning ##
        Tuesday, October 15, 2019 at 07:00 PM
        KDAF-DT(CW) - 1080i [1:01:17]
        Tablo: 192.168.1.231

        Description:
        Faced with the news of his impending death, Barry's resiliency suffers as he
        struggles to fight fate; Cecile's career as a D.A. conflicts with her identity
        when she crosses paths with a villainous meta-human.

        Grant Gustin;Candice Patton;Danielle Panabaker;Carlos Valdes;Tom Cavanagh;Jesse L. Martin;Tom Felton

## (1032654) The Flash - s06e01 - Into the Void ##
        Tuesday, October 08, 2019 at 07:00 PM
        KDAF-DT(CW) - 1080i [1:01:17]
        Tablo: 192.168.1.231

        Description:
        While Barry and Iris deal with the loss of their daughter, the team faces their
        greatest threat yet — one that threatens to destroy all of Central City; Killer
        Frost has a brush with death that will change her relationship with Caitlin
        forever.

        Grant Gustin;Candice Patton;Danielle Panabaker;Carlos Valdes;Tom Cavanagh;Jesse L. Martin;Tom Felton

So far, all we’ve done is querying… no actions at all.

So, let’s do “something”. Originally the idea of the -c option was to “convert” or “create”, but really, this is an action trigger to do “something”. The default uses the predefined (and overridable via surlatablo2.conf) variable TRANSCODER_DEFAULT = [ 'Mp4' ]. Thus by default, we take the recording (extract) from the Tablo to an mp4 file. Unlike most extractors, SurLaTablo extracts and populates where possible the mp4 tag data with a myriad of information from the cache db.

Back to our Flash case, let’s extract those episodes to mp4 (the default action). Note that one of the most time consuming parts is just pulling the data off the Tablo itself. The default action, mp4, is really just a quick recontainerization of the h264 ts data off the Tablo.

prompt> surlatablo.py -n -q 'Flash - s06' -c
## (1043659) The Flash - s06e02 - A Flash of the Lightning ##
        Tuesday, October 15, 2019 at 07:00 PM
        KDAF-DT(CW) - 1080i [1:01:17]
        Tablo: 192.168.1.231

        Description:
        Faced with the news of his impending death, Barry's resiliency suffers as he
        struggles to fight fate; Cecile's career as a D.A. conflicts with her identity
        when she crosses paths with a villainous meta-human.

        Grant Gustin;Candice Patton;Danielle Panabaker;Carlos Valdes;Tom Cavanagh;Jesse L. Martin;Tom Felton

Working on:                             [./TV/The Flash/Season 6/The Flash - s06e02 - A Flash of the Lightning]
 Retrieving Tablo Data (1043659):       [####################] 98% Elapsed seconds 260.0
 Transcoding (Mp4, .mp4):               [####################] 100% Elapsed seconds 3.0

## (1032654) The Flash - s06e01 - Into the Void ##
        Tuesday, October 08, 2019 at 07:00 PM
        KDAF-DT(CW) - 1080i [1:01:17]
        Tablo: 192.168.1.231

        Description:
        While Barry and Iris deal with the loss of their daughter, the team faces their
        greatest threat yet — one that threatens to destroy all of Central City; Killer
        Frost has a brush with death that will change her relationship with Caitlin
        forever.

        Grant Gustin;Candice Patton;Danielle Panabaker;Carlos Valdes;Tom Cavanagh;Jesse L. Martin;Tom Felton

Working on:                             [./TV/The Flash/Season 6/The Flash - s06e01 - Into the Void]
 Retrieving Tablo Data (1032654):       [####################] 98% Elapsed seconds 266.0
 Transcoding (Mp4, .mp4):               [####################] 100% Elapsed seconds 3.0

Rich meta examination with mediainfo:

prompt> mediainfo TV/The\ Flash/Season\ 6/The\ Flash\ -\ s06e01\ -\ Into\ the\ Void.mp4 
General
Complete name                            : TV/The Flash/Season 6/The Flash - s06e01 - Into the Void.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 1.33 GiB
Duration                                 : 1 h 1 min
Overall bit rate                         : 3 103 kb/s
Collection                               : The Flash
Season                                   : 6
Album                                    : The Flash
Part                                     : 1
Track name                               : Into the Void
ContentType                              : TV Show
Law rating                               : TV-PG (L)
Writing application                      : Lavf57.83.100
Part_ID                                  : s06e01
TVNetworkName                            : KDAF-DT
HDVideo                                  : Yes
... etc...

So, that’s the basics. I’ve done my extract, can I delete without using the Tablo api? Yes, of course. Same query, but this time we’ll override on the command line the action to take.

prompt> surlatablo.py -n -q 'Flash - s06' -c Delete
## (1043659) The Flash - s06e02 - A Flash of the Lightning ##
        Tuesday, October 15, 2019 at 07:00 PM
        KDAF-DT(CW) - 1080i [1:01:17]
        Tablo: 192.168.1.231

        Description:
        Faced with the news of his impending death, Barry's resiliency suffers as he
        struggles to fight fate; Cecile's career as a D.A. conflicts with her identity
        when she crosses paths with a villainous meta-human.

        Grant Gustin;Candice Patton;Danielle Panabaker;Carlos Valdes;Tom Cavanagh;Jesse L. Martin;Tom Felton

Working on:                             [./TV/The Flash/Season 6/The Flash - s06e02 - A Flash of the Lightning]
 Executing (deleteResource, .always)
About to delete [The Flash - s06e02 - A Flash of the Lightning], enter "Y" to confirm:

So, for each episode, we’ll get prompted to confirm the delete by entering Y. For large cases, let’s say there was 26 episodes of Flash Season 6 already, I might switch Delete to DeleteX which is a no confirmation delete. Useful for doing bulk high speed deletes off your Tablo.

What else can you do? Well, while you can see embedded text for the closed captions, sometimes a media player (even Plex) can’t deal with the embedded closed captions well. So… with an additional program, ccextractor, SurLaTablo can also produce a companion .srt. The options to do that is -C (capital c). So, to do both the Mp4 extract with srt subtitles, supply options -c -C. A popular choice if you have ccextractor installed.

SurLaTablo has rudimentary commercial removal. This features does require a full transcode, which is somewhat time consuming, but maybe interesting. You can use the transcoder Mp4z. Btw, you can do both, saying Mp4 Mp4z, or simply adding +Mp4z to the default (which by default is Mp4).

When doing multiple transcodes (actual manipulation of the recorded mpeg4 ts data), and wanting to do that with multiple calls to surlatablo, for efficiency sake you might want to preserve the Tablo mpeg4 ts data for subsequent processing. Now, this does take up extra space of course since you’ll have the mpeg4 ts, Mp4 and perhaps the Mp4z file (which are actually named file-z.mp4 vs. file.mp4).

You can see available transcoders (actions) using -t:

prompt> surlatablo.py -t
Mp4W    Crop a 4:3 480i channel presentation of a 16:9 widescreen movie.
PlexRefresh     Refresh Plex Library
Logging Log command to file
Gif     Create an short animated Gif
Ts      Testing, do not use. Use --keepdir @ instead.
h265    Product an HEVC h265 .mp4 file.
Flash   Create a flash .flv file
Mp4zap1 Ultrafast Mp4 re-transcode that force -z 1.
Mp4z    Ultrafast Mp4 re-transcode often used with -z.
cjcox   testing user added transcode type.
Mp4zap2 Ultrafast Mp4 re-transcode that force -z 1.
Mp4Wzap2        Crop a 4:3 480i channel presentation of a 16:9 widescreen movie that force -z 2.
Mp4Wzap1        Crop a 4:3 480i channel presentation of a 16:9 widescreen movie that force -z 1.
DeleteX Delete from Tablo.
... etc...

(hmmm a typo bug, Mp4zap2 should say using -z 2 not -z 1)

If you haven’t figured it out yet, you can add your own transoders via surltablo2.conf.

How good is the commercial removal? Well, it’s reasonable, but does use black frame detection only (and some algorithmic decision making). You might get a feel for it by viewing the anti-comskip demo (that is, the opposite of commercial removal where I removed the content, btw, there isn’t really a built in option to do that).

(it’s The Bucket List, except without The Bucket List)

Anyway, barely touching the service. You can do all sorts of things with SurLaTablo.

(do I get a cookie for longest reply post?)

You get a cookie for a super-helpful post.

I’ve been also considering getting an HDHomeRun quad tuner and a mini-PC and using that, running Plex. The problem is dealing with specs - and that’s stuff that takes time to work out. Plus, if I’m using a dedicated system, I’m going to do it on Linux and set it up on my own - and we both know that takes time. That’s what I don’t have. Although I’ll make more time if I know I’m working toward something that’ll give me what I want.

So you’ve not only answered my question, but shown me what I can do with SurLaTablo and shown me how I can do what I want.

So that makes getting a Tablo, plugging it in and getting it running, easy (and cheaper than a system to handle all that for Plex). Once I get it set up, I can take my time doing the rest (such as adding your program to one of my computers to offload files from Tablo). Once I can offload videos from Tablo, I can use VLC on a computer (for now) and not worry about setting up Plex or something else. It lets me put off doing more work until I have more time.

So, yes, you get a BIG cookie and a lot of thanks!

One other thought - I don’t remember seeing documentation when I went and looked at what I can download for SurLaTablo. (Remember, I don’t have a Tablo yet - did have one, returned it, but will soon be ordering it again.) So if I don’t have a Tablo yet, what is the best way to read a man page or documentation on SurLaTablo and how to use it?

surlatabo.py --help or if you don’t want to download, because I store the code as .txt you can browse to https://endlessnow.com/ten/SurLaTablo/surlatablo-2.3-py.txt (current latest) and search the code for detailedHelp.

I know what is there is likely not sufficient… but it’s something.

Yeah, documentation is a real PITA, isn’t it? :wink:

Thank you. I think I’m going to go on and order a Tablo and use that for now, but plan on ordering the other stuff to build a DVR out of tuners and a computer for Plex or Channels later. That way I have something simple now and, later, when I have time, I can put together a custom system. One for here, one for down in the barn.

Thank you, everyone, for the help and thank you, @cjcox, for the work I know it took to put a program together and for the help in explaining it here!

1 Like

Besides Tablo and Plex DVR, I too “roll my own” so to speak…

1 Like

Well, for now, I’m going over SurLaTablo and going the easy way, but my long range plan is to use Plex or something else and totally roll my own - so I’ll have a Tablo for one TV, using SurLaTablo to offload all my videos and put them on a hard drive, then, eventually, I’ll have a Plex system for a 2nd DVR down at the barn. (I have a fiber cable connecting the two so they act like it’s on all one LAN.) Once I get the other one going, I may change to Channels or something else, but I like that I could run 2 DVRs on one computer (as long as I’m careful about the recording schedule) while I switch from one to the other or while I’m testing one.