GitHub script: Pluto, Samsung, Stirr, Tubi, Plex, PBS and Roku Playlist (M3U8)

I'm more than happy with the docker containers and Playlist Manager collecting, combining and curating through all of the popular FAST channels provided by the bunch. But this new project caught my eye too and I thought it was interesting enough to share...

This script generates an m3u8 playlist from any of the channels listed below, It is based on the original script created by matthuisman, which can be found at matthuisman's GitHub repository.

  • Plex
  • Roku
  • SamsungTVPlus
  • PlutoTV
  • PBS
  • PBSKids
  • Stirr
  • Tubi

:warning: Please note: It is recommended to add the Google Apps Script to your own Google account or deploy the script to one of the other services, rather than relying on this publicly shared URL long-term. Instructions here: GitHub - dtankdempse/free-iptv-channels: This script generates an m3u8 playlist from the channels provided by services such as Pluto, Samsung, Stirr, Tubi, Plex, PBS, and Roku.

Download the playlist in your browser and open the file in a text editor. The EPG URL to paste into CDVR is displayed at the top:

#EXTM3U url-tvg="EPG_URL_HERE"

3 Likes

Thank you,

I took a quick look and it's very interesting. I'll be looking into it more.

Shhhh!
I say DELETE THIS POST.
It's up to users to know how to search and find.
Too much easy info leads to things disappearing
Just my opinion.
DELETE
Thanks for considering...

Installed and got Roku and STIRR configured, Roku EPG is working for me, but STIRR didn’t like the EPG string… didn’t setup any additional ones since I already had running on other containers… Thanks, appear to be a one shop container…

See:

In other words, Stirr is currently a zombie, do not use.

1 Like

:+1:

1 Like

I wrote a Docker Compose / Portainer Stack that works for this:

services:
  free-iptv-channels:
    image: dtankdemp/free-iptv-channels:${TAG:-latest}
    container_name: free-iptv-channels
    ports:
      - "${PORT:-4242}:4242"
    environment:
      - TZ=${TIMEZONE:-UTC}
    restart: unless-stopped

And the optional environmental variables:

image

I've already got everything covered with the other Dockers, so don't have a particular use for this one, but maybe someone else does... @bnhf, if you want to add to the collection?

1 Like

Cool, thanks!

I'm in the same boat. But now I'm a little curious about adding the Google Apps Script to a Google account rather than relying on this publicly shared URL long-term, or using the other dockers.

How to Add the Script to Your Google Account (code.gs)

Go here and click the "New Project" button in the upper left corner. Then, copy the script from code.gs and paste it into the script editor. Once done, deploy the script.

Follow this video tutorial to learn how to deploy a Google Apps Script:

How to Deploy a Google Web App

During the deployment process, make sure to select "Anyone" for the "Who has access" option, so the app can access the URL and load without requiring authentication.

Once deployed, you will get a URL similar to:

https://script.google.com/macros/s/...gwlprM_Kn10kT7LGk/exec

To use the script, you need to add the region and service parameters at the end of the URL. For example:

https://script.google.com/macros/s/...gwlprM_Kn10kT7LGk/exec?region=us&service=Plex

Simply replace region=us and service=Plex with the appropriate region and service values from the available parameters listed above.

Tip: For a cleaner and more concise URL, consider using a URL shortener like tinyurl.com and appending the necessary parameters at the end.

If anyone else tries this, I'm interested to hear how it works out for you.

Why not just run the Docker Container instead?

It's just a different option, delegating this particular task to Google Apps instead.

If I were to set up a new CDVR user, like my mom (for example) on a new installation at her home, being able to easily integrate a couple of popular FAST sources alongside her OTA channels, without having to install any containers or even Docker at all, feels like an interesting option to consider, that's all.

It won't be for everybody. I suspect "power users" like you and me will still want more granular, local control and the full suite of updated Docker containers to supercharge our CDVR setups most flexibly. Personally speaking, now that I have all of these channels combined, curated and organized nicely by Playlist Manager, I'm not interested in changing anything else in this regard.

Of course, not everyone matches that description.

4 Likes

As mentioned, they recommend using a docker, the Google Apps script, or some other deployment rather than relying on the publicly shared URL long-term.

Out of sheer curiosity I tried this just now, following these easy instructions and this video:

For my testing I chose the Roku playlist. I can report that, unfortunately, the resulting M3U URL doesn't work with Channels DVR as a custom source, the error reported is "invalid source url: malformed M3U provided." I tried the long URL from my web app deployment, and I also tried with a tinyURL as the Github page suggested, adding the strings at the end as instructed to both. Neither worked.

If I download the same M3U file and open it, copy and paste it as text instead, that works fine to add Custom Channels ... but of course that's a static export, so the 163 channels won't update if there are changes. Here's what the first chunk of it looks like, I'm not sure what makes it "malformed" but if anyone else has a clue I'll report it back to the Github dev. I’m guessing it has something to do with how he’s sticking the XML address in there at the top.

#EXTM3U url-tvg="https://github.com/matthuisman/i.mjh.nz/raw/master/Roku/all.xml.gz"
#EXTINF:-1 channel-id="ed1ad60fa9a05f34bf5d4e8b09460d6b" tvg-id="ed1ad60fa9a05f34bf5d4e8b09460d6b" tvg-chno="393" tvg-name="About K-Content by CJ ENM" tvg-logo="https://images.sr.roku.com/idType/roku/context/trc/id/ed1ad60fa9a05f34bf5d4e8b09460d6b/https%3A%2F%2Fimage.roku.com%2Fbh-uploads%2Fproduction%2FinfoHUDLogo%2F1665780149983_INFO_HUD_72dpi_copy.png" group-title="", About K-Content by CJ ENM
https://jmp2.uk/rok-ed1ad60fa9a05f34bf5d4e8b09460d6b.m3u8
#EXTINF:-1 channel-id="409951b52fa75a1684ba8efe5b724e91" tvg-id="409951b52fa75a1684ba8efe5b724e91" tvg-chno="257" tvg-name="ACC Digital Network" tvg-logo="https://images.sr.roku.com/idType/roku/context/trc/id/409951b52fa75a1684ba8efe5b724e91/https%3A%2F%2Fimage.roku.com%2Fbh-uploads%2Fproduction%2FinfoHUDLogo%2F1657669780439_ACCDigitalNetwork_260x147_centered.png" group-title="", ACC Digital Network
https://jmp2.uk/rok-409951b52fa75a1684ba8efe5b724e91.m3u8

And speaking of updates: I learned from this experiment that if/when there are changes at any of the FAST providers included, that require free-iptv-channels code to be updated to keep working, in order to use that update we'd have to copy and paste the new code into the script editor and manually re-deploy. That's not nearly as easy as invoking watchtower with Portainer and certainly something to keep in mind when choosing Custom Channel integration methods. Which brings me back to this post, thanks @babsonnexus for this:

If I were starting over I'd probably go this route, at least for these particular FAST channels.

I have no idea if this it but just thinking out loud: I don't remember seeing anything after "#EXTM3U" on the first line in playlists that Channels uses. And does Channels even process the "url-tvg" tag?

Just 2 things I have noticed. Could be the problem? :man_shrugging:

Frndly uses x-tvg-url but Channels DVR ignores it

#EXTM3U x-tvg-url="http://192.168.1.3:8183/epg.xml?gracenote=include"

Maybe url-tvg is invalid.

That was my first hunch too, but what invalidated that theory was the fact that when I use the publicly shared URL for this script and the Roku source, the file is recognized, and 163 channels are loaded into Channels DVR just fine. The contents of both downloaded text files are identical.

UPDATE: I asked the developer, and got a quick response:

Open your deployed URL in a private browser window where you're not logged into Google. If it prompts you to log in, that's the issue. To fix it, redeploy the script and ensure you select 'Anyone' for the 'Who has access' setting during the deployment process. This will make the app accessible without requiring authentication.

With that, the issue is resolved. I could have sworn I did select "Anyone" when deploying it, I watched the tutorial video explaining this, after all. Alas, when I went back to check I saw he was correct. I re-deployed with "everyone" having access, and now it's working fine. Pretty cool, actually :slight_smile:

I browsed around what Stirr's streaming, there's still some content but nothing unique in the FAST space. The juice doesn't seem worth the squeeze.

Roku's working great, testing with the Google Web App method right now. As far as I know, prior to this script, there hasn't been a docker container for Roku. All of the others, yes, but not Roku.

I meant using the docker image https://github.com/dtankdempse/free-iptv-channels?tab=readme-ov-file#using-the-docker-image instead of the Google Web App or node.js methods

Ah yes, that’s an option too. I’ll revert back to my first answer, I could see this being interesting for folks who may want to avoid docker container maintenance for whatever reason, maybe just want one FAST source?

I enjoy comparing different ways to skin the same cat, it’s been fun poking around and learning something new along the way.

2 Likes

I went back to the original Samsung Tv plus docker.
apparently the free iptv docker exposes the channels that have DRM.
Get tv and get comedy are both on Samsung plus but both have DRM.