Non-Docker source for PlutoTV and Stirr m3u playlists and EPG

Hello everyone,

I've created a little PHP project (repo) that can replace the need to have a local Docker instance for PlutoTV and Stirr.

It's very simple. For PlutoTV, the project runs a slightly modified version of the pluto-for-channels script by @maddox in nodejs on my web server (thanks @maddox and the dev team!) .

Then my PHP script just replaces the deviceID and sid URL parameters with uniquely generated UUIDs upon each page load. So every use/access of the playlist.m3u file from the website is unique.

This should prevent any conflicts, dropouts, and disconnects that other online/public m3u files may have caused which do not have unique URL parameters in the stream URLs.

You can access the resulting m3u and EPG files here:

Where we're going, we don't need 'cords'

These links should work exactly the same as the files created by the local Docker instance.
The underlying m3u and epg files are automatically updated on the backend every three hours.

If you would like to use custom channel numbering instead of the default, use this link instead, say if you wanted to start Pluto channel numbers at 5000:

For Stirr, the stirr-for-channels GO repo by @robbiet480 runs in the background every 30 minutes and uses the 'national' STATION-ID. Those links are here:

The github repo is here:

Let me know if you have any questions or comments. Thank you.


Thank you so much!

1 Like

Also to note: while the pluto-for-channels project was created as a container, there is nothing stopping a user from using it as the basis to extract the base program and run it locally. IIRC, it's nothing more than a node.js app.


Great contribution to the community! Is there going to be a cost for you in providing this? If so, are you going to have a method of accepting donations for those want to express their appreciation?

1 Like

Hi, thanks for your feedback.

There's no cost to providing these links. IRL I run a few large websites and a dozen or so AWS instances, so this just lives within that infrastructure. No donations are necessary, but I really appreciate the offer!

If at some point the bandwidth becomes a significant cost factor, I may ask for donations, but I don't expect thousands of people to use this (but it would be cool if they did!).

Over the years I've benefited A LOT from open-source projects and services provided for free, so I'm happy for a change to be able to give back to not just this community, but the overall open-source movement.


Does the .m3u file update often? Should we copy that locally or run it from the URL?

Thank you for this!

The PlutoTV playlist.m3u file (this web link: ) updates every time the file is downloaded**. You can just put that URL into the Channels admin and it will (a) always be up to date and (b) unique from every other instance.

The underlying .m3u file generated by the pluto-for-channels script is updated every three hours (same as the Docker instance does).

** While the filename is playlist.m3u, it's actually a dynamic PHP program in the background that generates a unique file every time it is downloaded or accessed.


Gotcha! So the .m3u file is dynamic as well. Thanks.


Thanks - Looks like it works

However, I always have issues creating Passes for recuring airings.
They seem not to work - Only a direct Record using the Guide works.

Any clues on how to fix this?



Wow. Thanks. That was easy as pie. I kinda think that Channels is a premium service, these should already set up


Hi Romain,
I'm a bit new to Channels so I can't really tell you why that doesn't work.
Does creating Passes for recurring airings work with the Pluto-for-Docker m3u file but not for the links?


There are guide limitations with Pluto, including episode IDs that are not unique. As a result, recording from Pluto may produce unexpected results. I think some of the channels have better data than others, so your experience may vary quite a bit depending on the channel.


You're welcome.
I'm sure they could, but probably don't for legal reasons.

1 Like

I used DVR Channels in the past with locast and creating a PASS worked just fine

Now with Pluto, I would expect the same thing but apparently the way PASS works is not compatible with current EPG information (That PASS is using to identify a New program to record)...

Only a daily look at the Guide and press record works --- Not really user friendly ...

I actually went in the advanced mode for an individual PASS and saw there is a way to put different search strings for it... Will continue to see if I can find a solution there :wink: Stay tuned

1 Like

It has been mentioned before.
GIGO (Garbage In Garbage Out)
The Pluto EPG data coming from Pluto lacks a lot.


Ok, I've got GO running on the server, should have a non-Docker Stirr version up by tomorrow!


Ok, I did get Stirr to work for the "national" station ID.

I'll make a new thread for Stirr tomorrow. But for now if anyone wants to try it out tonight:

Start here (same as the Docker output) with Station ID, Channel count, Program count, and Last Update:

Direct links:

This was quick and dirty and could change tomorrow based on feedback. But please feel free to try it out and report back any issues. Thanks.


Thank you for setting these up for our use!

I already dumped Docker in favor of this. Pluto and Stirr was the only thing I was using Docker for so it was a no brainer.

1 Like

Great. Me too. :grinning:

PLEASE let me know if you have any issues with these m3u files -- i.e. disconnects, dropouts, etc.