YTTV Sports Deeplinks — YouTube TV sports lanes

Self-hosted Docker guide for YouTube TV sports. Sign in once, get XMLTV + virtual lanes with a tv.youtube.com/watch/… link per game.

I built it so ESPN Unlimited / extras open in the YouTube TV app. On my setup those streams are typically several seconds ahead of the same event in the ESPN app.

git clone GitHub - matthewfkoch/YTTVSportsDeeplinks: YouTube TV sports guide with XMLTV, M3U, and watch deeplinks · GitHub
cd YTTVSportsDeeplinks
cp .env.example .env
docker compose pull
docker compose up -d
Open http://:8095 and sign in to tv.youtube.com with a dedicated YouTube TV Google account.

3 Likes

YTTV Sports Deeplinks 0.2.2

Opening the dashboard was restarting live Channels/APITuner streams. The signed-in guide page was still connecting to the container Chromium, and that bumped the YouTube TV sessions those tuners were already playing. 0.2.2 leaves that browser alone unless the sign-in desktop is actually on screen.

docker compose pull
docker compose up -d
Image: ghcr.io/matthewfkoch/yttvsportsdeeplinks:0.2.2
Release: Release YTTV Sports Deeplinks v0.2.2 · matthewfkoch/YTTVSportsDeeplinks · GitHub

2 Likes

First off, this is a great idea! I've been looking for something like this to bring individual YouTube TV sporting events into Channels DVR, and I really appreciate the work you've put into it. I think this could be a fantastic addition to Channels DVR.

I spent some time testing YTTVSportsDeeplinks with my Channels DVR setup, and wanted to share some initial feedback.

I've got it running in Docker, and the M3U/XMLTV feeds are importing into Channels DVR. The events show up in the guide with the correct titles and schedules, but I've run into a few issues.

1. Sports category

I noticed the XMLTV feed includes categories like Football, Basketball, and Soccer, but doesn't include the general Sports category. Channels didn't seem to recognize these events as sports programming for its automatic Channel Collections.

I made a small change to feeds.py to add <category>Sports</category> alongside the existing categories, and that seems to have resolved the issue.

2. Live and New flags

Even after fixing the Sports category, the channels won't populate my Live Sports Channel Collection if either the Live or New filter is checked. As soon as I uncheck both, the channels appear as expected.

I'm guessing Channels isn't receiving whatever metadata it needs to identify these events as Live or New.

3. Deeplinks aren't launching

The events appear in the Channels DVR guide, but selecting one doesn't successfully launch the corresponding YouTube TV event.

I'm not sure whether I'm missing something in my configuration or if there's an issue with how the deeplinks are being handled. Any guidance on the intended playback setup would be appreciated.

4. Missing EPG thumbnails

I'm also not seeing any event thumbnails or artwork in the Channels DVR guide. I can see that the XMLTV feed includes <icon src="..."> URLs for individual events, but that artwork doesn't seem to be making it into Channels.

It would be great to have the event artwork displayed in the guide, especially since YouTube TV already provides thumbnails for these events.

Overall, I really like the concept. Having individual sporting events automatically populate Channels DVR, complete with guide information, artwork, and direct playback, would be incredibly useful.

I realize some of these issues may be limitations of Channels DVR rather than YTTVSportsDeeplinks itself, but I wanted to share what I'm seeing and see if there are any recommended configuration changes or potential fixes.

Thanks again for putting this together. I think this project has a lot of promise!

1 Like

Thanks for testing this and sharing such detailed feedback!

  1. Sports category: Fixed in v0.2.4. Every event now includes Sports alongside its specific sport and network categories.
  2. Live and New: v0.2.4 adds both flags, including for upcoming events. After updating, refresh your XMLTV guide in Channels and try the collection with those filters enabled.
  3. Deeplink playback: If you’re importing the M3U directly into Channels, that explains the playback issue. These URLs require a configured APITuner or ADBTuner setup to resolve the deeplink and launch YouTube TV. Direct import into Channels alone won’t launch the event.
  4. Thumbnails: The feed includes event artwork URLs, but we haven’t identified why they aren’t displaying in your Channels setup. This release leaves artwork unchanged; that needs further investigation.

You can update with:

docker compose pull
docker compose up -d

Please let me know whether the refreshed guide resolves the Sports, Live, and New collection issues. Thanks again for helping improve this!

I pulled the updated Docker image and confirmed that the XMLTV feed now includes the Sports category along with both Live and New flags.

The good news is that the Live Sports Channel Collection in Channels DVR now populates correctly with both filters enabled. Bad news is that completed sporting events are also being flagged as Live and New.

To clarify on my first post the thumbnails come through, but the actual broadcaster logos don't display—only a generic logo does. I had to download the individual network logos (ESPN, NFL Network, ACC Network, etc.) and create a separate mapping script that queries each lane's current station and assigns the corresponding logo through the M3U tvg-logo attribute for Channels DVR.

Not to pile on but the Android app's Guide shows the network name (ESPN, FS2, etc.) instead of the game title. The correct title appears in the web admin and program details.

Could the XMLTV <sub-title> field, which contains the network name, be causing this? Would you consider making it optional through a setting like XMLTV_INCLUDE_SUBTITLE=false ?

I haven't had a ton of time to QA things beyond the core functionality so I appreciate the feedback. Grab the latest release and let me know if things are better.

few updates

Working:
*EPG is showing appropriate data now.

Not working:
*Completed sporting events are still listed even with Live and New checked

Request:
*Channel logos
*Filter for Spanish language broadcasts (e.g., in ESPN+)

And great job with this. the channels launch flawlessly. much cleaner than adtuner channels i had set up manually.

Thanks for the updates—glad the EPG is displaying correctly now! I’ve released v0.2.6 with improvements for logos and Spanish broadcasts.

Channel logos: Added bundled logos for ESPN, ESPN2, ESPNU, ESPNEWS, ESPN+, SEC Network, SEC+, ACC Network, ACC Extra, FS1, FS2, CBS Sports Network, and NFL Network. Discovered broadcaster logos are also saved across schedule refreshes. Your custom logo overrides still take priority.

Spanish broadcasts: There’s a new Hide Spanish broadcasts checkbox in the dashboard’s Sports section. It’s off by default and remembers your selection. It recognizes labeled Spanish versions on ESPN+ and known Spanish-language networks. Unknown-language broadcasts remain included.

Completed events: This still needs investigation. The feed removes Live/New flags after an event’s scheduled end, but I haven’t reproduced the reported behavior yet. Could you share one affected game’s title, its displayed start/end time, and where it still appears? That will help determine whether the source times are wrong or Channels is retaining older guide data.

After updating, refresh the guide in this app, then refresh the YTTV Sports source and XMLTV guide in Channels so it picks up the changes.

Channel logos and hide spanish broadcasts works great. But the spanish broadcast box unchecks itself after a while. very odd.

There are no replays on right now, but I will test when something comes on in the morning.

Thanks for the quick fixes; happy to continue to Q&A.

Completed events: try the NFL Network it is currently showing Prime Vision Alt Cast: Seattle Seahawks at Denver Broncos from October 16th 2026. I can not remove it from my Custom Channel Collection even with New and Live checked.

Thanks again for testing! v0.2.7 addresses both issues:

  • Spanish checkbox unchecking: Fixed a race where a background guide update could reload the page while the setting was being saved. The checkbox now stays synchronized with the saved preference.
  • NFL Network replay showing as Live/New: The app no longer assumes a programme is live or new just because its scheduled broadcast is on air. Listings without reliable status—including that Prime Vision example—remain playable but no longer receive assumed Live/New flags.

After updating, refresh the app’s guide, then refresh the YTTV Sports source and XMLTV guide in Channels to replace the old metadata.

One tradeoff: actual live games may also be excluded from filtered collections when YouTube TV doesn’t provide enough status information. Please let me know how both fixes behave in your setup!

Works
Spanish filter works great.

Noticed the tradeoff of the actual live games being filtered out. Tracking the YYTV limitations in the metadata.

Not working
I've noticed that some channels carrying ESPN+ games still display the generic YTTVSportsDeeplinks logo instead of the ESPN+ logo.

My current logo breakdown is:

Active lanes only (23 total):

  • ESPN+: 7
  • Generic/default: 10 (all should be ESPN+)
  • Other network logos: 6

I've confirmed these logos come directly from the container's M3U playlist, not Channels DVR.

Request
Filters for FS1 and FS2 rather than just a Fox filter (similar to the ESPN and ESPN2 filters)

YTTVSportsDeeplinks v0.2.8 — channel filters and ESPN+ logo fixes

v0.2.8

This release improves channel filtering and fixes cases where ESPN+ games displayed the ESPN or generic project logo.

  • Individual channel filters: FS1, FS2, ESPN, ESPN2, ESPNU, ESPNEWS, and other stations can now be included or excluded independently.
  • One ViX filter: All numbered ViX feeds share a single filter with a combined event count.
  • More accurate ESPN+ branding: Explicit ESPN+ labels survive duplicate-listing merges. Matching broadcaster information from ESPN’s official schedule can also correct misleading ESPN labels.
  • Consistent feed logos: M3U and XMLTV use the same broadcaster logo selection.

Existing channel exclusions are migrated automatically. Spanish filtering and the conservative handling of Live/New metadata remain in place.

Updating with Docker Compose:

docker compose pull
docker compose up -d

Then refresh the dashboard and refresh the M3U source and XMLTV guide in Channels DVR.

Images are available as 0.2.8 and latest for both AMD64 and ARM64. Validation included 234 Python tests, 6 JavaScript tests, Docker smoke checks, and GitHub CI.

If you spot another incorrect logo or channel label, please share the game title, scheduled time, and station shown in the guide—it helps track down the source metadata