github ysosrs123/NuvioTV-Fork 0.7.20-beta-nt1
Nuvio-test 0.7.20-beta-nt1

one month ago

Nuvio-test 0.7.20-beta-nt1

This release is dominated by speed. Nearly every wait in the app got shorter, and every claim below was measured on-device: pressing play reaches the player up to five times sooner, 4K remuxes open about 2.3 seconds faster, a "next episode" press starts about 2 seconds sooner, and profile switching no longer gets slower the longer the app has been running. It also folds in the full upstream NuvioTV 0.7.20-beta release.

All timings were measured on a Xiaomi TV Box S 3rd Gen (S905X5M, 2 GB RAM, Wi-Fi), and a Homatics Box R 4k Plus (S905X4, 4GB RAM, Ethernet) into an LG C9 via a HW-Q800F over eARC.

Using 'Auto Play Best Quality' and Comet https://comet.feels.legal/configure but with TB Instant. 1GB Fibre Internet.

Absolute times vary with network conditions, add-on quality, and source quality.

Upstream: NuvioTV 0.7.20-beta

The full upstream release is merged. Credit to the upstream authors — see the upstream release notes for their own account of these changes.

Playback

  • Transient system interruptions no longer disturb playback: a MediaSession teardown feedback loop on momentary focus loss is prevented, playback no longer auto-resumes unexpectedly after transient lifecycle events while paused, and a short debounce absorbs spurious pause events from system overlays and crashing system activities. (halibiram)
  • Automatic frame rate gains a new first-line detection method: an OkHttp range probe with adaptive sparse tail probing for legacy MP4s, connection pooling, enforced 206 range responses, bounded copies, and higher timeouts for high-latency connections. (halibiram)
  • SurfaceFlinger HWC overlay and VSYNC timing optimisation, applied as the video surface configures. (halibiram)
  • The player's OkHttp client is now reused (with keep-alive) by the OpenSubtitles hasher. (halibiram)
  • Critical fix: a stuck external-player auto-next loader, and auto-play being blocked after backing out of a handoff. (Laskco)

Interface and data

  • Live search while typing — parity with Mobile/Desktop — with shimmer placeholders, a clear button and live search history; the cloud library is now searchable, with Refresh moved in line with the Saved/Cloud tabs. (Laskco)
  • Title metadata now refreshes according to the addon's own declared Cache-Control max-age, without needing an app restart. (skoruppa)
  • MyAnimeList rating from the MDBList API, with the official MAL badge, ordered before the Rotten Tomatoes pair. (guuilp)
  • A batch of crash fixes from Sentry reports: DataStore file pre-creation against ENOENT, a MediaStore API-29 guard, cookie-jar concurrent-modification protection, a foreground-service exception catch, a year-regex init NPE, a missing-class stub, a back-stack guard, and deduplicated collection rows. (skoruppa)
  • Grid view card consistency, "All" tab reshuffling fixed by waiting for all catalogs, and aligned loading indicators across Discovery, Grid View and Folder Grid View. (skoruppa)
  • Duplicate fetch response header values are preserved in the plugin runtime. (Sanjays2402)
  • TMDB language normalisation for Latin American Spanish trailers. (ValentinBrizuela)
  • Right-to-left layouts: elapsed/total time now reads "00:30 / 48:30" the right way around, and several number formats (including hours) render correctly. (haveAnIssue)
  • Czech, Hebrew, Portuguese (Brazil and Portugal) and Slovak translation updates. (SnaexCZ, haveAnIssue, danilopagotto82, mmsw91)

Fork-side notes on the merge

  • Meta caching: both designs composed. Upstream's per-entry addon-declared TTL now lives inside the fork's bounded, access-ordered LRU caches, whose 45-minute internal ceiling caps longer declarations — net per-entry lifetime is min(declared max-age, 45 min). The fork's negative cache (a genuine miss no longer re-runs the full addon candidate loop for five minutes) and the fork's 20-second per-request addon deadline are both preserved; upstream's raw calls would otherwise have fallen back to the shared client's 60-second read timeout, letting one dead addon hold a coroutine for a full minute.
  • AFR preflight deadline: the fork's 15 s absolute deadline is kept over upstream's new 12 s total timeout. Upstream's own probe chain is 10 s OkHttp + 10 s NextLib + 5 s extractor, so a 12 s cap can truncate its own fallback — and upstream's own test asserts a 15 s worst-case probe budget. Upstream's new probe chain runs on the libmpv engine path; on ExoPlayer this fork keeps its instant cache-only preflight, with the frame rate otherwise read from the track format after prepare.
  • Upstream's AFR probe client derives from the playback client, so it now benefits from the fork's pre-warmed TLS session — and its requests appear in the fork's NET_CONN connection log, which matters when reading those lines.
  • Player loading-status messages now default to hidden until settings load (upstream fix for messages flashing when disabled).
  • One accepted cosmetic regression: aggregate meta-failure detail strings are now upstream's plainer inline versions (upstream deleted the normalised-message builder).
  • Upstream's new release-automation workflow is manual-trigger only and will not fire on pushes to this fork.

Improved

  • Pressing play reaches the player 2–5× sooner: ~1.7 s → 0.3–0.7 s. Nuvio now does the heavy lifting while you're still browsing instead of after the press — it searches for sources, picks the winner and fetches your debrid link in the background. Measured per step: choosing a source 374 ms → under 1 ms; getting a playable link ~1,050 ms → ~34 ms. This works from a title's details page, from an episode you rest on in the episode list, and now from Continue Watching too — that row skips the details page entirely, so it previously always searched from cold (search after the press: 1,254–2,351 ms → 2 ms). If you press play before the background work finishes, playback simply joins the search in progress — the worst case is the old behaviour, never worse.
  • 4K remux streams open about 2.3 seconds faster. Two network fixes: the file-index read at stream start was downloading 4.8× the data it needed (9.2 MB fetched for a 1.9 MB read — now it fetches exactly what's asked for), and the connection to the content server now opens the moment you press play instead of ~0.7 s later when the player finishes building (connection + first data: 1,725 ms → 999 ms). Time to first frame on an ~82 GiB / 96 Mbps remux went from 9.3 s to ~4.7 s across the sessions this work landed in, of which ≈2.3 s is directly attributable to these fixes.
  • "Next episode" starts about 2 seconds sooner when you press it. The next episode's link is ready before the countdown even starts, and the countdown never noticed the press was yours — so a deliberate press was followed by three seconds offering to cancel the choice you just made. It's now 1 second on a press (kept, not removed, so you can still read which source was picked); automatic transitions keep the full 3 seconds.
  • Repeat plays of a title start much sooner, reliably. The app remembers a title's frame rate so it can switch your display before playback instead of after — but that memory was filed under the CDN server the file came from, and debrid services hand out a different server almost every time, so the speed-up only worked when the same server happened to come back. It's now filed under the file itself and hits every time. (A brand-new episode still can't benefit — the memory is per-file and doesn't survive an app restart.) Display-mode choice also now prefers a clean cadence over a resolution match, so judder-free beats pixel-perfect.
  • Smoother home-screen scrolling. Row items were re-rendering on every scroll tick during a fling; they now only re-render when something actually changes. Measured: re-renders per frame roughly halved (~4.8 → ~2.4, −49%).
  • Time to first picture — the honest version. It improves by less than the press-to-player numbers above suggest, because what's left of the wait is dominated by opening the video stream, the display's refresh-rate switch, and decode spin-up, which this release doesn't touch. And the browsing-time saving equals how long you actually browse: press play instantly and you save almost nothing.

Getting the most from these changes

Auto Stream Selection — anything except "Manual". The pre-scrape, pre-rank and pre-resolve work that makes pressing Play feel instant is skipped entirely in Manual mode: the ranker returns immediately, so no winner is chosen and no debrid link is resolved ahead of time. You keep the faster source list — the scrape still runs — but you hand back roughly 1.4 seconds per press, as both the ranking and the link resolution move back onto the critical path. "Best quality" is the recommended setting; any of the automatic modes preserves the benefit.

The next-episode saving applies when you press. Two different things happen at the end of an episode, and only one of them changed:

  • Press the next-episode button in the player controls, or the next-episode card — this now starts roughly two seconds sooner.
  • Let it play out and confirm at the end-of-episode prompt — unchanged. That path rebuilds the player from scratch and never had a countdown to shorten.

So if your episodes usually end by playing out rather than by pressing, this build will not feel different. Turning Auto-play Next Episode on keeps every transition on the in-app path and avoids the player rebuild entirely — at the cost of episodes continuing without asking. A change that delivers the same benefit without auto-continue is planned for the next build.

The image-cache change needs no setting. The poster and artwork cache now sizes itself from free disk space instead of a fixed ceiling, and recalculates at every app start. With plenty of space free it settles at the 2 GB ceiling; on a nearly-full device it holds a 256 MB floor. Nothing to configure, and it adapts as your storage fills.

Fixed

  • Profile switching no longer slows the whole app down over a session. Every previously-selected profile's home screen was staying alive invisibly in the background, still loading catalogues — network loads per switch grew 1, 3, 5, 7, 9, so by the sixth switch 13 loads ran where 1 was needed, and it never recovered without restarting the app. Now flat at 1 load per switch; a warm switch to fully-loaded fell ~1,755 ms → ~1,160 ms (−34%), with the benefit growing the longer the session had been running.
  • A broken stream can no longer change your display's refresh rate. One source served a 30-second 720p error clip in place of an episode, reporting 1 frame per second — and the panel was dutifully switched from 59.94 Hz to 50 Hz for it, costing a mode switch, a settle pause and an exit blank for content that was never the episode. Implausible frame rates are now ignored and the display is left alone.
  • The Device Settings Assessment's speed sweep no longer misreports. Rate-limited cells were being reported as slow measurements — they're now discarded; a refused cell now leaves a visible row explaining why instead of posing as a measurement of zero; refusals are retried once; and the budget gate shows its arithmetic.

Changed

  • The poster/artwork cache now sizes itself from your free storage — 10% of free space, kept between 256 MB and 2 GB — instead of a fixed 8 GB ceiling. (The fixed ceiling had also silently switched off the image library's own free-space-aware sizing; the two settings are mutually exclusive.) It now adapts as your storage fills, and low-storage boxes are no longer at risk.
  • Holding the D-pad scrolls the home screen at a readable speed. The constant-velocity drag dropped from 3200 to 2000 dp/s (−37.5%) so rows are legible as they pass. Feel change only; single-tap stepping is unaffected, and other screens keep the old speed.
  • Less data per stream open: the synchronous start-up read shrank from 1 MB to 256 KB — 768 KB less per open. Recorded as a bandwidth saving, not a speed one: measurement showed the read is dominated by a fixed first-byte wait, and shrinking it saved only ~40 ms.
  • Recommended setting — Frame Rate Matching: "Start" rather than "Start & Stop". On Start & Stop, backing out of a title restores the UI display mode, which tears down the HDMI link — HDCP and CEC renegotiation measured at ~4.8 s of blank screen on a TV + soundbar chain — and costs roughly 2 s extra on every play. On Start, the display holds the film's rate through the UI and you get one blank per app exit instead of one per title.

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; this fork is not affiliated with or endorsed by the NuvioTV project — please do not report issues from this build to upstream.

Don't miss a new NuvioTV-Fork release

NewReleases is sending notifications on new releases.