Are you 100% sure you pulled latest code?
I suspect you have old code because that was addressed yesterday
Are you 100% sure you pulled latest code?
I suspect you have old code because that was addressed yesterday
Doh! The simplest troubleshooting step and I forgot to do it! Thanks! 
My docker container is in a constant state of starting in Portainer on my Synology. It never changes to running. It doesn't seem to affect anything. Everything seems to work as expected and the log files appear clean. If I inspect the container from a terminal session it shows a status of "running", but shows a health status of "starting". Any ideas why this health status seems to be stuck?
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 23057,
"ExitCode": 0,
"Error": "",
"StartedAt": "2026-01-03T14:23:40.446415001Z",
"FinishedAt": "2026-01-03T14:18:30.775334672Z",
"Health": {
"Status": "starting",
"FailingStreak": 0,
"Log": []
}
Are you using a Docker Compose that looks like this?:
services:
fruitdeeplinks:
# 2025.12.22
# GitHub home for this project with setup instructions: https://github.com/kineticman/FruitDeepLinks
# Docker container home for this project: https://github.com/kineticman/FruitDeepLinks/pkgs/container/fruitdeeplinks
image: ghcr.io/kineticman/fruitdeeplinks:${TAG:-latest}
container_name: fruitdeeplinks
hostname: fruitdeeplinks
shm_size: '2gb'
ports:
- ${FRUIT_HOST_PORT:-6655}:6655
environment:
- TZ=${TZ:-America/New_York}
- SERVER_URL=${SERVER_URL:-http://localhost:6655}
- FRUIT_HOST_PORT=${FRUIT_HOST_PORT:-6655}
- CC_SERVER=${CC_SERVER:-localhost}
- CC_PORT=${CC_PORT:-8080}
- CHANNELS_DVR_IP=${CHANNELS_DVR_IP:-}
- CHANNELS_SOURCE_NAME=${CHANNELS_SOURCE_NAME:-fruitdeeplinks}
- FRUIT_DB_PATH=${FRUIT_DB_PATH:-/app/data/fruit_events.db}
- OUT_DIR=${OUT_DIR:-/app/out}
- LOG_DIR=${LOG_DIR:-/app/logs}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- FRUIT_LANES=${FRUIT_LANES:-50}
- FRUIT_LANE_START_CH=${FRUIT_LANE_START_CH:-9000}
- FRUIT_DAYS_AHEAD=${FRUIT_DAYS_AHEAD:-7}
- FRUIT_PADDING_MINUTES=${FRUIT_PADDING_MINUTES:-45}
- FRUIT_PLACEHOLDER_BLOCK_MINUTES=${FRUIT_PLACEHOLDER_BLOCK_MINUTES:-60}
- FRUIT_PLACEHOLDER_EXTRA_DAYS=${FRUIT_PLACEHOLDER_EXTRA_DAYS:-5}
- CDVR_DVR_PATH=${CDVR_DVR_PATH:-}
- CDVR_SERVER_PORT=${CDVR_SERVER_PORT:-8089}
- CDVR_API_PORT=${CDVR_API_PORT:-57000}
- HEADLESS=${HEADLESS:-true}
- NO_NETWORK=${NO_NETWORK:-false}
- AUTO_REFRESH_ENABLED=${AUTO_REFRESH_ENABLED:-true}
- AUTO_REFRESH_TIME=${AUTO_REFRESH_TIME:-02:30}
volumes:
- ${HOST_DIR:-.}/FruitDeepLinks/data:/app/data
- ${HOST_DIR:-.}/FruitDeepLinks/out:/app/out
- ${HOST_DIR:-.}/FruitDeepLinks/logs:/app/logs
- ${CDVR_DVR_PATH:-/tmp/fruitdeeplinks-novol}:/mnt/dvr
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 10m
max-file: 3
With env var overrides along these lines?:
TAG=latest
DOMAIN=localdomain tailxxxxx.ts.net
FRUIT_HOST_PORT=6655
TZ=US/Mountain
SERVER_URL=http://htpc6:6655
CC_SERVER=cc4c2
CC_PORT=5589
CHANNELS_DVR_IP=media-server8
CDVR_SERVER_PORT=8089
CHANNELS_SOURCE_NAME=FruitDeepLinks
FRUIT_LANES=50
CHANNELS_DVR_PATH=
AUTO_REFRESH_ENABLED=true
AUTO_REFRESH_TIME=2:30
HOST_DIR=/data
FRUIT_LANE_START_CH=14001
I may just have bad logic in Dockerfile health check. It’s purely cosmetic but I should address.
It actually just changed to a healthy status. It is good now.
Yep I have health check to only check hourly for some reason. I’ll fix!
@KineticMan, I'm still missing the cron job to update the schedule by more than the 5 minutes more often than not so having to update in the web admin window manually. Would you consider setting misfire_grace_time=None so that it would always run regardless of how late the call is?
Sure. That cron job should be the simplest damn thing but gives me fits.
i just bumped it to 45 minutes.. my only concern about unilmited if something crazy got locked up, it might misfire into eternity. i did add protection against that, but let me know if 45 minutes works.
Thanks for all the work you are putting in! I updated and will track over the next week or so whether the cron updates occur and if not by what time it missed. Worst case I continue to update manually before one of the my schools is playing on ESPN+...
Pushed a small update today.. not sure if anyone interested but added CH4C output m3u. requires two new env variables.
CH4C_SERVER / CH4C_PORT
Jumping on board with this thread and want to make sure my understanding is correct.
FruitDeepLinks will create a guide that can be imported into Channels that will essentially launch deeplinks from various apps. I have a few clarifying questions.
Thanks!
Depends on your streaming device. AppleTV=yes, AndroidTV=maybe.
Search this thread -- there's lots of detail about using this with ADBTuner. It's pretty well set up in Project One-Click to add everything automatically, at least for the services people have expressed interest in.
Can you explain what you mean by Android TV "Maybe"?
Android is a little picky about their deeplink schema.. I've done my best to guess, but I personally don't have all the services this scrapes. So, basically I'm asking everyone to try it (particually the direct links) and let me know your experience. It's an easy tweek if we find the right schema to call the app.
Does either this project or your Espn4cc4c contain xdotool in the Dockerfile? I tried the fullscreen option which didn't work and the troubleshooting indicated that xdotool wasn't installed.
not directly... I did a hack on my own CC4C main.js to make it send the "F" key for ESPN. I have been playing around with a fork of CC4C though - I can try to polish that up some if you are interested in testing it (will have built-in "F" key support).
Yeah, I tried hacking ESPN too, but their video player is elusive
. Fox is fun too, if I use your fixed.js file, Fox won't automatically start and of course the Golf Channel needs both an "f" key and an "m" key pressed for fullscreen and unmuting.
I'd be glad to try out the fork.
Just pushed out another update.
I think I finally got the ESPN Linear playable right. Had a bug where "best deeplink" wasn't being respected in some cases (may help ADB users, and my lane hack users). ESPN provides multiple feeds for some events (like college playoff game on) and it was grabbing the alternative feeds instead of the main broadcast.
Small language filtering updates
Backend update to scraper. Have a few different ways in there now (API with fallback to HTML). Since most of you update in middle of night, speed not a huge deal but it should run a little faster now. I don't know how much faster I can get it.