Moonfin 2.2.0 Release Notes 
This release reaches new ground on two fronts. The Apple TV app has been rebuilt on Moonfin's shared Flutter codebase, so the tvOS app now lives alongside every other platform, sharing the same home screen, interface, themes, and settings while keeping its native MPVKit playback core. And Moonfin now ships a native Windows ARM64 build, running natively on the latest Arm powered Windows PCs and laptops instead of leaning on emulation.
Around those two milestones is a large round of interface, music, playback, and audio work across every platform.
Features
Apple TV on the Shared Codebase
- The standalone Apple TV app is now built from Moonfin's shared codebase, bringing it in line with every other platform and keeping it in sync with future updates. It pairs Moonfin's full Flutter interface with a native MPVKit playback core.
- The native player has a complete on screen display, including trickplay scrubbing, track pickers, a quality menu, cast and crew, a next up card, a pause overlay, the show logo, end time, an info dialog, speed and zoom controls, and subtitle styling.
- Playback supports native Dolby Vision Profile 7 decode with HDR and Dolby Vision direct play advertised only when the connected display actually reports a P3 gamut, matching the original native app's sink detection.
- The Apple TV player includes Live TV, SyncPlay controls, a Still Watching prompt, a favorites button, and skip intro and skip credits driven by media segments.
- System integration came along too: Now Playing with remote commands, theme music, a TV screensaver with idle tracking and a wakelock, voice navigation, plus a top shelf and app icon. Media bar trailers and home episode previews play through a native preview channel.
Android TV and Now Playing
- Both Apple TV and Android TV gained Now Playing integration and a mini player, and Android TV now exposes a proper MediaSession so system media controls and remotes behave correctly.
- A new navbar embedded mini player keeps current playback visible while you browse, with smoother track transitions (#559).
Themes
- A new Theme Store lets you register, browse, and manage themes, with an optional description field for each theme.
- The navigation bar gained slot based color cycling for its icons, so navbar icons can cycle through your theme's accent colors.
Music
- Music got real attention on the home screen, with improved library sorting, row visibility, pagination, and titles (#563), refined music entries on the Home Screen (#565), and logical queue loading so audio queues build correctly (#564).
Interface and Home Screen
- UI Scaling is now available unconditionally across all device form factors, and the static metadata block on the details page was replaced with interactive, focusable columns for Directors, Writers, and Studios, with refined D-pad navigation (#528).
- TV Mode, the Expanded Home Rows full screen layout, now works on Desktop and Web UI in addition to TV, bringing screen by screen navigation and vertically centered rows, with mouse wheel snapping when scrolling goes idle (#531).
- You can now toggle the media details HUD on library pages (#548), scroll directly to the media bar while preventing scroll snapping when it is focused (#534), and move D-pad focus onto empty home sections (#567).
- My Media rows gained a transparent theme gradient placeholder with centered text while artwork loads (#469).
- The Artwork Selector lets you change an item's artwork through a long press or secondary click across browse libraries, detail screens, seasons, and search, complete with a zoom on click preview that resolves aspect ratios automatically and custom snapping on TV (#525).
Playback and Audio
- Watch progress now synchronizes between offline and online, so resume points stay consistent whether you watched on a download or while connected (#560, closes #376).
- Audio fallback was overhauled with explicit Maximum Audio Channels and Audio Fallback Codec settings, replacing the old downmix only behavior so multi channel content no longer collapses to stereo when transcoding is needed (#478).
- Added headphone auto-pause when headphones disconnect, such as removing AirPods or unplugging wired headphones, along with iOS media key fixes (#426).
- A new Advanced Playback long-press menu on the details page gives quick access to playback options (#425).
- Refined external player settings with selective routing (#510), and mapped backspace to back navigation centrally so keyboards and remotes behave consistently (#511).
Library, Discovery, and Settings
- You can now favorite Collections (BoxSets) (#491), sort by date added in mixed and home video libraries (#489), and Moonfin can pull and apply anime defaults from Seerr when configured (#500).
- Seerr navigation and settings now hide when unavailable (#477).
- Settings are now scoped per user account (#551), and the Moonbase Plugin settings (#518), Seerr config screen (#516), and SyncPlay panels (#513) were all cleaned up.
Platforms and Builds
- Added a native Windows ARM64 build, and expanded the mobile APK to include the armeabi-v7a and x86_64 ABIs for broader device coverage.
- Implemented graceful shutdown on desktop and Apple TV.
Bug Fixes
Playback, Audio, and Subtitles
- Fixed a freeze on certain Android TVs, notably MediaTek based Sony models, where playback would hang on a black screen after a Cinema Mode intro, and the matching failure when autoplaying the next episode. The track selector is now created per player instance so rebuilding the player no longer crashes the playback thread with a cross thread access error.
- Fixed an mpv "could not open codec" failure by routing video through GPU output.
- Resolved playback session races and improved stopping behavior (#538).
- Fixed play and pause over remote control and enabled robust headset actions (#508).
- Persisted media info selections and corrected track propagation (#539), and fixed audio stream switching along with the on screen display remux label (#546).
- Fixed subtitle visibility leakage, UI track sync, and missing episodes in the play queue (#496), made manual subtitle and audio selections stick across transcoding and direct streaming (#509), and fixed subtitle persistence and startup selection on Android TV (#561).
- Fixed text subtitles being both burned in and overlaid at once (#470), the subtitle defaultToNone logic reversal (#468), and disabling subtitles on Apple TV.
- Delay and offset controls now show only for the MPV and MediaKit backends (#571).
- Fixed the disappearing chapter button in playback queues (#497), stopped external players from hitting the restrictive device profile query (#495), and suppressed the loading overlay during trickplay seeks (#472).
- Fixed connection leaks and track selection carryover in autoplay (#466), offline playback freezing and file path resolution (#463), and audio stream index resolution on default selection (#467).
TV and Input
- Fixed USB keyboard, remote, and Flirc input issues (#481).
- Restored missing initial focus states across settings screens on TV (#514), disabled wrap-around focus traversal on settings menus (#536), and fixed details page metadata focus navigation and boundaries (#535).
- Cleaned up Home Row Toggles behavior (#515), fixed the remote PlayNow route startup on Android TV (#526), stopped home rows from stealing focus while the exit confirmation overlay is open (#547), and improved TopToolbar D-pad key handling.
- Improved SyncPlay TV interface focus, keyboard handling, and the empty queue bypass (#475).
- Updated DLNA and Google Cast device discovery and remote control so devices are found reliably.
Home Screen and Navigation
- Fixed pagination infinite loading loops in lists and grids (#529).
- Fixed missing library images and incorrect sorting in the multi server My Media row (#505), missing thumbnails for music videos and videos (#490), and folder navigation and image display in nested mixed libraries (#498).
- Fixed Expanded Home Rows focus and visibility during mouse scroll (#570) and removed the jiggle during Expanded Home Row navigation (#557).
- Fixed the current episode highlight color and focus clash (#499), linked the Read More toggle to the top navbar with corrected viewport scrolling (#541), and delayed row snapping during mouse wheel scroll (#545).
- Refined home screen row alignment and media bar visibility (#552), focus indicator boundaries and card rounding (#555), and metadata container rounding and headers (#554).
- Fixed Playlist page filtering and total count display (#569), and added a permission check so the Recently Added section only shows when allowed.
- Preserved custom library image tags in aggregated views (#439), fixed the grey screen navigation crash in the web client (#473), fixed the Next Up loading issue (#479), and removed the minibar that appeared during casting (#484).
- Fixed Neon Pulse sidebar color flipping, layout shifting, and highlight overflow (#530), plus general sidebar collapsed and expanded fixes (#465).
Accounts and Platforms
- Fixed Auto-Logon Current User behavior (#436) and account switching on Android TV (#453).
- Fixed Emby integer ID cast crashes and the Emby Connect login crash.
- iOS now dynamically migrates absolute file paths after an app update (#502).
- On Desktop, fixed the title bar staying visible on maximized fullscreen and ignored toggles on windowed fullscreen (#482), and disabled double click for fullscreen (#471).
- On Emby, fixed resuming a TV item resetting its progress (#483) and the Latest Items issue (#462).
Other Fixes
- The app now respects the 24-hour clock preference throughout (#442).
- Refined new user default settings (#558) and added the Seerr rows and Expanded Rows toggles to plugin sync (#562).
- Hid the refresh rate toggle on incompatible devices and relocated Live TV Direct (#437).
- Fixed missing settings labels and text in regional locales (#553) and renamed hyphenated localization files with an exact match locale callback (#459).
- Fixed the Automation and Queue Next Up display setting layout (#434), and fixed the Theme Store dialogs failing to open.
- Removed the unused KefinTweaks support from the client and server packages (#568).
- Replaced the broken in-app download and installer flow with opening the per-platform asset link directly, so the browser or OS handles updates, and removed the unused Android APK install code.
- Optimized image loading and backdrop handling in the media bar and details screen, and ensured playback pauses before the player widget is disposed so audio no longer leaks during transitions.
Contributors
Thanks as well to the Weblate translators who keep Moonfin localized.