Skip to content

Releases: thatcube/Plozz

2026.7.29

2026.7.29 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 29 Jul 09:29

TestFlight build 19 — 2026-07-29

What to Test:
Series detail: the hero-to-episodes transition has been rebuilt.

Please try, on a show with several seasons:
• Press Down from Play into the episodes, and Up again from a season chip.
Both directions should be one fluid motion, with the hero, logo, season bar
and episode row all moving together.
• Move up and down quickly and repeatedly. The page should never end up in a
half-finished state, and the season chips, Cast and Related should never
become invisible.
• Move left and right along the episode row, then up to the seasons. The page
itself should stay put.
• Open a show directly on an episode (from Continue Watching or search) — it
should arrive already showing the episode row.
• Check Cast and Related below the episodes, including on a show that has
neither.

Also fixed: the first season chip and the focused Play button are no longer
clipped on their left edge, and the episode rail's loading label is now
translated.

Changes:

  • l10n: translate the episode-rail loading label
  • tvOS: finish the series hero/episode-browser transition
  • tvOS: rebuild the series hero/episode-browser transition on a fixed stage
  • Align iOS episode rail with the Play target
  • Resolve episode entry and show rail skeletons
  • Open iOS series rails on the tapped episode
  • Render localized hero credit labels correctly
  • Keep iPad hero pull updates out of Home rows
  • Share pre-arrival source selection with iOS
  • Constrain Related skeleton to the rail viewport
  • Match Related skeleton and loaded rail geometry
  • Stabilize huge series rails and focus transitions
  • Choose the series source before opening detail
  • Window very large episode rails around focus
  • Keep Home hero recede smooth under heavy rows
  • Stop movie details shifting on cold open
  • l10n: record the new scan-label key in the source snapshot
  • l10n: mark the retired scan-phase strings stale
  • Stop a detail page re-laying itself out while you arrive on it
  • Build a detail page's view model once per page, not once per render
  • Give the card indicators the four fields they draw, not all 56
  • Stop the whole app re-rendering for one screen's data
  • Stop rebuilding the Home tab thousands of times a minute
  • build: localize features before main
  • fix: complete localization for settings UI
  • Say "Updating library" instead of naming a phase that hides the other
  • Load Related on movies, and size its skeleton to the real card
  • Mark a continuation on iPhone and iPad too
  • Mark a continuation on iPhone and iPad too
  • fix: restore continuation cues on Related cards
  • l10n: add reviewed Bulgarian, Finnish, Norwegian, and Simplified Chinese
  • l10n: add reviewed Hebrew, Slovenian, and Thai
  • l10n: format settings values in the app's selected locale
  • Keep the merged card and its server picker agreeing
  • l10n: preserve fragment spaces and multiline structure on import
  • docs: add structured translation correction issue form
  • l10n: add reviewed Catalan and Romanian
  • l10n: add reviewed Indonesian and Turkish
  • l10n: propagate RTL into the UIKit hero renderer
  • l10n: add reviewed Croatian, Malay, Slovak, and Ukrainian
  • l10n: mirror explicit Arabic and Hebrew app overrides
  • docs: add full and delta translation export commands
  • l10n: make full and delta translation packets reproducible
  • l10n: add reviewed Czech, German, Italian, and Swedish
  • build: prune locales removed from incremental app products
  • test: align language-picker coverage with release parity
  • l10n: add reviewed Danish, French, and Russian
  • l10n: make releaseReady equal the languages the OS actually ships
  • l10n: report corrections against the language actually on screen
  • l10n: add reviewed Dutch, Polish, and Brazilian Portuguese
  • l10n: put translation corrections one tap or scan away
  • l10n: reject translations that alter protected brands
  • l10n: report availability separately from native review
  • docs: make reviewed model translation the production system
  • ci: keep the translation importer attacks closed
  • l10n: make directional UI mirror in right-to-left languages
  • l10n: gate parallel translations through one deterministic importer
  • l10n: separate library names Plozz invents from ones the server supplies
  • l10n: audit the leaf modules, and stop showing users protocol diagnostics
  • l10n: extend the Spanish layout seed to the player and setup screens
  • l10n: seed Spanish for layout testing, and write down the trap
  • l10n: let DEBUG builds pick a language that isn't finished yet
  • l10n: fix a layout that broke on the first real translation
  • docs: how Plozz gets translated, and the gate before a language ships
  • l10n: split six English words that meant two different things
  • l10n: give translators the context they'd otherwise have to guess
  • tools: add a pseudolocalization pass to the tvOS deploy
  • l10n: make Top Shelf and the track menus follow the in-app language
  • l10n: finish CoreModels, and split copy out of the String pipelines
  • l10n: delete the dead ratchet, widen the eager rule, wire CI
  • l10n: migrate the copy the guard could not see in CoreModels
  • Fix CKSyncEngine delegate re-entrancy crash (SIGTRAP)
  • l10n: localize the permission prompts
  • l10n: clear the catalog of everything a translator can't act on
  • l10n: move plural selection out of Swift and into the catalog
  • l10n: migrate the prose the guard's new return-type rule found
  • fix(l10n): architecture review — guard blind spot, profile scoping, locale bugs
  • fix: the episode rail's opening scroll never ran at all
  • feat(l10n): finish the engineering pass — guard clean across all UI modules
  • fix: episode rail opens un-aligned, and season pages opening on "Mark as Watched"
  • feat(l10n): localize avatar categories; format skip intervals instead
  • feat: make Dynamic Type actually take effect, and extend it to the tvOS chip
  • feat(l10n): localize iOS shell and Music copy
  • feat(l10n): localize Home row headings and shared row components
  • style: +2pt on the resume chip bar, -2pt on the full-width card bar
  • style: back to the film glyph for "Go to Movie"
  • style: make the three navigation actions read as one family
  • feat(l10n): localize AppShell, Profiles, Auth and Discovery copy
  • feat(l10n): localize the in-player controls
  • style: use a stacked-play glyph for "Go to Show"
  • fix: label the episode navigation action "Go to Show"
  • fix(l10n): don't rebuild the whole view tree on a language change
  • fix: deepen the bottom card scrim so chrome reads consistently
  • feat(l10n): add the in-app language picker
  • style: translucent progress track again, dimmer resting foreground
  • fix: opaque tones for the shared media chrome, brighter at rest
  • feat(l10n): localize Settings option labels (the displayName category)
  • feat: settle the shared media chrome's white at rest on tvOS
  • feat(l10n): localize error messages, media actions, and CoreUI components
  • feat(l10n): migrate the Settings component layer (+102 strings)
  • feat(l10n): add the localization guard, and fix the bugs it found
  • fix: one shared scrim behind all bottom card chrome
  • style: shorten the resume chip's progress bar
  • style: 14pt progress bar, evenly spaced against the download badge
  • fix: pin the download badge, and stop the progress bar short of it
  • refactor: one full-width white progress bar on every browsing card
  • feat: show the white resume bar + time remaining on browsing posters
  • fix: pin the accent to a monochrome per-theme tone instead of the OS default
  • fix: scan progress bar rendered white on tvOS and blue on iPadOS
  • feat: make the scan progress panels focusable on tvOS
  • feat: real progress for share scans, and align the banner to the poster wall
  • refactor: move share scan progress from library tiles to the library page
  • feat: move share scan progress off Home into Settings + per-library progress bars

2026.7.28

2026.7.28 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 28 Jul 09:43

TestFlight build 18 — 2026-07-28

What to Test:
Related titles, cast for media shares, and a batch of metadata fixes.

WHAT'S NEW

• Related — a new rail above the cast on every movie and series page,
listing other things in your library connected to what you're looking
at. Anime pages lead with actual sequels and side stories rather than
lookalikes. Everything listed is something you own and can play.

• Media shares now have cast. A share is just files, so Plozz resolves
everything else about a title externally — cast was simply missing
from that list, which is why a show opened from a share had none while
the same show on Plex or Jellyfin had a full one.

• When you have the same title on both a media server and a file share,
the server's copy now fronts the card, since it carries the curated
record. Playback still prefers whichever copy is closest, so a local
share is still played from over a remote server.

• iPhone and iPad caught up with the TV: air-schedule badges, upcoming
episodes in the rail, and the new Related row.

WHAT TO TEST

  1. Open a few movies and series and scroll to just above the cast. The
    Related row should fill in shortly after the page opens and hold its
    space while it does — the cast shouldn't jump down when it lands.
    Everything in it should open a real page.

  2. Anime especially: a show with a sequel should list it first.

  3. If you use a media share, open something from it and check the cast
    row is there. If you have the same show on a server too, the page
    should show the server's version.

  4. A currently-airing series should read something like "New episode
    every Wednesday" in the hero, and its episode rail should continue
    past what you own into episodes that haven't aired. Those shouldn't
    be tappable.

  5. On iPhone/iPad, the same four things.

KNOWN

Related is empty for a title no provider covers, or when you own nothing
related to it — the row disappears rather than showing placeholders.

Changes:

  • Initial tagged release.

2026.7.18

2026.7.18 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 16 — 2026-07-18

What to Test:
What's new:

Home hero: smoother page-to-page animation, tidier spacing, and a lighter left-edge scrim. Play/Resume buttons now name the episode they'll play (e.g. "Play S21, E8", or a resume bar showing "S5, E12 - 43m"). Logos fade in instead of popping.

Playback: Dolby Vision / direct-file HDR now carries correctly across back-to-back episodes, with display sync fixed. Fixed seeking-during-load snapping back to the start (notably DV over SMB). Cleaner startup - the spinner holds until the picture is really on screen, loading messages are paced better, and network files start faster. Fixed an end-of-file glitch when seeking near the end of a network file.

Player controls: the control bar now auto-hides when idle (stays up while a menu is open).

Settings: new Home Performance Overlay toggle under Help & Diagnostics. Added NFO / local sidecar metadata support.

Please test: episode playback and HDR across consecutive episodes, seeking over network shares and on Dolby Vision, control-bar auto-hide, and the Home hero.

Changes (91):

  • Settings: wire up the Home Performance Overlay toggle
  • Hero/detail Play buttons: name the episode that will play
  • Hero scrim: extend fade 40pt past center (960 -> 1000)
  • UIKit hero: narrow content column 80pt (576 -> 496)
  • Hero scrim: soften to 0.55 and extend fade to screen center
  • Hero scrim: horizontal left->right wash, clear ~40pt shy of center
  • UIKit hero: shift column up another 20pt (net drop 60 -> 40)
  • UIKit hero: shift column up 20pt for air above Continue Watching
  • UIKit hero: widen buttons-to-pagination gap 20pt -> 40pt
  • UIKit hero: lower content column 80pt; +20pt buttons-to-pagination gap
  • Hero pills: flat-capsule border 2px @ 0.10 opacity
  • Hero pills: raise flat-capsule border opacity 0.08 -> 0.13
  • Hero wipe: speed the whole transition up a little (1.20s -> 1.05s)
  • Hero wipe: speed the leaving-image trail back up (was too slow)
  • Hero wipe: decouple curves — fast wipe, leaving image trails a little
  • Hero wipe: soften shared curve expo-out -> ease-in-out (less rushed)
  • Hero wipe: increase leaving-image drift to ~1200pt (0.625 of width)
  • Hero wipe: drift the leaving image half the screen (as a width fraction)
  • Hero wipe: sync the leaving-image drift to the wipe curve; +0.25s overall
  • Hero backdrop wipe: slow ~0.1s and make the leaving image drift immediately
  • Hero A/B toggle: move flip to a Settings debug row (Play/Pause conflicted)
  • Home hero: DEBUG live UIKit<->SwiftUI foreground A/B toggle
  • UIKit hero: cross-dissolve late-resolved logos instead of snapping
  • MediaShareRuntimeFacet: internal quality fixes + monotonic-revision test
  • IdentityIndexModel: cover the warm-lifecycle concurrency guards (tests only)
  • ProfileFlowModel: re-apply Plex identity when the active profile is removed
  • PlexHomeUsersModel: guard stale background Plex-token refresh (+ log fetch error)
  • MainTabView: collapse the wide init via facet + SyncServices bundle (Stage 2)
  • MainTabView: split the 2,429-line file into per-type files (Stage 1)
  • arch-guard: multi-category observable classifier (truthful fan-out)
  • Extract ProfileFlowModel facet from AppState (Batch 6)
  • AccountsProvidersModel: filter per-profile active ids, log resolution errors, unit-test active-set matrix
  • Extract MediaShareRuntimeFacet from AppState (Batch 5)
  • Extract PlexHomeUsersModel facet from AppState (Batch 4)
  • Dedupe ProfileSettingsModel construction and make all 18 sub-models injectable
  • Extract AccountsProvidersModel hub from AppState (Batch 3)
  • Extract IdentityIndexModel facet from AppState (Batch 2)
  • Extract ProfileSettingsModel facet from AppState + add observable fan-out guard
  • FeaturePlayback: split PlayerView body to cut type-check time
  • MetadataKit: speed up TVDBClient.tokens type-checking
  • Pin AetherEngine to plozz-pin-5.6.1-seekfixes-atmos (ffaac10)
  • Refine loading-message pacing and animation
  • Start windowed prefetch after neighbor resolution
  • Publish Plozzigen range after load readiness
  • perf(transport): read-ahead window in TransportIOReader to cut cold-start latency
  • Preserve direct-file HDR across episode handoff
  • fix(playback): hold bring-up spinner until the picture is genuinely on screen
  • Fence stale playback before engine commit
  • Fix direct-file HDR display synchronization
  • Extract ControlsAutoHidePolicy to pin the auto-hide semantics under test
  • Fix DV/SMB seek-during-load snapping playback back to start
  • ProviderShare: collapse coordinator per-account maps into ShareCatalogRuntime (Batch 18)
  • Auto-hide 1s after load, but never sooner than 4s after the last input
  • refactor: extract share catalog read queries from the store
  • Auto-hide the control bar when idle (keep pinned only while a menu is open)
  • Auto-hide: gate the idle countdown on real playback, not a status blip
  • refactor: extract share enrichment persistence repository
  • refactor: extract local sidecar metadata repository
  • Fix auto-hide ordering: 4s idle window starts after playback presents
  • refactor: extract scan catalog writer from share store
  • Keep transport open while video is still loading
  • Clamp committed seeks below EOF to stop network-file end-fault
  • refactor: lift catalog DTOs out of ShareCatalogStore namespace
  • refactor: narrow share provider runtime capabilities
  • refactor: make media share runtime ownership atomic
  • refactor: inject share metadata pipeline construction
  • fix: scope detail snapshots to effective content identity
  • perf: coalesce detail-cache pruning and modernize artwork cache
  • perf: move metadata cache I/O off actor execution
  • fix: enforce NFO semantics and private catalog ordering
  • fix: prune orphan share metadata transactionally
  • Extract ForegroundReloadCoordinator from PlayerViewModel
  • Extract PlayerMenuRowStack + Audio/Speed/Sync panes
  • Extract SubtitleDownloadScreen and SubtitleSyncScreen
  • Extract SubtitleStylePanel from PlayerControls
  • Extract InfoPanelView from PlayerControls
  • Split PlayerControls support types into PlayerControlsSupport.swift
  • refactor: split share catalog persistence responsibilities
  • refactor(FeaturePlayback): extract UpNextPresentationDecision + PlaybackClockReconciler
  • refactor(FeaturePlayback): extract ScrubGestureInterpreter from PlayerInputViewController
  • refactor(FeaturePlayback): extract EngineHandoffCoordinator from PlayerViewModel
  • fix: close arbiter retirement admission races and reason leak
  • fix: record current scan completion and retire arbiters
  • fix: never reconnect on cancellation and classify mapped cancelled reads
  • fix: fence metadata scheduling generations and cancellation
  • fix: remove force-close minimum floor; honor the literal absolute deadline
  • fix: absolute transition deadline and cancel-independent force-close
  • fix: bound media I/O transitions and prioritize playback
  • test: characterize metadata foundation remediation
  • Decompose local metadata policies
  • Add NFO metadata enrichment

2026.7.17

2026.7.17 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 15 — 2026-07-17

What to Test:
Media shares now show scan and artwork progress on Home and in Settings.
Movies and shows from media shares now resume where you left off and support subtitle files stored alongside the video.
Dolby Atmos badges now stay accurate after background checks and source changes.
Switching between copies on different servers now works more reliably without leaving the detail page.
Posters, descriptions, and logos now choose the best available information more reliably across your servers.
Signing in to or updating a media share now recovers more reliably if saving is interrupted.

Changes (35):

  • Extract SubtitleTrackController from PlayerViewModel
  • Extract NextEpisodeCoordinator from PlayerViewModel
  • Extract WatchProgressReporter from PlayerViewModel
  • Extract SeekScrubCoordinator from PlayerViewModel
  • Extract SubtitleOverlayLoader from PlayerViewModel
  • Extract pure TrackMenuBuilder from PlayerViewModel.loadTrackOptions
  • FeaturePlayback: extract RemoteSubtitleAcquisition from PlayerViewModel
  • FeaturePlayback: extract SkipPresentationDecision from player container
  • FeaturePlayback: extract SubtitleStyleAccelerator + PlayerControlsFormatting
  • FeaturePlayback: extract pure EngineSelection route from PlayerViewModel
  • FeaturePlayback: extract SeriesTrackMemory from PlayerViewModel
  • Extract SubtitleMatchScorer pure core from PlayerViewModel
  • Extract SeekLandingClassifier pure core from PlayerViewModel
  • Extract WatchProgressMath pure core from PlayerViewModel
  • build: update AetherEngine to 5.4.1 fork
  • fix(arch-guard): ignore imports in comments/strings; catch attributed imports
  • ci: add automated module-layering / architecture guard
  • fix: distinguish media share probe sources
  • feat: detect Atmos on media shares
  • fix: retarget restored movie sources
  • fix: preserve confirmed Atmos through playback
  • fix: refresh Atmos badge after probing
  • fix: reload movie details on source switch
  • fix: probe Atmos after source changes
  • fix: detect Emby Atmos from the stream
  • chore: expand Emby audio diagnostics
  • Add daily disk-reclaim automation for shared build caches
  • chore: update AetherEngine to 5.3.1
  • Make enrichment saves crash-consistent
  • Add metadata provenance schema
  • fix: refresh active share metadata state
  • fix: pin reviewed Aether seek recovery
  • fix: repair stranded share credentials
  • perf: schedule metadata enrichment passively
  • fix: update AetherEngine for subtitle seek dedupe

2026.7.16

2026.7.16 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 14 — 2026-07-16

What to Test:
Full Emby support, including movies, TV, music, subtitles, skip intro, and HDR/Dolby Vision playback.

Smoother Home Hero paging and tab switching.

Fixed episode ordering, HDR/Dolby badges, and clipped ratings.

Changes (46):

  • fix: align UIKit Hero with Home rails
  • fix: prevent detail badge truncation
  • fix: order Emby episodes numerically
  • test: lock pre-Emby account compatibility
  • Make UIKit hero foreground production-ready
  • chore: log Emby stream metadata
  • fix: preserve Emby version badges
  • UIKit hero foreground: close visual-parity gaps (glass, resume/download, paging gauge)
  • fix: map Emby HDR metadata
  • Soften hero text shadow
  • Improve hero text legibility
  • fix: decode Emby studio identifiers
  • chore: improve playback diagnostics
  • Update README with Emby and SMB, NFS, WebDAV, SFTP, FTP
  • Match diagnostics panel corner radius
  • fix: polish Emby onboarding
  • Add env-gated imperative UIKit hero foreground POC
  • feat: add first-class Emby support
  • Add hero transition marker to the perf stream
  • Reuse the hero pool on watch-history refreshes instead of re-curating
  • Stream Home perf over stdout for remote capture
  • Add Home performance diagnostics: Instruments signposts + on-device HUD
  • Move Hero artwork resolution/preload into an extension file
  • Extract Hero press-gate input layer into its own file
  • Extract Hero artwork-window helpers into their own file
  • Overlap Hero art checks and single-pass the watch fold
  • Require confirmed-loadable art for Hero eligibility
  • Refactor Hero watched-filtering architecture for testability and bounded state
  • Restore Hero navigation from main
  • Revert "Use two-bank native Hero focus"
  • Use two-bank native Hero focus
  • Revert "Rebuild Hero navigation on native focus"
  • Rebuild Hero navigation on native focus
  • Balance Hero navigation bop pitch
  • Sharpen Hero navigation bop
  • Round Hero navigation tone
  • Lower Hero navigation tone
  • Soften Hero navigation feedback
  • Add Hero navigation click feedback
  • Capture Hero direction presses at gesture start
  • Make Hero hold paging bidirectional
  • Silence suppressed Hero paging repeats
  • Set Hero hold repeat delay to five seconds
  • Retain loaded Hero state across tab changes
  • Delay rapid Hero paging
  • Optimize Home hero curation and watched filtering

2026.7.15

2026.7.15 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 13 — 2026-07-15

What to Test:
Playback now recovers after leaving Plozz and returning, with video, controls, and progress resuming correctly.

Try the redesigned media-share setup for SMB, WebDAV, SFTP, FTP/FTPS, and NFS, including automatic protocol detection and folder browsing.

Check local-library matching, metadata, duplicate handling, watch progress, and resume behavior across servers and file shares.

Confirm authenticated video, music, subtitles, and scrub previews still load normally.

Changes (130):

  • Fix playback recovery after tvOS suspension
  • NFS listExports: throw on loop-cap breach instead of break
  • Drop the NFS subtitle in the Servers list entirely
  • NFS reads as a credential-free connection, not a sign-in
  • Onboarding form redesign, focus fixes, readable default names, StatusChip
  • Onboarding: consolidate Connect form, move share nickname off the picker, FTP validates on Connect
  • Pin the folder-picker confirm action above the list
  • Fix SFTP onboarding crash on auth failure (leaked NIO promise)
  • Refine folder-picker scroll: directional fade, no side clipping, drop hint
  • NFS export listing + FTP folder browsing + reusable fading scroll area
  • Add SFTP folder browsing to onboarding (drill into a subfolder)
  • Preserve username case in SFTP/FTP share identity
  • Unified onboarding UI for NFS, SFTP, and FTP shares
  • Make stale-session eviction test deterministic (fix latent release race)
  • Evict dead idle sessions from the transport registry before reuse
  • Disable username autocapitalization in share onboarding
  • Use an informational icon for HTTP credential notice
  • Make HTTP credential notice informational
  • Place insecure-connection notice beside the address
  • Preserve WebDAV HTTP/HTTPS through discovery and manual entry
  • Refine media-share onboarding and confirm swept protocols
  • Add unified add-a-media-share flow (one Connect form for all transports)
  • Fix cursor-reader leak on shutdown-vs-first-read race
  • FTP: make socket awaits cancellation-aware (no head-of-line block)
  • Harden NFS transport after Opus 4.8 + GPT-5.6 code review
  • Add box grouping + curated Channel-B port sweep for media-share discovery
  • Second-review hardening of SFTP transport
  • Add unified media-share onboarding foundation: transport descriptor registry + neutral Bonjour discovery
  • FTP: bound every socket await + document drift policy
  • Harden SFTP transport per cross-model review
  • FTP: honest seek capability + activate detection
  • Trim NFS onboarding wiring to headless transport only
  • Add FTP/FTPS media-share transport
  • Add NFS as a media-share transport (read-only NFSv3)
  • Add SFTP media-share transport (headless)
  • Coalesce redundant background scans (fix WebDAV scan-thrash)
  • Make the perf log self-describing with screen + scan-lifecycle events
  • Enrich the hitch probe with per-window stats for controlled measurement
  • Add dev instrumentation to measure whether share scans stall the UI
  • Clean up the Servers summary chip row spacing and separators
  • Refine transport badge sizing: smaller glyph, wider label, higher band
  • Enlarge the Servers summary chip icons without growing the row
  • Tighten transport label width to 0.7 so long labels clear the border
  • Shrink transport label and drop the badged-icon scale
  • Scale badged share icon down 5% so it doesn't crowd its frame
  • Lift badged share icons so they sit optically centered
  • Tune transport badge chop to 0.41
  • Tune transport badge chop to 0.40 so more of the drive glyph shows
  • Chop a consistent band, not the text silhouette, for the transport badge
  • Bottom-align the transport knockout so the drive icon stays visible
  • Knock the transport label out of the shared share icon everywhere
  • Badge each file share's drive icon with its transport (SMB/WebDAV/…)
  • Group media shares by full share root so same-host shares don't merge
  • Let the shared WebDAV scanner session parallelize across the scan pool
  • Refactor route detection into an additive TransportClaimant registry
  • Route to WebDAV on any HTTP response, not just a DAV header
  • Detect WebDAV by probing the DAV header, not path/port guessing
  • Unify local-media onboarding: auto-detect transport, no protocol pick
  • Harden the WebDAV onboarding flow (Phase 3 review fixes)
  • Add the WebDAV share onboarding UI
  • Fix WebDAV endpoint path encoding + account-ID dedup (Phase 1+2 review)
  • Fix flaky HeroRandomLibraryLoader cancellation test on CI
  • Persist WebDAV shares via the envelope path + wire the ETag identity
  • Wire WebDAV adapters into AppShell via transport-neutral dispatch
  • Speed up tests: build-once matrix + data-driven change-scoped selection
  • Harden the WebDAV range/GET path (Phase 0 review fixes)
  • Add the WebDAV media-transport adapter (Sources/MediaTransportWebDAV)
  • Add stat + bounded GET to the WebDAV HTTP primitive
  • Prefer English title for foreign-language TVDB matches (El eternauta)
  • Replace stale enrichment on version bump (fixes Punisher "TAP" logo)
  • Fix Eternaut/Punisher/Outlander metadata mismatches
  • Fix Outlander mismatch and Your Honor duplicate card
  • Reject parody/recap TVDB matches; English overview on the search path
  • Revert AetherEngine to the production pin d97fad24
  • Merge typo'd series folders when corroborated by a shared external id
  • Fix nested-folder over-split regression; force re-enrich for stale shows
  • Split nested spinoff folders; fetch English overview for by-id shows
  • Harden share metadata: by-id resolve, canonical titles, safer normalization
  • Fix series duplicate splits/merges with robust keys, real year, embedded ids
  • Normalize SMB series titles and add filename-title search fallback
  • fix: disambiguate same-name series by on-disk episode titles (TheTVDB)
  • fix: anchor a share series to its show folder, not the filename or nested folders
  • fix: include the (case-normalized) username in a media share's identity
  • fix: give media shares a stable identity so re-adding updates in place
  • diag: capture AVPlayer wedge state + segment-request pattern for the SMB/DV stall
  • fix: stop stall-recovery retry from cancelling its own re-resolve
  • Drain leased transport before stall retry; journal failure detail
  • Recover network-file playback stalls and expand diagnostics
  • Test AetherEngine stalled-seek fixes
  • Persist playback failure diagnostics
  • Use series IDs for episode merging
  • Merge matching episode cards
  • Refresh cached episode watch state
  • Clear watched progress immediately
  • Fix rewound resume and episode fan-out
  • Fix Trakt episode identity
  • Pin detail picker to library origin
  • Honor source-specific library origins
  • Centralize watch-state updates
  • Keep playback on source-specific libraries
  • Refresh share grid after playback
  • Refresh detail after playback progress
  • Preserve duration in final playback report
  • Make local watch state durable
  • Format About build number
  • Polish About details
  • Simplify About messaging
  • Refresh About messaging
  • Update tvOS deployment baseline references
  • Secure managed scrub previews
  • Secure managed subtitle delivery
  • Accept Jellyfin empty query components
  • Stabilize share scan lifecycle UI
  • Secure managed theme playback
  • Secure managed music playback
  • Secure managed video playback
  • Coordinate share scanning and playback
  • Migrate SMB playback to transport resolver
  • feat: move SMB browsing onto transport core
  • feat: add protocol-neutral transport core
  • feat: make share credentials transactional
  • feat: add durable credential transactions
  • feat: add revisioned media credential vault
  • feat: add credential-free media source models
  • refactor: scope provider resolution context
  • feat: prove WebDAV transport primitives
  • Use current tvOS SDK in CI
  • Fix CI for the tvOS runner
  • refactor: own transport reader lifecycle
  • test: run every declared suite by default

2026.7.12

2026.7.12 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 12 — 2026-07-12

What to Test:
Season requests: Search for a partly owned show, open Request More, and request one season or all missing seasons. Verify pending, processing, failed, retry, and completed states, including profile-specific Seerr users.

Series browsing: Open long-running shows from series, season, and episode cards. The current season should already be visible, focus should not cause a second scroll, and episode/season navigation should stay centered and stable.

Onboarding: Test the redesigned animated setup flow for Plex and Jellyfin, including Plex QR/manual sign-in, Jellyfin Quick Connect, Back navigation, focus movement, and library selection.

SMB and local shares: Test scanning mixed movie/TV folders, version grouping, season deduplication, watch state, sidecar subtitles, search, sorting, and browsing responsiveness.

Playback: Test Dolby Vision/HDR playback and episode handoffs, Up Next, subtitle search/download/hot-load, and the redesigned Playback Info display.

Appearance and profiles: Test display sizes, card/navigation styles, Pure Black, watched indicators, and per-profile server/library toggles. Detail-page Cast should remain a consistent size at every display density.

General stability: Exercise Home heroes, artwork loading, context menus, rapid focus movement, and repeated detail-page navigation.

Changes (251):

  • Enrich season cues off search path
  • Let discovery season lookup retry
  • Keep detail cast sizing fixed
  • Refine season request icons
  • Stabilize selected season reveal position
  • Restore selected season rail reveal
  • Move season clipping to page edges
  • Protect season rail focus edges
  • Simplify request seasons label
  • Clarify season request action wording
  • Scale season cue with card density
  • Unify season request menus
  • Keep season tabs clear of request control
  • Integrate season requests into series search
  • Keep detail cast sizing fixed
  • Refine season request icons
  • Stabilize selected season reveal position
  • Restore selected season rail reveal
  • Move season clipping to page edges
  • Protect season rail focus edges
  • Simplify request seasons label
  • Clarify season request action wording
  • Scale season cue with card density
  • Unify season request menus
  • Keep season tabs clear of request control
  • Integrate season requests into series search
  • Harden Plex auth race handling
  • Refine Jellyfin Quick Connect header
  • Correct profile onboarding copy
  • Clarify library selection copy
  • Align Jellyfin code and timer
  • Coalesce Plex onboarding handoff
  • Align Plex code and timer
  • Remove Plex code outline
  • Group Plex manual linking details
  • Keep Plex loader visible on focus
  • Rebalance Plex link layout
  • Polish and harden Plex linking
  • Wait for Plex code before transitioning
  • Prefetch Plex link code during transition
  • Tighten onboarding transition timing
  • Replace onboarding crossfade with push
  • Slow onboarding page motion
  • Overlap onboarding page transitions
  • Refine onboarding transition curves
  • Add cinematic depth to onboarding
  • Smooth onboarding page transitions
  • Harden series episode browsing
  • Preserve hero set across detail visits
  • Stabilize hero logo arrivals
  • Rename OLED theme to Pure Black
  • Animate every onboarding step
  • Polish Plex library group headers
  • Fix Plex onboarding handoff
  • Show hero titles while logos load
  • Gate accidental hero direction repeats
  • Prevent double chooser focus moves
  • Restore original focus card styling
  • Optimize hero curation performance
  • Add setup header breathing room
  • Smooth setup transitions at window edges
  • Coalesce setup page transitions
  • Correct setup transitions and scroll viewport
  • Fix setup scroll edges and transition motion
  • Stabilize discovery page focus and motion
  • Align onboarding dividers with border
  • Sequence onboarding page transitions
  • Bridge provider chooser back focus
  • Show provider badges on server toggles
  • Fix add-server chooser focus
  • Adapt provider colors for focused surfaces
  • Use uniform onboarding row heights
  • Preserve provider colors on focus
  • Balance onboarding row focus insets
  • Keep provider badges visible on focus
  • Refine onboarding focus layout
  • Polish first-run provider chooser
  • Support Plex QR and manual sign-in
  • Open Plex QR authorization directly
  • Simplify provider choice cards
  • Redesign provider chooser layout
  • Animate provider setup navigation
  • Simplify first-run branding
  • Reduce light focus halo opacity
  • Tune light focus halo and shadow
  • Try white light focus halo
  • Strengthen light focus halo contrast
  • Finalize focus halo contrast overlay
  • Add red focus halo diagnostic
  • Increase light focus halo contrast
  • Polish first-run provider chooser
  • Tune focus halo contrast
  • Improve focus halo contrast
  • Never blur hero backdrops
  • Reserve hero slot during curation
  • Wait for context menu preview dismissal
  • Fix lingering context menu poster preview
  • Make hero artwork transitions instant
  • Harden series detail focus and transitions
  • share: preserve scan reporter compatibility
  • share: harden interactive scan pacing
  • Sharpen receded logo exit
  • Optimize hero paging performance
  • Increase cast reveal travel
  • Synchronize series reveal animations
  • ui: subdue media folder icon
  • Remove receded logo entrance delay
  • ui: give media folders a dedicated card look
  • Unify receded logo entrance
  • share: pace scans during interactive browsing
  • Make logo glide duration deterministic
  • Layer rapid hero transitions
  • Further reduce synopsis blur
  • Lengthen receded logo glide
  • Retune receded logo entrance
  • Soften receded logo entrance
  • Animate episode synopsis on focus
  • Refine episode focus animations
  • Reduce spoiler synopsis blur
  • Fix rapid hero transitions
  • Clarify receded logo motion
  • Align episodes with missing overviews
  • share: refresh open grids after catalog scans
  • Slow series logo transitions
  • Lengthen cast reveal transition
  • Invert receded logo transition
  • Emphasize the Cast reveal transition
  • Animate Cast into the episode browser
  • Smooth the receded logo entrance
  • Refine the receded logo timing
  • Remove the restored hero focus proxy
  • Make the hero return proxy a focus section
  • Restore focus from Seasons to Play
  • Reveal Cast below the episode browser
  • Center receded series logos
  • Center the focused episode composition
  • Restore series detail visual balance
  • share: bound watch-state lookups to visible items
  • Top-align the series episode rail
  • share: preserve numeric TV series episodes
  • share: search full titles with leading articles
  • Align season rail focus geometry
  • Restore season focus geometry
  • Tighten series episode browser spacing
  • Center the series episode browser
  • share: keep numbered films in mixed roots
  • Redesign series episode browsing
  • share: harden catalog migration and diagnostics
  • share: preserve legacy watch state and anime films
  • share: sort grids without leading The
  • share: deduplicate season tabs by number
  • share: keep browsing responsive during scans
  • versions: remove speculative playback badges
  • Make theme songs play once
  • share: merge adjacent-year movie versions
  • Restore series theme music
  • Fix server toggle with stale profile account IDs
  • playback: show selected filename in diagnostics
  • Stabilize series episode focus layout
  • Address pre-merge review: dedup SMB sidecars on case-insensitive shares; avoid abs(Int.min) trap
  • Subtitle settings: consolidate into fewer rows + hide download-only options on share-only profiles
  • Make server master switch a Button that flips on press
  • Make the per-profile server toggle reflect changes live
  • Fix per-server master toggle never turning a server off
  • Download Subtitles UI polish: animation, layout, external marker, marquee
  • Fix two review findings: new-track poll baseline + SMB stem over-match
  • docs: mark the Sourcing track (subtitle search/download + SDH/Forced) shipped
  • SMB: surface existing sidecar subtitle files (.srt/.ass/.ssa/.vtt)
  • share: group same-movie files into one card with versions (Phase 2)
  • Real in-player subtitle download + hot-load, and repaired auto-download
  • SDH/Forced subtitle accessibility preference (per-profile, all backends)
  • Plex remote-subtitle parity: keyless server-proxied search/download
  • Make DOWN reliably reach the target episode via a full-width rail focus section
  • share: folder-aware media classification (Phase 1)
  • Fix series-page down-focus to the current episode and stop needless season shifts
  • Fix decoded-cache stat over-count after a memory-warning flush
  • Plex DV badge: honor explicit "HDR10" display title (post-merge fix)
  • Gate decoded-cache stat accounting behind the PLZXMEM dev flag
  • Perf: verify trailers via keyless oEmbed, not JavaScriptCore, on the browse path
  • Perf: cut a full-screen offscreen blur pass + live cache accounting
  • Display Size: mock Home with rails, headers and accurate counts
  • Perf: right-size every image decode to its on-screen size
  • Display Size: neutral PreviewCard grid matching sibling pickers
  • Perf: per-slot grid observation + right-sized hero art + memory-warning flush
  • Display Size: mock Home-rail preview matching the app
  • Display Size: honest mini-TV grid preview
  • Display Size: visual size-ramp picker
  • Fix track-details toggle label: lyrics source, not lyrics
  • Use consistent uppercase section headers in Appearance panes
  • Self-describe the track-details toggle; drop its description
  • Trim the Spoilers section copy
  • Soften resting card hairline on dark/OLED
  • Add a resting hairline so frosted cards read on dark/OLED
  • Frosted glass on resting cards, real Liquid Glass on focus
  • Fix framed-card focus hang: draw glass as a background underlay
  • tvOS 27: real Liquid Glass on the focused card, material at rest
  • SMB grid: report exact total count so fast-scroll / jump-to-bottom works
  • Bound grid-card artwork resolution so a large un-enriched library can't flood
  • Work around tvOS 27 Liquid Glass crash on focusable cards
  • Fix framed "Cards" cr...
Read more

2026.7.8

2026.7.8 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 11 — 2026-07-08

What to Test:
New Watched Indicator setting in Appearance — pick a watched checkmark or an unwatched blue corner flag. In-progress items should no longer show as watched.

Redesigned Settings — Customize Home (Shared rows + a toggle for per-library rows), simpler library on/off, Spoilers moved to Appearance, Integrations renamed to Trackers.

Edit Profile — emoji avatars, new color grid, auto-save, and a delete button.

SMB media shares now scan into Recently Added, Search, and Movies/TV/Anime rows with posters and artwork.

Seerr requests can be made as a specific user via per-user mapping.

Blank movie/TV posters now fill in, and hero images no longer blur.

Detail pages no longer jump when moving across the top buttons.

Changes (70):

  • Fix unreadable focused name field in dark mode
  • Fix invisible name field + labels via theme-aware colours in the editor sheet
  • Add separation between the Shared rows card and the per-library toggle
  • Trim Rows copy: drop the toggle sub-text, rename 'Shared' to 'Shared rows'
  • Reframe 'Combine libraries' as additive 'Show each library's own rows'
  • Rename 'Home Page' settings row to 'Customize Home' with a house icon, no subtitle
  • Remove the non-actionable Subtitle appearance row; rename Integrations to Trackers
  • Drop the redundant 'Rows on Home' helper text
  • Trim Home rows copy: static descriptions, no label echo
  • Fold the Combine switch into the Rows on Home page
  • Move Delete to a prominent icon-only trash button in the header
  • Simplify library visibility: retire the hidden shown-on-Home axis + tidy Settings copy
  • Fix double focus outline on photo tiles
  • Second-pass emoji re-curation: coherent categories, kill 'Fresh'
  • Add black, white + more colours (40) with legible adaptive glyphs
  • Even colour grid + neutral tones; better emoji category names
  • Emoji-first tab order, random-emoji default, grouped/half-size colours
  • Auto-save profiles, emoji-first avatars, neutral-default emoji bg, richer set
  • Add Emoji avatar mode using native Apple emoji
  • Fix FeatureHomeTests data-race crash + un-quarantine the suite
  • Expand avatar symbols to 11 fun, verified categories
  • Pin hero action row to the top for every button, not just Play
  • Make left<->right focus reliable via focusSection on each column
  • Fix symbols culling near top edge and People row wrapping
  • Fix symbol grid orphans and section type hierarchy
  • Match Delete Profile button to the server sign-out button's focus
  • run-tests.sh: self-heal when per-module *Tests schemes aren't materialised
  • Move title + Cancel/Save out of the invisible toolbar into the page
  • Add column divider; centre the selected-colour checkmark
  • Fix two flaky/stale unit tests: snapshot-cache prune race + cross-server dedup fixture
  • Refine Edit Profile layout, prominence & theme-aware focus
  • Add CONTRIBUTING.md and trim the README bug-reporting section
  • Add GitHub issue templates and a bug-reporting note to the README
  • Revamp the Edit Profile editor
  • Enlarge the unwatched flag by 8pt and scale it with card size
  • Polish watched/unwatched indicator UI, copy, and review fixes
  • Use a fixed dark-blue hairline on the unwatched flag in every theme
  • Quiet the unwatched flag edge further (0.75 -> 0.55 opacity)
  • Soften the unwatched flag's edge to a quiet 1pt hairline
  • Enlarge watch indicators and add a themed edge on the unwatched flag
  • Add illustrated preview cards to the Watched Indicator setting
  • fix(share): per-version retry budget + truly fixed-width progress digits
  • Add watched/unwatched indicator setting and fix in-progress showing as watched
  • fix(share): recycle wedged SMB connections so one bad socket can't stall the scan
  • docs(attribution): credit TheTVDB in-app and in the README
  • Correct tracker name from AniDB to AniList
  • polish(share): smaller tile spinner + live progress in Settings scan status
  • polish(share): center the tile updating spinner + more pill right padding
  • fix(share): stop the status pill jittering as the counter flies
  • feat(share): informative scan status — named pill with progress + per-card spinner
  • fix(share): harden scan/enrichment data integrity (triple-review follow-up)
  • fix(share): fully drain enrichment + fast-track the opened item
  • fix(art): add TheTVDB to the poster chain — fills blank movie/TV cards
  • fix(hero): never blur the hero — resolve a real TheTVDB backdrop, else a clean gradient
  • perf(share): parallelize the SMB scan (pool of connections + BFS) — ~Nx faster
  • fix(share): make Scan now actually run + fix a startup race that hid the scan indicator
  • fix(settings): restore focus path to Sign Out / Remove Server on a share detail
  • feat(share): surface the media-share scan — Home "Updating library…" banner + Settings status
  • feat(share): Phase 2b — bundled TheTVDB metadata tier (movie IDs, posters, genres)
  • Address pre-merge code review of the Seerr feature
  • feat(share): Phase 2a — scan-time metadata enrichment (external IDs, artwork, overview)
  • Show real profile avatars in the Seerr requests-as mapping list
  • feat(share): SQLite catalog + scanner — Recently Added, Search & Movies/TV/Anime libraries
  • Give Servers, Profiles & Seerr a shared large-title page header
  • Use a custom monochrome Seerr glyph for its Settings row
  • Make the This Apple TV Seerr row single-line
  • Move Seerr to This Apple TV as a dedicated household option
  • Per-user Seerr requests (Phase 1 UI): mapping list, request-time identity, failure alerts
  • Address 3-agent review of the Phase 1 Seerr foundation
  • Per-user Seerr requests (Phase 1 foundation): shared connection + acting user + typed outcomes

2026.7.6

2026.7.6 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 10 — 2026-07-06

What to Test:

  • Hero on home - try customizing it and make sure all functionality works- Seerr integration - request media from the hero or search - the button should update status of downloads- Reorganized settings - still needs work, but making improvements- Choose to merge or not to merge your home page- Select which rows appear on home

Changes (162):

  • polish(music): genre tiles — no truncation, position-based colours, more icons
  • Remove stale mpv references from source, tests, and the compliance notice
  • fix(music): rewrite genre cards — colourful tiles, no render-server freeze
  • Refine discovery discriminator so owned featured titles keep Play/Watchlist
  • fix(music): stop genre grid freezing (live glass at rest) + bare white surface
  • refactor(ui): genre cards use the poster cards' focus treatment
  • refactor(ui): round genre cards via the shared scale
  • refactor(ui): rounder shared radius scale, applied across chrome
  • Refresh a discovery title's Seerr status when its detail page (re)opens
  • refactor(ui): shared corner-radius scale + concentric preview cards
  • Add "Not in Your Library" Seerr results to Search + request-focused discovery detail page
  • refactor(settings): placeholder spoiler tiles show generic series art, not a number
  • refactor(settings): render spoiler-mode preview as a 3-episode rail
  • feat(settings): live preview cards for the Spoilers "Mode"
  • fix(settings): show Hero Featured unchecked while disabled (no Seerr)
  • feat(settings): gate Hero "Featured" on Seerr; pin it last in Sources
  • refactor(settings): merge Hero "Items" into a "Rotation" section
  • refactor(settings): drop the Auto-Advance description
  • refactor(settings): distinguish section descriptions from headers; cut redundant ones
  • refactor(settings): uppercase section headers + 80pt section spacing
  • refactor(settings): define a type hierarchy + simplify Hero Sources to checkmarks
  • refactor(settings): one master row per feature — Hero & Spoilers get full-pane forms
  • refactor(settings): consolidate profile settings from 7 rows to 5
  • refine(playback): fine-grained rewind ladder (1s to 10, 5s to 30, 15s to 60)
  • refine(playback): rename to "Rewind on resume", add 60s, live helper text
  • feat(playback): add per-profile "resume rewind" setting
  • Address remaining review nits: ThemePalette.init access + seed-after-discovery
  • Address code-review findings: seeding, cached snapshot, unmerged mutations
  • Music Player settings: land on style cards on entry via focus-gated toggle
  • Music Player settings: focus the style cards first on right-press
  • Preview cards: drop the selection checkmark
  • Music swatch: brighter Dark, colorful OLED, larger album-matched blobs
  • Music swatch: artwork-tinted background like the real player
  • Music swatch: add a shadow to the scrub bar for visibility
  • Music swatch: white seek bar, album shadow; keep card titles one line
  • Add music-player style preview cards; merge into one Music Player row
  • Theme swatches: taller windows, two tall tiles, no faux text lines; reorder
  • Make settings/nav row focus instant (no easing)
  • Theme swatches: two wider poster tiles, shorter previews
  • Add compact theme picker to Settings; share card component via CoreUI
  • Theme picker: let focus reach Continue from the edge cards
  • Fix System theme via downward colorScheme env instead of preferredColorScheme
  • Fix System theme staying stuck when switching from Light/Dark
  • Theme picker: System swatch is one UI split down the middle
  • Theme picker: tint the active card so selection is obvious
  • Theme picker: neutral factual copy, profile-aware title, no sub-header
  • Theme picker: theme-independent preview swatches, no icons, fun 2-line copy
  • Theme cards: use About-panel focus outline via custom ButtonStyle
  • Theme picker: fix live background, whole-card focus outline, "Choose theme" title
  • Show theme picker after creating a profile in-app
  • Default to Dark theme + add first-run theme picker
  • Fix Home row focus jumping to the opposite side on vertical navigation
  • Hero Info: resolve to the real library copy before navigating
  • Hero series Play now plays next-up episode directly (Info still opens detail)
  • Hero series Play: navigate to the real library copy, not the Discover stub
  • Hero: route a series Play to detail (next-up); remove play diagnostics
  • Fix hero Watchlist play, cache-proof: strip un-playable Discover source at play time
  • Fix 'Can't play' on owned hero Watchlist items: drop un-playable Discover self-source
  • Subtitles: add 40pt above the per-type override section
  • Settings: stop labels wrapping; add space under Circadian mode description
  • Settings: right-align dropdown menu buttons in labeled rows
  • Settings: hide Background Trailers until supported; merge audio rows into one 'Audio defaults'
  • Unmerge Home: seed all per-library rows on the first time merging is turned off
  • Settings detail: reduce description-to-content gap from 80pt to 40pt
  • Settings: wrap every checkmark list in the shared bordered container
  • Settings detail: 80pt gap under the description; add Seerr to Trackers subtext
  • Settings split pages: one page header atop the nav list, drop section subheaders
  • Settings split pages: flush-right detail panel with generous content insets
  • Settings split pages: detail panel fill reaches the page top/bottom
  • Settings split pages: chevron-free nav + full-height detail panel with a single left divider
  • Settings split pages: narrower master, larger detail pane
  • Customize Home: rename 'Featured Hero' to 'Hero' and tidy its hierarchy
  • Your Libraries: title -> 'Show or hide libraries and change who you watch as'
  • Your Libraries: say 'each library' not 'each server' in the info panel
  • Your Libraries: shorten the info panel copy
  • Plex 'Watching as' page: use the shared settings content width
  • Your Libraries: one info panel instead of a caption under every toggle
  • ProviderBrandMark: render the Plex logo ~8pt larger without resizing its frame
  • Settings provider marks: drop the circle, use larger bare logos
  • Provider marks: circular backgrounds in Home-rows cards + more logo padding
  • Customize Home + Your Libraries: one-line source headers, larger provider logos
  • Customize Home: group all row toggles into one grouped, bordered view
  • Fix Watchlist ghost gaps: merge same-title copies by global Plex guid
  • Fix empty Plex watchlist: use Discover host + tolerate string media ids
  • Add watchlist counts to Home boot telemetry
  • Fix: global Recently Added row missing on unmerged Home
  • Rework unmerged Home: Customize Home screen + lean, opt-in library rows
  • Keep music libraries off Home (they live in the Music tab)
  • Exclude Plex auto-generated person hubs from library sections
  • Add "Merge Continue Watching" toggle; fix duplicate per-library CW rows
  • Polish hero layout/dissolve and harden the Home content cache
  • Drop sparse Plex discovery hubs (require >=3 items)
  • Add per-profile "Merge libraries on Home" toggle with unmerged per-library sections
  • Cap hero paging dots at 8 with a scrolling windowed indicator
  • Pin hero content block so paging no longer shifts the dots/buttons
  • Fix hero paging-dots vertical jitter on page transitions
  • Stop hero paging dots from shimmering during the backdrop wipe
  • Paint Home hero + Continue Watching instantly on launch
  • Revise beta installation instructions in README
  • Revise README to reflect current state of the app
  • Fix Settings focus-flip crash by narrowing library-state observation
  • Add env-gated PLOZZ_FORCE_CRASH_REPORTING for on-device crash capture
  • Revert "Stop animating hero pills on focus change (fixes focus-flip UAF crash)"
  • Stop animating hero pills on focus change (fixes focus-flip UAF crash)
  • Smooth out A-Z rail scrolling and prefetch jump targets
  • Fix hero focus-transition crash: stop needless item-id churn
  • Keep hero paused across an item-set swap while receded
  • Drive hero auto-advance pause off recede (down-only), not focus-nil
  • Address code-review findings on the featured-hero CTA
  • Simplify hero action row; add focus-away auto-advance pause + test flag
  • Address code-review: autoclosure emit + accurate reassert comment
  • Featured hero: live in-place refresh of Seerr status/progress
  • Reassert hero focus after a page to fix intermittent focus loss
  • Featured hero: only show "Downloading" when actually downloading
  • Hide tvOS fast-scroll index bar behind the A-Z rail
  • Pin hero action-row width so a page can't move the focus target
  • Fix featured hero CTA: untracked → Request, gate on configured
  • Fix intermittent hero focus loss on button-count-changing pages
  • Featured hero: Play / Request / live download progress via Seerr
  • Fix scroll-indicator hider being lazy-culled; also push indicator off-screen
  • Add PLZHFOCUS on-device instrumentation for hero carousel focus loss
  • Hide tvOS scroll bar every frame via display link; drop rounded rail font
  • Share the resume progress indicator between the hero and item detail
  • Reliably hide tvOS scroll indicator (KVO), enlarge rail letters, reveal on scroll
  • Make Home hero Play/Resume label watch-progress aware
  • Hide native scroll indicator via UIScrollView probe; shift rail into gutter
  • Fully suppress native scrollbar under alphabet rail
  • Home hero: plain-glass Play pill + icon-only More Info
  • Home hero: scroll-driven recede + smooth, jank-free transition
  • Show every loading message once via persistent shuffle bag
  • Tidy alphabet rail: hide native scrollbar, sit in gutter
  • Expand playful loading messages to 387 curated entries
  • Add Infuse-style alphabet fast-scroll rail to library browse
  • Home hero: parallax-wipe tuning, glass progress dots, pause-on-input
  • Home hero: make the parallax wipe a true reveal (Apple TV feel)
  • Home hero: replace backdrop crossfade with Apple TV parallax wipe
  • Clarify "sync across all my servers" description
  • Rename Seerr settings row from "Overseerr / Jellyseerr" to "Seerr"
  • Add LAN auto-discovery for See...
Read more

2026.7.3

2026.7.3 Pre-release
Pre-release

Choose a tag to compare

@thatcube thatcube released this 18 Jul 19:55

TestFlight build 9 — 2026-07-03

What to Test:

  • tentative SMB support- new navigation paradigm - you can change it back to top tabs in the settings

Changes (22):

  • Hero: rewrite backdrop wipe as a two-slot push and add scroll parallax
  • Fix wrong-order hero wipe: single-transaction .transition wipe
  • Fix intermittent wrong-order hero wipe with deterministic offset slide
  • Fix intermittent wrong-order hero wipe (new snaps in, old slides out)
  • Drive hero recede from focus loss, not the graze-prone Down move command
  • Make touch-pan disabler reliably find the hero scroll view (controller + fallback)
  • Fix touch-pan disabler placement so it actually finds the UIScrollView
  • Stop Siri Remote touch-surface pan from free-scrolling the hero page
  • Fade hero buttons without dropping focus or shifting scroll
  • Fix hero Left-escape and inter-button scroll shift
  • Hero: rock-solid focus via single-focusable action row
  • Auto-derive marketing version as CalVer build date
  • Rework Home hero focus, transitions, and artwork routing
  • Fix release-SDK build: read interruption reason by string key
  • Distinguish SMB login vs share-enumeration failures in add-share
  • Auto-detect local SMB media shares in Add Media Share flow
  • Host video player on root TabView so play fires immediately from deep nav
  • Media share: skip redundant library step + fix empty-folder trap
  • Media share: browse real folder tree + fix smb:// playback routing
  • Add local SMB media share as a second-class provider (browse + play)
  • smb: adopt engine's NWConnection SMB transport, drop tvOS spike
  • Add media-share proposal + Phase 1 SMB playback spike