Chrome Capture for Channels

Puppeteer created this folder tree when it was installed:
$HOME/.cache/puppeteer/chrome/linux-134.0.6998.165/
$HOME/.cache/puppeteer/chrome/linux-141.0.7390.78/
$HOME/.cache/puppeteer/chrome-headless-shell/linux-134.0.6998.165/chrome-headless-shell-linux64/
$HOME/.cache/puppeteer/chrome-headless-shell/linux-141.0.7390.78/chrome-headless-shell-linux64/
I used the executable in $HOME/.cache/puppeteer/chrome/linux-141.0.7390.78/ which identifies itself as "Google Chrome for Testing Version 141.0.7390.78 (Official Build) (64-bit)". Apparently, the "for Testing" version doesn't auto update, which might be a good thing in this application!

I am still usiing the manual way to do it, but if you modify main.js you can easily make full screen.

// Trigger fullscreen mode using the Fullscreen API
await new Promise(resolve => setTimeout(resolve, 1030));
await page.evaluate(() => {
  const element = document.documentElement;
  if (element.requestFullscreen) {
    element.requestFullscreen();
  } else if (element.mozRequestFullScreen) {
    element.mozRequestFullScreen();
  } else if (element.webkitRequestFullscreen) {
    element.webkitRequestFullscreen();
  } else if (element.msRequestFullscreen) {
    element.msRequestFullscreen();
  }
});

Are you including a bit of a buffer for games to go over?

Awesome work. hopefully I can figure out what you did so I can merge with the peacock/hbomax/prime scripts I am already doing. I am sure more channels will go DRM in the future.

it's coming along very well.. still hacked together a bit so not ready for dist yet, but it's largely working. very bugs to squash, then i can move onto packaging for a beta release.

Awesome. A lot of people already have a lot of addons. I plan on unifying it all in one. I also have created a hulu and amazon prime/netflix movie/tv ripper. Sadly it uses widevine l3 and no way to get l1 without breaking drm (illegal) so it maxes out at 720p. Would be nice to throw this all in one major addon for cc4c

It will use kodi to grab the stuff, until someone can create a similar interface for channels to use.

It also removes commercials from movies and shows

Edit: Some guy posted about DirecTV stream..did you get it working

ok its pretty stable now. now i'm tidying up some hard coded stuff into ini's so it can be moved to another server for beta testing.

if anyone is interested in testing, shoot me a note. need to be comfortable with linux as i dont have it containerized yet. not terrible to install though but not for beginners.

does it have a webpage like eplustv
Haven't loaded it up yet.

1 Like

not ready for dist yet... working fine on my server, but having issues porting to another server. hope to resolve tonight

1 Like

I am seeing the same thing.

ESPN4CC4C — ESPN+ Virtual Channels for Channels DVR

Hey everyone — I’ve been working on a side project that turns ESPN+ events into real, playable channels inside Channels DVR.

It’s called ESPN4CC4C, and it runs as a lightweight Docker container that builds and maintains a full M3U and XMLTV lineup from the ESPN+ schedule. Once it’s running, Channels DVR can treat them like regular TV channels — guide data, program titles, the works.

You’ll need to have Chrome Capture for Channels (CC4C) already running — that’s what actually launches the ESPN+ streams. ESPN4CC4C just handles all the scheduling, channel mapping, and metadata to make it seamless.

Highlights:

  • 40 virtual ESPN+ channels (eplus1–40)
  • Auto-refresh every 6 hours (internal cron)
  • Fully self-contained — no manual refresh needed
  • Clean, simple Docker Compose setup
  • Logs and data persist across restarts

Quick Setup:

git clone https://github.com/kineticman/ESPN4CC4C.git
cd ESPN4CC4C
cp .env.example .env
# edit .env with your LAN IP and CC4C host info
./bootstrap.sh

Then just add these to Channels DVR:

M3U:   http://<LAN-IP>:8094/out/playlist.m3u
XMLTV: http://<LAN-IP>:8094/out/epg.xml

Full repo and setup guide:
:point_right: GitHub - kineticman/ESPN4CC4C: ESPN+ for Chrome Capture For Channels

I’ve also got a fullscreen playback hack for CC4C that makes this feel even cleaner. If anyone wants it, I can share setup steps.

3 Likes

So I installed this on Docker for Windows, but in the epg, all I get is Stand By on all the channels. I can start the channel and do get a remux and a video saying "Stand By No live event scheduled". I can watch ESPN+ channels in a browser with my TV provider set.

1 Like

That means your DB didn’t initiate or fill up. And u ran the bootstrap? And .env properly setup?
It should give you status at the end- send me that. Safe to rerun it.

*edit- I have only tested this on Ubuntu. So could be path issues using windows? Anyway watch that whole bootstrap run and grab any errors and shoot me a message.

*edit 2-- ahh, the sh wont work on windows. i'll work on making a windows version(s).

Once its confirmed working

Can you take a look at my other code. My dream is we can merge these into one setup. I have peacock doing a similar thing. It goes to the site, pulls guide data (pics+text), puts on different channels like eplustv, and it clicks the current event. Sadly since it doesnt give url like eplus tv it has a diffferent technique. HBO Max does similar for its games. Though it only does guide data now as I havent touched it recently. Could you take a moment to check that code as well?

Just as an FYI, I thought I had it by making changes in the compose file and the entrypoint file, but for some reason the container won't bind to my ip address:port. I checked and there was nothing else using 8094, so I'll dig a little deeper to see what's going on.

for those brave souls beta testing ESPN4CC4C -- give it fresh pull from git pls. i think i got it

You're the man! Working here in Windows Docker!

Did you say you had a hack for full screen? I'm willing to give it a shot...

**not tested on windows, but i assume it'd work

Ahh, I'm currently using the node version of CC4C, so I might have to spin up the container to test. Thanks!

1 Like

Does it have a homepage like eplustv, we can do it to enable peacock/hbomax stuff. I need to understand this code to integrate. each site does its own thing.

I've been playing with Philo and Skip to Live. The following seems to be working well for me in my initial tests.

   // Handle Philo
    else if (u.includes('philo.com')) {
      console.log('URL contains philo.com')
      try {
        await delay(1000)
        await page.mouse.move(0, 0);
        await page.mouse.move(1800, 540, { steps: 50 });
        await page.mouse.click(1800, 540, {button:'left'});
        console.log('Set Philo to Skip to Live')
      } catch (e) {
        // Handle any errors specific to watch.spectrum.net
        console.log('Error for philo.com:', e)
      }
    }