FastChannels - FAST Channels aggregator/manager

Just type in your IP and hit save?

I wonder if it is something else. I re-enabled one of the channels I had blocked in FastChannels, and it immediately showed back up in CDVR. Could Gracenotes have anything to do with it? Is there a proper place within CDVR to paste the url for it? I'm only using the XMLTV field for guide data. This may have nothing to do with my issue, but considering I'm getting most of the channels, I thought there may be another conflict somwhere.

How did you add it to CDVR?
Did you use the add to CDVR button in Fast channels?

I thought I had. I may have lifted it from docker

image

I think I ultimately did get to use the "Add to Channels DVR" feature within FastChannel.

Fastchannels creates two sources sometimes-- one for channels with Gracenote IDs (for richer guide data) and one for regular scraped guide data (not as good). The channels you are missing - are they Gracenote channels?

You may want to start the Channels part again. First, confirm your Channels DVR IP. Easiest way is:
go to my.channelsdvr.net, then Settings, General.. It should be listed right under Network Discovery.

Take that IP back over to FastChannels admin, and type it in the "Channels DVR" setting box (and make sure the top box has an IP in it too - I assume on the same computer/server?)

Then, I'd start fresh - back on Channels admin page, go to sources and remove the ones you made for FastChannels. Then go back to FastChannels and add your feeds and hit "Add to Channels DVR) (assuming you did step 1) and FastChannels configures ChannelsDVR automatically for you.

Guess the better way to look at this is by stating I see 229 enabled channels within FastChannel; however only 229 is not what CDVR app is receiving. I am receiving only about 156 in CDVR. I disabled several of the channels (quite a bit) from FastChannel to keep the overall numbers in CDVR below threshold. I have no hidden channels within CDVR at present. Not sure where the conflict is.

Send me a picture of your feed settings, and then from CDVR screen shot of your sources.

1 Like

oh yea bud u got it all mixed up.

do me a favor - click manage on that Pluto TV source u made, and delete it... then follow my last post to let FastChannels install that source for you. trust me

1 Like

Thank you so much! I believe we are cooking with gas now. I didn't realize the source setup in CDVR would need to be two different ones and that it set itself up automatically. This is a huge help. I appreciate all of your help and support.

2 Likes

I had already deleted it. Thank you.

v3.0.2 release notes:

Custom logos

  • Per-channel logo override: click any channel logo in the admin table to set a custom URL with live preview
  • Pinned logos survive scrapes β€” scraper won't overwrite user-set logos (clear to restore)

Stirr

  • Fixed TLS and 502 errors in manifest proxy
  • Dead channel detection: channels with no valid variant streams are flagged inactive
  • EXT-X-MEDIA URI= attributes now proxied correctly (audio/subtitle tracks)

Admin / UX

  • Volume slider in preview player (defaults to 50%)
  • "Unique only" filter in channel table to show only duplicate candidates
  • Region-aware duplicate detection: same channel in different regions no longer gets flagged
  • Gracenote Community Map: refresh button + fixed crash on refresh errors
  • Fixed HTML entities (e.g. &) in Distro EPG titles/descriptions
  • Fixed Pluto TV language/country codes for non-English regions

i added this FYI. let me know how it works

i figured out how to get channel descriptions for you old man. not every source has it, but decent coverage. will add next version.

3 Likes

What's the recommended way for upgrading? I run in an LXC+Docker using Portainer... what would be the best path to preserve everything?

Thanks for the fixes!

Anyway to tell which channel is in error from the audit?
brave_screenshot

2026-04-14 13:25:12,214 INFO     app.routes.tasks: Enqueued stream audit for distro
2026-04-14 13:25:12,639 INFO     app.worker: [audit] distro: checking 641 channels…
2026-04-14 13:25:44,903 INFO     app.worker: [audit] distro: 25/641 β€” checked=25 flagged=0 dead=0 errors=0 skipped_403=0
2026-04-14 13:26:05,701 INFO     app.worker: [audit] distro: 50/641 β€” checked=50 flagged=0 dead=0 errors=0 skipped_403=0
2026-04-14 13:26:27,459 INFO     app.worker: [audit] distro: 75/641 β€” checked=75 flagged=0 dead=0 errors=0 skipped_403=0
2026-04-14 13:26:57,218 INFO     app.worker: [audit] distro: 100/641 β€” checked=99 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:27:42,635 INFO     app.worker: [audit] distro: 125/641 β€” checked=124 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:28:30,876 INFO     app.worker: [audit] distro: 150/641 β€” checked=149 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:29:07,034 INFO     app.worker: [audit] distro: 175/641 β€” checked=174 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:29:46,109 INFO     app.worker: [audit] distro: 200/641 β€” checked=199 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:30:06,684 INFO     app.worker: [audit] distro: 225/641 β€” checked=224 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:30:32,817 INFO     app.worker: [audit] distro: 250/641 β€” checked=249 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:30:54,039 INFO     app.worker: [audit] distro: 275/641 β€” checked=274 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:31:16,189 INFO     app.worker: [audit] distro: 300/641 β€” checked=299 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:32:07,273 INFO     app.worker: [audit] distro: 350/641 β€” checked=349 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:32:32,647 INFO     app.worker: [audit] distro: 375/641 β€” checked=374 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:33:03,089 INFO     app.worker: [audit] distro: 400/641 β€” checked=399 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:33:34,722 INFO     app.worker: [audit] distro: 425/641 β€” checked=424 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:34:06,883 INFO     app.worker: [audit] distro: 450/641 β€” checked=449 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:34:41,383 INFO     app.worker: [audit] distro: 475/641 β€” checked=474 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:35:16,075 INFO     app.worker: [audit] distro: 500/641 β€” checked=499 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:35:43,641 INFO     app.worker: [audit] distro: 525/641 β€” checked=524 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:36:04,982 INFO     app.worker: [audit] distro: 550/641 β€” checked=549 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:36:23,743 INFO     app.worker: [audit] distro: 575/641 β€” checked=574 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:36:47,658 INFO     app.worker: [audit] distro: 600/641 β€” checked=599 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:37:12,794 INFO     app.worker: [audit] distro: 625/641 β€” checked=624 flagged=0 dead=0 errors=1 skipped_403=0
2026-04-14 13:37:28,351 INFO     app.worker: [audit] distro: done β€” total=641 checked=640 flagged=0 dead=0 errors=1 skipped_403=0

I probably should store that (like I do with the 403 errors). Will add next version.

Yeah @dave313. Here is the XML for UnRaid Docker template. Just create a file called my-FastChannels.xml, copy the below contents into it, save it, and then copy it to your UnRaid boot flash drive at the following location:

/config/plugins/dockerMan/templates-user

<?xml version="1.0"?>
<Container version="2">
	<Name>FastChannels</Name>
	<Repository>ghcr.io/kineticman/fastchannels:latest</Repository>
	<Registry/>
	<Network>bridge</Network>
	<MyIP/>
	<Shell>sh</Shell>
	<Privileged>false</Privileged>
	<Support>https://community.getchannels.com/t/fastchannels-fast-channels-aggregator-manager/45986</Support>
	<Project>https://github.com/kineticman/FastChannels</Project>
	<ReadMe>https://github.com/kineticman/FastChannels/blob/main/README.md</ReadMe>
	<Overview>FAST channel aggregator &#x2014; scrapes Pluto TV, Tubi, Roku, Samsung TV Plus, Sling Freestream, Plex, DistroTV, Xumo, and more, then outputs M3U playlists and XMLTV EPG guides for use in any IPTV player (Jellyfin, Plex, Channels DVR, TiviMate, etc.).</Overview>
	<Category>MediaServer:Video</Category>
	<WebUI>http://[IP]:[PORT:5523]</WebUI>
	<TemplateURL/>
	<Icon/>
	<ExtraParams>--restart unless-stopped</ExtraParams>
	<PostArgs/>
	<CPUset/>
	<DonateText/>
	<DonateLink/>
	<Requires/>
	<Config Name="Port" Target="5523" Default="5523" Mode="tcp" Description="" Type="Port" Display="always" Required="true" Mask="false">5523</Config>
	<Config Name="Config Directory" Target="/data" Default="" Mode="rw" Description="" Type="Path" Display="always" Required="true" Mask="false">/mnt/cache/appdata/FastChannels</Config>
	<Config Name="LAN URL address of FastChannels server" Target="PUBLIC_BASE_URL" Default="" Mode="" Description="LAN address other devices use to reach FastChannels. If set in the GUI of FastChannels, it will override the value specified here." Type="Variable" Display="always" Required="false" Mask="false"/>
	<Config Name="LAN URL address of Channels DVR server" Target="CHANNELS_DVR_SERVER_URL" Default="" Mode="" Description="LAN URL address of Channels DVR server. If set in the GUI of FastChannels, it will override the value specified here." Type="Variable" Display="always" Required="false" Mask="false"/>
	<TailscaleStateDir/>
</Container>

Once you copy it over to your boot flash drive, it should become available as a template under the Docker tab.

The only parameter you might have to change is your Config directory, which might different in your environment from mine.

the DB is persistent, so I think it'd be as simple as Portainer β†’ Stacks β†’ FastChannels β†’ Pull and redeploy.