FastChannels - FAST Channels aggregator/manager

Thanks for the suggestion. I have Prismcast working for YTTV. Apparently they don't carry BYUTV. I also have access to Dish. It carries BYUTV (SD) but it wasn't in the provider dropdown. I'm not done trying with FC yet. chDVRuser posted 8 GN IDs for BYUTV two hours ago.
If none of them have an EPG that maps, I'll look into pulling it in another way. There are a lot of smart people in this community. I'm sure someone may have done something similar.

This is great information. Thanks. I'll plug the numbers in and look at preview.

I'm aware of the BYUTV live stream and the airings match the Frndly EPG. The Samsung TV stream doesn't map at all even considering timezone.

FastChannels Preview shows what it scraped from the source, not the results using the GN ID.
Channels DVR is what uses the GN ID to download Gracenote guide data.
Like it says when you open the Preview

Guide details shown here come from the FastChannels scraper for this source, not from Gracenote.

Yep, FndlyTV uses tvc-guide-stationid="71764"

Thanks for saving me time with that. I had expected the same video but I was hoping for different guide details. Shows you how much I know about m38u and EPG.

Meanwhile, I found a live stream for BYUtv. The link is to uplynk.com. It's an m3u8 format and has several parameters. It works with VLC but CDVR rejects it as a playlist. If I get it to work with CDVR, I will need to find an EPG.
I can post it if that would be appropriate for this thread.

Is it the same video feed as the one from byu and frndly?
What I do to start with is look at the video feed (I'm assuming you're talking about Samsung) instead of the XLMTV guide to determine what is actually playing and then look for a GN ID where the airings listed match it.
When you have multiple GN ID's that match what is currently airing, then you have to narrow them down (which is what I did here)

Can't help you there. CDVR is looking for the "manifest" m3u8 (hls manifest)

An HLS manifest is a text file, typically with a .m3u8 extension, that describes the video segments available for streaming in HTTP Live Streaming (HLS). It contains information about the media files, such as their locations, durations, and available quality levels, allowing video players to assemble and play the content smoothly.

The two sources have different feeds. The uplynk feed matches Frndly's.

Samsung and Frndly ?

I created an m3u8 file but apparently it was malformed and CDVR choked on it. Google AI found some some pointers so I'll try again. Basically, it was to format the streamlink as follows:

Create an m3u text file and insert the link with this type of info into it.
#EXTM3U
#EXTINF:-1 channel-id="MyChannel" channel-number="1001" tvg-name="MyChannel" tvg-logo="",My Channel Name
http://your-link-here.m3u8

You most likely will need to use the https link you found.
https://your-link-here.m3u8

But this is getting off-track for this Topic.

Tried that but I agree that we're off topic. I won't address it any more in this thread.

I think Roku just went all DRM- investigating. Anyone else having issues there?

Edit- false alarm but exposed a bug. Getting update out today hopefully. Roku may be unavailable until update fyi.

1 Like

i'm still seeing the this old house roku channel and its streaming - so at least something hasn't gone drm

Seeing some channels are DRM and some are not. All BBC Channels and Cinevault are DRM, America's Funniest Videos, Brit box are not. Will keep checking.

Ran an audit, looks like almost half are DRM:

1 Like

Every time I attempt to run an audit on the Roku Channels, it crashes out after 20 consecutive errors.

2026-03-22 08:39:25,729 WARNING  app.scrapers.roku: [roku] resolve 924a9ed81b5f641455956ea49837d6c5 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:25,730 WARNING  app.worker: [audit] resolve failed for All Reality: [roku] playback request failed for 924a9ed81b5f641455956ea49837d6c5: [roku] channel not found (404): 924a9ed81b5f641455956ea49837d6c5
2026-03-22 08:39:25,891 WARNING  app.scrapers.roku: [roku] resolve 28f080847cc30553c07d622f32d75148 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:25,891 WARNING  app.worker: [audit] resolve failed for Kanal D Drama: [roku] playback request failed for 28f080847cc30553c07d622f32d75148: [roku] channel not found (404): 28f080847cc30553c07d622f32d75148
2026-03-22 08:39:26,134 WARNING  app.scrapers.roku: [roku] resolve c5b76a0244cfd04369cc91d1b1df073b failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:26,134 WARNING  app.worker: [audit] resolve failed for Paramount+: [roku] playback request failed for c5b76a0244cfd04369cc91d1b1df073b: [roku] channel not found (404): c5b76a0244cfd04369cc91d1b1df073b
2026-03-22 08:39:26,353 WARNING  app.scrapers.roku: [roku] resolve e4fee2cfa7f76fe139f29661f2c4faca failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:26,353 WARNING  app.worker: [audit] resolve failed for Paramount+: [roku] playback request failed for e4fee2cfa7f76fe139f29661f2c4faca: [roku] channel not found (404): e4fee2cfa7f76fe139f29661f2c4faca
2026-03-22 08:39:26,728 WARNING  app.scrapers.roku: [roku] resolve 404fb3eabd60b97970d2818a02085cca failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:26,728 WARNING  app.worker: [audit] resolve failed for BET+: [roku] playback request failed for 404fb3eabd60b97970d2818a02085cca: [roku] channel not found (404): 404fb3eabd60b97970d2818a02085cca
2026-03-22 08:39:26,930 WARNING  app.scrapers.roku: [roku] resolve b479644ade35ebeb4e40a0b837b0cf38 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:26,930 WARNING  app.worker: [audit] resolve failed for BET+: [roku] playback request failed for b479644ade35ebeb4e40a0b837b0cf38: [roku] channel not found (404): b479644ade35ebeb4e40a0b837b0cf38
2026-03-22 08:39:27,191 WARNING  app.scrapers.roku: [roku] resolve 5fe1985db42bbeb7956e64dd388b3fb0 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:27,192 WARNING  app.worker: [audit] resolve failed for FlixLatino: [roku] playback request failed for 5fe1985db42bbeb7956e64dd388b3fb0: [roku] channel not found (404): 5fe1985db42bbeb7956e64dd388b3fb0
2026-03-22 08:39:27,638 WARNING  app.scrapers.roku: [roku] resolve aed88adcada400e0ea6ed621100b01e5 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:27,638 WARNING  app.worker: [audit] resolve failed for Inside Outside House and Garden: [roku] playback request failed for aed88adcada400e0ea6ed621100b01e5: [roku] channel not found (404): aed88adcada400e0ea6ed621100b01e5
2026-03-22 08:39:28,031 WARNING  app.scrapers.roku: [roku] resolve 2a01d73722e80d1e34eccbea32d90c2c failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:28,032 WARNING  app.worker: [audit] resolve failed for Dove Channel: [roku] playback request failed for 2a01d73722e80d1e34eccbea32d90c2c: [roku] channel not found (404): 2a01d73722e80d1e34eccbea32d90c2c
2026-03-22 08:39:28,232 WARNING  app.scrapers.roku: [roku] resolve 1ea82fc720b522b91f9cc5d2031b27d5 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:28,233 WARNING  app.worker: [audit] resolve failed for REELZ+: [roku] playback request failed for 1ea82fc720b522b91f9cc5d2031b27d5: [roku] channel not found (404): 1ea82fc720b522b91f9cc5d2031b27d5
2026-03-22 08:39:29,950 WARNING  app.scrapers.roku: [roku] resolve af930ee1b8139a9a45f542d3f622deba failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:29,950 WARNING  app.worker: [audit] resolve failed for Acorn TV: [roku] playback request failed for af930ee1b8139a9a45f542d3f622deba: [roku] channel not found (404): af930ee1b8139a9a45f542d3f622deba
2026-03-22 08:39:30,388 WARNING  app.scrapers.roku: [roku] resolve 3df80083619d74d6dbd4a9f8634c6499 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:30,389 WARNING  app.worker: [audit] resolve failed for Vix Premium (fka Vix+): [roku] playback request failed for 3df80083619d74d6dbd4a9f8634c6499: [roku] channel not found (404): 3df80083619d74d6dbd4a9f8634c6499
2026-03-22 08:39:30,748 WARNING  app.scrapers.roku: [roku] resolve cf90364b0d4bfe61f174410768242271 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:30,749 WARNING  app.worker: [audit] resolve failed for Demand Africa: [roku] playback request failed for cf90364b0d4bfe61f174410768242271: [roku] channel not found (404): cf90364b0d4bfe61f174410768242271
2026-03-22 08:39:31,190 WARNING  app.scrapers.roku: [roku] resolve d029ed1993086247927c167273c8a67a failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:31,190 WARNING  app.worker: [audit] resolve failed for Discovery+: [roku] playback request failed for d029ed1993086247927c167273c8a67a: [roku] channel not found (404): d029ed1993086247927c167273c8a67a
2026-03-22 08:39:33,684 WARNING  app.scrapers.roku: [roku] resolve 741ab02548ca3e55975f9121c24cc38e failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:33,684 WARNING  app.worker: [audit] resolve failed for Discovery+: [roku] playback request failed for 741ab02548ca3e55975f9121c24cc38e: [roku] channel not found (404): 741ab02548ca3e55975f9121c24cc38e
2026-03-22 08:39:34,088 WARNING  app.scrapers.roku: [roku] resolve 9627a4220ed8700fb498851dd2a3e454 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:34,089 WARNING  app.worker: [audit] resolve failed for Max: [roku] playback request failed for 9627a4220ed8700fb498851dd2a3e454: [roku] channel not found (404): 9627a4220ed8700fb498851dd2a3e454
2026-03-22 08:39:34,268 WARNING  app.scrapers.roku: [roku] resolve e57998743662aaafdbd3231059e20b44 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:34,269 WARNING  app.worker: [audit] resolve failed for AllBlk: [roku] playback request failed for e57998743662aaafdbd3231059e20b44: [roku] channel not found (404): e57998743662aaafdbd3231059e20b44
2026-03-22 08:39:34,634 WARNING  app.scrapers.roku: [roku] resolve 401bd31538a2019a3c0d1c933f09d0ab failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:34,634 WARNING  app.worker: [audit] resolve failed for crunchyroll: [roku] playback request failed for 401bd31538a2019a3c0d1c933f09d0ab: [roku] channel not found (404): 401bd31538a2019a3c0d1c933f09d0ab
2026-03-22 08:39:34,819 WARNING  app.scrapers.roku: [roku] resolve 6dc4391c2c0f0e9ffb75451f6322400b failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:34,819 WARNING  app.worker: [audit] resolve failed for Fox Nation: [roku] playback request failed for 6dc4391c2c0f0e9ffb75451f6322400b: [roku] channel not found (404): 6dc4391c2c0f0e9ffb75451f6322400b
2026-03-22 08:39:34,997 WARNING  app.scrapers.roku: [roku] resolve 2fa657460bdeae7627bd9c5cfd0063e4 failed stage=content play_id_cache=False selector_cache=False content_lookup=True
2026-03-22 08:39:34,997 WARNING  app.worker: [audit] resolve failed for Passionflix: [roku] playback request failed for 2fa657460bdeae7627bd9c5cfd0063e4: [roku] channel not found (404): 2fa657460bdeae7627bd9c5cfd0063e4
2026-03-22 08:39:34,997 ERROR    app.worker: [audit] roku: 20 consecutive errors — aborting.
2026-03-22 08:39:35,487 INFO     app.worker: [audit] roku: done — total=508 checked=346 flagged=0 dead=0 errors=20
1 Like

Yep working on that now.

1 Like

● v2.1.0

Gracenote improvements

  • Cross-source name matching — any channel whose name matches a known Gracenote channel is automatically routed to the Gracenote M3U, works across all installs without manual config
  • Added 150 Roku + 29 Plex Gracenote ID mappings via CSV lookup
  • Samsung, Xumo, LG Channels, LocalNow now get Gracenote coverage via name matching (were 0% before)

Roku

  • Persist OSM session token to DB so stream resolves don't hit the playback API on every audit/play request
  • Fixed dead channel handling and over-triggering fallback API calls

Reliability

  • Dedicated fast queue for latency-sensitive jobs (XML/M3U refresh) — reduces 504s under load
  • Fixed startup DB lock race between worker and gunicorn
  • Fixed M3U 503 gap during refresh (atomic swap, keeps old file until new one is ready)
  • Fixed background manifest check thread losing Flask app context

Logo cache

  • Switched from TTL-based to URL-change expiry — logos no longer re-fetched on a timer, only when the source URL changes

Worker

  • Fixed signal handler crash in fast worker thread (SIGALRM not allowed in non-main threads)
  • SSL handshake failures now correctly marked as dead streams rather than transient errors
1 Like

Notice on feeds, a Overlap warning. What is this checking for?
As my feed it warns on does not overlap.
Only 3 channels starting at 1600, so 1600 - 1602.
The other feeds are starting at 2000, and 4000.

Screenshot 2026-03-22 144758

Note. All channels in each source are disabled save for the ones i am including in each feed.
So, i assume i can safely ignore this warning?

1 Like

I should probably check into that. It won’t hurt anything as Channels won’t allow duplicates.

Edit on version 2.1.2 Roku should work now

1 Like