2026.7.6
Pre-release
Pre-release
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 Seerr servers
- Hero: rebuild backdrop transition as one continuous strip position
- Hero: drive backdrop crossfade in UIKit (Core Animation), not SwiftUI
- Hero: commit filmstrip window shift up front, drop the settle completion handler
- Fix Seerr connect defaulting a bare host to https, breaking LAN servers
- Hero: replace two-layer wipe with a single-offset filmstrip
- Hero: force the incoming backdrop to draw on top (fix wrong-order wipe)
- Hero: auto-advance while focused, not only when unfocused
- Hero: stage incoming backdrop art a frame before the push
- fastlane: auto-select a release Xcode so TestFlight uploads never hit beta-SDK rejection
- Add SMB share support with SMB3 and clearer connection errors
- Persist watch outbox, identity index & anime id map to Caches on tvOS
- Share watch state: persist to Caches on tvOS + render progress bar
- Home: silently re-aggregate when a brand-new resume matches no loaded card
- Add keyless overview/description enrichment for share items
- Share watch status: guarantee resume persists + diagnostics + episode order
- Share: reconnect a dead SMB session instead of failing every listing
- Tests: update ProviderKind allCases for second-class mediaShare kind
- Add Seerr (Overseerr/Jellyseerr) discovery integration (Phase 1)
- Share: thread capturedAt through played writes for correct last-writer ordering
- Add local watch status for SMB shares
- Fix SMB share review round 2: IPv6 parse-back, filename parsing, teardown
- Add metadata for SMB share video files
- Fix SMB share review round 1: focus trap, IPv6, actor serialization