An incredibly large SIMKL library no longer crashes the app on sync, and this release also carries everything from v8.5: real Dolby Atmos passthrough, a disk cache that stops eating your Apple TV, wedged panels that recover without a reboot, and a pile of sync fixes. Full breakdown below.
🧯 Huge SIMKL libraries no longer crash
If your SIMKL account holds a very large library, connecting it could crash the app constantly — the sync simply ran the machine out of resources. The SIMKL code itself hadn't changed, so this is about surviving the size:
- Memory. The whole library was being parsed into a heavyweight object graph several times its own size — the single biggest allocation of the sync, enough to be killed by the system on a 3 GB Apple TV before a single title imported. It now decodes straight into lightweight structs, the same way the Trakt sync always has.
- Storage. Your watched history and library are the two things that could push the app's settings store past its ~1 MB hard limit, where tvOS aborts the app outright. Both are now compressed on disk (about 10× on real data) and read back transparently — and if an install is already stuck in a crash-loop from an oversized blob, the app now shrinks it at launch before anything else runs, which breaks the loop.
- Responsiveness. The heaviest part of the sync used to run on the main thread; on a large import that was seconds of a frozen app, which the system watchdog kills. It now runs in the background, exactly as the Trakt sync does.
Nothing changes for a small library — this is free unless your library is big.
🔊 True Dolby Atmos passthrough
The last release got Atmos recognised; this one actually passes it through on MKV. The old sample path decoded Atmos to PCM, so a receiver never lit up. There is a new direct path that takes the selected E-AC-3 / AC-3 track, re-muxes it to fragmented MP4 and hands it to AVPlayer as Dolby MAT 2.0, including the JOC complexity index that FFmpeg's muxer leaves out. Video stays on the frame-accurate sample layer and is kept locked to the AVPlayer audio clock.
- On by default, and free when a title isn't Atmos — the gate only fires for E-AC-3/AC-3 tracks the file or release name declares Atmos, on an HDMI route. Any failure quietly restores normal audio.
- Profile 7 Dolby Vision is brighter by default now (except on the 2 GB A8), fixing P7 rips that played only the dark HDR10 base layer. Maximum Fidelity still forces it.
🎞️ A calmer picture
- Match frame rate is actually honoured. With it off (the default) the app keeps your panel's current rate and changes only dynamic range, avoiding the 60↔24 renegotiation that some panels answer by going grey.
- A wedged panel can now be rescued with triple-⏯, or remotely over the network, even with no player open.
- ⏯ always means play/pause — the "skip intro while paused" shortcut that made pausing take two presses is gone.
- Changing speed while paused no longer restarts playback. Auto-advance always picks the best link. External players return you to Home when they finish.
- Subtitle tracks are no longer capped at 25 per add-on, and a slow episode switch can't hijack the session back to the previous episode.
💾 The cache stops eating the disk
- The storage floor is raised from 1.5 GB to 4 GB, re-checked every five seconds. Full-file mode now stands down rather than filling the disk, and if free space can't be read the app refuses to cache at all instead of gambling on an unbounded download.
- Cache stall timeouts cut from 25/20 s to 12 s, so playback fails over cleanly before the decoders' own timeout kills the read — this is the "most sources just fail" fix.
- Add-on request headers now reach the origin server, fixing 403s from header-gated CDNs.
🔄 Sync that stays put
- Pending edits are tracked per profile, so switching profiles mid-sync no longer drops what the previous one had queued.
- A sync row with no timestamp can no longer retire a live Continue Watching episode.
- The library push won't delete keys it just uploaded; a stale background load can't repopulate a store you cleared.
- AllDebrid keys are validated properly (bad keys were reported as good), and Real-Debrid token refreshes are serialised so they can't invalidate each other.
🎨 Screens and settings
- New language pickers cover the full ISO 639-1 set rather than twelve fixed languages.
- Diagnostics can be captured on Release builds now, behind a toggle.
- Light themes (White/Lavender/Mint) no longer hide white-on-white labels and switch knobs.
- Home reseeds its hero when the source changes, Next Up refreshes hourly so a newly-aired episode appears without a relaunch, and Detail shows an "N episodes left" / "Airs in…" read-out.
- Mark an episode watched from its Continue Watching card.
🔧 Under the hood
- The in-app torrent/magnet helper can no longer be pointed at arbitrary URLs, is capped at eight live torrents, and its range handling follows RFC 7233 instead of returning broken 206s.
- IPAs are built with
make-ipa.sh, which now trusts the compiler's own exit status instead of a timestamp heuristic.
Which IPA?
OrivioTV-V9.Sideloadly.ipa— updating an existing sideloaded Orivio. Keeps the historical bundle id, so it replaces in place and your library, progress, add-ons and profiles survive.OrivioTV-V9.Sideload.ipa— installs alongside as a separate app with its own data.
Both are the same build and both get re-signed by Sideloadly / AltStore with your own Apple ID.