Cool - any chance you could bridge in Xfinity/Comcast? I have them via TVE, but of course that leaves a lot out.
I could look into it - do they have a web streaming app? That's the best angle if so.
v4.9.1 is working pretty well with Philo but I am getting an occasional screen blackout. Logs in PrismCast show playback buffering, may be running into hardware limitations on the 6-core i5 mini. I haven't tried multiple streams yet. Migrating to a new M4 Pro mini is on my list, hopefully this weekend.
[2026/07/21 08:02:31.897 AM] [WARN] [0.1-pze0ob] Playback buffering - recovering via source reload.
[2026/07/21 08:02:36.443 AM] [0.1-pze0ob] Recovered in 4.5s via source reload.
[2026/07/21 08:02:41.898 AM] [WARN] [0.1-pze0ob] Playback buffering - recovering via page navigation.
[2026/07/21 08:02:43.684 AM] [0.1-pze0ob] Recovered in 1.8s via page navigation.
[2026/07/21 08:31:30.490 AM] [WARN] [0.1-pze0ob] Playback buffering - recovering via source reload.
[2026/07/21 08:31:35.049 AM] [0.1-pze0ob] Recovered in 4.6s via source reload.
[2026/07/21 08:31:40.494 AM] [WARN] [0.1-pze0ob] Playback buffering - recovering via page navigation.
[2026/07/21 08:31:42.333 AM] [0.1-pze0ob] Recovered in 1.8s via page navigation.
Logs from FastChannels:
2026-07-21 08:02:07,179 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:06:07,958 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:10:09,287 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:14:11,496 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:18:14,068 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:22:15,445 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:26:17,367 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:30:19,104 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 08:34:24,034 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
Interesting - I know FastChannels has to refresh the DASH session every 4 minutes (hence my logs), but the buffering is suspicious. I wonder if it's a combination of your hardware and something on my end too. I'll look closer.
If you're going to to Xfinity/Comcast, you might as well do Cox because it's built on the same backend technology. PM me if you need login details. But @hjd already did all the work to get both working with PrismCast, which has some fun complications of looking for station names in the html tags because each station does not have a direct link.
I appreciate the updates you made to the feed edit modal. Much improved.
I'd like to re-up a suggestion I made a couple of weeks ago that may have been lost in a flurry of unrelated activity right after I posted it.
I'd like to see the feeds and corresponding channel numbers from the Channels tab somewhere in this modal:
And, especially, from the Guide tab somewhere in this modal:
FastChannels 4.9.5 β What's New
DirecTV Stream support BETA
- Adds DirecTV Stream as a new premium source, disabled by default.
- DirecTV channels scrape with channel metadata, EPG data, artwork, and Gracenote mappings where available.
- Playback uses DirecTVβs native Widevine flow in the browser, with PrismCast support for M3U clients.
PrismCast DRM bridge improvements
- Improves handling for DRM-only sources so bridge-required channels stay out of the standard M3U feed.
- DirecTV, Sling, Philo, Amazon, and other DRM-capable sources are routed more consistently through the PrismCast feed when needed.
- Adds a PrismCast max resolution setting so capture playback can be capped at 360p, 480p, 720p, or 1080p.
Sling and Philo updates
- Sling Freestream now has optional paid subscription channel support when account credentials are configured.
- Philo audit behavior is stricter about subscription entitlement while still avoiding false dead-channel disables during transient guide gaps.
- Philo playback session handling and cache persistence were improved for more reliable DASH playback.
Playback and stream fixes
- Fixes Distro Shaka preview playback and quiets noisy Distro proxy logs.
- Fixes compressed LG Channels schedule responses.
- Adds Heartland+ support to custom stream detection.
Admin and guide polish
- Adds sticky admin navigation and channel filters.
- Improves source status, diagnostics, and DRM bridge setup feedback.
- Fixes default feed channel number display and several preview/playback metadata edge cases.
Upgrading
git pull
docker compose build && docker compose up -d
Had some weirdness a little while ago on an extended test. Had Comedy Central on since my last post and it did the usual screen blackout/recover at random times. Just a few minutes ago while Family Guy was on, the screen blacked out for longer than usual and when it came back it had time-shifted back to a earlier episode of South Park. I forgot to check how far back it went. My Philo subscription runs out in a week and I thought I'd tinker with it until then. I don't know if anyone else is having similar issues or if it's unique to my hardware/setup or if I don't have something quite right with my install of PrismCast. If it isn't of any help, please let me know and I'll stop posting about it. I'm not trying to create noise where it isn't welcome. Frndly has been working great!
PrismCast:
[2026/07/21 03:01:27.396 PM] [WARN] [0.1-39d6un] Playback buffering - recovering via source reload.
[2026/07/21 03:01:37.409 PM] [WARN] [0.1-39d6un] Source reload did not resolve the issue - escalating to page navigation.
[2026/07/21 03:01:39.457 PM] [0.1-39d6un] Recovered in 2.0s via page navigation.
[2026/07/21 03:33:12.354 PM] [WARN] [0.1-39d6un] Playback buffering - recovering via source reload.
[2026/07/21 03:33:17.565 PM] [0.1-39d6un] Recovered in 5.2s via source reload.
[2026/07/21 03:34:26.407 PM] [0.1-39d6un] Stream ended after 4h 9m. Recoveries: 15 (7x page navigation, 7x source reload, 1x tab replacement), avg 3.2s.
[2026/07/21 03:39:41.773 PM] Restarting browser for scheduled maintenance (uptime: 9h 24m).
[2026/07/21 03:39:43.124 PM] Chrome ready: Chrome/150.0.7871.129 (GPU: Intel(R) UHD Graphics 630 [AV1, H264, HEVC]).
[2026/07/21 03:39:43.801 PM] Browser restart complete. Fresh instance is ready.
Logs from FastChannels:
2026-07-21 15:00:09,782 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:04:15,668 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:08:08,757 INFO __main__: [scheduler] Enqueued philo (interval=60m, age=61m)
2026-07-21 15:08:09,105 INFO app.worker: [philo] Scrape job started
2026-07-21 15:08:09,867 INFO app.scrapers.philo: [philo] 228 channels fetched
2026-07-21 15:08:18,189 INFO app.scrapers.philo: [philo] 1632 EPG entries across 34 channels (587 with descriptions)
2026-07-21 15:08:18,385 INFO app.worker: [xml-cache] enqueued refresh job
2026-07-21 15:08:18,385 INFO app.worker: [philo] Scrape complete β 228 channels, 1632 programs (9.3s)
2026-07-21 15:08:18,389 INFO app.routes.images: [images] pre-warm starting: 228 URLs β 228 already fresh, 0 to fetch (4 workers)
2026-07-21 15:08:18,389 INFO app.routes.images: [images] pre-warm done: 0 cached, 228 already fresh, 0 failed (of 228 total)
2026-07-21 15:08:21,763 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:12:27,886 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:16:34,037 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:20:40,238 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:23:08,756 INFO __main__: [scheduler] Enqueued pluto (interval=360m, age=361m)
2026-07-21 15:23:08,757 INFO __main__: [scheduler] Enqueued frndlytv (interval=360m, age=360m)
2026-07-21 15:23:09,106 INFO app.worker: [pluto] Scrape job started
2026-07-21 15:23:09,543 INFO app.scrapers.pluto: [pluto] us_east: 424 channels
2026-07-21 15:23:09,544 INFO app.scrapers.pluto: [pluto] total 424 channels across ['us_east']
2026-07-21 15:23:11,297 INFO app.scrapers.pluto: [pluto] us_east: 13133 EPG entries total (778 dupes dropped)
2026-07-21 15:23:12,173 INFO app.worker: [pluto] deferring xml refresh β 1 scraper job(s) still pending
2026-07-21 15:23:12,174 INFO app.worker: [pluto] Scrape complete β 424 channels, 13133 programs (3.1s)
2026-07-21 15:23:12,180 INFO app.routes.images: [images] pre-warm starting: 424 URLs β 424 already fresh, 0 to fetch (4 workers)
2026-07-21 15:23:12,180 INFO app.routes.images: [images] pre-warm done: 0 cached, 424 already fresh, 0 failed (of 424 total)
2026-07-21 15:23:12,584 INFO app.worker: [frndlytv] Scrape job started
2026-07-21 15:23:12,693 ERROR app.worker: [frndlytv] Scrape failed after 0.1s
Traceback (most recent call last):
File "/app/app/worker.py", line 470, in run_scraper
channels = _run_phase('channels', scraper.fetch_channels)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/worker.py", line 374, in _run_phase
return fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^
File "/app/app/scrapers/frndlytv.py", line 227, in fetch_channels
rows = self._api_get(_CHANNELS_URL)['data']
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/scrapers/frndlytv.py", line 194, in _api_get
self._login()
File "/app/app/scrapers/frndlytv.py", line 147, in _login
raise RuntimeError(f'Frndly TV login failed: {msg}')
RuntimeError: Frndly TV login failed: Unauthorized access
2026-07-21 15:24:46,271 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:28:47,095 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:32:48,554 INFO app.scrapers.philo: [philo] resolve Q2hhbm5lbDo2MDg1NDg4OTk2NDg0Mzg0OTk β dashURL (license=yes)
2026-07-21 15:44:08,755 INFO __main__: [scheduler] enqueued _rq_prune job
2026-07-21 15:44:08,761 INFO __main__: [scheduler] Enqueued plex (interval=180m, age=181m)
2026-07-21 15:44:08,906 INFO app.worker: [worker] pruned 655 expired EPG entries
2026-07-21 15:44:09,251 INFO app.worker: [plex] Scrape job started
2026-07-21 15:44:12,165 INFO app.scrapers.plex: [plex] genre map: 433 categorised, 433 with tags, 89 Spanish
2026-07-21 15:44:12,189 INFO app.scrapers.plex: [plex] 690 channels fetched in 2.9s
2026-07-21 15:44:12,464 INFO app.scrapers.plex: [plex] targeted guide fetch starting: channels=25 days=5 workers=6
2026-07-21 15:44:14,774 INFO __main__: [dvr-epg] pushed guide refresh for 3 lineup(s): XMLTV-FastChannelsMULTISTREAM, XMLTV-FastChannelsMULTISTREAMPrismCast, XMLTV-FastChannelsPLEXTO
2026-07-21 15:44:15,291 INFO app.scrapers.plex: [plex] targeted guide fetch complete: channels=25 days=5 programs=2814 ok=125 timeouts=0 errors=0 latency avg=0.13s p95=0.15s max=0.16s in 2.8s
2026-07-21 15:44:16,349 INFO app.scrapers.plex: [plex] live-tv RSC fetched in 0.4s (3984986 bytes)
2026-07-21 15:44:16,354 INFO app.scrapers.plex: [plex] luma gap-fill: 12 channels have schedule gaps
2026-07-21 15:44:16,877 INFO app.scrapers.plex: [plex] luma gap-fill total: +115 programs
2026-07-21 15:44:16,878 INFO app.scrapers.plex: [plex] 2929 total EPG entries after luma gap-fill
2026-07-21 15:44:17,082 INFO app.worker: [xml-cache] enqueued refresh job
2026-07-21 15:44:17,082 INFO app.worker: [plex] Scrape complete β 690 channels, 2929 programs (7.8s)
2026-07-21 15:44:17,092 INFO app.routes.images: [images] pre-warm starting: 690 URLs β 690 already fresh, 0 to fetch (4 workers)
2026-07-21 15:44:17,093 INFO app.routes.images: [images] pre-warm done: 0 cached, 690 already fresh, 0 failed (of 690 total)
2026-07-21 15:44:59,489 INFO app.routes.tasks: Enqueued XML artifact refresh
great report- looks like when stream fails, Shaka doesn't know it was last at.. I should be able to improve this.
4.9.5 issue...
Just updated to this version.
Not sure if it's just me but thought I'd bring this up...
I previously had Revn Action, Retro TV and Heartland configured...
With this new version, I see that it didn't have those 3 as already installed, so I went ahead and checked them and installed...
Backed out and went back into Custom Channels... now I have 2 sets of those 3 channels...
Here's the Guide tab:
Update... so here's something interesting...
In Guide, I have the two sets... one closer to the top and I guess the new ones at the bottom...
The Retro TV at the top and bottom won't play in-app... Shaka error...
However, the RevN Action and Heartland at the top won't play in-app (Shaka error) but the two at the to bottom of the list actually plays in-app with no errors..... go figure.
I did update custom channel catalog. Those channels werenβt working so I updated. Didnβt think theyβd break old ones. Id recommend just deleting them and re-adding.
Quick question: will that not make ALL your services believe you are in France? Plex and all others?
Yes: https://www.xfinity.com/stream/. I have it in Prismcast, but for some reason channels (that are in my plan) are available on the streaming website, but aren't on the Prismcast list. I already added two manually as custom channels, but I'd think they'd be on the main list.
Xfinity stream is not supported on Linux so Prismcast needs native install for this.
I'm still having trouble with the CSPAN source. The House Floor & Senate Floor feeds work (even when the guide says they're off the air), but only when viewed from the FastChannels interface. The other 3 always throw Shaka arrors. In Channels itself, none of them will play - including the two that play in the Fastchannels interface.
Not huge, since I am getting them via TVE and Prismcast (well, at least CSPAN 1, 2, and 3 - not the live House/Senate floor feeds or Washington Journal, though), but am wondering what troubleshooting I might do - are they working for others?



