Yagi proxies an HDHomeRun so a remote Jellyfin server can use its tuners

A developer released Yagi, a Go proxy that rewrites the tuner's lineup.json address so a Jellyfin server on another network can add an HDHomeRun normally. Jellyfin support is documented but not yet tested.

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.

This post was written with AI assistance from our product documentation or the sources listed and checked automatically before publication.

Read next

Running Emby, Jellyfin or Nextcloud?

Our plugins and apps add Live TV, subtitles, sign-up and security to your own server, with a free trial.