Create a classic TV experience using your own media - IPTV backed by Plex/Jellyfin/Emby/NFO
Find a file
Christian Benincasa c5e06d48de
feat: add HLS Direct v2 stream mode (#1620)
This works just like the normal HLS mode, but it does not transcode.
Unlike HLS Direct today, a continuous m3u8 playlist of proper chunks is
produced, rather than an m3u8 with a singular line item that returns the
direct program stream.
2026-01-26 15:40:52 -05:00
.github chore: updates to semantic-release workflow on main 2026-01-21 21:19:40 -05:00
.husky chore: add commitlint setup and configuration 2024-07-08 13:19:33 -04:00
design feat(macos): add proper macOS wrapper app (#1290) 2025-07-29 22:01:25 -04:00
docker docs: big docs update part 1 2025-11-05 16:09:34 -05:00
docs feat: add HLS Direct v2 stream mode (#1620) 2026-01-26 15:40:52 -05:00
docs-extras/includes docs: even more stuff 2025-11-05 16:47:52 -05:00
macos/Tunarr fix(macos): create tunarr data directory on first run if not exists 2026-01-06 10:48:51 -05:00
patches refactor: add media_source_id to relevant entities (#1106) 2025-02-28 15:53:29 -05:00
release chore: try pre-releases on release-please because release-it has too many bugs 2026-01-05 16:10:21 -05:00
scripts chore: add bump-version script 2026-01-20 16:45:06 -05:00
server feat: add HLS Direct v2 stream mode (#1620) 2026-01-26 15:40:52 -05:00
shared Merge remote-tracking branch 'origin/main' into dev 2026-01-23 11:40:30 -05:00
types feat: add HLS Direct v2 stream mode (#1620) 2026-01-26 15:40:52 -05:00
web feat: add HLS Direct v2 stream mode (#1620) 2026-01-26 15:40:52 -05:00
.dockerignore Packaging v0: Build and run server in a docker container (#139) 2024-03-05 13:13:26 -05:00
.gitignore feat: scan plex collections periodically and persist membership as tags (#1576) 2026-01-05 21:24:23 -05:00
.prettierignore fix: another fix for foreign keys migration; defer checking 2025-12-11 10:20:56 -05:00
.prettierrc fix: fix channel deletes when channel is associated with fillers (#889) 2024-10-18 12:31:05 -04:00
.release-it.json chore: configure release-it to actually make a github release 2026-01-06 13:19:16 -05:00
CHANGELOG.md chore: release 1.1.3 2026-01-20 16:04:19 +00:00
CLAUDE.md chore: bump pnpm to latest (10.28.0) 2026-01-18 12:53:41 -05:00
commitlint.config.ts chore: add commitlint setup and configuration 2024-07-08 13:19:33 -04:00
CONTRIBUTING.md feat!: add support for Jellyfin media (#633) 2024-08-22 07:41:33 -04:00
Dockerfile chore: more changes and improvements around tunarr versioning 2026-01-05 20:47:50 -05:00
eslint.config.mjs fix: sort nested program queries by index 2026-01-16 12:49:39 -05:00
LICENSE dizqueTV license 2020-09-24 18:49:41 -04:00
mkdocs.yml docs: add music media source to side nav 2026-01-18 10:12:31 -05:00
package.json feat: add ability to set slot padding per-slot in time slot editor (#1614) 2026-01-23 16:56:03 -05:00
pnpm-lock.yaml feat: add ability to set slot padding per-slot in time slot editor (#1614) 2026-01-23 16:56:03 -05:00
pnpm-workspace.yaml fix: properly generate build-time constants 2026-01-22 13:38:08 -05:00
README.md docs: add contribution guide to docs 2026-01-18 08:16:30 -05:00
release.config.mjs chore: add test release-it configurations 2026-01-03 11:28:45 -05:00
tsconfig.json docs: host multiple api versions 2026-01-09 15:04:30 -05:00
turbo.json chore: cleanup turbo tasks, consolidate some shared package versions 2025-09-30 21:02:20 -04:00
vitest.config.ts refactor: get all tests passing; configure at top-level 2025-07-06 20:51:18 -04:00

Tunarr

GitHub Repo stars Docker Pulls Docker Image VersionDiscord

Create and configure live TV channels using media on your Plex, Jellyfin, or Emby servers.

Access your channels by adding the spoofed Tunarr HDHomerun tuner to Plex, Jellyfin, or Emby. Or utilize the m3u URL with any IPTV player app (we love UHF and Tivimate).

Important

  • ⚠️ Tunarr is a work in progress and is under very active development.
  • ⚠️ Please report any issues you encounter or suggest any ideas you have in the issues section or in Tunarr's discord server.

What is this?

Tunarr is a rewrite + rebrand of dizqueTV (which in itself was a fork of other projects!). This project was born out of both a love for TV and an appreciation for the work put into dizqueTV and its predecessors.

Tunarr has the following goals:

  • Modernize the stack, both backend and frontend
  • Stabilize the program, fix bugs, and improve performance (Tunarr currently is developed and tested on Node 22, non-trivial performance improvements over previous versions)
  • Modernize and "prettify" the Web UI
  • And of course, Add a ton great new features!

Features

  • NEW Advanced filtering of Plex libraries, helping to easily find the content you want to schedule
  • NEW Jellyfin / Emby library support!
  • NEW Stream your channels directly in the browser
  • NEW Complete rewrite of streaming pipeline, offering better stability and improved performance
  • NEW New and more powerful scheduling options!
  • NEW Dark mode!
  • NEW Quickly find content you want for your channels with advanced filtering and sorting (Jellyfin filtering coming soon)
  • NEW Scheduled, configurable backups - never lose your channels and configuration!
  • NEW Support multiple transcode configurations and set them per-channel
  • NEW Audio language preference support
  • NEW Improved UI for time/random slot scheduling
  • NEW Improved Subtitle support: support for image and text based subtitles. Supports extracting embedded text based subtitles. Configure subtitle preferences (language, subtitle type, etc) per-channel.
  • Spoofed HDHR tuner and a IPTV channel list, providing a large amount of flexibility and easing integration with xTeVe or Threadfin and Plex, or the IPTV client of your choice.
  • Customize channels with a logo, filler content ("commercials", music videos, prerolls, channel branding videos) between programming, and more!
  • View channel lineups on the web-based TV Guide
  • Support for hardware accelerated transcoding, including Nvidia, VAAPI, QuickSync, and macOS VideoToolbox. (AMF; #1131 and Vulkann #1172 are coming soon!)

Limitations

  • Like dizqueTV, Tunarr does not currently watch your Plex server for media updates/changes. You must manually remove and re-add your programs for any changes to take effect. Same goes for Plex server changes (changing IP, port, etc).. You'll have to update the server settings manually in that case. NOTE This feature is actively under development! (https://github.com/chrisbenincasa/tunarr/issues/15)

Releases

Wiki

Development

At a high level, pnpm is Tunarr's package manager and turbo is used for task running in the repo.

Web

vite is used for web dev and bundling.

Start dev servers

  1. Install deps:
pnpm i
  1. Start dev servers:
pnpm turbo dev

After the servers are running, the backend should be available at localhost:8000 and the frontend at localhost:5173/web.

License

  • The original dizqueTV is released under zlib license (c) 2020 Victor Hugo Soliz Kuncar: we've kept this.