ESPN+ with Custom Channels via ADBTuner

EDIT 2025.11.11: I've modified the importable ADBTuner JSON channel list to include both the FireStick and Google Android package names, so this will work on both platforms without modification.

EDIT2 2025.11.11: The change needed in your ADBTuner stack to add an extra_hosts value, has been updated to work more cross-platform (especially on a Mac).

EDIT 2025.11.12: @KineticMan now has a pre-built image on GitHub, so the Docker Compose has been updated to use that. In addition, there's a sample set of env vars (overrides to the default values) for use in the Environment variables section of the Portainer-Stacks Editor.

Using recent features added by @turtletank to ADBTuner and @KineticMan to ESPN4cc4c. it's now possible to implement a hybrid of both projects!

What you'll get, with the set of steps below, are 40 custom channels with ESPN+ events on them (for ESPN+ subscribers only of course).

First, spin up @KineticMan's project, which you can either build locally with his instructions -- or use this Docker Compose to pull it off of Docker Hub:

services:
  espn4cc4c:
    # 2025.11.12
    # GitHub home for this project: https://github.com/kineticman/ESPN4CC4C
    # Docker container home for this project with setup instructions: https://github.com/kineticman/ESPN4CC4C/pkgs/container/espn4cc4c
    image: ghcr.io/kineticman/espn4cc4c:${TAG:-latest}
    container_name: espn4cc4c
    dns_search:
      - ${DOMAIN:-localdomain} # Change to the name of your LAN's domain, which is usually local or localdomain
      - ${TAILNET} # Change to the name of your Tailnet, which is in the form tailxxxxx.ts.net
    ports:
      - ${PORT:-8094}:${PORT:-8094}
    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}
      - 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}
    volumes:
      - ${HOST_DIR:-.}/data:/app/data
      - ${HOST_DIR:-.}/out:/app/out
      - ${HOST_DIR:-.}/logs:/app/logs
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8094/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    restart: unless-stopped

Rather than editing the above directly, I recommend using Portainer and customize these env vars for your installation. TAILNET is only required for Tailscale users using MagicDNS:

TAILNET=tailxxxxx.ts.net
TZ=US/Mountain
VC_RESOLVER_BASE_URL=http://htpc6:8094
CC_HOST=cc4c2
HOST_DIR=/data/espn4cc4c

Next, for ADBTuner, you'll want to be running at least development build 20251108-1. If you're a Windows or Mac user an internal host called host.docker.internal should already be configured. Linux users will want to add this to their Docker Compose (Portainer is once again the easiest way to do this):

    extra_hosts:
      - host.docker.internal:${DOCKER_GATEWAY:-host-gateway} # host.docker.internal is generally not predefined on Linux hosts.

With ADBTuner updated, and extra hosts: added, you'll need the following in your ADBTuner Custom Configurations:

{
    "name": "ESPN+ Deep Links - Show Tuning Process",
    "author": "bnhf",
    "version": "1.0",
    "description": "Load content via ESPN+ deep link URLs (where supported). Show tuning process.",
    "uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac",
    "global_options": {
        "wait_for_video_playback_detection": false,
        "use_fixed_delay": true,
        "fixed_delay_seconds": 1,
        "check_for_and_clear_whos_watching_prompts": false,
        "wait_after_post_playback_start_commands_seconds": 0
    },
    "pre_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP"
    ],
    "tune_commands": [
        "am start -n ||TARGET_PACKAGE_NAME||/com.espn.startup.presentation.StartupActivity -d ||TARGET_URL_OR_IDENTIFIER||"
    ],
    "post_playback_start_commands": [
        "sleep 20",
        "input keyevent KEYCODE_DPAD_DOWN",
        "input keyevent KEYCODE_DPAD_DOWN",
        "input keyevent KEYCODE_DPAD_RIGHT",
        "input keyevent KEYCODE_DPAD_CENTER"
    ],
    "post_tune_commands": [
        "input keyevent KEYCODE_MEDIA_STOP",
        "input keyevent KEYCODE_MEDIA_PAUSE",
        "input keyevent KEYCODE_HOME"
    ]
}

Next, in the ADBTuner WebUI Import/Export, you can import this list of 40 fixed channels for your ESPN+ events to appear on in the guide:

[
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+1",
        "url": "http://host.docker.internal:8094/whatson/1?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+2",
        "url": "http://host.docker.internal:8094/whatson/2?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+3",
        "url": "http://host.docker.internal:8094/whatson/3?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+4",
        "url": "http://host.docker.internal:8094/whatson/4?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+5",
        "url": "http://host.docker.internal:8094/whatson/5?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+6",
        "url": "http://host.docker.internal:8094/whatson/6?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+7",
        "url": "http://host.docker.internal:8094/whatson/7?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+8",
        "url": "http://host.docker.internal:8094/whatson/8?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+9",
        "url": "http://host.docker.internal:8094/whatson/9?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+10",
        "url": "http://host.docker.internal:8094/whatson/10?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+11",
        "url": "http://host.docker.internal:8094/whatson/11?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+12",
        "url": "http://host.docker.internal:8094/whatson/12?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+13",
        "url": "http://host.docker.internal:8094/whatson/13?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+14",
        "url": "http://host.docker.internal:8094/whatson/14?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+15",
        "url": "http://host.docker.internal:8094/whatson/15?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+16",
        "url": "http://host.docker.internal:8094/whatson/16?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+17",
        "url": "http://host.docker.internal:8094/whatson/17?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+18",
        "url": "http://host.docker.internal:8094/whatson/18?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+19",
        "url": "http://host.docker.internal:8094/whatson/19?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+20",
        "url": "http://host.docker.internal:8094/whatson/20?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+21",
        "url": "http://host.docker.internal:8094/whatson/21?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+22",
        "url": "http://host.docker.internal:8094/whatson/22?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+23",
        "url": "http://host.docker.internal:8094/whatson/23?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+24",
        "url": "http://host.docker.internal:8094/whatson/24?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+25",
        "url": "http://host.docker.internal:8094/whatson/25?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+26",
        "url": "http://host.docker.internal:8094/whatson/26?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+27",
        "url": "http://host.docker.internal:8094/whatson/27?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+28",
        "url": "http://host.docker.internal:8094/whatson/28?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+29",
        "url": "http://host.docker.internal:8094/whatson/29?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+30",
        "url": "http://host.docker.internal:8094/whatson/30?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+31",
        "url": "http://host.docker.internal:8094/whatson/31?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+32",
        "url": "http://host.docker.internal:8094/whatson/32?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+33",
        "url": "http://host.docker.internal:8094/whatson/33?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+34",
        "url": "http://host.docker.internal:8094/whatson/34?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+35",
        "url": "http://host.docker.internal:8094/whatson/35?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+36",
        "url": "http://host.docker.internal:8094/whatson/36?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+37",
        "url": "http://host.docker.internal:8094/whatson/37?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": "",
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+38",
        "url": "http://host.docker.internal:8094/whatson/38?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+39",
        "url": "http://host.docker.internal:8094/whatson/39?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    },
    {
        "provider_name": "ESPN",
        "number": "",
        "name": "ESPN+40",
        "url": "http://host.docker.internal:8094/whatson/40?deeplink=1&dynamic_url_json_key=deeplink_url",
        "package_name": "com.espn.gtv",
        "alternate_package_name": "com.espn.score_center",
        "tvc_guide_stationid": "",
        "guide_offset_hours": 0,
        "configuration_uuid": "51af5028-092f-4ddc-b4ea-d5e5fca58cac"
    }
]

And finally, to put them together, the M3U will come from ADBTuner and the XML from ESPN4cc4c:

As always, be sure you have the ESPN app installed on your encoder-attached streaming sticks, and are logged in with your credentials. 20010 is the recommended starting channel number to use (assuming it's available on your setup) for the guide data to match automatically.

BTW, you can also use this same guide data for cc4c or ah4c.

3 Likes

Looks great! Can you further expand on each of the variables? Eager to give this a go.

The ones for @KineticMan's project?

Looks good. Any plans of making it an one-click install on olivetin?

Yes. I'd like to get a couple of people to install it "manually" first, just in case any tweaks are needed. But I've tried to structure it with Project One-Click in mind.

Sorry, I'm late to the game here. Is there a name/thread for @kineticMan's project? I can look there I suppose.

It's in the cc4c thread here:

But if you just want the basics for the env vars to use with the version on Docker Hub, I've added some comments below:

1 Like

I squashed quite a few major bugs last night on ESPN4CC4C. It’s still “beta” so please let me know if you guys see anything. But I feel much more confident in it recently.

Great integration @bnhf!

2 Likes

Thanks for pulling this together!

Would it be possible to filter the guide to only display ESPN+ events or put a tag/descriptor in the guide to indicate which ESPN network? This would avoid selecting a channel that will fail when you only have ESPN+ credentials.

Yep filtering is on my shortlist for next update. Will add what kind of ESPN and also sport types.

2 Likes

I'm on Mac, believe i did this via 1-click (but not 100% sure), and don't have this set.

I added it via portainer, updated, and still not seeing anywhere to add the custom config. I'm on 20251109-4

You'd want your ADBTuner Docker Compose to look something like this:

services:
  adbtuner:
    # GitHub home for this project with setup instructions: Caution! This project is not open source, and is not available on GitHub
    # Docker Hub home for this project: https://hub.docker.com/u/turtletank99
    image: turtletank99/adbtuner:${TAG}
    container_name: adbtuner
    dns_search: ${DOMAIN} # Change to the name of your LAN's domain, which is usually local or localdomain
    init: true
    ports:
      - ${HOST_PORT}:5592 # Use the same port number the container is using, or optionally change it if the port is already in use on your host
    volumes:
      - adbtuner:/app/.config
    extra_hosts:
      - host.docker.internal:${DOCKER_GATEWAY:-172.17.0.1} # host.docker.internal is generally not predefined on Linux hosts.
    restart: unless-stopped
volumes:
  adbtuner:
    name: ${HOST_VOLUME}

With env vars similar to this:

TAG=development
DOMAIN=localdomain tailxxxxx.ts.net
HOST_PORT=5592
HOST_VOLUME=adbtuner_config

The ADBTuner custom config section is found here:

http://<docker host>:5592/configurations

1 Like

thanks - this was my gap.

Gave this a small shot this afternoon, but running into the following: (removed the ID after tune figuring it might be identifying)

2025-11-10 19:11:39.974 - stream - [Tune blah] localhost:5592 | Go-http-client/1.1

2025-11-10 19:11:39.976 - stream - [Tune (blah)] No active tuners found for ESPN+14. Reserving a new tuner.

2025-11-10 19:11:39.976 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:40.981 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:41.992 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:43.002 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:44.006 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:45.011 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:46.016 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:47.026 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:48.036 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:49.040 - tuner_management - [Tune blah] Attempting to reserve tuner for: ['com.espn.gtv', 'com.espn.gtv'].

2025-11-10 19:11:50.045 - stream - [Tune (blah)] No tuners available for: ['com.espn.gtv', 'com.espn.gtv'].

Any chance you haven't installed the ESPN app on your streaming sticks?

Nope - made sure and tuned on that (already working) Onn prior to installing

Can you confirm com.espn.gtv is the correct package name on an Onn device? I've only tested on FireSticks.

Based on play store for Onn device, it looks like it might be:

id=com.espn.score_center

I'm going to try it out

still no dice - it did seem to get slightly further though, and lock the tuner:

2025-11-10 20:10:31.049 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Attempting to reserve tuner for: ['com.espn.score_center', 'com.espn.gtv'].

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Available Tuners:

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Name: Onn Priority: 

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Using first available tuner (by priority).

2025-11-10 20:10:31.051 - tuner_management - [Tune gfjiuyBTLZ9PMRQuyKykzD] Reserved Tuner: Name: Onn Priority: 

2025-11-10 20:10:31.051 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Tuning to ESPN+5 on Onn

2025-11-10 20:10:31.052 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Using channel configuration: ESPN+ Deep Links - Show Tuning Process (51af5028-092f-4ddc-b4ea-d5e5fca58cac)

2025-11-10 20:10:31.351 - lib.adb - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] ADB: 192.168.50.148 - pidof com.espn.score_center

2025-11-10 20:10:31.411 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] Resolving dynamic URL (http://host.docker.internal:8094/whatson/5) for channel.

2025-11-10 20:10:32.128 - stream - [Tune gfjiuyBTLZ9PMRQuyKykzD] Redirecting to stream after 1.08 seconds (fixed delay of 1 seconds exceeded). Tuning is still in progress.

2025-11-10 20:10:32.129 - uvicorn.access - 138.68.32.225:0 - "GET /stream/127 HTTP/1.1" 307

2025/11/10 20:10:32 [PROXY] 138.68.32.225 -> GET "/proxy/1?requestKey=gfjiuyBTLZ9PMRQuyKykzD" -> "http://192.168.50.59:8090/stream0"

2025-11-10 20:10:36.449 - stream - [Tune (gfjiuyBTLZ9PMRQuyKykzD)] ERROR: Could not retrieve dynamic URL data: timed out

Check in Portainer-Networks, and see what the IP address of your Docker Gateway bridge is:

If it's something other than 172.17.0.1, we'll need to adjust the value of DOCKER_GATEWAY in the env vars section of your adbtuner stack.

it is 172.17.0.1 , but i also tried setting explicitly - no change unfort