FastChannels - FAST Channels aggregator/manager

Thanks for the reply

Appreciate the link, thanks

I tried Portainer for my initial install of this app, and even though I'd noted the password I'd set up, it wouldn't log me back in. Given that, I am in no hurry to try to set it up again.

1 Like

Your kitten factory isn't completly dead yet, but reading the YT-DLP github, it looks like it's a constant cat and mouse game (pun intended). Youtube now requires a bound-PO token and we tried web_safari, web, iOS (in order) and all of those are now dead. There is one that still works -- android_vr that I didn't have in the list. I just added it and it works. I'll push out a small update later.

Pushed 4.8.0

  • Fixed YouTube. Also, put in an auto-weekly updater inside the container to update YT-DLP (the program that controls YT integration).
  • Fixed tvg-chnum issue @jator

Just an FYI about this and another option you can explore:

1 Like

I assume you updated yt-dlp on your end as well, babson?

1 Like

More than updated; I generally keep myself on the bleeding edge daily edition, at least in development.

1 Like

Thanks.
Working again now.

Distro is missing channels on scrapes.
Since Midnight this morning, only getting 18 channels scraped, instead of 193.

Log
2026-07-09 22:02:30,833 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-09 22:02:31,810 INFO     app.worker: [distro] Scrape job started
2026-07-09 22:02:32,203 INFO     app.scrapers.distro: [distro] parsed 90 channels for geo=US
2026-07-09 22:02:32,299 INFO     app.scrapers.distro: [distro] parsed 103 channels for geo=QQ
2026-07-09 22:02:32,299 INFO     app.scrapers.distro: [distro] parsed 193 channels across 2 geo feed(s)
2026-07-09 22:02:33,356 INFO     app.scrapers.distro: [distro] parsed 5617 EPG entries
2026-07-09 22:02:37,085 INFO     app.worker: [distro] Scrape complete — 193 channels, 5617 programs (5.3s)
2026-07-09 23:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-09 23:02:31,805 INFO     app.worker: [distro] Scrape job started
2026-07-09 23:02:32,167 INFO     app.scrapers.distro: [distro] parsed 63 channels for geo=US
2026-07-09 23:02:32,245 INFO     app.scrapers.distro: [distro] parsed 72 channels for geo=QQ
2026-07-09 23:02:32,246 INFO     app.scrapers.distro: [distro] parsed 135 channels across 2 geo feed(s)
2026-07-09 23:02:33,101 INFO     app.scrapers.distro: [distro] parsed 4012 EPG entries
2026-07-09 23:02:36,201 INFO     app.worker: [distro] Scrape complete — 135 channels, 4012 programs (4.4s)
2026-07-10 00:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 00:02:31,803 INFO     app.worker: [distro] Scrape job started
2026-07-10 00:02:32,123 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 00:02:32,191 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 00:02:32,192 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 00:02:32,245 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 00:02:32,810 INFO     app.scrapers.distro: [distro] parsed 764 EPG entries
2026-07-10 00:02:33,536 INFO     app.worker: [distro] Scrape complete — 18 channels, 764 programs (1.7s)
2026-07-10 01:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 01:02:31,810 INFO     app.worker: [distro] Scrape job started
2026-07-10 01:02:32,079 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 01:02:32,146 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 01:02:32,146 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 01:02:32,199 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 01:02:32,740 INFO     app.scrapers.distro: [distro] parsed 764 EPG entries
2026-07-10 01:02:33,536 INFO     app.worker: [distro] Scrape complete — 18 channels, 764 programs (1.7s)
2026-07-10 02:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 02:02:31,800 INFO     app.worker: [distro] Scrape job started
2026-07-10 02:02:32,061 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 02:02:32,128 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 02:02:32,128 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 02:02:32,181 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 02:02:32,775 INFO     app.scrapers.distro: [distro] parsed 764 EPG entries
2026-07-10 02:02:33,493 INFO     app.worker: [distro] Scrape complete — 18 channels, 764 programs (1.7s)
2026-07-10 03:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 03:02:31,814 INFO     app.worker: [distro] Scrape job started
2026-07-10 03:02:32,198 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 03:02:32,267 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 03:02:32,268 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 03:02:32,321 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 03:02:32,885 INFO     app.scrapers.distro: [distro] parsed 762 EPG entries
2026-07-10 03:02:33,494 INFO     app.worker: [distro] Scrape complete — 18 channels, 762 programs (1.7s)
2026-07-10 04:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 04:02:31,804 INFO     app.worker: [distro] Scrape job started
2026-07-10 04:02:32,234 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 04:02:32,301 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 04:02:32,301 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 04:02:32,354 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 04:02:32,930 INFO     app.scrapers.distro: [distro] parsed 762 EPG entries
2026-07-10 04:02:33,578 INFO     app.worker: [distro] Scrape complete — 18 channels, 762 programs (1.8s)
2026-07-10 05:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 05:02:31,828 INFO     app.worker: [distro] Scrape job started
2026-07-10 05:02:32,266 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 05:02:32,334 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 05:02:32,335 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 05:02:32,388 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 05:02:32,945 INFO     app.scrapers.distro: [distro] parsed 762 EPG entries
2026-07-10 05:02:33,685 INFO     app.worker: [distro] Scrape complete — 18 channels, 762 programs (1.9s)
2026-07-10 06:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 06:02:31,810 INFO     app.worker: [distro] Scrape job started
2026-07-10 06:02:32,167 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 06:02:32,241 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 06:02:32,242 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 06:02:32,295 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 06:02:32,860 INFO     app.scrapers.distro: [distro] parsed 778 EPG entries
2026-07-10 06:02:33,766 INFO     app.worker: [distro] Scrape complete — 18 channels, 778 programs (2.0s)
2026-07-10 07:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 07:02:31,796 INFO     app.worker: [distro] Scrape job started
2026-07-10 07:02:32,082 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 07:02:32,154 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 07:02:32,155 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 07:02:32,207 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 07:02:32,763 INFO     app.scrapers.distro: [distro] parsed 776 EPG entries
2026-07-10 07:02:33,595 INFO     app.worker: [distro] Scrape complete — 18 channels, 776 programs (1.8s)
2026-07-10 08:02:30,832 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 08:02:31,803 INFO     app.worker: [distro] Scrape job started
2026-07-10 08:02:32,069 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 08:02:32,132 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 08:02:32,133 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 08:02:32,185 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 08:02:32,772 INFO     app.scrapers.distro: [distro] parsed 774 EPG entries
2026-07-10 08:02:33,482 INFO     app.worker: [distro] Scrape complete — 18 channels, 774 programs (1.7s)
2026-07-10 09:02:30,833 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 09:02:31,826 INFO     app.worker: [distro] Scrape job started
2026-07-10 09:02:32,115 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 09:02:32,187 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 09:02:32,188 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 09:02:32,241 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 09:02:32,818 INFO     app.scrapers.distro: [distro] parsed 770 EPG entries
2026-07-10 09:02:33,815 INFO     app.worker: [distro] Scrape complete — 18 channels, 770 programs (2.0s)
2026-07-10 10:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 10:02:31,819 INFO     app.worker: [distro] Scrape job started
2026-07-10 10:02:32,075 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 10:02:32,139 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 10:02:32,139 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 10:02:32,379 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 10:02:33,046 INFO     app.scrapers.distro: [distro] parsed 772 EPG entries
2026-07-10 10:02:34,061 INFO     app.worker: [distro] Scrape complete — 18 channels, 772 programs (2.2s)
2026-07-10 11:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 11:02:31,814 INFO     app.worker: [distro] Scrape job started
2026-07-10 11:02:32,082 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 11:02:32,146 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 11:02:32,146 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 11:02:32,199 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 11:02:32,733 INFO     app.scrapers.distro: [distro] parsed 768 EPG entries
2026-07-10 11:02:33,623 INFO     app.worker: [distro] Scrape complete — 18 channels, 768 programs (1.8s)
2026-07-10 12:02:30,831 INFO     __main__: [scheduler] Enqueued distro (cron=2 * * * *)
2026-07-10 12:02:31,814 INFO     app.worker: [distro] Scrape job started
2026-07-10 12:02:32,098 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=US
2026-07-10 12:02:32,171 INFO     app.scrapers.distro: [distro] parsed 9 channels for geo=QQ
2026-07-10 12:02:32,171 INFO     app.scrapers.distro: [distro] parsed 18 channels across 2 geo feed(s)
2026-07-10 12:02:32,224 WARNING  app.worker: [distro] suspicious channel refresh collapse: existing_active=193 incoming=18 missing_active=175; preserving prior active rows
2026-07-10 12:02:32,776 INFO     app.scrapers.distro: [distro] parsed 764 EPG entries
2026-07-10 12:02:33,808 INFO     app.worker: [distro] Scrape complete — 18 channels, 764 programs (2.0s)
1 Like

i think it might be legit.. look at their website- only 9 channels listed. maybe they're falling apart. didn't we lose a bunch of channels a few months ago from them too?

1 Like

I lost most Pluto channels

Update: Docker was no longer running.......

Surprising that you didn’t lose ALL of them, then!

KineticMan, I was out of town but finally got the latest install running and wanted to say thank you for the quick addition of the DRM work around, I can see lots of future potential on this extension and just wanted to let you know that your efforts are greatly appreciated.

I am curious if in your plans you would potentially scrape a provider like Philo where a large handful of those channels don't come through on TVE but would be available to pull via a DRM tunnel scenario?

1 Like

Sure- I’ll look into it.

1 Like

looks like she dead again (at least the EPG data). I'll continue to leave in the project for now, but she's on her last leg.

I noticed it started failing a couple days ago.
Stream audit on the channels looks good and they still stream.

Yea surprised the endpoint for the channel list still works.

Btw- I am close on Vidaa 2.0 btw. I figured out their new architecture. Channel list is different thou. I’ll be testing over next week then I’ll release it.

Given my setup:


(AI-generated image)

When a recording is in progress, is the stream received by FastChannels or does it go straight to Channels? I think this is the latter and FastChannels acts just like Chromecast used to do by providing the URL straight to the client.

Just wondering because when I get interrupted recordings sometimes, I don't know if it could be because of the wireless connection to the PC.

I know some sources are proxied by FastChannels. Not sure which ones.
I found out when I updated FastChannels with CDVR recordings in process that got interrupted.