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

UPDATE: I missed the post saying a fix is already in the works. Thanks to @chDVRuser For calling it to my attention.

Since the last update, it's also happening when set to 720 high:

Just to test, I tried setting the quality to 1080p, but got the same result, so I reverted the change.

Prismcast is otherwise working beautifully, and has become quite easy to manage.

Fix is coming...

1 Like

Oops. Sorry for missing that, @hjd! I sometimes lose track of who’s replying to whom.

Thanks for all your great work on this project.

Of course you released this just shortly after I installed a completely software-based virtual display! :stuck_out_tongue_closed_eyes:

Just a heads up that you'll need to apply something similar to when you save settings and it needs a restart. I've had to manually start each time.

To be fair, SLM returns a direct stream (after some processing, depending upon which approach you are taking).

1 Like

Having a weird one.. was working earlier but when I check now in prismcast it says "browser is offline" not quite sure why but it doesn't seem to be fixed unless I stop/restart the prismcast services. Any ideas?

Also noticing the screen isn't centered when I load a game, I tried multiple resolutions (480/720/1080/4k) and they are all like zoomed in if that makes sense; I don't remember it doing this before I upgraded.

Where does it say "browser is offline". If in the log, post the log lines.
Did you read the Troubleshooting section in the Help tab of the PrismCast UI?

Troubleshooting

Problem Cause Solution
"Browser Offline" or "Browser is not connected" An existing Chrome process is running. Quit all Chrome instances, then restart PrismCast.

Being fixed, see previous posts (starting 6 days ago after v1.12.0 Announcement)

2 Likes

I get that often. I posted logs a while ago but someone moved my issues to another thread and I'm no closer to any solution. I'm on 1.11. One potentially relevant log entry was;

Restarting browser for scheduled maintenance (uptime: 6h 5m).

I have several of those, and almost all have the exact same uptime shown. The very first one in the log said uptime 16h 29m, but the rest were 6h 5m. I have no idea why the browser thinks it wants "scheduled maintanence," as I have never given it such a setting. The other thing that happens nearly always is that I have to tune any channel at least twice before it "takes." Otherwise, it tries to tune for a while then gives up, but will work if I retry soon thereafter. Obviously not helpful for any scheduled recording. (Again, I posted logs that are now in the moved thread, but no answers have come).

That's normal and expected behavior.

See the Help tab in the PrismCast UI

Known Limitations

  • Chrome may drop frames after extended use. The Chrome encoder can degrade after many hours of continuous operation. PrismCast automatically restarts Chrome during idle periods to mitigate this.

@hjd
I'm currently running PrismCast v1.12.0 which was installed by homebrew on my Mac Mini.
How do I downgrade it to v1.11.1 using homebrew?

2 Likes

Thanks for that explanation. I was hoping that it might help troubleshoot the crashing and the tuning requiring two or more attempts per channel.

I wish I could figure out the downgrade process too. Prismcast is basically useless to me on v1.12.0 because I mostly use it to watch sports, and the entire bottom of the screen is cut off so I can't see the score, game clock, etc.

Mine is installed using NPM and I was able to downgrade using npm install -g [email protected]. It looks like homebrew supports versioning like that for some installs. Worth a try if you haven't done so.

1 Like

Thanks, nice thought adding the @version.
But it doesn't work with homebrew and prismcast.

brew install hjdhjd/prismcast/[email protected]
Warning: No available formula or cask with the name "hjdhjd/prismcast/[email protected]". Did you mean hjdhjd/prismcast/prismcast?

brew install [email protected]
Warning: No available formula or cask with the name "[email protected]". Did you mean prismcast?

try running the npm command. if you watch the homebrew install it runs that command during the process.

This is what worked for me in powershell (as administrator):

prismcast service stop

Stop-Process -Name "node" -Force -ErrorAction SilentlyContinue

npm install -g [email protected]

prismcast service start

I'm not going to switch from using homebrew to npm.
Does using npm update the prismcast service plist?

com.github.hjdhjd.prismcast.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.github.hjdhjd.prismcast</string>

  <key>ProgramArguments</key>
  <array>
    <string>/opt/homebrew/bin/node</string>
    <string>/opt/homebrew/Cellar/prismcast/1.12.0/libexec/lib/node_modules/prismcast/dist/index.js</string>
  </array>

  <key>WorkingDirectory</key>
  <string>/opt/homebrew/Cellar/prismcast/1.12.0/libexec/lib/node_modules/prismcast</string>

  <key>EnvironmentVariables</key>
  <dict>
      <key>PATH</key>
      <string>/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin</string>
      <key>PRISMCAST_SERVICE</key>
      <string>1</string>
  </dict>

  <key>RunAtLoad</key>
  <true/>

  <key>KeepAlive</key>
  <true/>

  <key>StandardOutPath</key>
  <string>/Users/chDVRuser/.prismcast/service-stdout.log</string>

  <key>StandardErrorPath</key>
  <string>/Users/chDVRuser/.prismcast/service-stderr.log</string>
</dict>
</plist>

I know that homebrew does more than just run npm on an install/upgrade.

I had originally installed PrismCast using npm, but ran into problems, so uninstalled npm and have been using homebrew ever since.

So I tried to downgrade to 1.11.1 on my mac mini but nothing I could do would get it to install. In the end reinstalled 1.12 again.

Obviously not rushing but do we have an estimate when the fix release will be out? College Football starts saturday so would love to be able to use it :slight_smile:

Thank you!!

According to the last post by the developer (10 days ago) we should have seen the fix last weekend.

PrismCast v1.12.1 is here. This is the fix for the screen-capture corruption that 1.12.0 introduced, along with a round of reliability work that came out of chasing it.

First, the apology. On the 25th I said this would land by the end of that week, and it took several days longer than I promised, and I also have a real world to contend with. :smile: The fix itself came together quickly...the time went into testing it across displays and into the surrounding work I wanted to get right so this doesn't recur across a bunch of scenarios. Thanks for your patience, and thanks to everyone for the reports and screenshots that made the problem easy to pin down.

The 1.12.0 capture corruption is fixed. If you saw the picture cut off at the right and bottom, frozen bands, or a zoomed-in frame on screen-captured channels, this release is for you. The cause was a Chrome quirk on Retina and other high-density displays: Chrome composited the capture through the window's own presentation rather than the page surface PrismCast emulates. PrismCast now emulates capture pages at the display's real pixel density and keeps the Chrome window on screen while a capture is running. One visible change comes with that: while a screen-captured channel is streaming, the Chrome window stays un-minimized on the desktop, and it minimizes again on its own when the last capture ends. That's expected, and the Help page explains it. Native HLS channels never use the window, so it stays minimized for those. If you downgraded to 1.11.1 to work around the bug, upgrade to 1.12.1 the same way you installed, or use the Upgrade button in the web interface.

PrismCast stays out of your way while it captures. Since the window now has to be visible during captures, I put work into making it unobtrusive. Capture tabs open in the background of one shared Chrome window, your own tab stays selected and is handed back whenever a tune has to bring a capture tab forward for a moment, a capture tab you click on snaps back to its capture view within about a second, and channel discovery renders its guide in a window of its own so the shared window can stay minimized. The window also keeps whatever size and placement you last gave it.

Beyond the headlines:

  • Chrome that can no longer start captures - your running recordings keep going, new tunes are refused at once instead of failing slowly, and PrismCast relaunches Chrome on its own once the last stream ends. The web interface shows when a relaunch is pending.
  • Hung-tab replacement without risking the recording - the replacement is built and tuned first while the old capture keeps running, so a replacement that fails leaves your recording exactly where it was.
  • Plex and other HDHomeRun clients follow a stream through changes - when a replaced tab comes back with different encoder settings or a native stream falls back to screen capture, the client is disconnected so it reconnects cleanly instead of stalling on a broken picture.
  • Recovery that doesn't waste time - a stream that can't be revived ends immediately instead of two minutes later, and resolution recovery no longer misfires on an ordinary adaptive quality dip. The stream detail now shows the source resolution beside the capture resolution, so you can see what the site is actually sending.
  • Clean shutdown and complete logs - Ctrl-C and a service stop shut PrismCast down gracefully, Chrome closes through its own shutdown so your sign-ins are saved, and the log file no longer loses lines at startup or shutdown.
  • BET - BET.com no longer provides a live stream, so the builtin BET channel now tunes through your television provider only.
  • Numerous fixes - steadier channel discovery, cookie-consent banners that appear after the video is already fullscreen, Pacific-feed channels keeping every provider they should, HDHomeRun discovery leaving other tuners' requests alone, and a sweep of web interface and configuration details.

As always, 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.

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.


1.12.1 (2026-09-04)

  • Improvement: PrismCast stays out of your way while it captures - capture tabs open in the background of one shared Chrome window, your own tab stays selected and is handed back whenever a tune has to bring a capture tab forward for a moment, a capture tab you click on snaps back to its capture view within about a second, and channel discovery renders its guide in a window of its own so the shared window can stay minimized. The window also keeps whatever size and placement you last gave it.
  • Improvement: replacing a hung tab no longer puts the recording at risk - the replacement is built and tuned first while the old capture keeps running, so a replacement that fails leaves your recording exactly where it was.
  • Fix: screen-capture recordings on Retina and other high-density displays no longer show the intermittent corruption 1.12.0 could produce - the cut-off picture, frozen bands, and zoomed bumper frames. As part of this, the Chrome window now stays on screen while any screen-capture stream is running and minimizes again when the last one ends. That is expected, and the Help page explains it; native HLS channels never use the window, so it stays minimized for those.
  • Fix: the captured picture fills the frame more reliably - page elements can no longer sit on top of the video, a player's own sizing can no longer leave the picture shifted or letterboxed, and fullscreen is verified in both dimensions. Most builtin profiles no longer need the player's own fullscreen mode; Hulu Live and embedded-player sites still use it, and the Help page names the profiles that bring the Chrome window forward during a tune.
  • Fix: resolution recovery no longer misfires on an ordinary adaptive quality dip - it triggers only when the picture collapses below a third of the best resolution the stream has delivered. The stream detail now shows the source resolution beside the capture resolution, so you can see what the site is actually sending.
  • Fix: a Chrome that can no longer start new captures is handled gracefully - your running recordings keep going, new tunes are refused at once instead of failing slowly, a capture that fails to start is retried once before the tune gives up, and PrismCast relaunches Chrome on its own once the last stream ends. The web interface and the health endpoint show when a relaunch is pending.
  • Fix: stream recovery spends less time on lost causes - a native stream that stalls no longer drops to screen capture while its recovery is still settling, a failed tab replacement on a broken Chrome no longer delays the next attempt, and a stream that cannot be revived ends immediately instead of two minutes later.
  • Fix: Plex and other HDHomeRun clients no longer stall or show a broken picture when a stream changes underneath them - whether a replaced tab came back with different encoder settings, a native stream fell back to screen capture, or a native channel switched its stream parameters mid-stream, the client is disconnected so it reconnects cleanly into the new stream.
  • Fix: channel discovery is steadier - a scan that comes back with only a small fraction of the saved lineup leaves the saved lineup in place, and each scan runs under its own time limit.
  • Fix: BET.com no longer provides a live stream, so the builtin BET channel now tunes through your television provider only.
  • Fix: web interface details across the channel table and status views - the tag filter funnel, the playlist hint icon, and the tag filter's Show None toggle respond to clicks again; every stream row's tint follows its own health color in both themes; the predefined-channel hint, the playlist hint icon, and the restart dialog's buttons read correctly in dark mode; health updates reach every channel of a service, including ones the table's current filter hides; a native stream's issue label names the current cause of its trouble; a channel hosted at a bare IP address such as 10.0.1.50 is labeled by the whole address instead of "1.50"; and the log API reports an unrecognized level filter instead of silently ignoring it.
  • Fix: the log file is complete at both ends and survives a flaky disk - the earliest startup lines are written as soon as the log opens, the shutdown lines land in the file before the process exits, a crash before the log opens still leaves its last lines in the log file, a disk that briefly refuses writes no longer costs you the shutdown lines or the first minute of the next run's log, and anything logged after the logger has stopped goes straight to the file instead of being dropped. HTTP request lines report the full request time, slow requests are always logged, and console-mode request lines carry one timestamp instead of two.
  • Fix: Ctrl-C and a service stop shut PrismCast down cleanly, and Chrome closes through its own shutdown so its profile - your sign-ins included - is saved properly.
  • Fix: configuration edge cases - the settings page's environment-override badge shows the value actually in effect, an environment variable with an unusable value is warned about in the log every time settings load, startup enforces the same limits the settings form does (a log-size limit below 512 KB is now refused at startup as the form already refused it), a custom domain mapping for a subdomain of a builtin site is accepted, every text field of a custom profile is cleaned on save, and a startup that repairs a corrupt settings or health file reports it once instead of twice.
  • Fix: a cookie-consent banner that pops up after the video is already playing fullscreen is still dismissed, and overlay handling stays active for the whole of a tune rather than a fixed window.
  • Fix: a Chrome tab that opens after PrismCast has given up waiting for it is closed instead of lingering for the browser's lifetime.
  • Fix: a Pacific-feed channel keeps every provider it should - a provider whose channel name merely contains "East" or "West" (Starz Encore Westerns on Sling, for example) was being mistaken for a timezone feed and dropped from the Pacific channel.
  • Fix: PrismCast no longer answers HDHomeRun discovery requests meant for another tuner on your network.
  • Housekeeping.
5 Likes

THANK YOU!! It works great and just in time for college football today. Much appreciated!!

2 Likes