Tunarr

Dark-themed TV guide with one row per channel and episodes laid out as colored blocks along a timeline.

Round-the-clock TV channels from a Plex, Jellyfin or Emby library

Tunarr turns an existing media library into live TV channels. Movies, episodes and music videos come from Plex, Jellyfin, Emby or plain local folders, and each channel runs its schedule non-stop. Plex, Jellyfin and Emby tune in through an emulated HDHomeRun tuner; every other player gets an M3U playlist and an XMLTV guide.

Slot schedules, ad breaks and an emulated HDHomeRun tuner

  • Mixed sources per channel: Plex, Jellyfin and Emby servers plus local folders, with search, filters and smart collections across every library.
  • Scheduling tools: fixed-time slots, slots played in order or at random, block shuffle and cyclic shuffle. Filler (commercials, music videos, prerolls, station branding) plugs the gaps and can break a program up mid-roll.
  • Emulated HDHomeRun tuner: Plex, Jellyfin and Emby discover Tunarr as a network tuner, while IPTV apps read its M3U playlist and XMLTV guide.
  • Hardware transcoding: NVENC, VAAPI, QuickSync and VideoToolbox, with a transcode profile per channel.
  • Per-channel settings: logo, watermark, preferred audio and subtitle languages, plus automatic config backups.

Plex Live TV, Jellyfin, TiviMate or UHF on the receiving end

  • Plex: Tunarr goes in under Live TV & DVR as an HDHomeRun tuner, pointed at the XMLTV guide it serves on /api/xmltv.xml.
  • Jellyfin, the free media server: the docs recommend the HDHomeRun type there too, since users have reported unstable streams at program boundaries over M3U when Jellyfin isn't transcoding.
  • UHF on Apple TV and TiviMate on Android TV, two apps the docs recommend, play the /api/channels/m3u playlist.
  • Dispatcharr, Threadfin and xTeVe, named in the README, can take that playlist as input.

Forked from dizqueTV, with forced re-encoding and an open web UI

Every program is re-encoded, without exception. The FAQ explains that codec, resolution, frame rate and audio differ between files, and a continuous stream would break at each program change unless all of it is normalized. Tunarr never passes the source through, even between two files with the same codec, so every channel being watched costs CPU or GPU time. Hardware acceleration is how that cost stays manageable.

FFmpeg comes bundled with the Docker image only. The image is built on ErsatzTV's FFmpeg 7.1.1. The standalone Linux, Windows and macOS binaries leave FFmpeg out but ship a Meilisearch executable for search, which must stay in the same folder. Its data.ms file shows up as roughly 2 TB, yet it is sparse and takes only a few megabytes on disk.

The web UI needs no credentials unless you set them. By default Tunarr listens on every network interface (0.0.0.0, port 8000). Since 2026.9.0, TUNARR_BASIC_AUTH_USER and TUNARR_BASIC_AUTH_PASSWORD put the web UI and admin API behind HTTP Basic auth; streams, the M3U playlist, the XMLTV guide and HDHomeRun discovery stay public. The configuration page of the docs doesn't list these variables, and the pull request that added them is the only place they are described.

The docs call Tunarr a near-complete rewrite of dizqueTV, the project it was forked from, with stated goals of modernizing the backend and web UI and fixing bugs. On Unraid, the install template can pick up an existing dizqueTV config directory to migrate it.

The current release is 2026.10.4, from 25 October 2026. The project moved from 1.3.x numbering (1.3.15 on 15 September 2026) to date-based versions: 2026.9.0 on 26 September, three more that month and five in October. 2026.10.4 has a breaking change: the API rejects movie slots in time and random slot schedules, and existing ones are converted to custom-show slots. Rolling back after a database schema change is not supported; since 2026.9.0, Tunarr snapshots the database before migrating and won't start on a newer schema than its own. The installation page still calls the project pre-release, a flag the GitHub releases no longer carry. The latest commit is dated 26 October 2026.