Advice Needed - ADBTuner or AH4C?

Sure.

Built as bnhf/ah4c.appletv.test2. I set this up to install whatever version is considered current by pip3 -- which should be 0.18. If you could confirm that the container functions, along with it containing this most recent version, I'd appreciate it.

If everything looks good I'll build this again as :appletv

Looks good so far.

Container has 0.18 and tuning with no errors on my end!

1 Like

I just started this up and seems to be working good so far...

root@atvtuner:/opt# atvremote --version
atvremote 0.18.0
root@atvtuner:/opt#

No issues for last few hours...

On another note, I think I had mentioned in an earlier msg that suddenly the ATVs were turning on captioning everytime now. I figured out what was happening for me. For a long time I sent commands that would actually completely shut down the spectrum app when exiting. Apparently with one of the lastest Spectrum versions it looks like they don't remember your captioning settings if you close the app completely out on the ATVs.
Tested with just using "home" for stopping and it remembers your last state. But it goes right back to captions if you loose power or shut the app completely off. :man_shrugging:

1 Like

This is done. New bnhf/ah4c:appletv built this morning -- so, I'll be deleting :appletv.test and :appletv.test2 shortly.

Now that :appletv is using a Dockerfile that's very close to :latest, I'm leaning towards merging these two. They will always need different start scripts though, which we'll handle with an env var like PYATV=true with a default of false.

1 Like

Can you explain this further? Do you mean that deployment will look at the PYATV tag to build the container, Or do you mean we will need to adjust our tuning scripts?

The idea is no changes for you -- other than needing to set an env var. That env var will determine which start script the container uses. This is not any of your scripts, this is the script the container uses when it starts. My thinking is, a single ah4c container that works with both ADB and ATV targets, will be easier to maintain. For the :appletv crowd, this should mean more up-to-date builds.

This is what I thought, it sounds great, and makes sense for maintainability.

Happy to deploy ah4c:latest in a test container using the new environment variable to test the merged code. Just say the word....

As usual - thanks for all you do!

hey @bnhf wanted to flag a potential security issue that I stumbled into when reviewing another thread that @jkister pointed out:

It looks like MagicYUV is enabled when I looked inside my container, and ffmpeg in the container build is at a vulnerable old version

from my container:
Image: bnhf/ah4c:appletv
ffmpeg: 5.1.9-0+deb12u1
MagicYUV: VFS..D magicyuv — ACTIVE

I guess the fix requires an upgrade to ffmpeg ≥ 8.1.2 inside the image? Would you be able to trigger a rebuild of the :appletv tag when you get a chance? Or put the fix elsewhere if/when you decide to have everything merged and managed from ah4c:latest?

Happy to pull and test once updated.

Im actually not sure where ffmpeg is used in the container. tesseract OCR?

1 Like

ffmpeg is used by a number of scripts, as it can detect active audio, among other things. Also, ffmpeg can be used for post-processing to correct for HDR being removed, or to encode for capture cards like the Magewell.

I'll have to figure out what the best path forward is. ffmpeg 8.1.2 is not part of any stable repo yet -- in fact I think it's only a week or so old. I could potentially compile it at build time, though I don't love the extra time required. I'll see if I can get it as a stable binary from a trusted source...

1 Like

@mnwxman132 After contemplating this for a bit, I think the best path forward is to use the same custom version of ffmpeg and ffprobe that CDVR uses (no MagicYUV encoding enabled). This is what I do to get those binaries for OliveTin, so it makes sense to do the same here.

I've built a new bnhf/ah4c:appletv.test that grabs ffmpeg and ffprobe from where CDVR hosts its installation downloads. This change will make sense for the mainline version of ah4c as well, so once I get a thumbs-up from you on functionality, I'll proceed with building that one-size-fits-all version of ah4c that'll work with both adb and atv targets.

1 Like

@bnhf

Ok I deployed this and took a look.

PYATV is installed and at 0.18
MagicYUV is not installed - GREAT

However ffmpeg is reporting 4.2.4. My current Channels DVR install is running 6.1.2 (confirmed from latest/ffmpeg). Looks like the download endpoint may be pointing to an older CDVR release. The 4.2.4 matches the older CHDVR stale build directories I cleaned off my Mac yesterday. Can you verify which CDVR download URL you're pulling from?

hope this is helpful

Edit: i realized this morning another piece of info. I use the prerelease versions on my server, so at some point the update to ffmpeg must have come during a prerelease updates. Im not on the public release of CHDVR.

I used this curl command this morning to test the version of ffmpeg:

curl -fsSL "https://channels-dvr.s3.amazonaws.com/$(curl -s https://channels-dvr.s3.amazonaws.com/latest.txt | tr -d '\n')/ffmpeg-linux-x86_64" -o /tmp/ffmpeg && chmod +x /tmp/ffmpeg && /tmp/ffmpeg -version

This is more-or-less the same logic used in the Dockerfile. It returned:

ffmpeg version 6.0.2 Copyright (c) 2000-2023 the FFmpeg developers

I haven't changed anything, but I rebuilt bnhf/ah4c:appletv.test in case latest.txt hadn't been updated when I built the last version. Let me know if you see the same ffmpeg version. If not, I'd like to know what container architecture you're pulling, as that's the only remaining variable I can think of.

Did some further testing with my new best friend uncle Claude.
I updated my stack with pull and redeploy using appletv.test

With uncle Claudes help, I Confirmed that my new container image is correctly pulling ffmpeg/ffprobe from https://channels-dvr.s3.amazonaws.com/2026.06.29.0212/ and the container matches those exact binaries by hash. That release bundle itself contains ffmpeg 4.2.4 and ffprobe 4.2.4, with MagicYUV clean. So the build path is correct; the source artifact is just older than expected.

in portainer - first few lines of the YML are:

version: '3.9'
services:
  ah4c:
    image: bnhf/ah4c:${TAG}
    container_name: container-test
    hostname: tuner-container-test
    dns_search: ${DOMAIN} # Specify the name of your LAN's domain, usually local or localdomain
    ports:

And the first few env variables:

TAG=appletv.test
DOMAIN=localdomain
ADBS_PORT=
HOST_PORT=7654
WSCR_PORT=
IPADDRESS=192.168.1.52:7654

Now my tuner has been and still is working fine, with pyatv at 0.18, and the actual security issue is mitigated because MagicYUV is disabled.

Im not currently even using ffmpeg in my container. If others, however, using the merged ah4c:latest, are expecting one version, and getting an older version of ffmpeg installed when updating their containers - Im not sure whether that would have an impact in their tuning implementations.

I really do like your idea of standardizing the ffmpeg with what the channels developers have released - this makes perfect sense. But things can get a little confusing here.

For instance, on my host Mac mini I get this:

"~/Library/Application Support/ChannelsDVR/latest/ffmpeg" -version | head -1       
ffmpeg version 6.1.2 Copyright (c) 2000-2024 the FFmpeg developers

And you got version 6.0.2

Im sorry to open a can of worms for you on this when I noticed the ffmpeg security issue.

I believe what I'm hearing from you here, is that the arm64 version of ah4c:appletv.test contains older versions of ffmpeg and ffprobe than what my testing showed would be included in the amd64 version of the container (which is 6.0.2)?

1 Like

Yes that's what Claude is telling me. It had me do a bunch of probes inside my container and also from the host, and looked at the binaries and compared the timestamps and hashes of your build this morning around 7:03am

Further output from Claude:


What this means
The image build is correct; the Channels DVR release artifact is the source of the older binaries. In other words, the build is doing exactly what bnhf intended — it’s just retrieving the version Channels published in that release, and that release’s binaries are still 4.2.4.

Why the extra confusion happened with you getting 6.1.2

The Mac mini’s ~/Library/Application Support/ChannelsDVR/latest/ffmpeg and the historical dated directories are a separate Channels DVR install tree on the host. Those directories can contain different ffmpeg versions over time, and the latest symlink points at the currently active server install, but that is not the same mechanism as the S3 release artifact the container is downloading. So the host version and the S3 release bundle can diverge.

edit: @bnhf to answer your question - Further from Claude regarding arm vs amd


in this case it is not the main reason you’re seeing 4.2.4. The key thing is that container-test is being built with TARGETARCH=arm64 , so on your Apple Silicon Mac it is pulling the arm64 Channels DVR release artifact, not the x86_64 one

@mnwxman132 New bnhf/ah4c:appletv.test built with what is hopefully updated arm64 versions of ffmpeg and ffprobe. Please confirm when you have a chance to test.

@bnhf

I pulled the latest bnhf/ah4c:appletv.test image today (7/4/26) and confirmed that it was definitely rebuilt today, but the build history still shows CDVR_RELEASE=2026.06.29.0212. So the image is fresh, but it’s still pinned to the older Channels release bundle. That explains why ffmpeg is still 4.2.4. If Channels developers pushed a newer ARM release today, the Dockerfile needs to point at that newer release tag???

Heres a clip right from my mac terminal:

+++++++++++++++++++++++++++++++++++++++++++++++=

erc@Mini-M4 ~ % docker pull bnhf/ah4c:appletv.test
appletv.test: Pulling from bnhf/ah4c
Digest: sha256:a37a8aa5224a7c9b92a14478a7e6a2792a40110826f7864de69798f556f8c9f4
Status: Image is up to date for bnhf/ah4c:appletv.test
docker.io/bnhf/ah4c:appletv.test

What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview bnhf/ah4c:appletv.test
erc@Mini-M4 ~ % docker image inspect bnhf/ah4c:appletv.test --format '{{.Created}}'
2026-07-04T20:57:57.624028793Z
erc@Mini-M4 ~ % docker history bnhf/ah4c:appletv.test --no-trunc | head -10
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:a37a8aa5224a7c9b92a14478a7e6a2792a40110826f7864de69798f556f8c9f4 2 hours ago CMD ["./docker-start-pyatv.sh"] 0B buildkit.dockerfile.v0
2 hours ago EXPOSE [7654/tcp 8000/tcp] 0B buildkit.dockerfile.v0
2 hours ago RUN |3 TARGETARCH=arm64 CDVR_RELEASE=2026.06.29.0212 CDVR_URL=https://channels-dvr.s3.amazonaws.com /bin/sh -c chmod +x /opt/docker-start-pyatv.sh && groupadd render || true # buildkit 24.6kB buildkit.dockerfile.v0
2 hours ago COPY static /opt/static/ # buildkit 782kB buildkit.dockerfile.v0
2 hours ago RUN |3 TARGETARCH=arm64 CDVR_RELEASE=2026.06.29.0212 CDVR_URL=https://channels-dvr.s3.amazonaws.com /bin/sh -c sed -i '/href="/config"/d; /href="/env"/d' /opt/html/index.html # buildkit 16.4kB buildkit.dockerfile.v0
2 hours ago COPY html/* /opt/html/ # buildkit 77.8kB buildkit.dockerfile.v0
2 hours ago COPY m3u/* /tmp/m3u/ # buildkit 229kB buildkit.dockerfile.v0
2 hours ago COPY scripts /tmp/scripts/ # buildkit 578kB buildkit.dockerfile.v0
2 hours ago COPY docker-start-pyatv.sh /opt/ # buildkit

Quite right. I was assuming they'd update latest (which is always the version I pull for this purpose), but I can understand why they didn't -- and why that wouldn't make sense.

So, there's a new bnhf/ah4c:appletv.test that temporarily pins the build to 2026.07.04.2015. I'll keep it pinned there until the next stable release.

@bnhf looks good! From my container console in portainer

ffmpeg version 6.1.2 Copyright (c) 2000-2024 the FFmpeg developers
1 Like

Little late to the party, here's my test: with latest bnhf/ah4c:appletv.test I get atvremote version 0.18.0 (great!) and...

ffmpeg version 6.0.2 Copyright (c) 2000-2023 the FFmpeg developers

...in Portainer console. All works as expected, very snappy.