tunarr

chrisbenincasaZlib活跃维护

把 Plex、Jellyfin、Emby 里的自建影音库包装成 IPTV 频道,用传统电视换台的方式观看,还能生成 NFO 元数据。

Create a classic TV experience using your own media - IPTV backed by Plex/Jellyfin/Emby/NFO

v2026.11.2发布于 2026-11-09 13:19 UTC2,721star +5 / 7 天168fork同步于 2026-11-10 23:44 UTC

怎么上手

由 README 提炼,执行前请确认
docker compose up -d
硬件要求按 README 说明

README 未说明具体显存或 CPU 要求;硬件转码支持 Nvidia NVENC、VAAPI、Intel QuickSync、macOS VideoToolbox,并提供 linux/arm64 镜像用于树莓派等 ARM 设备。

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

把 Plex/Jellyfin/Emby 或本地媒体变成自建直播电视频道,输出 IPTV 流

把 Plex、Jellyfin、Emby 里的自建影音库包装成 IPTV 频道,用传统电视换台的方式观看,还能生成 NFO 元数据。

核心能力

  • 连接 Plex、Jellyfin、Emby 或本地文件库并跨库搜索筛选
  • 拖拽编排频道节目单,支持广告、MV、片头等填充内容
  • 伪装成 HDHomeRun 调谐器接入 Plex/Jellyfin/Emby
  • 输出 M3U/IPTV 供 Tivimate、Threadfin、xTeVe 等客户端
  • 支持 NVENC、VAAPI、QuickSync、VideoToolbox 硬件转码

容易踩的坑

默认监听 8000 端口,需映射并访问 http://localhost:8000;需挂载 ./tunarr-data:/config/tunarr 持久化配置;硬件转码需按官方文档另行配置。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2026.11.2
  1. v2026.11.2最新正式版2026-11-09 · 2026-11-09 13:19 UTC

    Read the announcement: https://tunarr.com/blog/2026.11.2/

    2026.11.2 (2026-11-09)

    ⚠ BREAKING CHANGES

    • api: GET /api/media-libraries/:libraryId/programs returns a paged { total, result, size, offset } object instead of an array. Pass offset and limit (1-1000, default 100) to walk the library.

    Features

    • add ability to bulk edit filler/channel assignments (#1842) (28ab7e5)
    • integrate new stream selector with the ffmpeg pipeline (#1874) (b2fda38)
    • let users remove a channel's slot schedule (#937) (#2458) (3e0c369)
    • stream selection profiles with a resolution cascade, legacy migration, and assignment UI (#1876) (4c44d21), references #1960
    • stream-selection: rule preview and Basic-mode program fields (#2181) (738878d)
    • upload and loop the channel fallback soundtrack (#2467) (404f8d5), closes #523
    • web: add bulk actions, keyboard navigation and a status filter to /channels (#2421) (5b2a46e)
    • web: port six tables to DataTable (MRT replacement Phase 1) (#2411) (edf7b53)
    • web: rebuild /channels on a new CollectionView pattern (#2414) (40aac0a)
    • web: show a snackbar linking to the logs when a query fails (#2473) (2b2beab)

    Bug Fixes

    • api: make POST /media-sources/:id/scan queue a scan (#2501) (c12eee5), references #2271
    • api: page GET /media-libraries/:libraryId/programs (#2423) (0b72882), closes #2420
    • channels: preserve on-demand playback state on channel save (#2496) (80a6b2a)
    • ffmpeg: isolate output defaults between streams (#2468) (fa7ca66)
    • ffmpeg: normalize SDR co
  2. v2026.11.12026-11-02 · 2026-11-02 03:43 UTC
    查看更新说明

    2026.11.1 (2026-11-02)

    Bug Fixes

    • build: extract the Windows ersatztv-channel worker and ship libvpl.dll (#2413) (8ef7e8e)
  3. v2026.11.02026-11-01 · 2026-11-01 20:35 UTC
    查看更新说明

    2026.11.0 (2026-11-01)

    Features

    Bug Fixes

    • dev: fetch the ersatztv-channel binary when starting the dev server (#2402) (f1a6af7)
    • ffmpeg: keep the server environment in the vainfo probe (#2381) (965cc0d), closes #2380
    • hls: serve the live edge so one slow client cannot freeze the playlist (#2082) (ff582b0), closes #2045
    • plex: accept video streams without dimensions and skip them (#2383) (7d28d4a), closes #2192
    • scanner: trash local seasons, shows, albums and artists with their last item (#2396) (05982b9)
    • scheduling: align slot padding to the local clock, not UTC (#2291) (9e5bba3), references #2235
    • stream: fall back to the album's art when a track's own art is unreachable ([#2362](https://github.com/chri
  4. v2026.10.42026-10-25 · 2026-10-25 19:26 UTC
    查看更新说明

    2026.10.4 (2026-10-25)

    ⚠ BREAKING CHANGES

    • scheduling: the API rejects movie slots in time and random slot schedules. Schedule movies with a custom-show slot instead.

    Features

    • scheduling: migrate movie slots to custom-show slots (#2235) (5d6b11d)
    • web: add design tokens, new theme and app-wide density setting (42b8c5d)
    • web: add Segmented, KeyHint and EmptyState primitives (#2359) (697a0f1)
    • web: add Storybook and the first component-layer primitives (d5fd146)
    • web: replace the drawer and top bar with AppShell (#2356) (ed4af53)
    • web: switch fonts to IBM Plex Sans and IBM Plex Mono (f894f4d)

    Bug Fixes

    • api: store uploaded images under server-generated names (#2357) (57dfd2d)
    • artwork: ignore a cachePath whose file is missing (#2294) (9f10114)
    • channels: keep startTime unless the user changes it on save (#2308) (bdc085f), references #2306
    • db: register the program_grouping external key index migration (5936dd9), references #2232
    • docker: copy .pnpmfile.cjs into the image build (#2371) (af95944)
    • ffmpeg: escape subtitle filter paths (#2324) (d8cb90e)
    • ffmpeg: pass tonemap peak in reference-white units (b09a7e0), closes #2063
    • ffmpeg: select libdav1d for AV1 by checking ffmpeg's decoder list (#2370) (355c06c)
    • ffmpeg: use mpeg2_vaapi for VAAPI MPEG-2 output (#2322) (21ee1d9)
    • nfo: support multiple studios for other_video.episodedetails (8667ca0)
    • server: replace pool workers that miss a task deadline (#2090) (c0ca3e0)
    • server: sort bac
  5. v2026.10.32026-10-16 · 2026-10-16 12:49 UTC
    查看更新说明

    2026.10.3 (2026-10-16)

    Features

    Bug Fixes

    • api: build external links for Emby programs (#2263) (d74110c)
    • db: keep schema test files out of drizzle-kit's schema glob (#2307) (f2f4ade)
    • ffmpeg: derive anamorphic SAR from N:M display aspect ratios (#2299) (379fdfc), closes #2256
    • ffmpeg: return VAAPI frames from tonemap_opencl when a download follows (#2327) (f4e5138)
    • ffmpeg: stop gcd from looping forever on zero (#2319) (ee1f3cf)
    • hls: mark exactly one audio rendition as default (#2300) (e632b98)
    • scanner: parse movie.uniqueid tag as array in OtherVideo nfo parser (#2304) (4fa4b7a)
    • scanner: prefer movie-specific artwork over folder short names (#2315) (fb12059), references #2170
    • scheduling: use the seeded random for ordered shuffle and random slot picks (#2301) (5601688)
    • server: normalize stored language codes to ISO 639-2/T (#2044) (#2074) (79b1cd9)
    • server: shut down the worker pool when the env var is unset (#2305) (2523e6b)

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    What is Tunarr?

    Tunarr lets you build custom live TV channels out of your existing media libraries — movies, TV episodes, music videos, or local files — and stream them as if they were real broadcast channels.

    Tune in by adding Tunarr's spoofed HDHomeRun tuner to Plex, Jellyfin, or Emby, or grab the M3U URL for any IPTV player like Tivimate or UHF.

    Features

    Media Sources

    • Connect Plex, Jellyfin, Emby, or local file libraries
    • Advanced search, filter, and sort across all connected libraries

    Channel Management

    • Drag-and-drop lineup editor
    • Filler content between programs (commercials, music videos, prerolls, branding)
    • Per-channel logos and automatic configuration backups

    Scheduling

    • Time-slot and random-slot scheduling tools
    • Web-based TV guide for viewing channel lineups

    Playback & Integration

    • Spoofed HDHR tuner for Plex, Jellyfin, and Emby
    • M3U/IPTV output for Dispatcharr, Threadfin, xTeVe, or any IPTV client
    • Stream channels directly in the browser
    • Per-channel audio language and subtitle preferences

    Transcoding

    • Hardware-accelerated transcoding: Nvidia NVENC, VAAPI, Intel QuickSync, macOS VideoToolbox
    • Multiple transcode profiles, configurable per channel

    Screenshots

    Quick Start

    The easiest way to run Tunarr is with Docker Compose. Create a docker-compose.yml:

    services:
      tunarr:
        image: chrisbenincasa/tunarr:latest
        container_name: tunarr
        ports:
          - 8000:8000
        environment:
          - TZ=America/New_York
        volumes:
          - ./tunarr-data:/config/tunarr
        restart: unless-stopped
    

    Then run:

    docker compose up -d
    

    Tunarr will be available at http://localhost:8000.

    Other installation options:

    PlatformMethod
    Linux / macOS / WindowsStandalone binaries
    UnraidCommunity App Store
    ProxmoxLXC helper script
    ARM (Raspberry Pi, etc.)Docker image (linux/arm64)

    For hardware-accelerated transcoding setup, see the transcoding docs.

    Documentation

    Development

    pnpm i
    pnpm turbo dev  # backend at :8000, frontend at :5173/web
    

    See CONTRIBUTING.md for a full development guide.

    Community

    License

    Tunarr is released under the Zlib License.