Introducing PrismCast: Browser-based Live TV Capture for Channels DVR and Plex

v1.3.1 is out that fixes a webUI regression I introduced in v1.3.0 - sorry about that. Took the opportunity to do a couple of additional things:

1.3.1 (2026-02-14)

  • Improvement: when channel selection fails, logs available channel names from the provider's guide to help users identify the correct channel selector value for user-defined channels.
  • Improvement: YouTube TV channel matching now handles parenthetical suffix variants and additional PBS affiliate names.
  • Fix: channel selection failures now abort the stream instead of silently serving the wrong channel.
  • Fix: web UI regression.
  • Housekeeping.

v1.3.0 is out. Notable things:

  • Fox.com and full Sling TV provider support. Sling support is a hat tip to @bnhf for all his continued support in triaging questions as well as providing the Docker support in PrismCast. Thank you again.
  • Several UI improvements, particularly in the channels tab. You can filter by the providers you have. It was getting busy and I hope this helps streamline things for folks. There's also support for bulk-setting channels so you can experiment a bit.
  • Refinements and performance improvements to streamline things a bit more.
  • PrismCast does some things behind the scenes now to help ensure Channels DVR and other clients are always getting as clean a video stream as we can provide without transcoding anything. Chrome can produce video in unpredictable ways for a variety of uninteresting reasons...the result should be a noticeably smoother experience, especially when a livestream needs to be recovered.

To reiterate from prior release notes:

If you’ve created user-defined channels that are now covered by predefined options, I recommend deleting those overrides and using the defaults. Predefined channels are what I test and maintain; overrides are entirely optional, but they do create long-term configuration debt for you as PrismCast evolves.

I really appreciate the feedback, enthusiasm, and passion around PrismCast. Almost every feature added since 1.0.0 has come from thoughtful, respectful discussion with this community.

My only ask is simple: please be kind, not demanding. PrismCast started as a project for my own needs, and I share it because I enjoy this community and wanted to give something back. Respectful feedback is always welcome; entitlement is not.

Thank you to everyone who’s shared encouragement or joy in using PrismCast—it genuinely keeps this project fun to work on.

One more note for everyone’s benefit: please don’t repost the same questions in this thread. Many of them have already been asked and answered, and the forum’s topic-only search works well. Keeping discussions focused helps everyone. Please treat the thread and each other with the same consideration you’d expect in return.

1.3.0 (2026-02-14)

  • New feature: Fox.com provider support.
  • New feature: Sling TV provider support with automatic local affiliate resolution for broadcast networks.
  • New feature: provider filtering. Choose which subscription services are active in your environment and filter channels accordingly.
  • Improvement: streaming startup and playback recovery performance optimizations.
  • Improvement: stream resiliency and recovery improvements.
  • Improvement: additions and refinements to predefined channels.
  • Improvement: UI refinements.
  • Housekeeping.
1 Like

Looking at the code, I believe it'll work fine once the edge cases are addressed. However, since we have deep links available for YTTV, it seems to me using those will always be superior. Both from a speed and reliability standpoint -- not to mention going directly to the channel with no hint of the guide being displayed.

If it isn't already, PrismCast should/will be as fast as using direct URLs. My goal / design philosophy is that this should never be needed, and no user should aspire to do it. Reason is that these things change...PrismCast should (and does) pull the URLs needed and just take you there. a "cold tune" is going to be slower, because Chrome (and PrismCast) need to cache the pages and pull the relevant URLs, but once that's done (e.g. second tune and beyond) for PrismCast, it's a simply table lookup -> URL -> Channels (via HLS). If you have performance metrics, I'd be interested in seeing good A/B tests side-by-side against v1.3.0. It's the same story with HBO Max and some of the other providers.

TL;DR: challenge accepted. :smile: YTTV is the cleanest/easiest provider to deal with because of how straightforward it is. Hulu's the most intricate. Sling's in between.

And @bnhf - give the new Sling TV integration a go. Curious to hear your thoughts.

On the local channels topic...yep, it's an edge case. I'll tune this a bit further as more folks report in from the community.

Hmmm, updated and now can't get to admin page. I get an internal server error message. I've tried restarting the container, stack, and Docker.

I can not get this version to run. Tried to upgrade in place and got the errors. Did a clean install and got the errors:

Starting PrismCast...
Navigate to this URL:
    http://prismcast:6080/vnc.html?host=prismcast&port=6080

Press Ctrl-C to exit

[2026/02/14 18:46:32.433] Using FFmpeg at: /usr/local/lib/node_modules/prismcast/node_modules/ffmpeg-for-homebridge/ffmpeg
[2026/02/14 18:46:32.435] Loaded 284 channels.
[2026/02/14 18:46:32.803] Chrome ready: Chrome/145.0.7632.75.
[2026/02/14 18:46:33.476] Capture system verified successfully.
[2026/02/14 18:46:33.605] PrismCast is now listening on 0.0.0.0:5589.
[2026/02/14 18:46:33.605] HDHomeRun emulation is now listening on 0.0.0.0:5004 (DeviceID: 10428300).
[2026/02/14 18:46:41.060] [ERROR] Unhandled error in request: text.replace is not a function.
[2026/02/14 18:46:41.061] GET / from 192.168.1.109 responded 500 in 18.026 ms.
[2026/02/14 18:46:45.249] [ERROR] Unhandled error in request: text.replace is not a function.
[2026/02/14 18:46:45.250] GET / from 192.168.1.109 responded 500 in 5.020 ms.
[2026/02/14 18:46:50.000] [ERROR] Unhandled error in request: text.replace is not a function.
[2026/02/14 18:46:50.000] GET / from 192.168.1.109 responded 500 in 3.950 ms.

I can access the novnc page just fine, just not the app home page. The app is down hard in this situation.

Yep...I see it. I'm working on it. Please hold off upgrading to v1.3.0 for a bit. v1.3.1 will be out shortly.

I believe (not sure) that this is the same problem with getting FS1 and 2 to work on fox.com. No matter what search term I put in, it either returns the first channel or the second channel in the grid.

Local Fox channel always works because it's the first channel in the grid I guess.

Hmmm, updated and now can't get to admin page. I get an internal server error message. I've tried restarting the container, stack, and Docker.

@daldana7296 and @mike_here v1.3.1 is out, give it a go.

As a test, I setup these 6 channels, using the included preset channels, only changing the provider on them to You Tube via the dropdown. Hit test on each one and verified they played in the chrome browser that PrismCast launched.

v1.3.1 should be a bit better for you...PrismCast better accounts for pacific/west coast variants now. Also, when PrismCast doesn't know or can't figure out what your local is, it'll properly fail now and log what the options are for you, so you can add it in as a user-defined channel and override what's built in.

Sorry about that!

@hjd No problem. I'm back up and running. I will continue to test.

No problem here also with v1.3.1. Thank you.

Can you point me in the right direction for matching Sling channels in the grid guide. Can I use the callsign, or should I be looking for something else? I'm only subscribed to about a dozen premium movie channels...

Back up here too. Thanks!

Can you point me in the right direction for matching Sling channels in the grid guide. Can I use the callsign, or should I be looking for something else? I'm only subscribed to about a dozen premium movie channels...

If you go to the Channels tab in PrismCast and add a user-defined channel and click on the link for profile reference you'll see a good explanation for every profile type and how to figure out what the channel selector should be. For Sling:

slingLive (channel name)

Inspect a channel entry in the guide → find the data-testid attribute starting with channel- → use the portion after that prefix. The name may differ from the logo shown (e.g., "FOX Sports 1" not "FS1"). For local affiliates (ABC, CBS, FOX, NBC), use the network name — PrismCast resolves the local station automatically.

v1.3.1 - In this build all channels appear in the m3u and brought into channels dvr from prismcast -- including all disabled channels.

v1.3.1 - In this build all channels appear in the m3u and brought into channels dvr from prismcast -- including all disabled channels.

I can't reproduce this. Disabled channels show up as disabled in Channels and reappear when enabled when I try. Can you give me a reproducible set of steps so I can see if I can recreate the behavior? Not to ask the obvious...but did you have Channels reload the playlist after enabling/disabling?

I just tried this, and both FS1 and FS2 worked for me both as custom channels (with FS1 and FS2 as "Channel Selectors", respectively) and using the default (preferred). You might try deleting the custom channel your using (that requires a "Channel Selector"), and just use the standard Fox as the source.

I've had this same situation in the earlier versions as well. I stopped trying to disable any channels in prismcast, because they would always come back. I've just disabled all the channels I don't receive in Channels DVR settings instead.

Color me impressed! Everything I've tried so far has worked brilliantly. This is really shaping up to be an amazing tool.

2 Likes

If you curl the playlist, are you seeing a different set of channels than what's showing as enabled in the WebUI?

@hjd,

Great project!

One question, when adding a channel, is there a way to specify the epg source (not a Gracenote entry)? I can add the FruitDeeplink lanes and they play fine, but to get any guide data, I have to add it's xml file in the Custom Channels settings. Doing this kills the guide data for the predefined channels.

Does this make sense?