cool, I can omit that as didn't know it was being used in that manner
@tmm1
I am trying to clean up the EPG data a bit and noticed that the EpisodeTitle isn't always present like in the example below even though the raw data appear to be similar
HAS EPISODE TITLE
{
"Source": "xmltv:",
"Channel": "9004",
"Time": 1742414400,
"Duration": 1800,
"Title": "World's Funniest Videos Top 10 Countdown",
"EpisodeTitle": "World’s Funniest Videos Top 10 Countdown",
"Summary": "Humor has no international borders. We're bringing you the most hilarious moments across the globe.",
"Image": "https://canvas-lb.tubitv.com/opts/XN-z3Emy4Q3MZw==/763ed9f1-e37b-4b90-a54f-1b5163611a17/CN4HEMcEOgUxLjEuNg==",
"SeriesID": "World's Funniest Videos Top 10 Countdown",
"ProgramID": "World's Funniest Videos Top 10 Countdown/S3E35",
"SeasonNumber": 3,
"EpisodeNumber": 35,
"ContentRating": "TV-PG",
"SearchScore": 0.0128343807778912,
"Raw": {
"xmltv": "\u003Ctv generator-info-name=\"\" generated-ts=\"\"\u003E\n\u003Cchannel id=\"653208\"\u003E\n \u003Cdisplay-name\u003EAlways Funny\u003C/display-name\u003E\n \u003Cicon src=\"https://canvas-lb.tubitv.com/opts/fx0OZHA-1_ZDwA==/e8f543f1-3086-4896-a76e-20e86b782bd3/CHgQeDoFMS4xLjZAAQ==\" /\u003E\n \t\u003Clcn\u003E9004\u003C/lcn\u003E\n\u003C/channel\u003E\n\n\u003Cprogramme channel=\"653208\" start=\"20250319200000 +0000\" stop=\"20250319203000 +0000\"\u003E\n \u003Ctitle\u003EWorld's Funniest Videos Top 10 Countdown\u003C/title\u003E\n \u003Csub-title\u003EWorld’s Funniest Videos Top 10 Countdown\u003C/sub-title\u003E\n \u003Cepisode-num system=\"onscreen\"\u003ES03E35\u003C/episode-num\u003E\n \u003Cepisode-num system=\"xmltv_ns\"\u003E02.34\u003C/episode-num\u003E\n \u003Cdesc\u003EHumor has no international borders. We're bringing you the most hilarious moments across the globe.\u003C/desc\u003E\n \u003Crating\u003E\n \u003Cvalue\u003ETV-PG\u003C/value\u003E\n \u003C/rating\u003E\n \u003Cicon src=\"https://canvas-lb.tubitv.com/opts/XN-z3Emy4Q3MZw==/763ed9f1-e37b-4b90-a54f-1b5163611a17/CN4HEMcEOgUxLjEuNg==\" /\u003E\n \u003C/programme\u003E\u003C/tv\u003E"
}
},
NO EPISODE TITLE
{
"Source": "xmltv:",
"Channel": "9004",
"Time": 1742416200,
"Duration": 1800,
"Title": "World's Funniest Videos Top 10 Countdown",
"Summary": "Humor has no international borders. We're bringing you the most hilarious moments across the globe.",
"Image": "https://canvas-lb.tubitv.com/opts/AjMY9cL3ISjOOQ==/984fcda7-861f-4b83-8601-05e1f874b89a/CN4HEMcEOgUxLjEuNg==",
"SeriesID": "World's Funniest Videos Top 10 Countdown",
"ProgramID": "World's Funniest Videos Top 10 Countdown/S3E12",
"SeasonNumber": 3,
"EpisodeNumber": 12,
"ContentRating": "TV-PG",
"SearchScore": 0.010351623351559,
"Raw": {
"xmltv": "\u003Ctv generator-info-name=\"\" generated-ts=\"\"\u003E\n\u003Cchannel id=\"653208\"\u003E\n \u003Cdisplay-name\u003EAlways Funny\u003C/display-name\u003E\n \u003Cicon src=\"https://canvas-lb.tubitv.com/opts/fx0OZHA-1_ZDwA==/e8f543f1-3086-4896-a76e-20e86b782bd3/CHgQeDoFMS4xLjZAAQ==\" /\u003E\n \t\u003Clcn\u003E9004\u003C/lcn\u003E\n\u003C/channel\u003E\n\n\u003Cprogramme channel=\"653208\" start=\"20250319203000 +0000\" stop=\"20250319210000 +0000\"\u003E\n \u003Ctitle\u003EWorld's Funniest Videos Top 10 Countdown\u003C/title\u003E\n \u003Csub-title\u003EWorld's Funniest Videos Top 10 Countdown\u003C/sub-title\u003E\n \u003Cepisode-num system=\"onscreen\"\u003ES03E12\u003C/episode-num\u003E\n \u003Cepisode-num system=\"xmltv_ns\"\u003E02.11\u003C/episode-num\u003E\n \u003Cdesc\u003EHumor has no international borders. We're bringing you the most hilarious moments across the globe.\u003C/desc\u003E\n \u003Crating\u003E\n \u003Cvalue\u003ETV-PG\u003C/value\u003E\n \u003C/rating\u003E\n \u003Cicon src=\"https://canvas-lb.tubitv.com/opts/AjMY9cL3ISjOOQ==/984fcda7-861f-4b83-8601-05e1f874b89a/CN4HEMcEOgUxLjEuNg==\" /\u003E\n \u003C/programme\u003E\u003C/tv\u003E"
}
},
This difference leads to the following

Is there something I'm not seeing
From XML
<programme channel="653208" start="20250319200000 +0000" stop="20250319203000 +0000">
<title>World's Funniest Videos Top 10 Countdown</title>
<sub-title>World’s Funniest Videos Top 10 Countdown</sub-title>
<episode-num system="onscreen">S03E35</episode-num>
<episode-num system="xmltv_ns">02.34</episode-num>
<desc>Humor has no international borders. We're bringing you the most hilarious moments across the globe.</desc>
<rating>
<value>TV-PG</value>
</rating>
<icon src="https://canvas-lb.tubitv.com/opts/XN-z3Emy4Q3MZw==/763ed9f1-e37b-4b90-a54f-1b5163611a17/CN4HEMcEOgUxLjEuNg==" />
</programme>
<programme channel="653208" start="20250319203000 +0000" stop="20250319210000 +0000">
<title>World's Funniest Videos Top 10 Countdown</title>
<sub-title>World's Funniest Videos Top 10 Countdown</sub-title>
<episode-num system="onscreen">S03E12</episode-num>
<episode-num system="xmltv_ns">02.11</episode-num>
<desc>Humor has no international borders. We're bringing you the most hilarious moments across the globe.</desc>
<rating>
<value>TV-PG</value>
</rating>
<icon src="https://canvas-lb.tubitv.com/opts/AjMY9cL3ISjOOQ==/984fcda7-861f-4b83-8601-05e1f874b89a/CN4HEMcEOgUxLjEuNg==" />
</programme>
Hmm, I think we ignore sub-title when it's exactly the same as the title.
But the first xml entry uses a smart quote
good to know.
I've updated the code to do some checking for sub-title being equal to the title. Also added content rating and if the rating follows the mpaa the program gets classified as a movie. Also did some reoprding of steps to try and avoid the report issue of programs not updating after 4 hours
There seems to be a problem with the way this is formatted ...
<episode-num system="xmltv:">Nikita/S1E19</episode-num>
Getting this error ...
20-03-2025 01:14:50,383 <programme><episode-num system=xmltv:jgomez177 /> /> xmltv.programme.episode-num.system.showID_Value if its the showID
20-03-2025 01:14:50,384 <programme><episode-num system=xmltv:jgomez177 /> /> xmltv.programme.episode-num.system.showID_Value if its the showID
Extracted from Channels DVR
<tv source-info-name="channels-dvr">
<channel id="4118">
<lcn>4118</lcn>
<display-name>Nikita</display-name>
<icon src="https://canvas-lb.tubitv.com/opts/sH9BJ8h1eAqxMg==/bf6f69f6-4495-4bc2-94f9-fd91877e36f0/CHgQeDoFMS4xLjZAAQ=="/>
</channel>
<programme start="20250320145210 +0000" stop="20250320153654 +0000" channel="4118">
<title>Nikita</title>
<sub-title>S02:E06 - 343 Walnut Lane</sub-title>
<desc>Nikita and Michael locate her birth father (DAVID KEITH).</desc>
<icon src="https://canvas-lb.tubitv.com/opts/u-jU3cxc87usbQ==/eadcee90-9432-4a08-8a22-3a16cb34944d/CN4HEMcEOgUxLjEuNg=="/>
<series-id system="xmltv:">Nikita</series-id>
<previously-shown/>
<episode-num system="xmltv:">Nikita/S2E6</episode-num>
<episode-num system="onscreen">S2E6</episode-num>
<episode-num system="xmltv_ns">1.5.</episode-num>
<rating>
<value>TV-14</value>
</rating>
</programme>
Are you consistently seeing errors or only that single one for S1E19?
I am not seeing any errors with the instance I setup
This is the xml being generated for the episode you reference:
<programme channel="400000071" start="20250320145210 +0000" stop="20250320153654 +0000">
<title>Nikita</title>
<sub-title>S02:E06 - 343 Walnut Lane</sub-title>
<episode-num system="onscreen">S02E06</episode-num>
<episode-num system="xmltv_ns">01.05</episode-num>
<desc>Nikita and Michael locate her birth father (DAVID KEITH).</desc>
<rating>
<value>TV-14</value>
</rating>
<icon src="https://canvas-lb.tubitv.com/opts/u-jU3cxc87usbQ==/eadcee90-9432-4a08-8a22-3a16cb34944d/CN4HEMcEOgUxLjEuNg==" />
</programme>
which as you can see I do not generate the <episode-num system="xmltv:"> tag
Below is what Channels creates based off the above
<programme start="20250320145210 +0000" stop="20250320153654 +0000" channel="9121">
<title>Nikita</title>
<sub-title>S02:E06 - 343 Walnut Lane</sub-title>
<desc>Nikita and Michael locate her birth father (DAVID KEITH).</desc>
<icon src="https://canvas-lb.tubitv.com/opts/u-jU3cxc87usbQ==/eadcee90-9432-4a08-8a22-3a16cb34944d/CN4HEMcEOgUxLjEuNg=="/>
<series-id system="xmltv:">Nikita</series-id>
<previously-shown/>
<episode-num system="xmltv:">Nikita/S2E6</episode-num>
<episode-num system="onscreen">S2E6</episode-num>
<episode-num system="xmltv_ns">1.5.</episode-num>
<rating>
<value>TV-14</value>
</rating>
</programme>
I do have leading zeros on the system="xmltv_ns" which may be impacting?
I am seeing errors for anything that does not use Gracenote. The problem is when I extract the EPG from Channels to feed the Another APP it Adds the Nikita to The Season and episode.
Again I don't generate that within the docker (which looking back you did note earlier in the thread). Perhaps @tmm1 may have insight how that is generated from within Channels
I understand it is wierd ... @tmm1 Your looks good going in but when extracted it Adds the Title to the episodenum.
@tmm1 here is another sample ....
<programme start="20250320162959 +0000" stop="20250320170000 +0000" channel="4142">
<title>The Carol Burnett Show</title>
<sub-title>Cass Elliot, Pat Paulsen</sub-title>
<desc>Cass Elliot and Pat Paulsen star. Pat looks at "How To Be A Sensuous Female" and Cass joins 10th Avenue.</desc>
<icon src="https://canvas-lb.tubitv.com/opts/irhDxm5l41En_A==/3cfadee4-cf9e-4aa6-912d-e26c8e129787/CN4HEMcEOgUxLjEuNg=="/>
<series-id system="xmltv:">The Carol Burnett Show</series-id>
<previously-shown/>
<episode-num system="xmltv:">The Carol Burnett Show/S4E2</episode-num>
<episode-num system="onscreen">S4E2</episode-num>
<episode-num system="xmltv_ns">3.1.</episode-num>
<rating>
<value>TV-G</value>
</rating>
</programme>
I found a work around using NEXTPVR to get what I wanted did not have the problem of adding Title to episode-num ... so this definitely is the way Channels DVR is handling Extracting of guide data of the Tubi Docker to use in other apps. Thanks all.
NextPVR
<programme start="20250321145553 +0000" stop="20250321154217 +0000" channel="nextpvr-7376">
<title>Nikita</title>
<sub-title>S03:E14 - The Life We've Chosen</sub-title>
<desc>Amanda holds Alex hostage.</desc>
<episode-num system="xmltv_ns">2.13.0</episode-num>
<episode-num system="onscreen">S3 E14</episode-num>
</programme>
Updated to your latest version last night.
Seeing some new errors in the log today.
I'm restarting your container at 5:55PM every day and these errors appeared right after after the container restart today.
2025-03-23T00:55:19.649980327Z [INFO] ? http server started on [::]:7777
2025-03-23T00:55:19.711976459Z [INFO] Starting Scheduler thread
2025-03-23T00:55:19.712263320Z [INFO] Running EPG Scheduler
2025-03-23T00:55:19.712483919Z [INFO] EPG: Updating Channel Data
2025-03-23T00:55:19.712680083Z [INFO] Update Token via API Call
2025-03-23T00:55:19.712808899Z [INFO] Updating Token Session
2025-03-23T00:55:19.830480363Z [INFO] Close the Token API session
2025-03-23T00:55:19.830972166Z Connection Error. HTTPSConnectionPool(host='account.production-public.tubi.io', port=443): Max retries exceeded with url: /user/login (Caused by SSLError(SSLCertVerificationError(1, "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'account.production-public.tubi.io'. (_ssl.c:1010)")))
2025-03-23T00:55:19.831264921Z [ERROR] Error in use_signin_creds Connection Error. HTTPSConnectionPool(host='account.production-public.tubi.io', port=443): Max retries exceeded with url: /user/login (Caused by SSLError(SSLCertVerificationError(1, "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'account.production-public.tubi.io'. (_ssl.c:1010)")))
2025-03-23T00:55:19.831494700Z [ERROR] EPG: Connection Error. HTTPSConnectionPool(host='account.production-public.tubi.io', port=443): Max retries exceeded with url: /user/login (Caused by SSLError(SSLCertVerificationError(1, "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'account.production-public.tubi.io'. (_ssl.c:1010)")))
2025-03-23T00:55:19.831647426Z [INFO] EPG Scheduler Complete
Tubi certificate expired (or not valid for host/domain name)?
Was running fine since I updated the container last night until the restart today.
Bottom line. It's no longer refreshing EPG, so it's running out.
EDIT: Just to verify, I can sign in at the Tubi website without issues
UPDATE: Appears to have been a one time issue.
Container is now updating EPG.
Can you try taking out your restarting every day? I put some corrections for downloading every so often (had an issue with ordering in my previous logic why that wasn't working as expected)
OK. Will pause my container restart task (until it runs out of guide data again).
How often is the container supposed to grab new EPG from Tubi?
From the logs, it looks like every 6-7 hours.
I noticed that the guide data for this tubi container doesn’t correctly match movies as movies or tv shows as TV shows. I remember when the Pluto docker was created, @maddox @tmm1 made changes to it to correctly match up. Can this be done for Tubi as well?
So i'm finally asking about this
The tubi version of America's test kitchen which i like a lot has said "channel is no longer available" on its guide data for literal months now - no idea how to fix and nothing seems to fix
I'm seeing that channel with the same guide data on both Tubi and Samsung sources.
Of course the guide data for those sources isn't the same 16 days like an HDHR or TVE source.
Are you using gracenote or the epg from tubi - i have been using gracenote for a long time and thats where the issue is - i changed to epg and it looks like yours now
Can someone explain what each m3u and EPG option means?
I used the TUBI Playlist with the TUBI EPG and I'm not seeing any guide data. The m3u pulls the stations in fine. Just missing the guide data for some reason.

-
m3u for all the stations.
-
m3u for only the stations with Gracenote IDs so Channels can populate the guide data from Gracenote the same as OTA and TVE.
-
m3u for only the stations without Gracenote IDs, so you must use the EPG with it to get guide data. The idea is that you'd use each of these as separate sources for reasons articulated below.
-
The guide data you must use for non-Gracenote available stations, or all stations if you don't want to use Gracenote guide data. FYI, you want to use Gracenote guide data because it goes out for 2 weeks as opposed to just a few days of the EPG data.
-
The same as #4, except compressed to be a smaller file that is quicker to download.
Delete and recreate your guide data in Channels. Check the logs to confirm they are actually loading. If not, something is wrong with your settings or network.
