A developer has published Yagi, a small proxy that sits in front of an HDHomeRun tuner and makes it usable by a media server running on a different network. The announcement went up on r/jellyfin looking for testers, and it addresses a problem many of us have hit: the tuner's lineup.json advertises its own LAN IP, so a remote Jellyfin server cannot stream from it even when it can reach the device fine.
The author previously shared a tuner with family by hand, combining socat, Tailscale and manual forwarding per tuner. It worked, but it was glue that needed constant attention. Yagi replaces that by rewriting the address the tuner hands out. On the Jellyfin side nothing special is required: add it like any HDHomeRun under Dashboard → Live TV → Tuner Devices → HDHomeRun, pointing at host:5004.
Beyond the address rewrite, Yagi adds access controls: an allowlist, a limit on tuners per viewer, a global cap, and tuners always kept free for the owner. Viewers over a limit receive the same HTTP 503 a busy tuner returns, so the server already knows how to handle it. There is a web UI with live tiles showing channel, current program, who is watching, bitrate and signal, plus 30 days of history per viewer. It can also manage the tuner itself (channels, scan, restart, firmware) and send notifications to ntfy, Pushover or a webhook. The tuner is found by DeviceID, so a DHCP address change does not break the setup.
It works over LAN, Tailscale, WireGuard and similar links, and there is an optional image with Tailscale built in. The stack is a Go backend with an embedded React/Tailwind UI, distributed as a Docker image on ghcr.io for amd64 and arm64, MIT licensed.
The honest status matters here: Yagi was built for Plex and tested there on the author's own FLEX 4K. The Jellyfin steps are written but not yet tested, which is exactly why the post asks for feedback. The author also discloses heavy AI involvement — Claude Code writes nearly all code, tests and docs under his direction and review, backed by 25+ years of engineering experience.
Commentary for self-hosters
If you already share a tuner across sites, this targets the awkward part rather than the transport. Tailscale or WireGuard gets packets between networks; Yagi fixes what the tuner tells clients about itself. That is a cleaner split than per-tuner forwarding rules.
The per-viewer and global limits are the feature I would test first, because they decide whether a shared tuner stays usable for the household when relatives tune in. The 503 behavior is a sensible choice — it reuses a failure mode Jellyfin already understands instead of inventing a new one.
Treat the Jellyfin path as beta. Spin it up in a lab or alongside your current setup, keep your existing configuration until the remote server reliably plays and records, and report what breaks on GitHub. If you run a mix of Plex and Jellyfin, remember only the Plex path has been exercised so far. For more Jellyfin-side tooling, see our Jellyfin plugins.