Is it possible to get an environment variable for ADBTUNER_HOST? That would be really, really helpful! I edited my config.yaml to set a default for myself, but it would be really cool to have an environment variable for that.
Actually, I believe we can pretty safely assume the value people specify for PORTAINER_HOST can be used as reasonable default for ADBTUNER_HOST (and in one or two other places). It'll still be possible to change it of course, as it'll look just like it does now, but with that value as the default instead of using my host value.
That's even better. Thank you!
This is done, and was pushed moments ago as bnhf/olivetin:latest (aka bnhf/olivetin:2025.12.15).
Thank you. I'm going to test now!
Edit: It works. Thanks!! This is really so convenient!! 
I actually have an idea for a feature for this and for Sling.
I'm not sure if this is possible over the API. Maybe Olivetin can create a channel collection for all of the channels added and then add it to the list of collections available on clients. I personally like having on my sidebar on my Apple TV a little DirecTV section with all the DirecTV channels. I imagine this is also useful if you have multiple providers that you're breaking out.
I just had my first win with this today and I was able to not really delete any of my channels but add four new ones! This automation is super helpful!!
2 posts were merged into an existing topic: ADBTuner: A "channel tuning" application for networked Google TV / Android TV devices
Used the One click for the creation of this with osprey, fails to tune for me right now.
Not sure where the logs would be or where to check
The 'view' with the buttons for remote controls does work
Please post the ADBTuner Portainer-Logs for the failed tune. There's a Quick Actions button in the Portainer WebUI for that purpose.
We need the actual log text from a complete failed tuning cycle. Based on what little I can see in this screenshot, it appears you have no virtual tuners available. If you only have a single tuner encoder, you'll see that fairly often, especially if you're trying to channel surf.
Not sure if related but none of the apps on the box come up when selecting for picking an app
And that is why in the logs it says 'no tuner avaible' when trying to play com.att.tv or com.att.tv.openvideo
File "/app/app/routers/admin.py", line 199, in installed_packages
tuner_packages = tuner.data.get("installed_apps", [])
^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'
2026-01-25 18:17:56.364 - stream - [Tune Z2QZjtfgiekZs2zMSpt3Pd] 192.168.1.206:5592 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
2026-01-25 18:17:56.364 - stream - [Tune (Z2QZjtfgiekZs2zMSpt3Pd)] No active tuners found for CBS-WCBS. Reserving a new tuner.
2026-01-25 18:17:56.365 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:17:57.366 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:17:58.367 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:17:59.369 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:00.370 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:01.371 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:02.373 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:03.375 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:04.376 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:05.378 - tuner_management - [Tune Z2QZjtfgiekZs2zMSpt3Pd] Attempting to reserve tuner for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:06.289 - uvicorn.access - 192.168.1.246:0 - "GET /stream/tuner/1?web-preview HTTP/1.1" 307
2026/01/25 18:18:06 [PROXY] 192.168.1.246 -> GET "/proxy/1" -> "http://192.168.1.250:8090/stream0"
2026-01-25 18:18:06.379 - stream - [Tune (Z2QZjtfgiekZs2zMSpt3Pd)] No tuners available for: ['com.att.tv', 'com.att.tv.openvideo'].
2026-01-25 18:18:09.439 - lib.adb - ADB: 192.168.1.19 - input keyevent KEYCODE_DPAD_CENTER
2026-01-25 18:18:11.371 - uvicorn.access - 192.168.1.246:0 - "POST /admin/tuner/1/send-command HTTP/1.1" 200
2026-01-25 18:18:13.101 - lib.adb - ADB: 192.168.1.19 - input keyevent KEYCODE_HOME
2026-01-25 18:18:14.244 - uvicorn.access - 192.168.1.246:0 - "POST /admin/tuner/1/send-command HTTP/1.1" 200
Is your ADBTuner container up-to-date? You need to be running the most recent version with the development tag.
Half way there now
Some channels are working correctly but for example MeTV is not tuning correctly.
ESPN, CBS, NBC tune correctly.
Not sure where that disconnect would be
Current Device Settings

shows as MeTV but it is still on the previous channel
As I said, we need complete logs not screenshots. Post the entire tuning cycle for a failed tune, which you can get from Portainer-Logs. There's nothing sensitive in the logs that I'm aware of -- things like the TuneID are internal identifiers to help with debugging, and interpreting the logs.
Here's an example from a tune I just did:
2026-01-25 19:09:28.922 - stream - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] No active tuners found for 9 News. Reserving a new tuner.
2026-01-25 19:09:28.923 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Attempting to reserve tuner for: ['com.amazon.firetv.youtube.tv', 'com.amazon.firetv.youtube.tv'].
2026-01-25 19:09:28.933 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Available Tuners:
2026-01-25 19:09:28.933 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Name: firestick-rack3 Priority:
2026-01-25 19:09:28.933 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Name: firestick-rack4 Priority:
2026-01-25 19:09:28.933 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Selecting random tuner
2026-01-25 19:09:28.934 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Reserved Tuner: Name: firestick-rack4 Priority:
2026-01-25 19:09:28.934 - stream - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] Tuning to 9 News on firestick-rack4
2026-01-25 19:09:28.938 - stream - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] Using channel configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8)
2026-01-25 19:09:29.333 - lib.adb - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] ADB: firestick-rack4 - input keyevent KEYCODE_WAKEUP
2026-01-25 19:09:30.402 - lib.adb - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] ADB: firestick-rack4 - pidof com.amazon.firetv.youtube.tv
2026-01-25 19:09:30.523 - stream - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] Using https://tv.youtube.com/watch/GDZqceJ6Z-Y to load channel.
2026-01-25 19:09:30.523 - lib.adb - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] ADB: firestick-rack4 - input keyevent KEYCODE_MEDIA_STOP
2026-01-25 19:09:31.806 - lib.adb - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] ADB: firestick-rack4 - am start -W -a android.intent.action.VIEW -d 'https://tv.youtube.com/watch/GDZqceJ6Z-Y' 'com.amazon.firetv.youtube.tv'
2026-01-25 19:09:32.215 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Starting tune match text monitoring. Match commands: [{'match_text': ["who's watching", 'choose an account', 'edit profiles'], 'commands': ['input keyevent KEYCODE_DPAD_CENTER'], 'start_checking_after_seconds': 5}]
2026-01-25 19:09:32.217 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Waiting 3 seconds to allow sleeping device to setup.
2026-01-25 19:09:36.134 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Waiting for playback start. Status: unknown
2026-01-25 19:09:38.731 - lib.adb - [Tune gBsGDWmiXNJNKoJ3pQvGRB] On screen text: '> youtubetv'
2026-01-25 19:09:38.732 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Text match result: Text to match: ["who's watching", 'choose an account', 'edit profiles']. Matches found: None.
2026-01-25 19:09:40.618 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Text match result: Text to match: ["who's watching", 'choose an account', 'edit profiles']. Matches found: None.
2026-01-25 19:09:42.383 - lib.adb - Media session playback has started.
2026-01-25 19:09:42.383 - lib.adb - [Tune (gBsGDWmiXNJNKoJ3pQvGRB)] ADB: Closing connection - firestick-rack4
2026-01-25 19:09:42.384 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Tuning completed after 13.47 seconds. [Tune gBsGDWmiXNJNKoJ3pQvGRB] Display was off, application (com.amazon.firetv.youtube.tv) was running.
2026-01-25 19:09:42.384 - stream - Initializing keep active command schedule for tuner firestick-rack4 (2).
2026-01-25 19:09:42.460 - uvicorn.access - 100.xxx.xxx.xxx:0 - "GET /stream/2 HTTP/1.1" 307
2026/01/25 19:09:42 [PROXY] 100.xxx.xxx.xxx -> GET "/proxy/2?requestKey=gBsGDWmiXNJNKoJ3pQvGRB" -> "http://encoder_48007/12.ts"
2026-01-25 19:09:42.742 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Text match result: Text to match: ["who's watching", 'choose an account', 'edit profiles']. Matches found: None.
2026-01-25 19:09:43.856 - lib.adb - Media session playback has started.
2026-01-25 19:09:43.857 - stream - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Media playback detected. Stopping tuning text match process.
2026-01-25 19:09:57.107 - tuner_management - Releasing tuner 2 as it has been inactive for 3 seconds.
2026-01-25 19:09:57.108 - tuner_management - Releasing tuner: {'lock_obtained': 1769368168, 'tuner_name': 'firestick-rack4', 'name': '9 News', 'number': None, 'provider_name': 'YTTV', 'tuner_id': 2, 'channel_id': 2, 'tuning_status': 'tuned', 'request_key': 'gBsGDWmiXNJNKoJ3pQvGRB', 'target_package': 'com.amazon.firetv.youtube.tv'}
2026-01-25 19:09:57.350 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Using configuration: Deep Links (default, recommended) (8ec77d65-30d6-46a3-8045-282571cff8d8) for channel cleanup.
2026-01-25 19:09:57.350 - lib.adb - [Tune gBsGDWmiXNJNKoJ3pQvGRB] ADB: firestick-rack4 - input keyevent KEYCODE_MEDIA_STOP
2026-01-25 19:09:58.460 - lib.adb - [Tune gBsGDWmiXNJNKoJ3pQvGRB] ADB: firestick-rack4 - input keyevent KEYCODE_MEDIA_PAUSE
2026-01-25 19:09:58.830 - server -
--------------------------------------------------
Tuner "firestick-rack4" is currently in use and locked.
Tune ID: gBsGDWmiXNJNKoJ3pQvGRB
Channel: 9 News
Lock Obtained: 2026-01-25 19:09:28 (0.51 minutes ago)
Last Seen: 2026-01-25 19:09:54 (4.83 seconds ago)
Bytes Transferred: 8905372 (8.49MB)
Remote User Agent:
Go-http-client/1.1
--------------------------------------------------
2026-01-25 19:09:59.413 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Released tuner (2).
2026-01-25 19:09:59.413 - tuner_management - [Tune gBsGDWmiXNJNKoJ3pQvGRB] Cleanup complete. firestick-rack4 (9 News)
You don't need to redact your deep links by the way. They're not sensitive. Everyone has the same deep links. There's actually zero sensitive information in this logging or an ADB tuner at all whatsoever. So that's just completely unnecessary.
DirecTV bug where I logged into the website and it pulled the guide data for a different DirecTV account I have and not the one logged into on the the Osprey.
Last issue is that none of the streams from the tuner work in the chrome browser but do work on clients
Something very odd, I set this up with project one click for directv stream. I am using onn pro boxes and an linkpi 5 tuner hdmi encoder. It works fine for all of my channels except for the mgm+ channels. on those it wont tune. any advice is welcome. thanks.
edit: disregard. I switched adbtuner to development and it started working.
Not much we can do about that. However, I would try logging out and logging back to DTV -- and/or you could try dumping "Cached images and files" (all time) in your browser history.
I would guess you're running into this issue:
If so, you'll find the streams work fine in Firefox -- or really any other browser.
Firefox is indeed the work around. Thanks!
All set for now!





