This release brings the fork up to date with official NuvioTV 0.8.3 and ships a long run of unreleased fork work in one go. Three things dominate it: lossless TrueHD/Atmos that starts cleanly every time (plus MAT audio is now working), a top-to-bottom visual redesign of exoplayer and a start on the rest of the app, and an app that's simply faster to use — the home screen, finding a source to play, and opening a series page are all quicker than before. On top of that, official 0.8.3 lands a much smarter progressive-subtitle pipeline, WebDAV audio fixes, a week-long Trakt session, and a raft of subtitle and playback fixes.
At a glance
- Everything from official 0.8.2-beta and 0.8.3-beta is included — progressive add-on subtitles that no longer wipe the playback buffer, WebDAV auth that survives redirects, a seven-day Trakt session, cross-client credential sync, TMDB Discover exclusion filters, a playback-stutter fix when marking episodes watched, and a long list of subtitle and focus fixes. Credit to the upstream authors: @tapframe, @skoruppa, @supergera13, @halibiram, @jvz-devx, and the translators and contributors named at the foot of this page.
- TrueHD/Atmos starts cleanly now. The startup storms — racing audio, position jump-aheads, and the early hiccups that used to correct themselves around the twelve-second mark on cold starts, replays and episode transitions — are fixed at the root, and audio also starts roughly 1.4 seconds sooner.
- TrueHD MAT passthrough works. Two defects were fixed; the app-packed Dolby MAT path now delivers bit-accurate lossless TrueHD with a genuine receiver lock. If it only ever gave you silence before, please retest.
- The in-player experience has been redesigned end to end — new control chrome (a tvOS-style layout with Material 3 Expressive motion), a single monochrome panel system with one consistent focus language, rebuilt overlay panels, and richer stream details at a glance.
- The rest of the app is a work in progress home, details, episodes, dialogs, the sidebar and every settings screen were re-skinned into the same clean dark look.
- A screen-saving dimmer setting has been added - when the app sits idle, the screen fades under a black scrim
- The UI is now scalable. Shrink it to fit more text and more posters per row (long episode descriptions were the original request), or enlarge it for readability. (note: at the smallest setting (85%) that's roughly a third more artwork loading at once, so scrolling can get heavier on lower-RAM devices.)
- A live stream preview on the details page. Open a title's detail page and you can see the exact stream auto-play has picked — resolution, source, video and audio, Atmos, channels, release group — with a tick once the link is confirmed ready, all before you press play.
- Finding a source to play is faster. Auto-play no longer waits for the slowest add-on; "finding best source" typically drops from about 12 seconds to 3–5. A new Ready faster on slow sources setting controls it (on by default).
- Series pages show their synopsis and cast several seconds sooner — worst case, about 9.7 seconds down to 2.5–4.
- The home screen opens much faster on repeat launches — about 2.7 seconds down to roughly half a second to the first row of real content.
- Selecting an add-on subtitle mid-playback no longer rebuffers — subtitles now attach without tearing down and rebuilding the stream, which matters most on high-bitrate remuxes (official 0.8.3).
- Sharper artwork at every interface scale, a new 85–115% Interface scale, and an idle screen dimmer for OLED burn-in insurance.
- Held fast-forward and rewind are controllable again, and Trakt now stays linked for a week rather than a day.
New
TrueHD MAT passthrough now works
The experimental MAT path packs TrueHD into Dolby MAT inside the app itself — the way Kodi does — and hands the finished bitstream straight to the audio output, bypassing the box's own decode path entirely. Until now the toggle engaged but never produced working audio on any tested device: silence, a mislabelled stereo lock, or a stalled start, depending on the chain. Two defects were found and fixed — a play/pause state bug that could leave the MAT track stuck paused when frame-rate matching rebuilt the pipeline mid-start, and a missing byte-swap that was sending every frame's payload out in the wrong order (valid-looking to every software layer, but silence to the receiver). The path now delivers bit-accurate lossless TrueHD: the receiver locks and displays Dolby TrueHD, pause and resume are clean, and playback survives frame-rate matching.
Where it lives: Playback → Audio, directly under "Dolby TrueHD capable receiver", and only visible while that switch is on. You can confirm it's working from the playback stats overlay — the audio row reads MAT out (app-packed).
Your receiver must decode Dolby MAT. If your sink can't, you'll get silence with the toggle on — that's the receiver declining the format, not a playback fault, so switch it off. It stays experimental until more devices and chains confirm, so please retest on this build and report back.
Idle screen protection — a screensaver that rests the panel
When the app sits idle, the screen fades under a black scrim that keeps the paused frame or home screen just legible — "screen resting", not "screen off". It's genuine burn-in insurance on OLED, and a tidy, low-glare idle state on any panel.
Settings — Appearance → OLED screen protection (per profile):
- Dim when idle — on by default
- Idle timeout — 2 / 5 / 10 minutes (default 5)
- Dim strength — 50 / 70 / 85% (default 70; content stays identifiable at every level)
It fades in over about 1.4 seconds; any button wakes it instantly, and the waking press never also navigates. It never engages while playing or buffering, pausing restarts the idle clock (so a long film won't dim the instant you pause it), and resuming playback dismisses it automatically. It's partial protection by design — pixels stay lit at reduced luminance so the screen stays readable.
Size the whole interface to taste
A new Interface scale setting (85–115% in 5% steps), in Appearance, resizes the entire UI. Shrink it to fit more text and more posters per row (long episode descriptions were the original request), or enlarge it for readability. It persists across restarts. On a 2 GB box, sub-100% scales pack more on screen but can add a little decode and scroll load — worth keeping in mind on lower-RAM devices.
A live stream preview on the details page
Open a title's page and, just below the ratings, you now see the exact stream auto-play has lined up before you press play: its badges — resolution, source, video tech, audio, Atmos, channels — and its release group appear the moment the app has ranked your streams, and a green tick replaces the spinner once the link is confirmed usable. It uses your real auto-play criteria, so what you see is what will play. It's absent in manual stream-selection mode, where you're choosing the stream yourself.
From official 0.8.3
- "Fallback when binge group fails" setting. When you've set auto-play to prefer a saved binge group and the current title has no matching stream, this controls whether Nuvio falls back to a non-matching stream or shows you the stream picker instead. It appears under Playback → Auto-play in MANUAL mode. Streams with no binge group at all now correctly show the picker rather than silently doing nothing. (Credit: @skoruppa.)
- TMDB Discover exclusion filters for collections — build catalogues that exclude particular providers or attributes, not just include them. (Credit: @halibiram.)
- A reset button on the subtitle-delay overlay — one press returns the delay to zero without having to spin it back by hand. (Credit: @tapframe.)
- Provider credentials sync across your clients — sign in once and your provider setup follows you to your other devices. (Credit: @tapframe.)
- Media-key support widened —
MEDIA_PAUSEandMEDIA_STOPremotes are now handled in the player. (Credit: @skoruppa.) - The libmpv engine shows a buffer indicator, and your last-selected library list is remembered between visits. (Credit: @skoruppa.)
Redesigned
The player's redesign is essentially complete. The rest of the app's visual refresh is well underway — most screens are already on the new dark look — but it's still landing screen by screen, so you may still come across the odd surface that hasn't caught up yet.
The in-player experience, rebuilt end to end
The whole player was redesigned: a new control chrome that blends a tvOS-style layout with Material 3 Expressive motion, a single monochrome panel system with one consistent focus language, rebuilt overlay panels, and richer stream details at a glance.
- New controls. Title or logo bottom-left; a tidy cluster of round icon buttons — Info, Stats, Audio, Subtitles, Sources — with a More chevron holding Speed, Aspect, external player, engine and report. A labelled pill row (Play/Pause, Start over, Episodes, Next episode) sits alongside.
- New scrubber. A hairline bar that grows to a chunkier track and thumb on focus, with elapsed time on the left and remaining time on the right.
- One panel language for Audio, Subtitles and Sources. All three now open as compact dark panels anchored above their button, sharing one look: a small header, two-line entries with the key details separated by dots, a tick on what's selected, and a solid white highlight on whatever you're pointing at. The audio panel keeps its full delay-and-gain editor. Subtitles are now a single flat list — Off plus every built-in and add-on track — instead of the old drill-down, with the full style editor kept behind one toggle. Source rows read
add-on — quality — release groupwith asize · audioline beneath (e.g. "StremThru Torz — 4K DV HDR — CiNEPHiLES", "75.7 GB · TrueHD Atmos 7.1"). - Controls that respect letterboxing. On scope-ratio films (2.35:1 / 2.39:1) the progress bar now sits on the bottom edge of the picture, with the times and buttons in the black bar below, instead of floating across the boundary.
- Smaller touches: controls now stay up for 8 seconds instead of 3, Start over starts from 0:00 rather than seeking while paused, the title logo replaces the text title where one is available, and the pause overlay (the metadata and cast card shown when you pause) is now off by default — the toggle is unchanged if you'd already turned it on.
A consistent dark look across the rest of the app
Everything outside the player was re-skinned to match. Rather than list every screen, the highlights:
- Home got a full re-skin — quieter monochrome badges and chips, a white progress hairline on Continue Watching cards, a designed "no artwork" placeholder, and a dark sidebar with a clean white-pill focus. Text that could clip at larger interface scales was fixed along the way.
- Details and episodes picked up the same small section headers and white-pill focus, with white (not coloured) progress fills.
- Every dialog and pop-up — resume, title actions, poster and list pickers, the in-player Speed and More menus, and the library and consent dialogs — moved onto the same dark panel with clean rows and proper selection ticks. Disabled actions now dim in place rather than being skipped over, keeping remote navigation predictable.
- Settings were rebuilt in the same dark monochrome style, and the redundant Settings Style chooser was removed so settings use one consistent layout everywhere. The one deliberate splash of accent colour that remains is the Donate button on the Supporters screen.
- Fork branding now replaces the upstream wordmark across the "Who's watching?" profile screen, About, the sign-in screen, Supporters, the splash screen and the web configuration pages. The NUVIO name is kept.
- The stream-loading screen was tidied so the source and filename always sit cleanly below the artwork and read clearly over any backdrop, and the logo no longer jumps as that text appears.
As part of going monochrome, theme accent colours no longer tint most surfaces, so the Theme picker's influence is now limited by design.
Improved
Lossless TrueHD/Atmos now starts cleanly
If you play TrueHD/Atmos remuxes over passthrough, you'll know the signature: audio racing ahead on a cold start, replay or episode change, the position jumping forward, a hiccup or two, and playback visibly correcting itself around the twelve-second mark. The cause turned out to be the content: lossless audio compresses silence so well that the quiet opening of a title was being consumed far faster than real time, sprinting several seconds ahead. Audio delivery is now paced against the playing clock so that sprint can't happen — on any title, silent opening or not. Cold starts, restarts from the beginning and binge transitions no longer storm, and the start hold releases in tens of milliseconds instead of about a second and a half, so audio also starts roughly 1.4 seconds sooner.
You may still notice a single brief (~3-second) pause around the ten-second mark on some starts — that's the audio hardware re-syncing its internal clock, and it isn't reachable from the app on current evidence. On titles with silent openings, first audible sound waits on the content plus that one-time hardware spin-up — that's the title, not buffering.
Finding a source to play is faster
Picking the best stream to auto-play used to wait for every add-on to answer, so one slow add-on (measured at 6–11 seconds while returning a handful of streams) set the pace for the whole thing. It now prepares playback as soon as your Stream Selection Timeout is reached and works with whatever has arrived — typically bringing "finding best source" down from about 12 seconds to 3–5. Your faster sources are unaffected; only the trailing slow one is dropped from the wait, and auto-play still selects by your quality preferences.
It's controlled by a new setting, Playback → Auto-play → "Ready faster on slow sources" (on by default). It reuses your existing Stream Selection Timeout as the cut-off, so there's nothing extra to tune; if you set that timeout to Instant or Unlimited, the setting has no effect. Turn it off to go back to waiting for every add-on. The lookahead that prepares the next episode during a binge deliberately keeps waiting for the full result, since that happens in the background while you're already watching.
Series pages show their synopsis and cast sooner
A series page used to wait for its full per-episode metadata — up to about 7 seconds of it — before showing any text at all. Now the synopsis, cast and artwork appear as soon as the main metadata is ready, and the per-episode titles and stills fill in a moment later. Worst-case series pages dropped from about 9.7 seconds to 2.5–4 seconds to first text, broadly in line with films. Nothing you interact with first — play, resume, synopsis, cast — waits on the episode data, so the page is usable straight away and simply gets richer a few seconds later. Film pages were already fast and are unchanged.
The home screen opens faster on repeat launches
The home now remembers the first screen of each row from your last session and paints it instantly on open, then quietly refreshes each row in the background and swaps in the new results a beat later. Time to the first row of real content fell from about 2.7 seconds to roughly half a second on a repeat cold start — the biggest saving is on the personalised rows that take a second or two to build server-side.
The honest limits: a first-ever launch (or a brand-new row) has nothing remembered yet and still waits on the network, exactly as before; for the first moment you see last session's content before the refresh lands (watched ticks and progress are always live, never cached); and only the first page of each row is remembered, so scrolling deep still loads more as you go. As a bonus, the rows you put at the top are now the first ones loaded, so moving your quicker rows up makes the whole home fill in faster.
Sharper artwork at every interface scale
Full-bleed images — the home hero, detail backdrops, the loading backdrop — previously mixed the unscaled screen width with the scaled density, so they under-fetched below 100% (visibly soft heroes) and over-fetched above it. They now decode at exactly the size they're drawn at any interface scale from 85–115%, so heroes and backdrops stay crisp. Title logos also fetch at full resolution now, removing a slight upscale on their edges.
Fast-forward and rewind at a controllable speed
Held seek was far too fast — it ramped to 60-second jumps about a second into a hold and then stayed there. The ramp now follows how long you've actually held the key: a tap moves 10 seconds; a hold moves in 10-second steps for the first three seconds, then settles at 20-second steps. It's consistent across all three surfaces — the D-pad with controls hidden, the FF/RW media keys, and the focused progress bar.
The playback stats overlay, rebuilt
Stats are grouped into titled sections — Source, Video, Audio, Network, System — with rows showing the add-on and the debrid service or library behind the stream. Long filenames scroll instead of truncating, and the panel now fits the screen even with Dolby Vision's extra rows. A separate Audio Chain Claims diagnostic shows exactly what your TV and receiver are advertising, which makes quick work of "why isn't this bitstreaming" questions.
From official 0.8.3
- Selecting an add-on subtitle no longer rebuffers. The whole add-on-subtitle pipeline was reworked: subtitles now arrive progressively and attach through a hot path that leaves ExoPlayer's buffer intact, instead of re-preparing the media source and wiping it. On a high-bitrate remux that used to mean a visible stall on every subtitle change; now it's seamless. The legacy path is kept only for formats the hot path can't take (ASS/SSA with libass). Fast startup is now the only mode — the old "subtitle startup mode" chooser has been removed. (Credit: @halibiram, @skoruppa.)
- Add-on subtitles no longer carry over to the next episode. An auto-selected subtitle from one episode could stick onto the next; the selection now resets per episode and honours your explicit choice within one. Several subtitle race conditions around progressive arrival were closed at the same time. (Credit: @halibiram, @supergera13.)
- WebDAV playback auth is normalised. Credentials embedded in a stream URL are now converted to a proper Authorization header, and that header survives cross-host redirects (common behind reverse proxies) — so WebDAV and library streams that used to lose auth on a redirect now play. Credentials are also kept out of the logs. (Credit: @jvz-devx.)
- Playback stutter when marking episodes watched is gone — the watched-history write no longer competes with the playback thread. (Credit: @skoruppa.)
- Faster, smoother home and stream screens — the classic-view gradients, card depth and backdrop transitions were optimised, and the image memory cache now sizes itself to the device. (Credit: @skoruppa, @tapframe.)
- WebVTT and sidecar subtitle parsing improved — cue positions are normalised once at parse time rather than every render tick, multi-line cues and exact end times are preserved, and metadata/timestamp parsing is more robust. (Credit: @halibiram.)
- Search no longer hangs on a stale query (NuvioMedia#2917), and short-form manifest extras are honoured when parsing catalogue descriptors (NuvioMedia#2427). (Credit: @halibiram.)
Smaller improvements
- Continue Watching fills in faster on a cold start — watch history refreshes when the app comes to the foreground, and marking something watched shows up immediately rather than needing a restart.
- When a display-mode switch fires mid-start, the audio output is released cleanly before the switch and restored during the settle window — removing the brief burst of recovered audio errors that was also the fragile moment for passthrough. No cost to start-up time.
- Changing HDR format mid-session now applies live, with a fast decoder swap instead of a full rebuild.
- The next episode is predicted and pre-downloaded correctly, so the prepared stream is the one your press actually chooses; a deliberate next-episode press switches immediately, while unattended auto-play keeps its three-second cancel window.
Changed
Dolby Vision: one misleading setting removed
Preserve DV mapping (DV7 → DV8.1) is gone from Video & DV settings. Your picture looks exactly the same: whatever it was set to, playback already took the standard 8.1 conversion path — the option was never reachable through the library interface Nuvio uses, and testing against the library author's own files showed the "preserved" path would have been the worse choice for streaming anyway. Two Advanced conversion-mode descriptions were corrected at the same time; leave that picker on None unless specifically instructed. All Dolby Vision handling modes, DV5 conversion and Profile 7 playback are unchanged.
Smaller changes
- New launcher icon and banner — fork-local artwork, so this build is distinguishable from an upstream install at a glance.
- Subtitle startup mode chooser removed (official 0.8.3) — fast startup with progressive add-on subtitles is now the only path, so the old three-way mode setting is gone. The fork's own Addon subtitles master toggle is unchanged.
Fixed
Trakt stays linked for a week, not a day
Fork users were being logged out of Trakt roughly every 24 hours, forced to re-link, and watches near the boundary weren't scrobbled. Trakt actually issues seven-day sessions, but the app was capping each one at 24 hours and then attempting a token refresh that can't succeed from this fork — the inherited API credentials are no longer accepted for refreshes, and registering fresh ones is now behind Trakt's paid VIP tier. Each doomed daily refresh then wiped a session with six healthy days left. The app now trusts the lifetime Trakt grants and retries once before ever dropping a session, so a single flaky response can no longer log you out. Expect one last logout on the old daily cycle, then weekly re-links from there. Truly seamless refresh isn't possible without valid API credentials — if that changes, so will this. (Official 0.8.3 lands the matching upstream seven-day-lifetime fix, credit @halibiram; the two agree.)
Honest playback diagnostics
- The diagnostics Audio Path row could show a dash on some devices, or worse, quietly carry over the previous stream's answer. It now resets for every stream and can work the answer out itself if the usual signal never arrives.
- When the app converts audio to AC-3 for your receiver, both the diagnostics card and the stats overlay now say AC-3 transcode rather than the misleading "Passthrough (AC-3)".
- DTS-HD streams now read as DTS-HD (which covers both MA and HRA) instead of presuming MA — and the player's top-left audio chip reads the codec from the live playback format, so high-definition DTS tracks are labelled correctly rather than shown as plain DTS.
Smaller fixes
- The "New Episode / New Season / Next Up" corner badge on Continue Watching and Upcoming cards no longer washes out over bright artwork — it stays dark and readable on any card.
- Home hero text no longer clips at larger interface scales.
- The stream-loading screen no longer collides its own text with large title artwork.
- Clean TMDB title logos in the player are no longer oversized.
- The Run device assessment card and the MAT toggle's subtitle were tidied — modest rounded corners, and no more truncation on a TV.
From official 0.8.3
- A stale video id on in-progress Continue Watching items is fixed, so resume points to the right episode.
- "Time left" copy on cards is normalised, and an "Unknown" label now shows for undefined subtitle-language codes instead of a raw code.
- A crash caused by a Tizen build corrupting profile settings is prevented (defensive; not fork hardware, but folded in with the merge).
- Stream badges no longer honour a server's cache TTL, so freshly resolved streams show their real badges.
- Hungarian and Spanish (including LatAm) translations were completed and updated. (Credit: translators named below.)
Known issues
- Occasionally a Continue Watching item can start a different episode from the one shown on its card. Under investigation.
- A stream scrape that dies before ranking can leave a small persistent spinner on the details hero (cosmetic).
- Some stream lists show duplicate identical source rows (no upstream de-duplication yet).
- The notification icon renders as a tinted silhouette on some Android versions (platform behaviour).
- The player's top-left metadata chips may not appear on the very first controls-raise of a session; they populate from the first automatic raise onward (self-heals).
- A one-frame flash at 100% can appear on cold start before your saved interface scale loads (cosmetic).
- The remaining small TrueHD start quirks are described under "Lossless TrueHD/Atmos now starts cleanly" above.
Install
Sideload via ADB or a file manager. This is a personal test build with the application ID com.nuvio.tv.test, so it installs alongside official NuvioTV rather than replacing it.
Licence and attribution
GPL v3.0. All upstream copyright headers, licence text and developer attributions are preserved; no licence text was removed.
- Upstream is NuvioMedia/NuvioTV, whose player, audio sink, renderer, tracking and settings plumbing this work extends. The progressive add-on-subtitle pipeline, WebDAV auth normalisation, credential sync, and the 0.8.3 subtitle and playback fixes folded in here are upstream's work. This fork is not affiliated with or endorsed by the NuvioTV project — please do not report issues from this build to upstream.
- The app-side MAT packer is derived from Kodi's
CPackerMAT(Team Kodi / Hendrik Leppkes), and the wire packing mirrors Kodi'sCAEPackIEC61937— both GPL-2.0-or-later, compatible with this project's GPL-3.0, and credited in the relevant file headers and commit messages. IEC61937 burst parameters were source-verified against FFmpeg'sspdifenc(LGPL 2.1+); no FFmpeg code is reproduced. - The per-format audio model — one switch per format, phrased as a receiver capability, with DTS and DTS-HD split — follows Kodi's
audiooutput.*passthroughsettings, as does the label wording. No Kodi source code is used. - Source badge artwork is from leonevz/Elite-Badges.
- Dolby Vision conversion uses libdovi (quietvoid/dovi_tool), MIT-licensed. No libdovi code is reproduced in these changes.
- Thanks to the users whose reports defined these problems — particularly the device-by-device accounts of MAT silence and the daily Trakt logouts.
Contributors
Upstream authors whose work is included in this build: @tapframe, @skoruppa, @halibiram, @supergera13, @jvz-devx, and the translation and localisation contributors for the Hungarian and Spanish updates.