Create your own live TV channels from media on Plex, Jellyfin, Emby, or local files.
To run automatic library scans around 3 a.m. Central time, set both environment variables and restart Tunarr:
environment:
TUNARR_LIBRARY_SCAN_DAILY_TIME: "03:30"
TUNARR_LIBRARY_SCAN_TIME_ZONE: "America/Chicago"This overrides rescanIntervalHours for library scans only. Channel schedules, collection and custom-show sync, hourly library refresh, and the container timezone keep their existing behavior. Manual scans remain available. Prefer HH:30 (for example, 03:30 Chicago with a UTC container) to retain the existing half-hour separation from the hourly library refresh. Any valid HH:mm, including 03:00, is supported, but top-of-hour scans start alongside that refresh. The offset is not a completion guarantee; the daily option does not serialize those jobs.
The time must be 24-hour HH:mm and the timezone must be an IANA name. Both values are required together; invalid or partial configuration stops startup scheduling with an explicit error. With both unset (or empty), the existing interval and half-hour offset remain unchanged.
The existing node-schedule calendar rule follows the selected timezone through daylight saving changes: 03:00 in Chicago is 08:00 UTC in summer and 09:00 UTC in winter. Times skipped by a spring clock change have no invocation that day; repeated fall times follow node-schedule behavior. Choose a time such as 03:00 outside that transition window. Missed scans while Tunarr is stopped are not replayed.
This fork builds on upstream Tunarr to make broadcast-style channels more flexible and video processing more efficient, especially on small, low-power computers.
We aim to stay close to upstream, keep our changes focused, and contribute improvements back when they fit. Our long-term goal is to make this fork unnecessary: adopt upstream implementations and retire our equivalent patches as they become available. Specialized picture styles can remain optional fork features.
Measured HDR gains: on an Intel Core i3-1220P, the optional hardware path delivered 61% higher HDR-to-SDR throughput with five streams and used 73% less FFmpeg CPU time in a separate three-stream playback test. See the hardware comparison for the setup, darker HDR picture, and SDR tradeoffs. These are opt-in results, not a claim that every workload runs faster.
| Addition | What it does |
|---|---|
| More efficient hardware video processing | Reduces avoidable conversions in supported video paths. Bundles our matching FFmpeg build, direct NV12 shader output, optional driver-default scaling, and optional VAAPI HDR conversion. Hardware-specific options are opt-in; improvements measured on our Intel system are not promises for every GPU. |
| CRT, TV Broadcast, and DVD Broadcast looks | Gives modern screens a softer broadcast or CRT-inspired picture, with optional scanlines, glow, color bleed, and grain. Choose a look per channel or leave the picture unfiltered. TV and DVD Broadcast use different degrees of softness; they do not recreate a physical analog signal. Currently configured through the channel API. |
| After-show ad pods | Places an ordered break after a complete program: for example, a bumper, two commercials, and a station ID drawn from your selected filler pools. Available through the random-slot scheduling API; there is no pod editor in the UI yet. |
| Final-credit controls | Lets a channel advance when a valid final-credits marker begins. Programs without a valid marker play in full, and source files stay unchanged. |
| Playback and subtitle fixes | Includes targeted native fixes for audio timing at program boundaries and subtitle delivery. See the container notes for source revisions and validation limits. |
See the CRT, TV Broadcast, and DVD Broadcast picture comparisons. These are appearance previews; image hosting and display scaling can change fine texture.
One image, one installation path. The combined release contains Tunarr and its matching FFmpeg; you do not need to choose or combine development branches. Hardware options and exact source links are in the container notes.
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.
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
![]() Channel Management |
![]() Channel Configuration |
The public container bundles Tunarr and its matching FFmpeg. No registry login or branch selection is needed. Every published version is on the Releases page, with notes on what changed and anything to do before upgrading. The example below uses 2026.10.4-trfork.10; the latest release may be newer.
The current container recipe runs Tunarr on Bun. Older published images keep their original runtime; see container runtime and releases for the Bun version pin and publication steps.
The fork image is initially Linux x86-64 (linux/amd64). Create a compose.yaml:
services:
tunarr:
image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.10
container_name: tunarr
ports:
- 8000:8000
environment:
- TZ=Etc/UTC
volumes:
- ./tunarr-data:/config/tunarr
restart: unless-stoppedThen run:
docker compose up -dTunarr will be available at http://localhost:8000.
Next: set up your channels as usual, then check out the fork docs to switch on CRT looks, ad pods and more.
Connect your media server in Tunarr, or add a read-only media volume for local files. For Intel/AMD hardware access, GPU-specific options, source revisions, and rollback instructions, see the container notes. Start with a separate configuration directory when trying the fork; keep a configuration backup before upgrading an existing install.
Upstream installation options: these install upstream Tunarr and do not include this fork's additions.
| Platform | Method |
|---|---|
| Linux / macOS / Windows | Standalone binaries |
| Unraid | Community App Store |
| Proxmox | LXC helper script |
| ARM (Raspberry Pi, etc.) | Docker image (linux/arm64) |
For hardware-accelerated transcoding setup, see the transcoding docs.
- Fork docs: CRT looks, ad pods, skipping credits, hardware options
- Installation guide
- Creating channels
- Scheduling tools
- Transcoding configuration
- Full documentation
pnpm i
pnpm turbo dev # backend at :8000, frontend at :5173/webSee CONTRIBUTING.md for a full development guide.
Fork CI validates ready code PRs to main; container publication is manual. We use upstream's documentation site and native platform releases, while testing our combined source and publishing our own Linux x86-64 image. See the CI and release process.
This fork exists because of upstream Tunarr and the people who build it. Please keep fork reports here so they don't add to upstream's queue.
- Problems with this build (any version ending in
-trfork.N): open a fork issue. If you can reproduce the same problem on an upstream Tunarr build, it's upstream's bug; report it there, and mention it here. - Feedback on fork features (CRT looks, ad pods, final-credit controls, low-power encoding): fork issues, the first-release feedback thread, or pull requests.
- General Tunarr questions: upstream's documentation, Discord and Discussions. Mention that you run this fork.
Tunarr is released under the Zlib License.
Tunarr and the underlying media libraries remain the work of their respective authors. Our FFmpeg build builds on ErsatzTV-ffmpeg, FFmpeg, libplacebo, and their contributors; their licenses and attribution continue to apply.


