Skip to content

Releases: TacoRocket/tunarr

2026.10.4-trfork.12

Choose a tag to compare

@github-actions github-actions released this 01 Nov 01:28
066238e

A new name, the latest upstream Tunarr, and several new tools that stay off until you turn them on. Your channels play the same as they did on trfork.11.

New

  • Tunarr Retuned. The web app shows the fork's own name and a refreshed TV logo in the header, browser tab and welcome page, so it's clear which build you're running. Your channels' default icons and watermarks are unchanged. (#134)
  • From upstream Tunarr:
    • a setup checklist on the welcome page that you can skip;
    • bulk flex tools gathered into a Flex menu;
    • channel edit tabs that stay loaded as you switch between them. (#141)

Fixed

  • The guide right after a restart. Guide lookups now wait for the first full guide build, instead of briefly showing gaps for channels it hasn't reached yet. (#142)
  • Plex items whose video stream reports no size are accepted instead of failing. (#141)
  • Channel icon URLs with stray spaces now load. (#141)
  • Software-encoded error and offline screens now show a steady picture with their sound, instead of a single frame. (#128)

Experimental

  • ErsatzTV next streaming backend (from upstream). A separate worker program from the ErsatzTV project can transcode a channel instead of Tunarr's own FFmpeg pipeline. It's off by default: turn it on per channel, or for every channel with TUNARR_ERSATZTV_NEXT_ENABLED.
    • Fork picture features don't apply on a channel that uses it: the CRT look, credit squeeze and VAAPI low power. The session log and the Stream Troubleshooter say so.
    • ErsatzTV next backend (#141)
  • Live relay. An empty HLS channel can relay a Toonami Aftermath feed through its normal transcode profile. It's set per channel through the API, with no web UI yet. Toonami live relay (#128)
  • Text subtitles from PGS images. A command converts one English PGS subtitle track to text with OCR and keeps the result in Tunarr's subtitle cache. It runs one job at a time in its own worker, so scheduling isn't affected. Prepare an English PGS subtitle with OCR (#131, #139)
  • Fewer Plex requests during library scans. Set TUNARR_PLEX_SCAN_METADATA_BATCH_SIZE=20 to fetch movie and episode details in groups. Unset, scans work as before. Plex scan batching (#34)

Under the hood

  • Upstream Tunarr main as of October 31 is merged in. (#141)

  • The image now includes:

    • Tesseract 5.5.3 with English recognition data, for the OCR command (#131);
    • the ErsatzTV next worker v0.2.3, about 11 MB (#141).

    Both downloads are checked against pinned SHA-256 hashes when the image is built.

  • Server tests now run on Bun, the runtime the image uses, with a small remainder on Node. (#140)

Before you upgrade

  • One database change. On first start, Tunarr adds an ErsatzTV next setting to each channel, off for all of them. Older images refuse a database that has this change. To be able to go back, stop Tunarr and copy your Tunarr data folder first; going back to trfork.11 means restoring that copy.
  • Same search index (Meilisearch 1.52.4) and FFmpeg runtime as trfork.11.

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.12

Exact image: ghcr.io/tacorocket/tunarr@sha256:b774fd9c62c54ed5ca1e2c8c62eaa59ef414afff1cc2c7883be920835111aabc

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside

Every merged pull request

What's Changed

Full Changelog: v2026.10.4-trfork.11...v2026.10.4-trfork.12

2026.10.4-trfork.9

Choose a tag to compare

@TacoRocket TacoRocket released this 31 Oct 19:15

A small release on purpose: one search engine update, on its own, so it's easy to check and easy to undo.

Under the hood

  • Search engine update. Meilisearch moves from 1.39.0 to 1.52.4. It powers library search, smart collections and the filler lists that follow them, so we keep it current the way we keep FFmpeg current. Versions 1.40 through 1.52.3 were skipped on purpose: they use a memory allocator that can crash or leak threads under load. (#87)

Before you upgrade

  • The search upgrade is one-way. On first start, Meilisearch converts your search index in place, and older images can't open it afterwards. Stop Tunarr and copy the data.ms and ms-snapshots folders from your Tunarr data folder first, so you can go back. How to back up and roll back
  • Running your own Meilisearch with TUNARR_MEILISEARCH_PATH? It needs version 1.51 or newer now.
  • Nothing else changes from trfork.8: same database, same FFmpeg runtime.

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.9

Exact image: ghcr.io/tacorocket/tunarr@sha256:a4d7361e820bd452d6e5fbec7951ad90e84cf18f9cbbe08351c164fbd810e922

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside

Full Changelog: v2026.10.4-trfork.8...v2026.10.4-trfork.9

2026.10.4-trfork.8

Choose a tag to compare

@TacoRocket TacoRocket released this 31 Oct 19:15
c30d061

The first release under the trfork name, and a big one: channels that run a few hours behind, ad breaks that keep themselves stocked, and a safety net for when Plex re-adds your files.

New

  • Offset channels. Make a "+3" channel that plays another channel's lineup a few hours later, like East and West Coast feeds: miss the 8 pm movie, catch it at 11. It follows its source on its own, and it can keep the source's CRT look, turn it off or use its own. Offset channels (#65, #89)
  • Ad breaks that stock themselves. A filler list can follow a smart collection, so a new commercial tagged the right way shows up in your breaks without editing lists by hand. A break can also say how many ads it plays, and it won't repeat the same ad within one break. Filler lists from a smart collection (#49)
  • Repair re-added items. When Plex re-adds a movie or episode under a new ID (an upgraded file, a rebuilt library), Tunarr can move your lineups, custom shows and filler lists over to the new copy, instead of leaving them pointing at the Trash, where emptying it turns those spots into flex. Off by default. Repair re-added items (#71)
  • See what Empty Trash would remove before you press it, and empty only the items nothing uses. API only for now. (#77)
  • Library scans at a time you choose, in your own time zone, instead of half past midnight in the server's time zone. Daily library scan time (#44)
  • Live fallback reports. When Tunarr keeps a channel on the air by doing something other than what you configured, the sessions API now says so instead of falling back silently. Live fallback reports (#92)

Fixed

  • FLAC audio plays on HLS passthrough channels. Files with FLAC audio used to play with no sound; the audio is now converted to AC-3 on the fly. FLAC audio (#29)
  • Subtitles line up with the picture on Direct HLS v2, program changes included, with no extra setting. Subtitles in Direct HLS v2 (#106)
  • Direct HLS v2 channels list their stream for MKV files. Many MKV files don't record a bitrate, and the playlist could come up empty while the stream was live. (#99)
  • 4K movies with PGS subtitles are lighter on VAAPI. Subtitle images are handled at their own size instead of being scaled up to 4K first. (#99)
  • Hand-built lineups stay put. A channel that once had a time or random slot schedule could have its hand-built lineup regenerated over it later. (#90)
  • Credit markers stay current. Plex intro and credit markers added or changed after the first scan are picked up by normal scans, so skipping the end credits uses today's markers. (#78)
  • Low-power encoding falls back instead of failing. If the GPU has no low-power H.264 encoder, the channel uses the regular one instead of refusing to play. (#61)
  • Subtitle preparation is calmer. A failed extraction no longer reruns back to back, duplicate runs for the same program are merged, only the subtitle tracks your channels will use are extracted, and a read that stops making progress is ended after 60 seconds. (#33, #84, #100)
  • An MPEG-TS stream started after an HLS stream plays again. It could pick up the HLS settings and deliver nothing. (#98)

Experimental

  • CRT processing tiers. CRT looks now come in Quality (the default), Performance and Experimental. Performance uses faster GPU paths; Experimental adds shortcuts that can change the picture slightly. Processing tiers (#75)
  • DVD Broadcast on HDR movies. HDR10 sources used to skip the CRT look. On eligible hardware they now get DVD Broadcast. Needs the direct NV12 and fixed-Hable options, hardware decoding and 1080p H.264 output. Hardware and picture options (#47)
  • Idle scheduling workers can retire to free memory, with TUNARR_WORKER_IDLE_TIMEOUT_MS=60000. The default is unchanged. (#32)

Under the hood

  • Faster CRT shaders, same picture: duplicate work removed, and far fewer color reads on the Broadcast looks. (#69, #73)
  • The container runs Tunarr on Bun instead of Node. (#94)
  • Search engine update: Meilisearch 1.30.0 to 1.39.0. (#79)
  • Upstream Tunarr main as of October 26, including the new Filler Lists page. (#50)
  • The Help menu now links the fork's docs and issues, while still crediting upstream. (#53)

Before you upgrade

  • Back up your Tunarr data folder first. This release changes the database (offset channels, mirror picture settings, smart-collection filler lists, CRT tiers) and upgrades the search index. Going back to 2026.10.4-fork.1 needs that backup: the older image can't open the upgraded search index. Search engine upgrades

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.8

Exact image: ghcr.io/tacorocket/tunarr@sha256:9f7550963c13dbb10825829808792bf748c6050a3a16936041f8d9896f198a01

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside

Every merged pull request

What's Changed

  • docs: explain fork and add manual container publication by @TacoRocket in #25
  • fix(ci): wait through container startup connection resets by @TacoRocket in #26
  • docs: link measured HDR gains to the fork wiki by @TacoRocket in #27
  • chore: route fork reviews to the fork maintainer by @TacoRocket in #28
  • chore: consolidate the published Tunarr fork into main by @TacoRocket in #24
  • fix(ffmpeg): convert FLAC audio in HLS passthrough by @TacoRocket in #29
  • chore(release): pin native FLAC release candidate by @TacoRocket in #30
  • ci: retain fork validation and manual container publication by @TacoRocket in #31
  • perf: make scheduling worker idle retirement opt-in by @TacoRocket in #32
  • fix: coordinate overlapping subtitle preparation by @TacoRocket in #33
  • feat: support timezone-aware daily library scans by @TacoRocket in #44
  • feat: smart-collection filler pools, pod count and no repeats within a break by @TacoRocket in #49
  • chore: name published fork images -trfork.N by @TacoRocket in #52
  • chore: integrate upstream Tunarr main (2026-10-26) by @TacoRocket in #50
  • docs: one home for fork docs, route fork reports to the fork by @TacoRocket in #53
  • fix(ffmpeg): retain DVD Broadcast CRT for eligible HDR10 by @TacoRocket in #47
  • fix: fall back to regular VAAPI when low-power is unavailable by @TacoRocket in #61
  • perf: remove redundant same-pixel CRT filtering by @TacoRocket in #69
  • feat: offset channels that follow a source a few hours later by @TacoRocket in #65
  • feat: repair re-added items instead of trashing their programming by @TacoRocket in #71
  • perf: pair broadcast chroma blur samples by @TacoRocket in #73
  • fix: refresh Plex credit markers during normal scans by @TacoRocket in #78
  • feat: show what Empty Trash would blank, and empty only what nothing uses by @TacoRocket in #77
  • test(stream): make the HLS pruning-floor test wait on state, not time by @TacoRocket in #80
  • feat: add opt-in CRT processing tiers by @TacoRocket in #75
  • fix: stop rerunning a failed subtitle extraction back to back by @TacoRocket in #84
  • chore: bump Meilisearch 1.30.0 → 1.39.0 by @TacoRocket in #79
  • test: remove real-time waits and clean up warning fixtures by @TacoRocket in #85
  • test: repair server typecheck inputs and shared fixtures by @TacoRocket in #86
  • fix(scheduling): keep hand-built lineups from being regenerated over (#76) by @TacoRocket in #90
  • feat: independent picture settings for mirror channels by @TacoRocket in...
Read more

2026.10.4-trfork.11

Choose a tag to compare

Build a classic TV block in one request, subtitles that stay in time when you tune in mid-show, and a way to keep a subtitle Plex found for you.

New

  • Scheduling presets. One API request turns a familiar TV pattern into an ordinary Random Slots schedule that you can still edit before saving: Marathon (four episodes of each show in a row), Primetime (two), Saturday Morning (one), or Variety (two episodes of one show, then two shuffled picks from a Custom Show or Smart Collection). You can add an ad pod after every program. Variety can also take its shows from a Smart Collection, playing each show's matching episodes in order. API only for now; the web UI waits for upstream's redesign. Show scheduling presets (#115, #123)

Fixed

  • Subtitles stay in time when you tune in mid-show. On regular HLS streams, tuning in while a subtitle line was on screen could throw every line after it out of time. Now the line already showing is skipped and the rest arrive on time, the way Direct HLS v2 already behaved. (#122)

Experimental

  • Keep a subtitle that Plex finds for you. For one program at a time, a command asks your Plex server to search for English SRT subtitles, fetches the one you pick, and keeps a copy in Tunarr's cache, so library rescans don't lose it. Your subtitle preferences still decide what plays. English only, one media version per item, and no web UI yet. Fetch an English subtitle from Plex (#121)

Under the hood

  • Groundwork for turning image subtitles into text. A developer script converts one PGS track in an MKV into an SRT file with Tesseract OCR. It runs from a source checkout with Tesseract installed; the container doesn't include Tesseract, and nothing runs it automatically yet. (#110)
  • The image is built with pnpm 12.15.0 and Turbo 2.11, taken from upstream as its own change. Rebuilding the lockfile also moved a few small shared libraries to newer minor versions (ajv for format checks, ts-pattern, debug). It isn't in the list below because it was cherry-picked onto the release branch. (#137)
  • Testing guidance for fork contributors. (#129)

Before you upgrade

  • No database change this time. Going back to trfork.10 is a plain image swap.
  • Same search index and FFmpeg runtime as trfork.10.

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.11

Exact image: ghcr.io/tacorocket/tunarr@sha256:2535c95ceb2722e7dcd1cf26979bb589ebd7c8b7ada78c3f9ef80440e8b8e7da

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside

Every merged pull request

What's Changed

  • feat(subtitles): add local direct PGS-to-SRT preparation by @TacoRocket in #110
  • fix(subtitles): preserve HLS cue timing after a mid-cue seek by @TacoRocket in #122
  • docs: make fork tests start failing and add test layers by @TacoRocket in #129
  • feat: add API show scheduling presets by @TacoRocket in #115
  • feat: select paired episodes from Smart Collection show pools by @TacoRocket in #123
  • feat(subtitles): retain acquired Plex subtitles in the library cache by @TacoRocket in #121

Full Changelog: v2026.10.4-trfork.10...v2026.10.4-trfork.11

2026.10.4-trfork.10

Choose a tag to compare

@github-actions github-actions released this 31 Oct 22:17
4c3d350

Subtitles that are ready before the show starts, clearer reports when a channel quietly falls back, and a first look at credit squeeze.

New

  • Fallback reports cover much more. The sessions API already said when Tunarr keeps a channel on the air by doing something other than what you configured. Now it also says when hardware decoding, encoding or HDR tone mapping fell back to the CPU, and when passthrough had to leave out an image subtitle it can't show. Plain MPEG-TS and HLS Direct v1 streams report too, and two people watching the same channel each get their own report. Live fallback reports (#105, #108, #112)

Fixed

  • Subtitles are ready before the show starts. Tunarr now prepares the text subtitles your channels need for the next six hours, earliest airing first, instead of scrambling an hour ahead. For MKV files it reads just the subtitle parts and skips the video and audio, instead of reading the whole file. Preparation is capped at ten minutes of work per hour, apart from anything airing within the hour, so it can't take over your disks. Subtitle extraction (#104)
  • The web page and the server agree on the version. After an update, the web page could show an older version number than the server, along with a mismatch warning that refreshing didn't fix. (#107)

Experimental

  • Credit squeeze. When a movie or episode reaches its final credits, the picture shrinks into a box over a background image you choose while the credits keep playing, the way TV makes room to promote what's next. Off by default and set per channel through the API. It needs VAAPI encoding with hardware filters, and it can't be combined with skipping the end credits. A layout template helps you make the background. Credit squeeze (#96, #113)

Under the hood

  • The publish workflow now reuses an already-published FFmpeg runtime instead of rebuilding it. (#125)
  • The search engine update (#87) shows up in the full list below because trfork.9 shipped it from a release branch. Nothing new there.

Before you upgrade

  • Back up your Tunarr data folder first. This release adds a database change for credit squeeze. Going back to trfork.9 needs the backup you took before upgrading; the older image can't use the upgraded database.
  • Subtitles get prepared again. Subtitle files Tunarr extracted before this release are prepared once more as they come up, within the ten-minute hourly cap, so expect a little extra disk reading for the first day.
  • Same search index and FFmpeg runtime as trfork.9.

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-trfork.10

Exact image: ghcr.io/tacorocket/tunarr@sha256:160cd73c325a993df26718fc913840074aae940e6c81ea5a9e7e20a2844a05b1

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside

Every merged pull request

What's Changed

Full Changelog: v2026.10.4-trfork.9...v2026.10.4-trfork.10

2026.10.4-fork.1

Choose a tag to compare

@TacoRocket TacoRocket released this 31 Oct 19:15

The first public image of the TacoRocket fork: upstream Tunarr 2026.10.4 plus our additions for making channels look and feel like real TV. Newer releases replace it; this page is here for the record.

New

  • CRT looks. Give a channel the look of an old TV: Subtle, Classic Flat or Strong, plus DVD Broadcast and TV Broadcast, which soften the picture to standard definition first. The broadcast looks can add film grain, screen texture and a composite-signal look. Needs a VAAPI GPU. CRT looks (#3, #5, #14, #15, #16, #20)
  • Skip the end credits. A channel can move on to what's next when a movie or episode reaches its final credits, the way TV cuts away. It uses Plex's credit markers and never changes your files. Skip the end credits
  • Refresh ad breaks after adding commercials, without rebuilding the channel's lineup. API only. (#2)
  • Pick subtitles by track name, so you can choose full dialogue over a signs-only track. Plex's real audio and subtitle track names are kept, so a dub is easy to tell apart too. (#8)

Fixed

  • No more audio overlap where one program hands over to the next. This uses the upstream maintainer's measured encoder timing. (#17, #19)
  • Cleaner joins between programs in HLS: players get the restart markers they expect. (#18)
  • A channel no longer sits on a program's ending when its burned-in subtitles run out before the video. (#11)
  • HLS keeps its pace after a file ends earlier than its listed length. (#12)
  • 4K movies with PGS subtitles keep up on VAAPI. A 12-second test clip used to take about 25 seconds to process. (#1)
  • Fewer picture freezes on VAAPI when SDR clips with different color tags play back to back. (#21)

Experimental

  • Faster paths for Intel and AMD GPUs, all off by default: low-power H.264 encoding, driver-default scaling, direct NV12 output for the Broadcast looks (checked on Intel only) and fixed-Hable HDR tone mapping (checked on Intel Gen12 only). Hardware and picture options (#6, #22)

Before you upgrade

  • Back up your Tunarr data folder first. Coming from upstream Tunarr, this image adds database changes for CRT settings, end-credit skipping and low-power encoding. Going back to upstream needs that backup.

Install

image: ghcr.io/tacorocket/tunarr:2026.10.4-fork.1

Exact image: ghcr.io/tacorocket/tunarr@sha256:6b9fbe9e16230a4eb207e7dcdd646ae24418a2b9b745cec24005dff3fcd0574b

Keep a backup of your Tunarr data folder before upgrading. Going back to an older image does not undo database or search-index changes.

What's inside