Roku Tuner Bridge Official Release

Will do. I have some recordings running for the next couple of hours. I'll pull the new image and test when the system is idle again.

Yep. That did the trick! :slightly_smiling_face:

Cool. Thanks.

I also uncovered another tuner release issue in the pre-tuner section. If the tuner is released before it is sent to channels and in pre tuning, the tuner does not return to the home screen. I already have it fixed in the stream branch and will push the fix to the main branch tomorrow.

Stream branch? I think that I only know about the "latest" and "test" branches.

This is like an alpha build. It's not ready for testing yet. The big change will be the ability to record from streaming apps like HBO Max, Netflix, Discovery +. This is the reason I added the On Demand section to the tuner. I was trying to send it to Channels DVR for recording, but I gave that idea up. I couldn't send it directly to Channels without having a corresponding source. Once I had the source, I realized I needed 2 sources, one for movies and one for TV shows. Then I needed to send the proper metadata after it started recording and so on and so on. It became a little too much coding well above my abilities. I've settled on a simpler approach where it is recorded to a local folder created by a docker-compose.yml file. The metadata is pulled from either the Roku itself, very few apps allow for this method, or it pulls from TMDB with an API key. So far, it does record and has the proper embedded metadata as well as correct file and folder naming conventions applied from the supplied metadata. I have a lot of fine tuning and testing left though. I'll announce when it is pushed to the test branch.

I'm currently running the "latest" build. I was just trying to define a playlist for my different sources. When I completed the process, I scrolled down to the "Save All Changes" button. When I hit the button, I receive a red pop up error message "Save Failed: Invalid configuration structure."

I abandoned all of my changes by refreshing, and still receive the same error each time I try to save all changes, even when nothing has been changed.

I'll look into that.

Are you on v4.5.1 or v4.5.2? Also, would you download your configuration and see if it will download and paste the contents in here or in a private message. Thanks.

I'm using "latest" v4.5.2 I didn't notice this problem in the "test" branch. Here's the current config:

{
  "channels": [
    {
      "deep_link_content_id": "703b7a51-6290-4d92-6826-c52f4e23519f",
      "id": "A&EHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "A&E TV - DTV",
      "roku_app_id": "140474",
      "tune_delay": 1,
      "tvc_guide_stationid": "51529"
    },
    {
      "deep_link_content_id": "6b8b578e-eaa0-8086-4803-340763f93d36",
      "id": "APLHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "APL - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "57394"
    },
    {
      "deep_link_content_id": "1c362f35-5526-952d-b892-b1b8492d3d54",
      "id": "BETHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "BET - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "63236"
    },
    {
      "deep_link_content_id": "aad256ef-1e09-f926-a05e-2591a809ffff",
      "id": "BRVOHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Bravo - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58625"
    },
    {
      "deep_link_content_id": "61086ae5-48ce-8085-6d40-1da956771eba",
      "id": "CMTHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "CMT - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "10138"
    },
    {
      "deep_link_content_id": "d3603aea-f5d8-e789-786c-43c5e8799428",
      "id": "CNNHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "CNN - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58646"
    },
    {
      "deep_link_content_id": "deeplinkData=%7B%22serviceKey%22%3A%226559054711524489117%22%2C%22type%22%3A%22LINEAR_CHANNEL%22%2C%22action%22%3A%22PLAY%22%7D",
      "id": "COMHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "CC TV - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "62420"
    },
    {
      "deep_link_content_id": "dcccb5d2-a567-e7a7-a1a2-c12d4b83c0c8",
      "id": "COOKHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Cook - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "68065"
    },
    {
      "deep_link_content_id": "9fd00aad-1cc7-cf23-ba3e-bae853bd6165",
      "id": "COZI",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Cozi - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "89994"
    },
    {
      "deep_link_content_id": "d5ad3ec8-623a-b0ae-9335-a2d09fbc850c",
      "id": "DESTHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Dest Amer - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "60468"
    },
    {
      "deep_link_content_id": "1755a18d-4cf4-8440-8f4a-bd73849cd9d6",
      "id": "DSCHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "DSC - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "56905"
    },
    {
      "deep_link_content_id": "b4bd8603-8a28-c738-450b-b43807610760",
      "id": "E!HD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "E! - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "61812"
    },
    {
      "deep_link_content_id": "76c132b0-fa3f-ac34-bc39-b0fecdc68e49",
      "id": "EARTHX",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "EarthX - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "126128"
    },
    {
      "deep_link_content_id": "3ef9f466-918c-40c8-a141-280f8d15f623",
      "id": "FETV",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "FeTV - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "73413"
    },
    {
      "deep_link_content_id": "7822f08f-c09d-d890-2b46-948766f9f571",
      "id": "FOODHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Food - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "12574"
    },
    {
      "deep_link_content_id": "5f3323ab-7390-8fcc-177f-bf9cc8000bcf",
      "id": "FNCHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Fox News - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "60179"
    },
    {
      "deep_link_content_id": "d3046aab-71b5-2d44-1b53-fcab4c9d7cad",
      "id": "FRFMHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Freeform - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "59615"
    },
    {
      "deep_link_content_id": "f1281894-b977-5b3a-596d-5cf3b1b176ca",
      "id": "FXHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "FX - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58574"
    },
    {
      "deep_link_content_id": "a56d1955-3f16-b9d1-a531-89755221ccf2",
      "id": "FXM",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "FXM - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "14988"
    },
    {
      "deep_link_content_id": "79dfae40-37b1-adf0-d95b-97c72f792a02",
      "id": "FXXHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "FXX - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "66379"
    },
    {
      "deep_link_content_id": "2238cd22-7e7a-89d3-d219-aea6b94d292f",
      "id": "FYIHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Fyi - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58988"
    },
    {
      "deep_link_content_id": "23f0fc84-d285-c4a1-a4c9-dfb383ed77db",
      "id": "GET",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Get - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "132748"
    },
    {
      "deep_link_content_id": "3e228444-bc03-2b53-fe94-311f35388702",
      "id": "H&I",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "H&I - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "120460"
    },
    {
      "deep_link_content_id": "deaa46a3-836f-58f3-f897-73a42289a940",
      "id": "HGTVHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "HGTV - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "14902"
    },
    {
      "deep_link_content_id": "3d2a7de5-af2e-b845-da1c-17d51e5f156a",
      "id": "HISTHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Hist - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "57708"
    },
    {
      "deep_link_content_id": "6d1f5d8a-9616-b2aa-fd67-190f5f108591",
      "id": "HLN",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "HLN - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "10145"
    },
    {
      "deep_link_content_id": "bab3ef03-eeac-b5b1-a157-1a98bf4fbbde",
      "id": "LIFEHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Lifetime - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "60150"
    },
    {
      "deep_link_content_id": "25ad7277-733d-16f9-965d-6e80308a64fa",
      "id": "MAGNHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Magnolia - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "67375"
    },
    {
      "deep_link_content_id": "83321f4e-2ac2-9dc4-a1fd-7b0a0f8c1e5f",
      "id": "METV",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Me TV - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "122696"
    },
    {
      "deep_link_content_id": "6ea83d29-e16f-7ab5-397e-6efb32bbcba9",
      "id": "MSNBC",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "MSNBC - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "64241"
    },
    {
      "deep_link_content_id": "219e6ef1-a7d1-b89d-fbb8-f190e7832bd2",
      "id": "NGWHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "NG Wild - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "67331"
    },
    {
      "deep_link_content_id": "2b76c29e-325d-a699-9a6c-99bbe6a7c765",
      "id": "NGCHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Nat Geo - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "49438"
    },
    {
      "deep_link_content_id": "334adfc3-a627-41bd-7724-f313e9101697",
      "id": "OVTVHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Ovation - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "69061"
    },
    {
      "deep_link_content_id": "c88d76e7-6a4c-435c-65f2-5ea6c63a3c9e",
      "id": "OWNHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "OWN - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "70388"
    },
    {
      "deep_link_content_id": "6924fc10-8306-4009-6495-714764f0dbf6",
      "id": "PARHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Par Movies - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "59186"
    },
    {
      "deep_link_content_id": "148e9301-574b-e202-9f1d-5eaac40731ac",
      "id": "SYFYHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "SYFY - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58623"
    },
    {
      "deep_link_content_id": "b24b7b6f-c840-e216-e73c-7d32d9eecbda",
      "id": "TVLDHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "TV Land - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "73541"
    },
    {
      "deep_link_content_id": "ce75e450-1ad3-1794-1b74-351de95ea6ad",
      "id": "UPTV",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Up TV - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "44940"
    },
    {
      "deep_link_content_id": "57b6cb4b-1a42-2381-901c-16a2813c6492",
      "id": "FMC",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "FMC - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "122068"
    },
    {
      "deep_link_content_id": "eaf8f979-a1ee-40e1-9162-77dc4873c9a4",
      "id": "GFAMHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "GAFam - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "82892"
    },
    {
      "deep_link_content_id": "3097b4cc-3b54-14e3-c801-796f2316040f",
      "id": "GRIT",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Grit - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "89922"
    },
    {
      "deep_link_content_id": "175ff6e3-db6f-1f74-327a-ac998f93b987",
      "id": "INSPHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Insp - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "82773"
    },
    {
      "deep_link_content_id": "24c133b3-ae88-b1b2-efdb-357127a9d1d7",
      "id": "SHRTTV",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Shorts - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "67454"
    },
    {
      "deep_link_content_id": "1653bae3-dad0-8d4f-7524-8090a1a46e86",
      "id": "SMTHHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Smith - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "58532"
    },
    {
      "deep_link_content_id": "61160753-1873-9662-f8cf-3aea8f6e4239",
      "id": "SONYHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "Sony - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "69130"
    },
    {
      "deep_link_content_id": "cca34ba0-ffc4-bcdd-16d1-20469ae2f1c9",
      "id": "TCMHD",
      "keep_alive_enabled": true,
      "keep_alive_key": "Enter",
      "media_type": "live",
      "name": "TCM East - DTV",
      "roku_app_id": "140474",
      "tvc_guide_stationid": "64312"
    },
    {
      "deep_link_content_id": "091f4804-717e-4d32-8255-74edacc54453",
      "id": "PPLUSHISUN",
      "media_type": "live",
      "name": "History and Undiscovered - PPlus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121825"
    },
    {
      "deep_link_content_id": "6ceba331-e20a-4054-9805-0976ccce83b3",
      "id": "PPLUSM",
      "media_type": "live",
      "name": "Movies - PPLus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121830"
    },
    {
      "deep_link_content_id": "6dfa4926-b7bf-4596-bb61-955276e91fe8",
      "id": "PPLUSNOS",
      "media_type": "live",
      "name": "Nostalgic Hits - PPLus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121823"
    },
    {
      "deep_link_content_id": "c6427912-4c06-47cd-b440-974eb40060be",
      "id": "PPLUSTVC",
      "media_type": "live",
      "name": "TV Classics - PPLus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121814"
    },
    {
      "deep_link_content_id": "a551b933-6237-48ea-a6b6-0ffe5c8f56f7",
      "id": "PPLUS80SC",
      "media_type": "live",
      "name": "80's Sitcoms - PPLus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "124634"
    },
    {
      "deep_link_content_id": "99100afa-9327-4750-a2cf-5cb9549410cb",
      "id": "PPLUS90SC",
      "media_type": "live",
      "name": "90's Sitcoms - PPLus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "124632"
    },
    {
      "deep_link_content_id": "c8889c21-6712-4044-abcb-b304a83609f9",
      "id": "PPLUSLAUGH",
      "media_type": "live",
      "name": "24/7 Laughs - PPlus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121815"
    },
    {
      "deep_link_content_id": "5fbf71e9-73a0-4839-a838-46d092b301aa",
      "id": "PPLUSAA",
      "media_type": "live",
      "name": "Adult Animation - PPlus",
      "roku_app_id": "31440",
      "tvc_guide_stationid": "121813"
    }
  ],
  "epg_channels": [],
  "tuners": [
    {
      "encoder_url": "http://192.168.1.161:8090/stream2",
      "name": "Roku3",
      "priority": 3,
      "roku_ip": "192.168.1.250"
    },
    {
      "encoder_url": "http://192.168.1.161:8090/stream1",
      "name": "Roku2",
      "priority": 2,
      "roku_ip": "192.168.1.183"
    },
    {
      "encoder_url": "http://192.168.1.161:8090/stream0",
      "name": "Roku1",
      "priority": 1,
      "roku_ip": "192.168.1.165"
    }
  ]
}```

Sorry it took so long to get back. I had a quick emergency at work. I'll let you know something in a few.

No need to rush here. The program is working fine for my daily recordings as it is. I'm just trying to help work out little bugs as I notice them.

Thank you. I have found the logic bug and should have it tested in a little while.

I pushed the fix. Once you update the container, you should be able to save changes. Download a config backup just in case, but you shouldn't need it. Once you click save changes, even if nothing changed, it will add the json calls that are missing automatically to the config file.

Cool. I'll grab the update and give it a test after my current recordings complete.

It's good now. Just added playlist info to all of my channels. It saved without any problem :slightly_smiling_face:

Download a config backup before updating.

I moved the latest pre-release to the test branch. This version has some changes to the docker volume that will require using a docker-compose.yml for installs. You will also need a free API key from The Movie Database (TMDB) to supply metadata for the recording feature. This is all explained in the README file on the test branch GitHub page.

The biggest change to this release is the ability to record On Demand content from apps like Netflix or HBO Max. I spent the better part of two weeks trying to add subtitles from Opensubtitles.com to the recordings. While I learned a lot about adding subtitles, I also learned syncing them to a recording with commercials is a PITA. I may work on a new project that removes commercials and adds the subs to recordings, but that will be a ways off.

It still needs some finishing up, but the big stuff is all done. Here is the link to the Readme

1 Like

I'm having a really hard time finding station ids for this. I'm using Philo. With Zap2It no long available, what is the easiest way to find the gracenote station id?

1 Like

Use Gracenote TV Listings-Zap2it

1 Like

There are several applications available to find them. I have one that I made to easily find them here:

I believe there is one on Project One Click also.