FruitDeepLinks — Universal Sports Aggregator for Channels DVR

There is no single docker volume for this project, there are four bound directories beginning with -v.

OK I'll switch back to compose, but I did that originally and when I did docker compose up -d it wouldn't upgrade. I guess I missed the docker compose pull.

Thanks.

I don't have Linear Feed enabled, unless the stale M3U Lane list was inadvertently picking it up. Haven't seen the issue since I changed the update schedule to hourly in DISPATCHARR.

FruitDeepLinks 2.2.0 — What's New

  • ESPN+ entitlement splitting: ESPN's catalog often lists several nearly-identical channels for the same game with no way to tell which one actually needs MLB.TV, MLB Network, or ESPN Unlimited. We now pull that info from ESPN's own backend data and split those out into their own filter options, so you can finally enable/disable them individually instead of them all being lumped into one generic ESPN+ bucket.

  • Fixed a bug where two different feeds for the same event (e.g. one linear ESPN airing and one streaming-only airing) could get mixed up and both end up pointing at the same broadcast — you'd click one and get the wrong feed.

  • Fixed a related bug where, even after the above fix, some events with multiple ESPN feeds could still get collapsed onto a single link instead of keeping each feed separate.

  • MLB.TV feeds routed through ESPN now show as their own distinct service instead of getting folded in with the regular MLB.TV app, so per-provider ADB lanes no longer bounce you between two different apps for what should be one lane.

  • Settings page reliability: Several Advanced Config settings (lane/channel start numbers, number of lanes, server URL, Channels DVR IP/name) were only being read from environment variables and silently ignoring what you'd configured on the Settings page. Those now actually take effect.

  • Added a Timezone setting on the Settings page — no more needing to set TZ as a Docker environment variable.

  • Maximum Event Length setting (Settings > Pipeline): caps how long any single event can occupy the guide, for the rare cases where a source reports a bad end time (e.g. an MLB game showing as 8+ hours long). Default is off (no limit).

  • Fixed a bug in the above cap where a still-airing long event could get accidentally dropped from the guide entirely instead of just having its displayed end time trimmed.

  • Fixed ESPN deeplink enrichment data getting silently wiped on every refresh, which could cause Fire TV/Android ESPN links to stop working until the next full rescan caught up.

  • Fixed leftover/stale channel entries not getting cleaned up when a service stopped offering a previously-available event.

4 Likes

I think the same underlying issue with multiple feeds for the same event exists for the Amazon feeds. e.g. I have only the prime exclusive and aiv_watchforfree sub filters selected but when I tried to tune a cricket match this morning instead of the prime free feed coming up in chrome/prismcast the willow subscription link url opened. Would a similar fix to ESPN for the Amazon be possible? Otherwise I just keep the Amazon filters all set to off, only tend to watch the Prime Thurs Football games via EPlus...

tnx scott- i'll take a look

While you're figuring out that bug, can you add a light theme option like FC has? :grin:

I'll make a channels purple theme if you keep finding bugs!

i hadn't touched this code much recently. glad u guys still use it - it was fun to make originally. FC much more polished - good to see I learned something.

FDL is awesome, thanks for maintaining it. I just recently installed it and FC which is why I'm hitting you up so much. :wink:

I got ESPN Unlimited for free about a month ago from my provider and never realized that so many MLB games are on there.

Thanks! It's almost football season again, :slight_smile: FDL does such a great job getting all the college ESPN+ games into Channels...

We're getting closer with ESPN+ and MLB but now it's trying to get the Spanish feed for the Braves game which starts at 4 PM ET. This is the only Unlimited event in the inspector.

Playables
Service	Provider	Priority	Apple TV Scheme	HTTP Deeplink	ESPN Graph ID	Best Deeplink
mlb	mlbatbat	26	
mlbatbat://mlbtv?gamepk=823746
https://www.mlb.com/tv/g823746
—	
mlbatbat://mlbtv?gamepk=823746
Apple TV
espn_mlb_tv	sportscenter	26	
sportscenter://x-callback-url/showWatchStream?playID=35f80c49-ab84-46d6-9076-7a0e17c3c898
https://www.espn.com/watch/player/_/id/b7df7732-5bea-40a0-9807-bc6e86834bb6
b7df7732-5bea-40a0-9807-bc6e86834bb6
sportscenter://x-callback-url/showWatchStream?playID=b7df7732-5bea-40a0-9807-bc6e86834bb6
ESPN Watch Graph
espn_mlb_tv	sportscenter	26	
sportscenter://x-callback-url/showWatchStream?playID=55097618-cba9-4dc7-95ba-d8fa9e1631fd
https://www.espn.com/watch/player/_/id/b499086b-8f70-473c-8dba-9154e9d2fb71
b499086b-8f70-473c-8dba-9154e9d2fb71
sportscenter://x-callback-url/showWatchStream?playID=b499086b-8f70-473c-8dba-9154e9d2fb71
ESPN Watch Graph
espn_unlimited	sportscenter	1	
sportscenter://x-callback-url/showWatchStream?playID=01d04a46-e75b-4200-93ba-929fedf2c43a
https://www.espn.com/watch/player/_/id/01d04a46-e75b-4200-93ba-929fedf2c43a
01d04a46-e75b-4200-93ba-929fedf2c43a
sportscenter://x-callback-url/showWatchStream?playID=01d04a46-e75b-4200-93ba-929fedf2c43a
ESPN Watch Graph
Selected by filter_integration

I had the default 'prefer English'' in languages.
It did not pick up the English broadcast which just started at 3:30, here is the JSON:

{
  "images": {
    "contentImage": {
      "height": 2160,
      "isP3": false,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPrDW2.{f}?imgBG=PEErbWbZQW1_IuIP7hgXlA",
      "width": 3840
    },
    "contentImageLive": {
      "height": 2160,
      "isP3": false,
      "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}sr.{f}",
      "width": 3840
    },
    "contentImageLiveTall": {
      "height": 3840,
      "isP3": false,
      "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}Sports.TVAPrDT2.{f}",
      "width": 2160
    },
    "contentImagePost": {
      "height": 2160,
      "isP3": false,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPrDW2.{f}?imgBG=PEErbWbZQW1_IuIP7hgXlA",
      "width": 3840
    },
    "contentImagePostTall": {
      "height": 3840,
      "isP3": false,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPrDT2.{f}?imgBG=3fEpw2XLre9K8vYLjzAjuw",
      "width": 2160
    },
    "contentImageTall": {
      "height": 3840,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPrDT2.{f}?imgBG=3fEpw2XLre9K8vYLjzAjuw",
      "width": 2160
    },
    "gameLogoHeader": {
      "height": 360,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAGPL02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig&rtl=false",
      "width": 996
    },
    "leagueLogo": {
      "height": 2056,
      "joeColor": "b:rgb(221,223,228) p:rgb(0,6,22) s:rgb(22,31,43) t:rgb(44,50,63) q:rgb(62,69,80)",
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/0bTh25Idj7m3How6nKXQYw/{w}x{h}bb.{f}",
      "width": 3824
    },
    "shelfItemImage": {
      "height": 2160,
      "isP3": false,
      "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.TVAPrM04.{f}?colorRight=13294B&rtl=false&colorLeft=0C2340&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
      "width": 3840
    },
    "shelfItemImageLive": {
      "height": 2160,
      "isP3": false,
      "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}KF.TVALC03.{f}",
      "width": 3840
    },
    "shelfItemImagePost": {
      "height": 2160,
      "isP3": false,
      "supportsLayeredImage": false,
      "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPoM02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgBG=PEErbWbZQW1_IuIP7hgXlA&rtl=false&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
      "width": 3840
    }
  },
  "competitors": [
    {
      "abbreviation": "ATL",
      "backgroundColor": "#0C2340",
      "id": "umc.cst.8rqhe0syo0q3icce0l8vvv5w",
      "images": {
        "masterArtLogo": {
          "height": 5700,
          "joeColor": "b:rgb(12,35,64) p:rgb(190,211,242) s:rgb(153,189,240) t:rgb(154,176,206) q:rgb(125,158,205)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/v_9_m5dG7PFebo1P2bVyuA/{w}x{h}{c}.{f}",
          "width": 6448
        },
        "teamLogo": {
          "height": 3599,
          "isP3": false,
          "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.FL1x101.{f}",
          "width": 3599
        },
        "teamLogoDark": {
          "height": 3599,
          "isP3": false,
          "joeColor": "b:rgb(175,32,52) p:rgb(250,243,244) s:rgb(246,232,234) t:rgb(235,201,206) q:rgb(232,192,198)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/l-MqS7h1qyt2vDULHGUZNA/{w}x{h}Sports.FL1x101.{f}",
          "width": 3599
        },
        "teamLogoLight": {
          "height": 3599,
          "isP3": false,
          "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.FL1x101.{f}",
          "width": 3599
        }
      },
      "isHome": false,
      "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
      "name": "Atlanta Braves",
      "nickname": "Braves",
      "shortName": "Braves",
      "type": "Team"
    },
    {
      "abbreviation": "MIL",
      "backgroundColor": "#13294B",
      "id": "umc.cst.6ulfyndbd9a0q8kqoydvjihdo",
      "images": {
        "masterArtLogo": {
          "height": 5700,
          "joeColor": "b:rgb(19,41,75) p:rgb(231,239,213) s:rgb(242,229,167) t:rgb(188,199,186) q:rgb(197,191,149)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/kcuC5JviL66L-KJ_nyRDxg/{w}x{h}{c}.{f}",
          "width": 6448
        },
        "teamLogo": {
          "height": 3840,
          "isP3": false,
          "joeColor": "b:rgb(12,36,76) p:rgb(255,199,43) s:rgb(221,186,66) t:rgb(206,166,49) q:rgb(179,156,68)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/PZ4dwVFcbaS8Mj0vyH8Eig/{w}x{h}Sports.FL1x101.{f}",
          "width": 3840
        },
        "teamLogoDark": {
          "height": 3840,
          "isP3": false,
          "joeColor": "b:rgb(12,36,76) p:rgb(255,199,43) s:rgb(221,186,66) t:rgb(206,166,49) q:rgb(179,156,68)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/aGeGbnoVRFGLzmhG72CAPg/{w}x{h}Sports.FL1x101.{f}",
          "width": 3840
        },
        "teamLogoLight": {
          "height": 3840,
          "isP3": false,
          "joeColor": "b:rgb(12,36,76) p:rgb(255,199,43) s:rgb(221,186,66) t:rgb(206,166,49) q:rgb(179,156,68)",
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/PZ4dwVFcbaS8Mj0vyH8Eig/{w}x{h}Sports.FL1x101.{f}",
          "width": 3840
        }
      },
      "isHome": true,
      "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
      "name": "Milwaukee Brewers",
      "nickname": "Brewers",
      "shortName": "Brewers",
      "type": "Team"
    }
  ],
  "channels": [
    {
      "appAdamIds": [
        "493619333"
      ],
      "appAgeRestrictionRatingValue": 100,
      "appBundleIds": [
        "com.mlb.AtBatUniversal"
      ],
      "appName": "MLB",
      "appStoreUrl": "https://itunes.apple.com/app/id493619333?mt=8",
      "hexColor": "#041E42",
      "id": "tvs.sbd.1000075",
      "images": {
        "appIcon": {
          "height": 768,
          "supportsLayeredImage": true,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/6b/c8/ae/6bc8ae3c-e205-83dd-e16c-def0ef5342b3/App_Icon-marketing.lsr/{w}x{h}.{f}",
          "width": 1280
        },
        "logoGlyph": {
          "height": 58,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/QqasBeOcyYTsgRGF24ASsw/{w}x{h}.{f}",
          "width": 110
        },
        "squareColorLogo": {
          "height": 2839,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/hvgN_T2QUDjwZQ4KigY-Qg/{w}x{h}SWL.TVARHBL1.{f}?bColor=041E42",
          "width": 2839
        },
        "whiteLogo": {
          "height": 712,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/10eG4tgIHS1mGk0HGqyLxg/{w}x{h}.{f}",
          "width": 3000
        }
      },
      "isApSubscription": false,
      "isAppleMusicImmersiveBrand": false,
      "isAppleTvPlus": false,
      "isConsented": false,
      "isFirstParty": false,
      "isInstalled": false,
      "isItunes": false,
      "isMountainBrand": false,
      "isStaging": false,
      "isSubscribed": false,
      "isTvAppBrand": false,
      "isWatchlistEnabled": true,
      "minWatchlistAppVersion": "4.3.2",
      "name": "MLB",
      "shouldTrackPlayActivity": true,
      "title": "MLB",
      "type": "Brand",
      "url": "https://tv.apple.com/us/channel/mlb/tvs.sbd.1000075"
    },
    {
      "appAdamIds": [
        "317469184"
      ],
      "appAgeRestrictionRatingValue": 300,
      "appBundleIds": [
        "com.espn.ScoreCenter"
      ],
      "appName": "ESPN: Live Sports & Scores",
      "appStoreUrl": "https://itunes.apple.com/app/id317469184?mt=8",
      "hexColor": "#EF4135",
      "id": "tvs.sbd.30061",
      "images": {
        "appIcon": {
          "height": 768,
          "supportsLayeredImage": true,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/fe/b6/02/feb6025c-a23d-885c-6a90-0b56bb9cf6ef/App_Icon_-_Small-marketing.lsr/{w}x{h}.{f}",
          "width": 1280
        },
        "logoGlyph": {
          "height": 58,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/UETqn_AmS3bWeVD1uzaDXA/{w}x{h}.{f}",
          "width": 110
        },
        "squareColorLogo": {
          "height": 2963,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/55bIoUyMmJKUAs6qbfcA-g/{w}x{h}SWL.TVARHBL1.{f}?bColor=EF4135",
          "width": 2963
        },
        "whiteLogo": {
          "height": 742,
          "supportsLayeredImage": false,
          "url": "https://is1-ssl.mzstatic.com/image/thumb/TFnNkhwyYGtAJ2k_ynBZgw/{w}x{h}.{f}",
          "width": 3000
        }
      },
      "isApSubscription": false,
      "isAppleMusicImmersiveBrand": false,
      "isAppleTvPlus": false,
      "isConsented": false,
      "isFirstParty": false,
      "isInstalled": false,
      "isItunes": false,
      "isMountainBrand": false,
      "isStaging": false,
      "isSubscribed": false,
      "isTvAppBrand": false,
      "isWatchlistEnabled": true,
      "minWatchlistAppVersion": "6.4.0",
      "name": "ESPN",
      "shouldTrackPlayActivity": true,
      "title": "ESPN",
      "type": "Brand",
      "url": "https://tv.apple.com/us/channel/espn/tvs.sbd.30061"
    }
  ],
  "playables": {
    "tvs.sbd.30061:ed1c28e4-218f-40d7-8c7d-eb482e67172e:0399be96": {
      "airingType": "Live",
      "canonicalId": "umc.cse.4cxkorq1qjkaec882x8xwpyhk",
      "canonicalMetadata": {
        "images": {
          "contentImage": {
            "height": 2160,
            "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.TVAPrM04.{f}?colorRight=13294B&rtl=false&colorLeft=0C2340&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          },
          "posterImageLive": {
            "height": 2160,
            "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}sr.{f}",
            "width": 3840
          },
          "posterImagePost": {
            "height": 2160,
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPoM02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgBG=PEErbWbZQW1_IuIP7hgXlA&rtl=false&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          }
        },
        "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
        "leagueName": "MLB",
        "leagueShortName": "MLB",
        "shortTitle": "Braves at Brewers",
        "sportName": "Baseball",
        "venueAddr": "Milwaukee, Wisconsin, United States",
        "venueName": "American Family Field"
      },
      "channelId": "tvs.sbd.30061",
      "contentId": "umc.cmr.espn.sp.6p35zto4kjm2do5prh349ict1",
      "contentType": "SportingEvent",
      "entitlementReason": "Unknown",
      "eventTime": {
        "gameKickOffStartTime": 1787343000000,
        "liveBadgeTime": {
          "endTime": 1787368500000,
          "startTime": 1787340600000
        },
        "playerInfoDisplayTime": {
          "endTime": 1787355000000,
          "startTime": 1787340600000
        },
        "playerInfoTransportBarTime": {
          "endTime": 1787355000000,
          "startTime": 1787340600000
        },
        "tuneInTime": {
          "endTime": 1787368500000,
          "startTime": 1787340600000
        }
      },
      "externalId": "ed1c28e4-218f-40d7-8c7d-eb482e67172e",
      "externalServiceId": "com.espn.service.vod.espn_unlimited_events-v2",
      "id": "tvs.sbd.30061:ed1c28e4-218f-40d7-8c7d-eb482e67172e:0399be96",
      "isConsented": false,
      "isDownloadable": false,
      "isEligibleForPlayerTabs": true,
      "isEmbargoed": false,
      "isEntitledToPlay": false,
      "isEntitledToPlayOnDevice": false,
      "isGeoRestricted": true,
      "isItunes": false,
      "isKeyPlayAvailable": false,
      "isUpgradeEligible": false,
      "locales": [
        {
          "displayName": "English (United States)",
          "locale": "en_US"
        }
      ],
      "makeAdditionalPlayerTabsRequest": false,
      "playablePassThrough": "eyJwbGF5YWJsZUlkIjoidHZzLnNiZC4zMDA2MTplZDFjMjhlNC0yMThmLTQwZDctOGM3ZC1lYjQ4MmU2NzE3MmU6MDM5OWJlOTYifQ==",
      "primaryLocale": {
        "displayName": "English (United States)",
        "locale": "en_US"
      },
      "punchoutUrls": {
        "open": "sportscenter://x-callback-url/showWatchStream?playID=55097618-cba9-4dc7-95ba-d8fa9e1631fd&x-source=AppleUMC",
        "play": "sportscenter://x-callback-url/showWatchStream?playID=55097618-cba9-4dc7-95ba-d8fa9e1631fd&x-source=AppleUMC"
      },
      "releaseDate": 1787340600000,
      "requiresLocationConsent": false,
      "serviceId": "tvs.vds.1354303",
      "serviceLogo": {
        "height": 800,
        "supportsLayeredImage": false,
        "url": "https://is1-ssl.mzstatic.com/image/thumb/KHkeGQxDJV49shBQAMD4sw/{w}x{h}.{f}",
        "width": 2000
      },
      "serviceName": "ESPN Unlimited",
      "title": "Atlanta Braves vs. Milwaukee Brewers",
      "type": "EbsEvent"
    },
    "tvs.sbd.30061:9b38388e-d504-4c39-881f-6a6e5a2fc802:7d9a8880": {
      "airingType": "Live",
      "canonicalId": "umc.cse.4cxkorq1qjkaec882x8xwpyhk",
      "canonicalMetadata": {
        "images": {
          "contentImage": {
            "height": 2160,
            "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.TVAPrM04.{f}?colorRight=13294B&rtl=false&colorLeft=0C2340&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          },
          "posterImageLive": {
            "height": 2160,
            "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}sr.{f}",
            "width": 3840
          },
          "posterImagePost": {
            "height": 2160,
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPoM02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgBG=PEErbWbZQW1_IuIP7hgXlA&rtl=false&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          }
        },
        "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
        "leagueName": "MLB",
        "leagueShortName": "MLB",
        "shortTitle": "Braves at Brewers",
        "sportName": "Baseball",
        "venueAddr": "Milwaukee, Wisconsin, United States",
        "venueName": "American Family Field"
      },
      "channelId": "tvs.sbd.30061",
      "contentId": "umc.cmr.espn.sp.queizo6q2lpt4chstle3lwje",
      "contentType": "SportingEvent",
      "entitlementReason": "Unknown",
      "eventTime": {
        "gameKickOffStartTime": 1787343000000,
        "liveBadgeTime": {
          "endTime": 1787353500000,
          "startTime": 1787342400000
        },
        "playerInfoDisplayTime": {
          "endTime": 1787356800000,
          "startTime": 1787342400000
        },
        "playerInfoTransportBarTime": {
          "endTime": 1787356800000,
          "startTime": 1787342400000
        },
        "tuneInTime": {
          "endTime": 1787353500000,
          "startTime": 1787342400000
        }
      },
      "externalId": "9b38388e-d504-4c39-881f-6a6e5a2fc802",
      "externalServiceId": "com.espn.service.vod.espn_unlimited_events-v2",
      "id": "tvs.sbd.30061:9b38388e-d504-4c39-881f-6a6e5a2fc802:7d9a8880",
      "isConsented": false,
      "isDownloadable": false,
      "isEligibleForPlayerTabs": true,
      "isEmbargoed": false,
      "isEntitledToPlay": false,
      "isEntitledToPlayOnDevice": false,
      "isGeoRestricted": true,
      "isItunes": false,
      "isKeyPlayAvailable": false,
      "isUpgradeEligible": false,
      "locales": [
        {
          "displayName": "Spanish (Mexico)",
          "locale": "es_MX"
        }
      ],
      "makeAdditionalPlayerTabsRequest": false,
      "playablePassThrough": "eyJwbGF5YWJsZUlkIjoidHZzLnNiZC4zMDA2MTo5YjM4Mzg4ZS1kNTA0LTRjMzktODgxZi02YTZlNWEyZmM4MDI6N2Q5YTg4ODAifQ==",
      "primaryLocale": {
        "displayName": "Spanish (Mexico)",
        "locale": "es_MX"
      },
      "punchoutUrls": {
        "open": "sportscenter://x-callback-url/showWatchStream?playID=01d04a46-e75b-4200-93ba-929fedf2c43a&x-source=AppleUMC",
        "play": "sportscenter://x-callback-url/showWatchStream?playID=01d04a46-e75b-4200-93ba-929fedf2c43a&x-source=AppleUMC"
      },
      "releaseDate": 1787342400000,
      "requiresLocationConsent": false,
      "serviceId": "tvs.vds.1354303",
      "serviceLogo": {
        "height": 800,
        "supportsLayeredImage": false,
        "url": "https://is1-ssl.mzstatic.com/image/thumb/KHkeGQxDJV49shBQAMD4sw/{w}x{h}.{f}",
        "width": 2000
      },
      "serviceName": "ESPN Unlimited",
      "title": "En Español-Atlanta Braves vs. Milwaukee Brewers",
      "type": "EbsEvent"
    },
    "tvs.sbd.30061:cfb36872-0312-4099-a44d-3e334c352e51:0399be96": {
      "airingType": "Live",
      "canonicalId": "umc.cse.4cxkorq1qjkaec882x8xwpyhk",
      "canonicalMetadata": {
        "images": {
          "contentImage": {
            "height": 2160,
            "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.TVAPrM04.{f}?colorRight=13294B&rtl=false&colorLeft=0C2340&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          },
          "posterImageLive": {
            "height": 2160,
            "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}sr.{f}",
            "width": 3840
          },
          "posterImagePost": {
            "height": 2160,
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPoM02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgBG=PEErbWbZQW1_IuIP7hgXlA&rtl=false&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          }
        },
        "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
        "leagueName": "MLB",
        "leagueShortName": "MLB",
        "shortTitle": "Braves at Brewers",
        "sportName": "Baseball",
        "venueAddr": "Milwaukee, Wisconsin, United States",
        "venueName": "American Family Field"
      },
      "channelId": "tvs.sbd.30061",
      "contentId": "umc.cmr.espn.sp.3ghzn6039mh0uzp5fj1g8el1h",
      "contentType": "SportingEvent",
      "entitlementReason": "Unknown",
      "eventTime": {
        "gameKickOffStartTime": 1787343000000,
        "liveBadgeTime": {
          "endTime": 1787368500000,
          "startTime": 1787340600000
        },
        "playerInfoDisplayTime": {
          "endTime": 1787355000000,
          "startTime": 1787340600000
        },
        "playerInfoTransportBarTime": {
          "endTime": 1787355000000,
          "startTime": 1787340600000
        },
        "tuneInTime": {
          "endTime": 1787368500000,
          "startTime": 1787340600000
        }
      },
      "externalId": "cfb36872-0312-4099-a44d-3e334c352e51",
      "externalServiceId": "com.espn.service.vod.espn_unlimited_events-v2",
      "id": "tvs.sbd.30061:cfb36872-0312-4099-a44d-3e334c352e51:0399be96",
      "isConsented": false,
      "isDownloadable": false,
      "isEligibleForPlayerTabs": true,
      "isEmbargoed": false,
      "isEntitledToPlay": false,
      "isEntitledToPlayOnDevice": false,
      "isGeoRestricted": true,
      "isItunes": false,
      "isKeyPlayAvailable": false,
      "isUpgradeEligible": false,
      "locales": [
        {
          "displayName": "English (United States)",
          "locale": "en_US"
        }
      ],
      "makeAdditionalPlayerTabsRequest": false,
      "playablePassThrough": "eyJwbGF5YWJsZUlkIjoidHZzLnNiZC4zMDA2MTpjZmIzNjg3Mi0wMzEyLTQwOTktYTQ0ZC0zZTMzNGMzNTJlNTE6MDM5OWJlOTYifQ==",
      "primaryLocale": {
        "displayName": "English (United States)",
        "locale": "en_US"
      },
      "punchoutUrls": {
        "open": "sportscenter://x-callback-url/showWatchStream?playID=35f80c49-ab84-46d6-9076-7a0e17c3c898&x-source=AppleUMC",
        "play": "sportscenter://x-callback-url/showWatchStream?playID=35f80c49-ab84-46d6-9076-7a0e17c3c898&x-source=AppleUMC"
      },
      "releaseDate": 1787340600000,
      "requiresLocationConsent": false,
      "serviceId": "tvs.vds.1354303",
      "serviceLogo": {
        "height": 800,
        "supportsLayeredImage": false,
        "url": "https://is1-ssl.mzstatic.com/image/thumb/KHkeGQxDJV49shBQAMD4sw/{w}x{h}.{f}",
        "width": 2000
      },
      "serviceName": "ESPN Unlimited",
      "title": "Atlanta Braves vs. Milwaukee Brewers",
      "type": "EbsEvent"
    },
    "tvs.sbd.1000075:823746:ccea65b3": {
      "airingType": "Live",
      "canonicalId": "umc.cse.4cxkorq1qjkaec882x8xwpyhk",
      "canonicalMetadata": {
        "images": {
          "contentImage": {
            "height": 2160,
            "joeColor": "b:rgb(194,194,194) p:rgb(4,4,4) s:rgb(46,46,46) t:rgb(42,42,42) q:rgb(75,75,75)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/AjA7BX8DVYT-GCUwBCUOFA/{w}x{h}Sports.TVAPrM04.{f}?colorRight=13294B&rtl=false&colorLeft=0C2340&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          },
          "posterImageLive": {
            "height": 2160,
            "joeColor": "b:rgb(30,26,21) p:rgb(195,194,194) s:rgb(222,178,139) t:rgb(162,160,159) q:rgb(184,148,116)",
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/ECMvGCdAV2s6FMrm1SW3Ug/{w}x{h}sr.{f}",
            "width": 3840
          },
          "posterImagePost": {
            "height": 2160,
            "supportsLayeredImage": false,
            "url": "https://is1-ssl.mzstatic.com/image/thumb/gen/{w}x{h}Sports.TVAPoM02.{f}?imgEffectLogoLeft=AjA7BX8DVYT-GCUwBCUOFA&imgBG=PEErbWbZQW1_IuIP7hgXlA&rtl=false&imgEffectLogoRight=PZ4dwVFcbaS8Mj0vyH8Eig",
            "width": 3840
          }
        },
        "leagueId": "umc.csl.50vezwb1n14iqvdgtxwcpo2z1",
        "leagueName": "MLB",
        "leagueShortName": "MLB",
        "shortTitle": "Braves at Brewers",
        "sportName": "Baseball",
        "venueAddr": "Milwaukee, Wisconsin, United States",
        "venueName": "American Family Field"
      },
      "channelId": "tvs.sbd.1000075",
      "contentId": "umc.cmr.mlb.sp.3cd1rivmb1cn0krly5e1fnvr1",
      "contentType": "SportingEvent",
      "entitlementReason": "Unknown",
      "eventTime": {
        "gameKickOffStartTime": 1787343000000,
        "liveBadgeTime": {
          "endTime": 1787372100000,
          "startTime": 1787343000000
        },
        "playerInfoDisplayTime": {
          "endTime": 1787357400000,
          "startTime": 1787343000000
        },
        "playerInfoTransportBarTime": {
          "endTime": 1787357400000,
          "startTime": 1787343000000
        },
        "tuneInTime": {
          "endTime": 1787372100000,
          "startTime": 1787343000000
        }
      },
      "externalId": "823746",
      "externalServiceId": "com.mlb.atbat.service.US",
      "id": "tvs.sbd.1000075:823746:ccea65b3",
      "isConsented": false,
      "isDownloadable": false,
      "isEligibleForPlayerTabs": true,
      "isEmbargoed": false,
      "isEntitledToPlay": false,
      "isEntitledToPlayOnDevice": false,
      "isGeoRestricted": true,
      "isItunes": false,
      "isKeyPlayAvailable": false,
      "isUpgradeEligible": false,
      "makeAdditionalPlayerTabsRequest": false,
      "playablePassThrough": "eyJwbGF5YWJsZUlkIjoidHZzLnNiZC4xMDAwMDc1OjgyMzc0NjpjY2VhNjViMyJ9",
      "punchoutUrls": {
        "play": "mlbatbat://mlbtv?gamepk=823746"
      },
      "releaseDate": 1787343000000,
      "requiresLocationConsent": false,
      "serviceId": "tvs.vds.1000168",
      "serviceLogo": {
        "height": 712,
        "supportsLayeredImage": false,
        "url": "https://is1-ssl.mzstatic.com/image/thumb/kDC9imhYZ6_uCH5Nhhay6A/{w}x{h}.{f}",
        "width": 3000
      },
      "serviceName": "MLB.TV",
      "title": "Braves @ Brewers",
      "type": "EbsEvent"
    }
  },
  "sport_name": "Baseball",
  "league_name": "MLB",
  "apple_tv_url": "https://tv.apple.com/us/sporting-event/atlanta-braves-at-milwaukee-brewers/umc.cse.4cxkorq1qjkaec882x8xwpyhk"
}

¡Ay, caramba!

I have a step in there that's supposed to "demote" the Spanish language channels, but somehow this slipped through. will add to the list.

Interestingly, ESPN4cc4c (configured to use ADBTuner) shows five different variants (including the Spanish language feed) for this afternoon's Braves/Brewers game. Either team's broadcast either via ESPN Unlimited or MLB.tv:

Only the Spanish language one has the correct start time, and game duration...

EDIT: It would be great if FDL could also include (and identify) the alternative broadcasts for a given game.

Thanks. Couple other things I noticed - when you first start up the container and go in the web UI you cannot deselect any providers, in fact you cannot go into settings at all it just hangs so you have to do a full refresh of all the providers even if you don't care about most of them. Not a big deal.

The other is that I could not drag the providers around in brave browser to reorder priority, the little hand is there that makes you think you can grab it when when you try to grab it all it does is select text.

I think I got a fix for the original bug (somewhat introduced when I split out MLB on ESPN).

I’ll look into breaking out all the playables. Buyer beware- it’ll probably make a bunch of extra lanes/channels.

1 Like

Release Notes 2.2.5

New features

  • Show every source as a separate channel (opt-in, Settings page): instead of auto-picking one "best" feed per event, list every enabled service's version of the same game as its own channel/lane — for both Direct export and per-provider ADB lanes. Channels are labeled with their specific feed (e.g. "ESPN+ (Marquee Group)") and grouped under a clean parent category so players don't scatter them into singleton folders. You can turn this on/off in settings page.
  • Light and dark theme support across the UI.

Fixes

  • Settings page no longer hangs/500s on a brand-new container before the first refresh has run, so scrapers can be disabled ahead of time.
  • Drag-to-reorder on the Filters page now works in Brave
  • Fixed Amazon feed-specific web and ADB deeplinks that could point at the wrong sub-service.
  • Fixed Amazon feeds sometimes inheriting a sibling feed's service classification when ambiguous, including a live-recompute gap in that logic.
  • Fixed ESPN language preference ignoring Spanish playables that used a generic (non-language-tagged) label.
  • Fixed Filters priority list not hiding Amazon sub-services when the Amazon master toggle was off, and a stale drag-reorder instance sticking around after the list emptied out.

Other

  • Event detail debug page now shows decoded service names instead of raw codes.
1 Like

Seeing this in the guide tonight w/ Cubs at AZ:

MLB: Chicago Cubs at Arizona Diamondbacks (Peacock Sports 2 US #1)

and

MLB: Chicago Cubs at Arizona Diamondbacks (Peacock Sports 2 US #2)

One feed is the Home channel and the other is the Away feed. Any chance the home/away feed info is available to bring into the guide?
Not a problem if not possible; more of a nice-to-have.

Many thanks for this new feature!

Along those lines, it's actually worse now. I don't see any MLB Unlimited games anymore, when I go into event inspector for the Cubs game on 8/28 the only espn.com link is the Spanish one, again. But the inspector says that no links are valid with the filters even though I have Unlimited and MLB Baseball enabled.

So that game is broken. The inspector for Unlimited also shows the Pirates vs. Padres today but again the only link is Spanish and it also does not appear to be valid per filters. Same for Astros v.s Yankees tonight.

All the other fixes look good, but MLB is still messed up for ESPN Unlimited.

can you throw me some of those event IDs you see? i'll dig in more.

Cubs vs. Reds 8/28 appletv-umc.cse.52mmw3zx359i12qgiytyn7a4v
Astros vs. Yankees 8/26 appletv-umc.cse.1xl944membblvznt0senxty6t
Pirates vs. Padres 8/26 appletv-umc.cse.5cvmb47g7obmy0kz2ir4elhkh

I have ESPN+, Linear, & Unlimited, NFL+ and Amazon Prime Exclusive & Watch Free with Ads enabled in Filters. Have Baseball, Football, Golf, Motorsports, and Pool enabled in sports. No league filters.

Can't enable AIV_WATCH_FOR_FREE under Amazon even though it has 1 event. If you toggle it and save filters then refresh page, it's disabled again. I think this has been replaced by Watch Free With Ads category, but it still has an event..