Repository navigation
Releases: TacoRocket/tunarr
Release list
2026.10.4-trfork.12
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=20to fetch movie and episode details in groups. Unset, scans work as before. Plex scan batching (#34)
Under the hood
-
Upstream Tunarr
mainas 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.12Exact 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
- Tunarr source:
066238eb - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-trfork.2, built from ErsatzTV-ffmpega64ee856
Every merged pull request
What's Changed
- feat(release): publish a GitHub Release with plain notes for each image by @TacoRocket in #132
- chore(release): pin trfork.10 to fork main 4c3d350 by @TacoRocket in #133
- feat(subtitles): cache explicit PGS OCR jobs by @TacoRocket in #131
- chore(deps): bump pnpm to 12.15.0 by @TacoRocket in #137
- feat(branding): introduce Tunarr Retuned by @TacoRocket in #134
- chore(release): pin trfork.11 to f74ce25 plus #137 by @TacoRocket in #138
- perf: add opt-in Plex scan metadata batching by @TacoRocket in #34
- test: wait for work to finish instead of fixed timeouts by @TacoRocket in #136
- Run subtitle OCR in shared workers with isolated cancellation by @TacoRocket in #139
- test: make Bun the default server runtime in CI by @TacoRocket in #140
- feat(streaming): native Toonami live relay checkpoint by @TacoRocket in #128
- fix(guide): wait for a running build when a channel isn't cached yet by @TacoRocket in #142
- chore: integrate upstream Tunarr main (2026-10-31) by @TacoRocket in #141
Full Changelog: v2026.10.4-trfork.11...v2026.10.4-trfork.12
2026.10.4-trfork.9
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.msandms-snapshotsfolders 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.9Exact 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
- Tunarr source:
a89f146c - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-trfork.2, built from ErsatzTV-ffmpega64ee856
Full Changelog: v2026.10.4-trfork.8...v2026.10.4-trfork.9
2026.10.4-trfork.8
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
mainas 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.1needs 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.8Exact 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
- Tunarr source:
c30d061e - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-trfork.2, built from ErsatzTV-ffmpega64ee856
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...
2026.10.4-trfork.11
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.11Exact 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
- Tunarr source:
3abdbe72 - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-trfork.2, built from ErsatzTV-ffmpega64ee856
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
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.10Exact 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
- Tunarr source:
4c3d3501 - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-trfork.2, built from ErsatzTV-ffmpega64ee856
Every merged pull request
What's Changed
- Prepare subtitles six hours ahead with selective Matroska reads by @TacoRocket in #104
- feat: report hardware fallbacks in live sessions by @TacoRocket in #105
- Report image subtitles omitted by passthrough by @TacoRocket in #108
- fix: keep container web and backend versions consistent by @TacoRocket in #107
- chore(release): pin trfork.8 to fork main c30d061 by @TacoRocket in #111
- Keep MPEG-TS and HLS Direct reports with their requests by @TacoRocket in #112
- docs: add credit squeeze artwork layout templates by @TacoRocket in #113
- fix(ci): read an older source's web version from its bundle by @TacoRocket in #114
- feat: add opt-in native credit squeeze by @TacoRocket in #96
- chore(release): pin FFmpeg runtime 8.1.2-trfork.2 for trfork.8 by @TacoRocket in #116
- chore: bump Meilisearch 1.39.0 → 1.52.4 by @TacoRocket in #87
- fix(ci): reuse a published FFmpeg runtime instead of rebuilding it by @TacoRocket in #125
- chore(release): pin trfork.9 to c30d061 plus #87 by @TacoRocket in #124
Full Changelog: v2026.10.4-trfork.9...v2026.10.4-trfork.10
2026.10.4-fork.1
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.1Exact 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
- Tunarr source:
45bd0536 - FFmpeg runtime:
ghcr.io/tacorocket/tunarr-ffmpeg:8.1.2-fork-fd620cfb, built from ErsatzTV-ffmpegfd620cfb