ShowShark Release Notes v2026.04.13

ShowShark Release Notes v2026.04.13

Overview

  • A new Watch Party feature lets you schedule, share, and host synchronized playback sessions with friends. Create a party from any playlist, share an invite code, and watch together across devices.
  • New tabbed navigation makes it faster to switch between Library, Channels, Search, Discover, and Guide.
  • Poster images now appear throughout the app — search results, playlists, channels, history, and more — replacing the old screen caps lists.
  • A new Import Issues view helps you find and fix unmatched media in your library, and movie title parsing has been significantly improved for tricky directory names and edition suffixes.
  • Admin library maintenance moves into Client Settings — kick off scans and cleanups, watch progress, and confirm results without needing access to the Server UI.
  • Music libraries are now properly scanned, with type-aware audio routing and full orphan cleanup for songs, albums, and artists.
  • Multi-file movies now support edition selection (Theatrical, Director's Cut, etc.) directly from the detail view.
  • The streaming pipeline has been split into independent decode and encode stages for better reliability, fixing BDMV deadlocks, audio sync issues, and an AAC encoder crash on certain files.
  • Remote Access Invites let you onboard devices outside your local network with a simple invite code.
  • A redesigned "By Feel" mood-based discovery feature uses multi-select preference rounds and SIMD-accelerated similarity for smarter recommendations.
  • On tvOS, the server list has been redesigned with a cinematic hero layout, and grid items now feature a custom green focus glow.
  • Dozens of UI refinements and bug fixes round out the release.

Tabbed Navigation

  • Paged tab navigation replaces the vertically stacked root sections with a swipeable tab strip. Video, Audio, and Photos are consolidated into a single Channels tab. Channel Guide, Discover, and Search each get their own tab for quick access. The tab strip sits at the bottom of the screen on iOS and visionOS, and at the top on macOS
  • Focus-based tab navigation on tvOS adapts the tab strip for Siri Remote interaction with debounced focus changes, proper focus recovery after content rebuilds, and native TabView integration
  • Library tab opens by default on launch, with identity-based tab tracking that preserves your position

Watch Party

  • Schedule a watch party from any playlist using the party.popper toolbar button. Pick a name, a start time, and optional pre-party / post-party messages, and the server generates a synchronized playback schedule for everyone who joins
  • Share with an invite code — every party has an 8-character code that other devices can enter to join. The Server UI lets you click the code to copy a shareable invite message containing the party date, code, and join URL
  • Lobby with content lineup lets members see who else is connected and preview the playlist for the upcoming party. The lineup uses TMDB poster art for each item rather than screencap thumbnails for a polished, recognizable look
  • Edit existing parties from the same toolbar button used to create them — change the name, start time, or pre/post-party text. Live parties allow name-only edits; ended and cancelled parties are read-only
  • Cancel or delete parties from the host UI with a confirmation step. Cancellation cleans up cleanly and notifies connected members
  • Auto-start playback when a party transitions to live — participants don't need to tap anything; the lobby switches directly into synchronized playback
  • Real-time push notifications replace the previous polling loop, so the lobby refreshes instantly when the host edits the party, and shows an alert if the party is deleted while you're waiting in it
  • Member display names use the alias from the host's Devices list (e.g. "Living Room Apple TV") rather than the raw client name, and refresh in real time when devices are renamed
  • Server "Watch Parties" section in the Channels tab lists all parties — scheduled, in lobby, live, ended, and cancelled — sorted by lifecycle priority. Each row shows the party name, lifecycle badge, timeline context, member count, and clickable invite code
  • Server-side editor sheet for each party lets you edit the name and start time, jump-start a scheduled party with a Start Now button, delete it (with confirmation), and view the underlying playlist with each item's title and formatted duration
  • Optional intro/outro bumpers can be configured in server settings — a 10-second pre-roll/post-roll asset that's automatically appended to every watch party schedule
  • Auto-recovery on server restart rebuilds the schedules of any pending live parties (including bumper-aware regeneration), or marks them ended if the content has already finished
  • tvOS start-time picker uses a focusable preset selector with options ranging from 5 minutes to 24 hours from now, since DatePicker isn't available on tvOS, with the computed absolute start time displayed for confirmation

Discovery & Browsing

  • Discovery Wizard redesigns the Discovery Hub with step-stack navigation for a more guided recommendation experience
  • "By Feel" mood-based discovery redesigned with multi-select preference rounds that dynamically terminate when enough signal has been gathered. The recommendation engine now uses tally-based vote propagation with SIMD-accelerated similarity scoring, replacing the previous binary-choice approach. Candidate selection is biased toward metadata-rich movies for better propagation reach across the library
  • Recently Added discovery feature lets you browse newly imported content filtered by category
  • Spotify-style genre cards replace the previous pill buttons with a tabbed layout for richer genre browsing
  • Random/alphabetical sort toggle in genre browse view for flexible content exploration

Poster Images & Visual Polish

  • Poster images throughout the app now appear in library search results, playlists, favorites, channels, history, actor browse, genre browse, and discovery recommendations. The previous text-only lists have been replaced with rich thumbnail grids
  • Server-side thumbnail proxy routes all client poster images through the server, improving load times and reducing external network requests from clients
  • Tap-to-expand poster viewer across all detail views lets you view full-screen poster art with a single tap
  • Adaptive shadow on poster images in movie, show, and album detail views for added depth
  • Branded poster placeholder eliminates layout jumps on detail views while images load
  • Alphabetical search results sorted with leading articles ("The", "A", "An") dropped for natural ordering
  • Pill-shaped Recent Searches with an increased history limit from 10 to 25

Library Import & Metadata

  • Import Issues view surfaces unmatched media in the Library tab, letting you see which files failed to match, delete them with full cleanup, or submit them for review. Absolute file paths are shown for easy identification
  • Improved movie title parsing handles dot-separated directory names, extracts IMDB IDs from NFO sidecar files, falls back to grandparent directories and base titles for edition suffixes, matches mid-string years, and tries both "and" and "&" variants when searching
  • Metadata re-match with visual progress shows a progress indicator during library re-scans when backfilling metadata for previously unmatched content
  • Duplicate TMDB match consolidation during re-match prevents the same movie from appearing multiple times
  • Mini-series support for Part-numbered files in show locations (e.g., "Part 1", "Part 2" recognized as episodes)
  • Media naming guide added as a reference for library import best practices
  • Music location scanning is now enabled — adding or restoring music files in a music location is properly detected by library scans (previously music locations were skipped entirely)
  • Type-aware audio routing during scans prevents misclassification: audio files in movie or show directories are now skipped instead of being indexed as songs, and music files in catch-all "general" locations are routed correctly
  • Music cleanup cascade — deleting a song's last file now cascades through to remove the song, then its album (if no other songs remain), then its artist (if no other albums remain). Library cleanup also performs an orphan sweep that removes any song/album/artist/movie/show/episode records left stranded by older deletions
  • Cleanup affected summary now includes artist counts alongside movies and shows, with sample lists showing affected artist names
  • Per-provider configurable rate limits in the metadata provider edit sheet — TMDB now defaults to 4 req/sec (matching their actual quota); other providers default to 1 req/sec, and any provider can be tuned individually. Custom rates appear in orange on the provider row
  • Verify API key button in the provider edit sheet to validate a key without saving the form
  • Edit support for keyless providers like MusicBrainz and LRCLib so you can adjust their rate limits even though they have no API key
  • Fix same-name TV shows merging into a single record during import when they are actually different series
  • Fix TV show metadata matching when the directory name includes a year suffix
  • Fix franchise-numbered movies matching the wrong TMDB result (e.g., "Rocky 3" no longer matching "Rocky")
  • Fix movie file misassignment caused by year-insensitive metadata matching
  • Database integrity migration to FK CASCADE and triggers for referential integrity

Library Maintenance

  • Admin Library Scanning controls in Client Settings let admin devices kick off a server library scan, watch the discovery and scanning phases update every five seconds, see file counts update live, and cancel a running scan — all from the client without needing access to the Server UI
  • Admin Library Cleanup controls let admin devices start a cleanup scan, review the affected media list when results come back, and either confirm or cancel the cleanup. Empty cleanup results auto-acknowledge and return to idle
  • Admin gating is enforced on every maintenance endpoint server-side; the entire maintenance UI is hidden for non-admin sessions
  • Database version safety check — if a Server build with an older schema tries to open a database that's already been migrated by a newer Server build, it now refuses to start and shows a clear "Database Incompatible" alert with both version numbers and a Quit button, preventing data corruption from schema mismatches

Multi-File Movies

  • Multi-file movie edition selection on the movie detail view lets you choose between different editions (e.g., Theatrical, Director's Cut) when multiple files are associated with a single movie
  • Smart part labels in the multi-file picker automatically detect and display meaningful labels from filenames
  • Bulk management of multi-file movies in the View Issues popup with section grouping and delete support

Streaming Pipeline

  • Split decode/encode pipeline architecture separates the GStreamer transcoding pipeline into independent decode and encode actors, improving modularity and enabling future per-component scaling. BDMV playback has been migrated to the new architecture
  • Fix BDMV playback resolving an actor deadlock during pipeline preroll and DTS-HD MA audio corruption
  • Fix SEGV crash in videoconvertscale caused by an unbounded post-decode queue
  • Fix audio/video sync regression introduced during the pipeline split, with real-time pacing added to the decode distribution loop
  • Fix AAC encoder failures on certain source files where the decode-side high-pass DC blocker was producing non-finite PCM samples that crashed the encoder. The DC blocker is now bypassed for AAC, and the encode pipeline includes a sanitizer that normalizes any NaN/Inf values and clamps over-range samples before pushing buffers to the encoder, so encoder stability is preserved even with malformed source audio

Remote Access

  • Remote Access Invite system for onboarding devices that are not on the local network. Create invite codes on the server, optionally pre-assign device aliases, and have remote clients join via the invite flow without needing local discovery
  • Remote Access toggle in Settings > Options for easily enabling or disabling remote connectivity
  • Fix tailnet reconnection and ping timeout issues for remote invite connections
  • Increased firewall diagnostic frequency from 1 hour to 1 minute for faster troubleshooting

tvOS

  • Cinematic server list redesigned with a hero image and shelf layout for a more immersive tvOS experience
  • Redesigned server management with compact grid items and gradient cards
  • Custom focus glow for poster images, actor grid items, and cast member cards using a green highlight effect
  • Library tab grid restyled to match the server list shelf cards — folder and file items now use the same green focus glow as poster grids, with a tap glow pulse animation when selected. The text label sits outside the card so it's no longer trapped inside the focus platter, and folder/thumbnail fills are bumped to a higher opacity so the focus shadow renders correctly
  • Smaller grid item labels reduced from title3 to callout font for a cleaner grid appearance
  • Disconnect confirmation alert prevents accidentally exiting a server connection
  • Redesigned Add to Playlist popup with improved focus behavior and spacing
  • Fix Downloads navigation showing a warning triangle instead of the downloads view
  • Fix remote connect failing with a mkdir permission error on tvOS
  • Various focus navigation fixes including tab focus syncing, focus recovery after content rebuilds, and preventing the Channel Guide from stealing focus on tab appearance

Client UI

  • Redesigned DownloadsView with Form layout and corrected show title grouping
  • Redesigned MediaDetailView with Form layout matching the video playback view for visual consistency
  • Screencap thumbnail added to episode detail view for a quick visual preview
  • Per-episode watch progress indicator in ShowDetailView shows a small pie chart on each episode row indicating how much of that episode has been watched on the current device. Episodes with no play history show no indicator
  • Consistent toolbar button ordering across movie detail, episode detail, and video playback views so transitions between screens feel natural
  • Favorites moved into Playlists tab with the root toolbar button removed for a cleaner top-level layout
  • Settings tab added to the client tab bar with cache clearing functionality
  • Polished Settings layout with idle-state dividers separating the action buttons from status content in the Library Scanning, Library Cleanup, and Caches sections
  • Top-aligned grid items so mixed-height media rows display consistently
  • Green glow pulse animation provides tactile feedback when tapping grid items
  • Extended subtitle delay range from ±3 seconds to ±7 seconds for finer subtitle timing control
  • Version string links to release notes in the About view
  • Prevent accidental server deletion on iOS and macOS with a confirmation step
  • Disconnect option added to the server list alongside Edit and Delete
  • Improved download status popup with better layout and UX

Server

  • Per-client watch history stats tracked and displayed for each connected device
  • Admin role enforcement for library-mutating operations, preventing non-admin devices from modifying content
  • Network interfaces section added to the server StatusView showing active network adapters
  • Client app identification with app identifier and version included in login requests for better diagnostics
  • Device sorting within each recency section by most recent first
  • Channel storage migrated to SQLite from UserDefaults with FK CASCADE for improved reliability
  • Metadata cache clearing when deleting movies or shows to prevent stale data
  • Channel filter summaries use proper singular/plural forms ("1 movie" vs "5 movies") instead of "(s)" suffixes across all video, music, and photo channel types
  • Sparkle update download URLs now use immutable version-specific filenames instead of the -latest.zip symlink, eliminating signature/length mismatches that could occur if a newer build was uploaded between when a user saw the update prompt and when they actually installed it

Bug Fixes

  • Fix SIGPIPE crashes on both client and server caused by broken pipe signals, resolved by ignoring the signal at startup and preventing Sentry from overriding the signal handler
  • Fix channel playback incorrectly showing a resume prompt when replaying a channel
  • Fix album auto-advance stopping after track transitions in music playback
  • Fix download audio failure and favorites episode navigation
  • Fix thumbnail sizing and centering for non-16:9 aspect ratios
  • Fix index-out-of-range crash in MediaGridView on reconnection
  • Fix encode pipeline video negotiation failure and parallelize bookmark loading
  • Fix Swift 6.2 data race errors in GStreamer pull loops
  • Fix missing back button on views pushed from the discovery wizard (movie detail, Similar Titles)
  • Fix show thumbnail columns in search results — show thumbnails were reading the wrong row indices after a column addition shifted offsets, causing missing or incorrect poster art in search results
  • Fix LibraryValidator path resolution that was passing a relative path directly to the absolute-path resolver instead of first constructing the proper virtual path
  • Fix RecommendationEngine genre thumbnails that were using raw relative paths instead of resolved virtual paths