Afaik nesn works in the ESPN+/3/fox method from m0ngr3l
I do -- though I've only ever built the Docker version. Also, I posted how to set up cc4c in a Proxmox LXC, if that helps.
Thanks. I attempted to set up cc4c in Docker on a Debian server where I am currently running the Channels server. It did not go well. I may try that again with AI assistance, or I may rebuild the server with a new motherboard (it's too old for Windows 11, so I went the linux route to avoid the demise of Windows 10)
I have the cc4c executable running on a Lenovo Yoga 900 laptop in Windows 11. It's reasonable, but it needs some tweaking to work well enough. I can't get main.js to run on that laptop, though. It fails when chrome is launched, and it behaves exactly the same way on my current laptop (Dell XPS 15 9520).
I must be setting it up incorrectly, but I can't figure out what I'm doing wrong.
Only a few people have ever reported satisfactory results running cc4c in a Docker container. A few of us have attempted improvements, but nothing has really gotten us where we want to go.
Check out the write-up I did for installing cc4c in an LXC container, as that's more-or-less the same as what you'd need to do to install it on a Debian host:
thanks, that looks doable. I won't have the opportunity to try it for a couple of weeks, so I'll check back in.
Meanwhile, if you or anyone else have any insight about why I can't get "node main.js" to work in Windows, I'd greatly appreciate it! The symptom is that when it attempts to launch chrome to start rendering, chrome immediately disconnects. Then cc4c tries a few more time before giving up.
Thanks,
-Jay
The steps I posted here have consistently worked for me on Windows 10 and 11 (“new” computer came with 10, later wiped it and upgraded to 11) as recently as last week. Might be worth a shot if you haven’t already tried them.
EDIT: Originally linked the wrong post
That's the one. I tried to edit my previous post after I posted it because I realized I had inserted the wrong link. I must have done it too fast and triggered a filter. My apologies. I've edited that post now
When trying to play a cc recording away from home I get this error...lmk if anyone knows where I went wrong!
Error on device
Recording corrupted (-16)
log
2025/03/02 12:50:20.042836 [ENC] Starting encoder for Garage Squad S03E02 2016-08-24 68 El Camino 2025-03-02-1148.mpg in G:\DVR\Streaming\file21330-2fd882c0285e-2278964111\encoder-248-3490365921 at 248 (761.488000) (encoder=h264_amf, codec=h264, acodec=aac, resolution=720, deinterlacer=blend, bitrate=3808, segment_size=0.01)
2025/03/02 12:50:20.135419 [HLS] ffmpeg: file21330-2fd882c0285e: [h264_amf @ 000001d133bfe9c0] [Eval @ 00000046f99fced0] Undefined constant or missing '(' in 'reserved'
2025/03/02 12:50:20.135419 [HLS] ffmpeg: file21330-2fd882c0285e: [h264_amf @ 000001d133bfe9c0] Unable to parse option value "reserved"
2025/03/02 12:50:20.135419 [HLS] ffmpeg: file21330-2fd882c0285e: [h264_amf @ 000001d133bfe9c0] Error setting option color_primaries to value reserved.
2025/03/02 12:50:20.135419 [HLS] ffmpeg: file21330-2fd882c0285e: Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
2025/03/02 12:50:20.137551 [HLS] ffmpeg: file21330-2fd882c0285e: [aac @ 000001d13186f740] 2 frames left in the queue on closing
2025/03/02 12:50:20.240163 [ENC] Encoder stopped for Garage Squad S03E02 2016-08-24 68 El Camino 2025-03-02-1148.mpg in G:\DVR\Streaming\file21330-2fd882c0285e-2278964111\encoder-248-3490365921 after starting from 248 without encoding any segments. Marked segment as failed.
The channel works live on the device along with other non cc recordings.
My cc recordings work at home.
Progress! I followed those instructions before, at least up to the NewChromeCapture part. However, when I ran npm install, I got a ton of warnings which I opted to "fix" according to the instructions. That reduced (but not eliminated) the warnings, and it completely broke ChromeCapture. Here are the warnings:
npm warn deprecated [email protected]: The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.
added 272 packages, and audited 273 packages in 11s
30 packages are looking for funding
run `npm fund` for details
21 vulnerabilities (3 low, 3 moderate, 12 high, 3 critical)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
This time I ignored the warnings and node main.js worked fine.
My next trick was to try NewChromeCapture. That didn't work, though. If I run it directly, node ncc-7-0.js, I get the following errors:
[2025/03/02 12:16:58.661] TypeError: Cannot read properties of undefined (reading 'match')
at C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\ncc-7-0.js:248:33
at newFn (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express-async-errors\index.js:16:20)
at Layer.handle [as handle_request] (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\route.js:114:3)
at newFn (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express-async-errors\index.js:16:20)
at Layer.handle [as handle_request] (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\index.js:284:15
at param (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\index.js:365:14)
at param (C:\Users\jay\source\repos\ChromeCaptureDev\chrome-capture-for-channels\node_modules\express\lib\router\index.js:376:14)
If I run the batch file, I get:
node:internal/process/promises:392
new UnhandledPromiseRejection(reason);
^
UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".
at throwUnhandledRejectionsMode (node:internal/process/promises:392:7)
at processPromiseRejections (node:internal/process/promises:475:17)
at process.processTicksAndRejections (node:internal/process/task_queues:106:32) {
code: 'ERR_UNHANDLED_REJECTION'
}
Node.js v23.6.0
Now that I have it running, maybe I can figure that one out in VS. FWIW, my main goal is to see if I can set the Chrome process priority from Node just after Chrome is launched.
Thanks for your help!
Ahh! Perfect. I hadn't realized that. Thank you. I'll check it out!
I found out why this wouldn't work for me. The code near line 246 needed to be changed:
app.get('/stream/:name?', async (req, res) => {
// Extract the channel name from the "ch" query parameter of the URL.
// const urlParam = req.query.url; req.query is undefined
const urlParam = req.url; //but this works
const channelMatch = urlParam.match(/[?&]ch=([^&]+)/);
const channel = channelMatch ? channelMatch[1] : null;
I found that urlParam was undefined because req.query was undefined. However, req.url contained the info needed for channelMatch.
Has anyone tried setting this up with the new Simpsons live channel on Disney+? It obviously works when navigating directly to the live stream, but the live stream URL doesn't seem static, therefore if I stop the channel, it takes me back to the shows main page, and not the live stream.
Hi bnhf -- I know your instructional Proxmox LXC post has been locked (I would have replied there if it wasn't) but I tried this out and was pleasantly surprised to see that it works. Awesome work!
Wanted to pick your brain with why chrome wouldn't be leveraging using my ipgu that I've confirmed is being successfully passed through to the container. intel-gpu-top reads out at 0% usage across the board while i'm capturing and streaming content and I'd love to eek out some more performance out of this implementation if I can -- it's really close to being a viable solution!
This is essentially the same issue we've been battling with the Docker version of cc4c, regarding use of the iGPU. If you look at chrome://gpu, it seems like it should be functioning, but I've never seen it.
At least with the Proxmox LXC approach, if you have a high-end CPU, so you can allocate plenty of cores and RAM -- it seems to work pretty well.
Ah, got it — yeah, I’ve been toggling every option that seems like it could be vaguely related in chrome://flags with no luck either. Unfortunately my server is pretty humble so I can’t muscle my to better performance 
For what it’s worth, there seem to be some flags that we can send to chrome when the script starts it that I came across, but not sure how to include those in the script (I’ve been using the compiled version).
I was just wondering if anyone happened to notice that it seems the support built in to CC4C for Weatherscan no longer works. The link format that you were supposed to use when making your custom channel was chrome://127.0.0.1:5589/stream/weatherscan but my CC4C is no longer able to load the channel when using this format. So I went to https://weatherscan.net and interestingly enough they have two different links on this page for two different versions of Weatherscan. For me, version 2 seems to be the only one that works (version 1 will load but just play music and show the spinning IntelliStar logo). The direct link to version 2 is https://v2.weatherscan.net/
So what I did was, in my custom channel settings, I changed the link format to chrome://127.0.0.1:5589/stream?url=https://v2.weatherscan.net/ and wouldn't you know it, CC4C now loads Weatherscan again. The only thing that I don't get however is the music. If I go directly to a web browser however and pull up https://v2.weatherscan.net the music will play.
Just curious if anyone else has experienced this and knows how to get the music to play when loading Weatherscan through CC4C. Thanks!
I have the iGPU working. So, If you're willing, it'd be great if you could spin-up a similar LXC to verify.
Most of the original instructions are the same, but here are the differences:
This time, start with a Debian 12 template, and run these commands right from the first prompt:
sed -i 's/contrib$/contrib non-free non-free-firmware/' /etc/apt/sources.list
apt update
apt install intel-media-va-driver-non-free vainfo libva-drm2 libva-x11-2 mesa-va-drivers
After that, you should be able to follow the original instructions, starting with:
apt upgrade
and on from there...
Running the "Weatherscan" channel:
intel-gpu-top: Intel Raptorlake_s (Gen12) @ /dev/dri/card1 - 157/ 617 MHz; 52% RC6
0.24/66.45 W; 186 irqs/s
ENGINES BUSY MI_SEMA MI_WAIT
Render/3D 6.65% |██▉ | 0% 0%
Blitter 0.00% | | 0% 0%
Video 0.00% | | 0% 0%
VideoEnhance 0.00% | | 0% 0%
PID NAME Render/3D Blitter Video VideoEnhance
292179 chrome |█ || || || |
I'm watching a free Sling channel right now, "T2", and it looks really good -- while using about 35-70% of 4 CPUs. The weird thing though, is that this channel is not using any iGPU, so maybe there's more tweaking to do. Interestingly, running the Weatherscan channel, I saw intel_gpu_top spike to 100% a few times.
But, as I said, we now know the iGPU is getting passed through and is working at some level. chrome://gpu still shows a couple of features using "software". Every Chrome/Puppeteer flag change I've tried so far, has disabled hardware somewhere, so I'm back to the current default flags.
No joy. The stream would start, but then pretty quickly freeze with that flag.