0.4.0 Beta 8 - Dolby Vision startup, Usenet playback, and safer episode recovery
Install this over any earlier Apple build. Beta 8 focuses on the playback failures reported after Beta 2: Dolby Vision sources failing before the first picture, Usenet rows that would not start, and seek/recovery failures that could disrupt a binge session. This is an Apple-only beta, build 241. It retains Beta 2's fixes; Android and the broader sync and design work are reserved for the following beta.
What's fixed
Betas 3–7 were held before publication for final integration, credential protection, and the last next-episode NNTP wiring correction. This is the next published Apple beta after Beta 2. They shipped no installable release assets. Beta 8 uses a new immutable tag for the combined source after Swift and security review.
A real cause of Dolby Vision startup failure is repaired. Some HEVC files carry an incomplete container header and reveal their decoder setup inside the first video packet. VortX repaired that header but trusted the first provisional decode timestamp too early. The subsequent out-of-order timestamps made the MP4 writer reject the stream before it could publish a playable video segment. Startup now reads a bounded group of packets and repairs only the proven leading timestamp gap. Ordinary headers and established timestamps are left alone. This addresses the repeated remux failure captured in internal diagnostic (1 to 13 )on Apple platforms.
The timestamp repair preserves the playable timeline. Negative decode preroll remains in the muxed video where the decoder needs it, while the public HLS timeline starts at zero. A synthetic reproduction using the same shipped FFmpeg artifact now completes and decodes through Apple's video reader, with all 432 frames present in both the control and formerly failing cases. Audio and video retain their relative timing.
A dead remux no longer looks like healthy startup progress. Once the current remux producer reports a terminal failure, its watchdog stops waiting on stale progress. Recovery acts on that exact item and source instead of spending another startup interval holding a stream that cannot produce a picture. This does not disable supported Dolby Vision or turn normal buffering into an automatic fallback.
A short placeholder cannot claim the next episode. First-frame handling now checks the pending episode's stream evidence before committing its identity. An obviously mismatched short or undersized replacement is rejected before it can claim the requested episode. When incomplete evidence passes the existing bounded acceptance policy, the app consistently retires the old first-frame timeout instead of later abandoning a picture that already started.
Old recovery callbacks cannot take over a replacement player. Delayed checks are fenced by the active controller, loaded item, and pending episode request on Apple TV and the shared iPhone, iPad, and Mac player. A callback belonging to a previous episode cannot finish or cancel the new episode's startup.
A seek-related false ending cannot silently become the next episode. For the diagnosed mid-file EOF immediately following a seek, VortX Player now uses the duration captured before the seek and the current source's transport evidence. A qualifying single seek gets one bounded same-source reopen with its target retained. Missing or ambiguous evidence becomes a recoverable playback error, not a watched mark or an automatic episode change. Genuine near-end completion retains its normal path.
Rapid seeks fail safely instead of borrowing each other's callbacks. When one seek supersedes another on the same source, untagged callbacks from the earlier seek cannot authorize a speculative reopen. The same protection covers a cache reanchor that replaces a pending viewer seek.
Play and Pause remain your decision during seek recovery. A supported recovery preserves the latest explicit Play/Pause request, including a change made while the source is reopening. A new manual seek cancels the older recovery and releases its temporary forced pause rather than leaving the video parked.
Usenet playback reaches the correct embedded server. Native NNTP playback now sends NZB control requests to the bundled Node server's actual discovered port, not the generic native media-server endpoint that does not implement that route. Explicit playback allows a short bounded startup wait while Node is becoming ready. Unsupported local-engine combinations no longer advertise a working local NZB route; TorBox's remote Usenet resolution remains available where configured.
Stremio-style NZB mirrors and server lists are retained. Add-on responses can carry both nzbUrl and nzbUrls, plus an ordered servers list. These are preserved and validated before resolution. Add-on-provided NNTP servers keep their order. If their local setup fails, VortX tries the saved provider as a separate bounded attempt; it does not pool different accounts in parallel. Validated NZB mirrors also participate in cache lookup and source identity. This is compatibility for add-on-provided lists, not the separate multi-provider settings or NZB indexer feature.
NNTP now participates in Apple TV's next-episode preparation. The TV preload gate previously skipped every raw NZB because it tested only for a cached torrent hash. It now admits NZBs into the same bounded local NNTP and TorBox resolver while keeping uncached torrents on their existing path. Next-episode preparation and cold advance on Apple TV, iPhone, iPad, and Mac also use the bounded Node readiness wait and the uncached Usenet preparation allowance, rather than treating every NZB like an instantly cached link. The overall preparation deadline and stale-episode cancellation remain in force.
Failed Usenet taps now explain themselves. Explicit source selection distinguishes unavailable local support from an actual resolution failure, instead of silently returning without playing. Repeated Apple TV taps cannot launch overlapping NZB resolutions. A raw NZB descriptor is never handed to the video player as though it were media, and an unsupported NZB carrying torrent metadata cannot fall through into the torrent route.
The Node request contract is verified without exposing provider credentials. The regression test exercises the real client's JSON POST, discovered port, returned key, and resulting stream URL through an injected session. Keys remain one opaque query value. Credential-bearing HTTP NZB descriptors are rejected before reaching Node, while NNTP credentials remain confined to the intended private local playback path. This test does not claim a live transfer from every Usenet provider.
TorBox Usenet requests now match its documented API. NZB creation uses multipart form data rather than JSON. Both numeric and string download IDs are accepted. The download-link request supplies TorBox's documented, safely encoded token authentication; only the resulting validated playback URL reaches the player. Authenticated Usenet API calls now reject redirects entirely, preventing credentials from being forwarded to a redirect destination; ordinary media redirects are unchanged.
A failed local Usenet stream can try the next configured route for the same source. The player retains whether a link came from the add-on's NNTP servers, your saved provider, or TorBox cloud. A later failure can move from add-on NNTP to the saved provider or cloud, or from saved NNTP to cloud, within the existing bounded recovery owner. It preserves the episode and resume/transport transaction, rejects stale callbacks, and does not loop back through routes already known to have failed.
Uncached NZB requests no longer use the cached-link five-second budget during a tap or episode transition. User-selected NZBs and next-episode requests receive a bounded cloud preparation window matching the existing polling path; the next-episode pipeline still enforces its overall deadline. Cached-source fast paths retain their short budget. This does not turn an unavailable or still-downloading NZB into an instantly playable file.
NNTP hints are checked against the bundled downloader's actual parser. Malformed server hints are rejected before they can throw inside Node. TLS schemes and credential delimiters are normalized without changing the credentials. Local requests are owned by the current account's cancellation/credential lease, so signing out cannot pass an old account's result into the new session.
Verification and please test
The targeted playback and episode-state tests, a real Apple TV simulator build, and the full existing remux/AVPlayer regression harness passed before release. The new empty-header reproduction was first observed failing in the production remux path, then passed after the timestamp repair and decoded all expected frames. The release is rebuilt from the exact tagged source by the protected Apple workflow; install feeds and artifact checksums are verified before publication.
- Try the Dolby Vision title that failed in the previous beta, including starting from Continue Watching.
- Pause, resume, seek backward, and use Next. A failed mid-file seek must not mark the episode finished or jump forward.
- Try the Stremio NNTP/NZB source again, including an add-on-supplied server list. Full and Lite builds have different local-engine capabilities; an unsupported combination should now report that clearly.
- Check long Dolby Vision playback and built-in subtitles. Beta 2's subtitle protections remain included, but diagnostic 13 did not establish a new duplicate-subtitle cause, and a synthetic decode test is not a physical Apple TV Dolby Vision continuity test.
This beta fixes the concrete failure mechanisms reproduced from the diagnostics and source audit. It is not a claim that every long-playback stall, provider failure, or display-specific HDR transition has been eliminated.
Android and the next beta
Android is not attached to this Apple-only beta. Android playback and Apple-feature parity, cross-device sync and Stremio import, iPhone detail/source formatting, Mac redesign follow-up, and multi-server Usenet/NZB indexer settings remain on the follow-up plan. They are not being mixed into this playback hotfix.
Install
Mac (.dmg, easiest, never expires). Download VortX-macOS-v0.4.0-beta.8-ci.dmg and drag VortX into Applications. For Apple's one-time quarantine prompt, open it once, click Done, then System Settings > Privacy & Security > Open Anyway. Full guide: Install on Mac.
iPhone, iPad, Apple TV (sideload the IPA). Download VortX-iOS-v0.4.0-beta.8-ci.ipa, VortX-tvOS-v0.4.0-beta.8-ci.ipa, or VortX-tvOS-lite-v0.4.0-beta.8-ci.ipa. The IPAs are unsigned and must be re-signed with Sideloadly, AltStore / SideStore, Signulous, or your preferred sideloading service. No jailbreak. Add the VortX AltStore / SideStore source for updates. Full guide: Installing on iPhone, iPad, and Apple TV.
The release includes SHA256SUMS-ci.txt to verify the downloads produced by the public GitHub Actions workflow. Android packages are intentionally not attached to this beta.