ESPN+ with Custom Channels via ADBTuner

More details on the new ESPN4cc4c ADBTuner Project One-Click Action:

Think the "mac hack" for DOCKER_GATEWAY might be missing/broken from the 1-click:

root@37c27cfbad99:/app# curl http://host.docker.internal/whatson/1
curl: (7) Failed to connect to host.docker.internal port 80 after 4 ms: Could not connect to server
root@37c27cfbad99:/app# curl http://host.docker.internal:8094/whatson/1
{"ok":true,"lane":1,"event_uid":"fea9692a-dacb-468f-92ec-5f051a27244f:3b6f1bb815fc2b44153dfcd0285e2c05","at":"2025-11-24T11:51:50+00:00","deeplink_url":null}root@37c27cfbad99:/app#

I added it manually as an env var, but still no dice.

The One-Click Action is now building the channels for ADBTuner using your actual host:port or ip:port for ESPN4cc4c embedded in the custom channel's URL. I.E., host.docker.internal is no longer being used, since we don't need it to be one-size-fits-all -- and any number of channels is possible:

Did you run both Project One-Click Actions?

The second one fails because dvr:8094 isn't working, similar to earlier tries before that fix.

{"detail":"Not Found"}

Are you expecting dvr to be resolved by your local DNS server, or are you using Tailscale's MagicDNS?

Pretty much either way, the search domains you specified in OliveTin need to be correct:

You can always use your Mac's IP if needed.

Note that localdomain is the correct search domain on my LAN, but yours could be local, lan or whatever your DNS server expects.

@KineticMan

Could you add another copy block to /setupfilters that would be suitable for use in Portainer's Environment variables section of the Stacks-Editor?

Currently you're offering this:

environment:
  - FILTER_EXCLUDE_NETWORKS=ESPN Deportes
  - FILTER_EXCLUDE_LEAGUES=NBA G League
  - FILTER_EXCLUDE_SPORTS=Wrestling
  - FILTER_EXCLUDE_EVENT_TYPES=OVER
  - FILTER_EXCLUDE_LANGUAGES=es
  - FILTER_EXCLUDE_REAIR=true
  - FILTER_CASE_INSENSITIVE=true
  - FILTER_PARTIAL_LEAGUE_MATCH=true
  - FILTER_REQUIRE_ESPN_PLUS=false

but I'm hoping you can set this up as an alternative:

FILTER_EXCLUDE_NETWORKS=ESPN Deportes
FILTER_EXCLUDE_LEAGUES=NBA G League
FILTER_EXCLUDE_SPORTS=Wrestling
FILTER_EXCLUDE_EVENT_TYPES=OVER
FILTER_EXCLUDE_LANGUAGES=es
FILTER_EXCLUDE_REAIR=true
FILTER_CASE_INSENSITIVE=true
FILTER_PARTIAL_LEAGUE_MATCH=true
FILTER_REQUIRE_ESPN_PLUS=false

That way, when the environment: section of the compose looks like this:

    environment:
      - TZ=${TZ:-America/New_York}
      - VC_RESOLVER_BASE_URL=${VC_RESOLVER_BASE_URL:-http://192.168.86.72:8094}
      - CC_HOST=${CC_HOST:-192.168.86.72}
      - CC_PORT=${CC_PORT:-5589}
      - CH4C_HOST=${CH4C_HOST:-127.0.0.1}
      - CH4C_PORT=${CH4C_PORT:-2442}
      - PORT=${PORT:-8094}
      - APP_MODULE=${APP_MODULE:-bin.vc_resolver:app}
      - VALID_HOURS=${VALID_HOURS:-72}
      - LANES=${LANES:-40}
      - ALIGN=${ALIGN:-30}
      - MIN_GAP_MINS=${MIN_GAP_MINS:-30}
      - M3U_GROUP_TITLE=${M3U_GROUP_TITLE:-ESPN+ VC}
      - VC_M3U_PATH=${VC_M3U_PATH:-/app/out/playlist.m3u}
      - WATCH_API_KEY=${WATCH_API_KEY:-0dbf88e8-cc6d-41da-aa83-18b5c630bc5c}
      - FILTER_ENABLED_NETWORKS=${FILTER_ENABLED_NETWORKS:-*}
      - FILTER_EXCLUDE_NETWORKS=${FILTER_EXCLUDE_NETWORKS:-}
      - FILTER_ENABLED_SPORTS=${FILTER_ENABLED_SPORTS:-*}
      - FILTER_EXCLUDE_SPORTS=${FILTER_EXCLUDE_SPORTS:-}
      - FILTER_ENABLED_LEAGUES=${FILTER_ENABLED_LEAGUES:-*}
      - FILTER_EXCLUDE_LEAGUES=${FILTER_EXCLUDE_LEAGUES:-}
      - FILTER_ENABLED_EVENT_TYPES=${FILTER_ENABLED_EVENT_TYPES:-*}
      - FILTER_EXCLUDE_EVENT_TYPES=${FILTER_EXCLUDE_EVENT_TYPES:-}
      - FILTER_ENABLED_LANGUAGES=${FILTER_ENABLED_LANGUAGES:-*}
      - FILTER_EXCLUDE_LANGUAGES=${FILTER_EXCLUDE_LANGUAGES:-}
      - FILTER_REQUIRE_ESPN_PLUS=${FILTER_REQUIRE_ESPN_PLUS:-}
      - FILTER_EXCLUDE_PPV=${FILTER_EXCLUDE_PPV:-false}
      - FILTER_EXCLUDE_REAIR=${FILTER_EXCLUDE_REAIR:-false}
      - FILTER_EXCLUDE_NO_SPORT=${FILTER_EXCLUDE_NO_SPORT:-false}
      - FILTER_CASE_INSENSITIVE=${FILTER_CASE_INSENSITIVE:-true}
      - FILTER_PARTIAL_LEAGUE_MATCH=${FILTER_PARTIAL_LEAGUE_MATCH:-true}

Those values, in that form, can just be pasted in as overrides here:

This way, one knows at a glance which values are not the defaults, and are specific to an individual installation.

1 Like

@hancox

What do you see here for your Search Domains value?:

local , which is what i also have in my env vars.

It's def. resolving, else i wouldn't get that error message on browser when hitting it.

Exec into the olivetin container, and see what happens when you ping dvr...

Works fine (removed hostname)

64 bytes from (192.168.50.95): icmp_seq=1 ttl=63 time=1.09 ms
64 bytes from (192.168.50.95): icmp_seq=2 ttl=63 time=1.43 ms
64 bytes from (192.168.50.95): icmp_seq=3 ttl=63 time=1.42 ms
64 bytes from (192.168.50.95): icmp_seq=4 ttl=63 time=1.55 ms

And, if you exec into the adbtuner container can you do the same?

Weird - no ping in container, and install fails getting out, from the looks of it

root@84cd6e28727a:/app# apt update
Ign:1 http://deb.debian.org/debian buster InRelease
Ign:2 http://deb.debian.org/debian-security buster/updates InRelease
Ign:3 http://deb.debian.org/debian buster-updates InRelease
Err:4 http://deb.debian.org/debian buster Release
  404  Not Found [IP: 151.101.46.132 80]
Err:5 http://deb.debian.org/debian-security buster/updates Release
  404  Not Found [IP: 151.101.46.132 80]
Err:6 http://deb.debian.org/debian buster-updates Release
  404  Not Found [IP: 151.101.46.132 80]
Reading package lists... Done
root@84cd6e28727a:/app# apt install inetutils-ping
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libidn11
The following NEW packages will be installed:
  inetutils-ping libidn11
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 337 kB of archives.
After this operation, 655 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Err:1 http://deb.debian.org/debian buster/main arm64 libidn11 arm64 1.33-2.2
  404  Not Found [IP: 151.101.46.132 80]
Err:2 http://deb.debian.org/debian-security buster/updates/main arm64 inetutils-ping arm64 2:1.9.4-7+deb10u3
  404  Not Found [IP: 151.101.46.132 80]

I think we've zero'd in on the problem. Debian Buster is kind of old now -- my ADBTuner container is running on Debian Bookworm. When was the last time you updated it?

I actually just switched back / repulled latest when I started replacing the manual install with 1 click.

You need to be using either the development or beta tag. I'm using development. Make sure you have your DOMAIN value set to local in ADBTuner too -- for hostname resolution...

ok - sorry - I switched to latest figuring the requirement for development would be deprecated when 1-click went live!

local is set in both

I'll try it shortly with development branch

OK - deployment is good, but tuning to something on espn+ right now still breaking on resolution:

2025/11/24 09:57:39.172599 [ERR] Could not start stream for M3U-ESPN4ch4c ch20013 ESPN+ EPlus 4: M3U: Get "http://dvr:2442/stream?url=http%3A%2F%2Fdvr%3A8094%2Fvc%2F4": dial tcp 192.168.50.95:2442: connect: connection refused

This log entry is for a tuning attempt via ch4c (Chrome HDMI for Channels), not ADBTuner. Are you only trying to use ADBTuner, or do you cc4c and ch4c setup as well?

Things can get confusing if you have all 3 projects setup, and they're all using the same channel numbers. Maybe disable the other sources, and focus on ADBTuner?

EDIT: If you didn't intend to set up all 3 sources that might be a logic problem on my end. Let me know.

something like this?