ESPN+ & FOX Sports with Custom Channels via EPlusTV


I've played a bit with the EPlusTV project from GitHub which, after you've added your authorization, provides you with both an m3u and xmltv data for ESPN+ streams. These can easily be added to Channels to let you watch the live streams. It works well, if you employ it the right way.

Out of the box, the channels have information for the airing sporting events and art for the airings. The airing data includes all the approrpiate genres. They look great in Channels.

The issue is, it provides a ton of channels that are not always broadcasting. You end up with a lot of empty channels and it can look bad and waste real estate in your guide. I've found that the best way to use these custom channels is by using a Channels Collection with Automatic Channels. This way, only the channels that are currently broadcasting end up in your guide.


Automatic Channels in your Channel Collections will pull in channels dynamically based on the rules that you define.

By using Automatic Channels, you can get only the ESPN+ channels currently broadcasting into your collection, hence hiding all of the empty channels.

There's a couple ways you can use Automaic Channels to really maximize the usage of these ESPN+ channels:

  1. In your Sports collection, just add the Sports category and the ESPN+ channels currently broadcasting will get pulled right in.

  2. Create an ESPN+ Channel Collection and don't add any channels manually. Using the Automatic Channels rules, ignore every source except your ESPN+ source. Then use the Sports category. This will then give you a Channel Collection that is only the ESPN+ channels that are currently broadcasting.

  3. If you're only interested in the Hockey events from ESPN+, add the "hockey" genre to your channel collection so that only Hockey events are added to the collection.

Here's what a collection looks like when adding all of the ESPN+ channels:

Here's what a collection looks like when ESPN+ channels are pulled in with Automatic Channels:

Here's what a collection looks like with JUST ESPN+ channels using Automatic Channels:

Wrap Up

The EPlusTV is easy to set up and does a great job getting these streaming events into Channels. It's just worth putting a little effort into some strategy to make things look nice in Channels without flooding your guide with empty channels.


Ah interesting, I never enquired about Plus as I though these streams were events as opposed to being linear as channels requires.

Will give this a go, thank. you

1 Like

They are, but this is the power of Custom Channels.


Right so once we sort out how to handle the final frontier widevine, we'll be set :relaxed:


This is great - i tried out eplus but abandoned it due to the issues you have now fixed!

Question for anyone that knows - if I were to try to manage local blackout via a vpn - would I only need to run the vpn from the eplus container or would I need to also run it on the viewing client (or on the server or on both or on all three)?



Just the server, I have the docker and TVE running via smart dns very reliably

Sorry about the noob questions here, but I am very intrigued to get my first Docker attempt to work. I have a subscription to ESPN+ so I'd love to jump on in. So far, I've installed Docker CE CLI on my ReadyNAS Pro 4, and installed in order to access it using a web UI. I've attempted to 'pull' the image from the Docker Hub: docker pull m0ngr31/eplustv and finally it's listed within my Images. But I have no clue what to do next! I think I found the right place to enter the Environment Variables, and I entered my ESPN+ credentials, not really sure what to enter under:

What accessable URL your clients will be connecting from.
For example:

I think I'm close, but missing something pretty obvious.

1 Like

Portainer seems overkill. Just run from cli using instructions on the eplus git. Be sure to replace the local volumes you want to use with the ones he has in the example and that they have wide open permissions. (When docker has -v /dirlocal:/dir it means map the /dir directory inside the container to /dirlocal on the machine you’re running docker on.)

1 Like

Thanks for the reply. As I said I'm new to this stuff and needed some kind of UI to use it. I couldn't figure out how to run CLI without the Portainer UI.


If I'm reading right, this will be AWESOME for team passes against ESPN+

Game changer!


I'm confused as to what I should change the ACCESS_URI above to.


In most cases it will be the IP address of your docker host. in the run command provided on git you'll notice -p 8000:8000 which is essentially a port map in the format of host:container so it's mapping the listening port 8000 of your docker host to port 8000 of the container.

So assuming you leave it at 8000:8000 you're changing ACCESS_URI to



Still cant get it to work, but I have been making progress. I got the stirr-for-channels, pluto-for-channels, and even the matty8199/channels-baseball working. The MLB one required me to edit the port from 8080 to 8088 (for example) but I kept the container as 8080, and that worked. I tried something similar with the ESPN one, I left the container at 8000, but selected a port of 8095, but no luck. Also thought it was odd that the environment variable is: ACCESS_URI and not ACCESS_URL (I've tried it both ways)

I'm not able to get it running either. Have Pluto running perfectly, but this wont work. I've tried multiple ports that aren't being used with no luck. I'm running on Docker, btw.


What is that PATH env. variable and what is that playwright browser variable? EDIT: i suspect portainer must be pulling them from the image itself.. all new to me.

I guess only thing I would say is wouldn’t the slider for publish exposed port need to be on?

1 Like

I wasn't able to get it working either. Looks like it's because I'm running 32 bit Raspberry Pi OS and it requires 64 bit. Tempted, but not quite ready to completely rebuild my pi just yet as it's been working just fine.

I still cannot get this working. I'm running Docker on a Win10 machine as my server. I pull the image then use the docker run command exactly as they have it except for inserting my ESPN login credentials and editing the server URL. I keep getting this error:

(node:18) UnhandledPromiseRejectionWarning: Error: EACCES: permission denied, mkdir '/app/tmp/eplustv'

1 Like

Simply amazing!

For me, this is a killer feature. The house of mouse should not only not complain, but give some kind of royalties to m0ngo31 & company and Channels for fixing the absolutely atrocious discovery and overall user experience of the ESPN+ platform.

Anyway, after some futzing around got this working. Sharing a couple of the spots that hung me up in case it is helpful to others:

  1. Just make appropriate adjustments and execute the "Docker Run" command. I am not that experienced with docker and inhearently lazy so generally try to translate the run commend into the dumbed down Synology docker wizard. But over time realized that it doesn't always work. I believe it is an issue with how the Synology docker wizard deals with volumes being different than what the container expects. In any case the container started without issue.
  2. The environment variable for ACCESS_URI is the docker host. Not sure why that was confusing to me, but I spent a few cycles on that one.
  3. The endpoints (the information necessary for defining custom sources) are different than the ones for Pluto-for-channels. (http://[hostip]:8000/channels.m3u, and http://[host_ip]:8000/xmltv.xml) I had just copied the endpoints without thinking, that was a few cycles wasted. I didn't see them in the readme, but found them reference in a closed issue. I should probably do more than skim the instructions next time.
1 Like

That's great news, I was thinking that it was broken for all. I just tried it again with no luck. So in my example, my docker is, and I'm attempting to use port 8000. So I'm entering host = 8000 -> container = 8000, and for ACCESS_URI =
Then, I test it by trying to enter because usually a file is downloaded to show it worked. But I'm getting This site can't be reached refused to connect.