github VortXTV/VortX v0.4.0-beta.17
0.4.0 Beta 17 - Resume recovery, binge playback, skip controls, and Android fixes

2 hours ago

0.4.0 Beta 17 - Resume recovery, binge playback, skip controls, and Android fixes

Install this over any earlier build. Beta 17 brings the completed fixes since Beta 16 to Apple TV, iPhone, iPad, Apple Silicon Mac, Android phones and Android TV. Apple build 253; Android version code 238. These are fresh packages from the reviewed source, not repackaged executables from an older beta. All Beta 16 playback repairs are retained.

What's new

Automatic intro and credits skipping, with a countdown you can cancel. Apple and Android now offer Off, 5, 10, 15 and 30 seconds in Playback settings. A new, unset preference defaults to five seconds; an existing explicit Off stays Off. The prompt supports immediate Skip and an X to cancel automatic skipping for that segment. On Android TV, Left/Right selects Skip or Cancel. The countdown follows actual playback progress: time spent paused, buffering, seeking or outside the active player cannot consume it. Episode and source changes cannot trigger a leftover countdown. The same rules cover supported intro, recap, credits and preview segments.

Watch-based suggestions respect the active viewer. The Because You Watched rails now build from history tied to the current account/profile and the exact history publication. Guest history keeps its own provenance. Switching accounts, refreshing the same history slot, or receiving a late response cannot seed the next viewer's recommendations with the previous viewer's resident history.

What's fixed

Apple resume recovery no longer repeatedly reopens an unavailable saved position. The diagnostic exposed a concrete failure chain: a saved resume point failed to establish playback, and later replacements kept inheriting that failed seek. The failed target is now retired through the replacement's entire admission period, not just when the retry starts. Same-episode source changes can retain the protected Continue Watching position without treating it as an instruction to seek there again. A deliberate seek takes ownership, and another episode cannot inherit the old episode's resume state. Recovery capture and engine handoff happen before outgoing-player teardown, so an old item's callbacks cannot reclaim the new load.

A real first frame at 0:00 is accepted. AVPlayer startup checks no longer require a positive timeline position to recognize an actual first frame. Asynchronous DV/remux attachment remains monitored rather than losing its startup owner. These changes target false startup failure and replacement loops; they do not turn every buffering event into a forced restart.

Android source and player replacements preserve Play/Pause intent. Each replacement owns its engine, callbacks and lifecycle. An outgoing player cannot stop the accepted replacement, overwrite its buffering state or resurrect an older preparation. Automatic recovery and source changes preserve a viewer pause. Next-episode preparation has one cancellable owner, bounded retries and exact episode identity; profile, account or title changes cannot publish an old warm result into the next request's cache.

Continue Watching and episode navigation use the intended episode. Android detail targeting distinguishes current progress, the next ordinary episode and an explicitly selected special. Unwatched season-zero specials no longer outrank normal progression. TV episode Up has an explicit previous-row/season boundary. Custom anime and other add-on content types retain their own detail routes instead of being coerced to movies. Source language options come from the actual source list.

Audio and subtitles can arrive independently. Track restoration waits for each inventory separately, rather than treating audio arrival as proof that subtitles are ready. A late inventory cannot replace an explicit track choice or subtitle Off. Apple and Android add-on subtitle requests now carry the selected filename, supplied video hash and 64-bit file size where available. A malformed individual subtitle row does not discard the other results; the older ID-only request fallback is limited to HTTP 404/405. The optional add-on-subtitle preference respects manual Off and Forced selections. Media3 sidecar attachment preserves position and Play/Pause intent and deduplicates repeated URLs.

Trakt Continue Watching artwork and Apple TV Top Shelf keep valid images. Progress-only updates no longer erase existing artwork. Artwork lookup and cache writes are scoped to the current viewer; a late fetch from an old account cannot publish into the new account's snapshot. Private Top Shelf image handling bounds downloaded bytes and redirects and does not expose private request credentials through artwork requests.

Batch downloads recover when a metadata request is displaced. The coordinator distinguishes the episode it requested from metadata currently occupying the shared slot. A displaced request can be reasserted within bounded deadlines, instead of mistaking another title's metadata for its own or waiting indefinitely.

Optional Android watched-download cleanup is recoverable and stays Off by default. Automatic reclamation requires an exact durable watched receipt and complete release of the outer player's resources. Files and index updates follow a recoverable transaction. Corrupt, incomplete or mismatched indexes cannot authorize deletion, and engine-backed history without a durable per-video receipt fails closed. A watched checkbox alone is not enough to delete a file still in use.

The web player's source list and skip data match their real responses. Large source lists are paginated without changing source identity, add-on order, group or ranking. Refresh requests coalesce; stale title, episode and source callbacks cannot redirect a newer selection. Skip parsing accepts the live keyed millisecond response while preserving intro, recap, credits and preview categories. These source changes are included in the repository; the website's separate deployment status is not inferred from a native app release.

Android releases use their own packaged version code. Both APKs and the AAB are checked against their packaged manifests before version evidence enters the signed-release provenance. Android update entries use that Android code, not the Apple build number. Feed augmentation distinguishes the immutable active receipt from the public route's inherited older Android entry, while retaining checksum, signer, source identity and rollback checks.

Retained from Beta 16

The shared DV rolling-buffer allocation, producer/player forward-buffer coupling, accepted-engine source replacement, viewer-owned Apple TV keep-awake handling, empty-source settlement, resume/manual-seek separation and quieter preview-contribution checks remain. See the Beta 16 notes for the full preceding list.

Android

This beta includes a new signed Android build. Both variants contain the phone and Android TV interface and all three shipped ABIs:

  • VortX-0.4.0-full-mpv-universal.apk: the sideloaded build with VortX/MPV and Media3 fallback.
  • VortX-0.4.0-play-media3-universal.apk: the GPL-native-free Media3 build.
  • VortX-0.4.0-play-media3.aab: the corresponding Play distribution bundle, not an installable APK.

Android TV already has download management through its Downloads destination. This release does not claim that Android is visually or functionally identical to Apple in every respect. Manual detail-page Trakt check-in, the remaining parity inventory, physical remote journeys and broader visual work remain separate follow-ups.

Verification and remaining limits

The completed source batch passed independent review, frozen-source tvOS/iOS/macOS builds, Apple playback/skip/history regression checks, and 2,675 Android unit tests across Full and Play. Native-package checks cover engine presence, architecture and JNI exports across the three Android ABIs, and Play's GPL-native exclusion. Publication additionally checks exact tagged-source packages, production Android signing, package versions, checksums and update-feed receipts.

This is a beta with specific repaired failure paths, not a promise that every field playback failure is gone. Sustained DV and NNTP throughput, physical HDR/audio output, device-specific frame pacing, Android remote/process-death behavior and cross-device convergence still need fresh device receipts. The Mac/iPhone redesign and full Android visual/feature parity are not finished and are not claimed here. No stale UI branch or earlier-beta executable has been substituted for the current source.

Please test

  • Resume from Continue Watching, pause and resume, seek backward, switch source/player, and confirm the current episode and pause choice survive.
  • Start a fresh episode at 0:00 and try automatic next episode, Next and Previous, including an add-on that previously opened blank or remained reconnecting.
  • Set automatic skipping to five seconds, cancel one intro with X, and confirm it remains cancelled for that segment. Test Off and pause during the countdown too.
  • On Android, install over the existing signed build, test both engines where available, and navigate seasons, episodes and sources with a remote.
  • Check add-on subtitles, explicit subtitle Off, Trakt artwork, and account/profile changes in watch-based suggestion rails.
  • If a playback failure remains, export diagnostics promptly with the source/add-on and the preceding action so the initiating event is retained.

Install

Apple TV. Use VortX-tvOS-v0.4.0-beta.17-ci.ipa for Full or VortX-tvOS-lite-v0.4.0-beta.17-ci.ipa for Lite. Install your usual variant through your signing service.

iPhone and iPad. Use VortX-iOS-v0.4.0-beta.17-ci.ipa. These are unsigned distribution IPAs: re-sign them using Sideloadly, AltStore/SideStore, Signulous or your existing installer. Apple installation guide and VortX install source.

Mac. Use VortX-macOS-v0.4.0-beta.17-ci.dmg. This is the Apple Silicon package, ad-hoc signed rather than notarized. Follow the Mac installation guide.

Android. Use the appropriate signed APK above. Use SHA256SUMS-android.txt and SIGNING_PROVENANCE.txt to check the packages. Apple checksums are in SHA256SUMS-ci.txt.

This beta is deliberately promoted to Latest; install and update feeds are verified separately from the GitHub label.

Don't miss a new VortX release

NewReleases is sending notifications on new releases.