github Moonfin-Client/Moonfin-Core 2.5.0
v2.5.0

3 hours ago

Moonfin 2.5.0 Release Notes github

Moonfin 2.5.0 is about the parts of the app you meet first and use most. New installs now get a setup wizard that asks how you want the app to look and shows you real previews built from your own artwork (you can access it from Settings > About > Run setup again). There's a new Aya media bar style, Media3 is now the default engine on Android phones and tablets, libraries finally have the full set of sorts and filters, personal ratings are added to the detail screens, Android TV can download for offline, and the retro game side got a controller remapping screen and a lot of hardening from real play testing. On top of that this is the biggest translation round Moonfin has ever had, with over fifty languages updated.

Features

Setup Wizard

  • New installs now start with a setup wizard. After you sign in it asks three questions about how the app should look, the navbar position, the media bar style, the home row style, and the detail screen style, then shows you what else is in here.
  • Every choice comes with a live preview built from your own library artwork, so you're picking from what it'll actually look like rather than a description.
  • It only asks about things it can't work out on its own, and it skips anything you've already chosen. All the answers are saved as one batch at the end instead of one push per tap.

Aya Media Bar

  • Aya is a new media bar style, a rounded hero with the title logo, an ambient background that picks up the artwork, and a subtle depth shift on the backdrop.
  • Slides move with a smooth transition, the focused card expands, and trailer previews play in the bar the same way they do in the other styles.
  • It's tuned separately for mobile and tvOS, and it shows up as a preview option in the setup wizard alongside the other five styles.

Android Playback Engine

  • Media3 is now the default engine on Android phones and tablets, not just Android TV. It's marked as recommended in settings and mpv is now the legacy option there.
  • Capability probes are saved and reused across launches. On a cold boot the app could ask the display and audio chain what they support before the HDMI handshake had finished and get an answer that said the device could do nothing, which forced everything to transcode until you restarted. It now starts from the last known good answer and re-probes when the app resumes. A real change, like a soundbar being unplugged, still lands.
  • Dolby Vision Profile 8.1 direct plays on HDR10 devices.
  • 8 bit H.264 High family profiles keep direct playing instead of being pushed into a transcode.
  • Atmos stereo downmix works on more devices. Dolby's platform E-AC3 decoder renders Atmos out to 7.1.4, which is twelve channels, and a channel count with no downmix matrix took the whole audio track down with it. The matrices now cover up to twelve channels.
  • Playback retries without an audio codec the device just proved it can't decode. Some decoders accept a format on paper and then throw on the first frames, and the retry used to hand back the same codec and fail the same way. The codec is now dropped from the profile before the retry.
  • Resume seeks are confirmed to have landed before playback resumes, since a seek issued early in a file's life can quietly fall back to the start.

Libraries

  • The missing sorts are in. Date Added, Date Episode Added, Premiere Date, Rating, Runtime, Critic Rating, Community Rating, Last Played, Play Count, Artist, Track Number, Genre, and Folders First. Each library only offers the sorts its items can actually answer, and every sort falls back to sort name so paging stays stable.
  • A lot of new filters too. In Progress, Unreleased, Trailers, Extras, Theme Songs, Theme Videos, picture quality, source format for DVD, Blu-ray and ISO rips, year ranges, audio language, and subtitle language, plus a Clear Filters button.

Personal Ratings

  • Rate anything, your way. Personal ratings can now be a like and dislike, five stars with half stars, or a score out of ten, picked under Personalization. Ratings are stored in your media server's own user data, so other clients signed into the same account see them, and switching styles never rewrites what you already saved.
  • Ratings expanded well beyond movies to series, seasons, episodes, music, albums, artists, books, audiobooks, and collections, each holding its own rating. Your rating can show as a source in the ratings row, and libraries gained a Liked and Disliked filter along with a My Rating sort.

Home Screen

  • A Live TV favorites row for your favorite channels.
  • A Studio row, with the studios themselves as the row content.
  • Sort order toggles for the Audio, Collections, Favorites, Genres, and Playlists rows.
  • A media type badge visibility setting, now on mobile as well as TV.
  • Continue Watching and Next Up page properly instead of stopping at the first eighteen items.
  • Recently Released can be set to a specific series type.
  • New spoiler free toggles, with the details and home settings panels reorganized around them. Episode descriptions now follow one shared rule everywhere they appear, including Next Up and episode lists.

Seerr

  • A Seerr Browse shortcuts row on the home screen, with backdrops for each shortcut.
  • Expanded browse sorting and filtering, including Released, Minimum Rating, Minimum Votes, Original Language, and Runtime.
  • Duotone genre backdrops with a centered genre label, and the artwork behind the label darkened so it stays readable.
  • Seerr row titles are localized, and the browse buttons resize for longer translated strings.
  • Continuing series can be requested again while another season is still pending, and seasons you already have stay marked.
  • Blocklisted titles are hidden everywhere discovery shows them.

Live TV

  • Series recording from the guide. You can now set a whole series to record instead of one showing at a time, on both Jellyfin and Emby.

Downloads

  • Android TV can download for offline now. Downloads are routed per item rather than the platform being excluded outright, and the item page actions sit behind an opt in toggle in download settings.
  • A download concurrency queue with a visible queued state, so a long list doesn't all fight for bandwidth at once.
  • Server transcode progress and an ETA for transcoded downloads, so you can see the server working rather than a bar that sits still.
  • Saved episodes group under their series in Saved Media instead of filling the list one at a time.

Retro Games

  • Controller remapping, with a capture screen that reads your actual controller, on both Android and desktop.
  • A low latency native input path for Android gameplay, separate from the app's normal input handling.
  • FBNeo has been added for arcade, natively on Android and desktop and through EmulatorJS on iOS. It's deliberately left out of the Apple bundles because its license asks frontends not to redistribute it, and since tvOS has no WebView there's no arcade path there at all.
  • A reset button next to each core in settings, so a setting change that stops a core from starting is recoverable.
  • Cores that fail to load now fail gracefully instead of taking the app down, and the libretro host's threading, teardown, and option lifetime were hardened across every platform.
  • Stella now gets the virtual filesystem it asks for, which is what had been making it reject every Atari 2600 ROM, and Genesis Plus GX cache paths are hashed down under its 256 byte limit so long paths stop breaking some Sega games. If you have one of those games already cached you'll need to clear it once.
  • Game artwork moved onto a manifest based pipeline served by Moonbase, with backend overrides.

Admin Panel

  • The metadata editor gained its missing fields. Air days, per field metadata locks, series display order, and collection display order.
  • Dropdowns come from the server instead of free text for ratings, metadata language, and country, and from fixed lists for series status, 3D format, and person type.

Desktop and Input

  • Standard media playback keys have been added for desktop keyboards. K to play and pause, J and L to seek, H to exit, F for fullscreen, M to mute, C for subtitles, and comma and period for speed.
  • A volume slider in the music player on desktop, sitting next to the favorite icon and sharing the video player's volume icon.
  • A scroll sensitivity setting for desktop, for mice and trackpads that scroll far too fast.
  • The in app keyboard follows your language. It picks QWERTY, AZERTY, or QWERTZ from the app locale, and holding a key opens its accented alternates.
  • An interface layout override on Android and desktop, for devices that get read as the wrong kind. Foldables reporting as TVs was the common case.
  • moonfin:// deep links are registered on Windows, macOS, and Linux instead of only the mobile and TV platforms. (Home Assistant anyone?)
  • External player support reaches mobile, not just Android TV.
  • A details screen setting that opens remote trailers in your external app rather than the built in player.
  • A mobile setting to turn off the volume and brightness swipe gestures.

Audiobooks

  • Bookmarks and notes back up to Moonbase and sync between devices, working from local storage first so nothing waits on the network.

Playback Options

  • A skip action can be set per media segment type rather than one setting covering all of them.
  • A separate subtitle style for HDR playback, since what reads well on SDR often blows out on HDR.
  • Subtitle and audio delay moved into the footer of the track selector, where they're easier to reach.

Emby

  • Remote subtitle search and download now works on Emby servers.
  • Intro segments are bound by the chapter after them, which is how Emby actually marks them.

Diagnostics

  • Crash reports are caught and uploaded to your own server. Reports are written at capture time so a hard kill loses nothing, they're held until a server that accepts them is reachable, and there's a switch in Diagnostics settings to stop them ever leaving the device. Nothing goes anywhere but your server.
  • Playback diagnostics now report who declined direct play, the device's video codec capabilities, and the subtitle track mapping, and iOS forwards the playback engine's own log into the report.

Bug Fixes

Playback

  • Auto bitrate no longer breaks direct play.
  • The server's frame rate is used when the container doesn't report one.
  • The refresh rate switch recovery stays armed until the television has actually finished switching, so auto resume works instead of firing into a black screen.
  • The detail screen underlines the track playback will really start on rather than whichever one the container flags as default.
  • Fixed the black screen on Dolby Vision Profile 7 direct play when the first sample never completed.
  • ASS and SSA subtitles no longer crash the player. Every libass call now runs behind a single lock.
  • Dead mpv connections fail fast so the reconnect options can actually engage.
  • The Media3 buffer budget stays inside the app heap, which fixes direct play dying after about two minutes on a Fire TV Stick HD.
  • The Media3 view mounts for audio wherever the backend runs, so MP3 playback works on the Media3 engine.
  • Media3 can reach a self signed server.
  • A working H.264 profile is kept when the Android codec probe comes back empty, and a bad probe result is repaired rather than shipped.
  • 10 bit video vetoes are stated positively, so the server re-encodes for devices that can't decode them instead of stream copying.
  • MediaTek AVC decoders are no longer trusted about High 10 support.
  • The codec probe retries when HEVC goes missing or the probe channel fails.
  • The audio channel limit no longer overrides passthrough, so a stereo cap stops killing bitstream output.
  • TrueHD is no longer advertised to the server for mpv on Android phones.
  • Pause state survives a stream re-resolution instead of resuming on you.
  • MP2 and MP3 are kept out of the HLS offer on Apple, so those transcodes stay playable.
  • Transcode reasons name the subtitle codec responsible instead of leaving it unexplained.
  • Double tap seek is ignored while a pre-roll is playing.
  • The skip segment auto hide now defaults to off.
  • Playback preparation survives the player's forced rotation unmounting the screen you tapped, the player closes on a silent abort instead of hanging, and the launch slot is released when you back out.
  • Tapping play gives immediate feedback rather than a few seconds of nothing.
  • Previous restarts the current item when there's nothing before it, instead of stopping playback, and the button now shows on tvOS and MPRIS.

SyncPlay

  • Drift correction no longer loops on clients that seek slowly.
  • Pause no longer goes dead after a seek.
  • A seek's own latency is no longer corrected as if it were drift, and a group seek can revive drift correction again.

Apple

  • The home screen preview is served over HLS on Apple, so it stops transcoding into a blank frame.
  • Media bar trailers stay out of an active player session, and home trailers stop when a route is pushed on top of them.
  • Live TV programs opened from the On Now row tune to the channel instead of failing with repeated errors.
  • Pressing the clickpad sideways with the OSD down seeks straight away.
  • Siri remote glide navigation was reworked, and the remote no longer latches focus while a swipe is held.
  • The tvOS system keyboard opens on the first click.
  • The browse grid has room for the focus scale, so hovered items stop being clipped.
  • The focused Classic row stays visible with the Aya media bar.
  • Top Shelf images are requested at a decent quality.
  • Skip segment focus works on tvOS.
  • External subtitles on tvOS get their name, language, and a URL that resolves.
  • Downloaded subtitles are selectable on the Apple engine, and it no longer loses subtitle cues it can never reload.
  • The subtitle offset reaches the bottom edge of the screen on tvOS and web.
  • Multi-line subtitles are centered, with the gap between their backgrounds closed and the line height pinned to the glyph box.
  • The Saved Media panel has a way out on iPad, and you can start playback from the panel.
  • iOS playback startup is bounded, and downloads are no longer abandoned when one errors.

Android

  • Stale video sessions are ended after backgrounding without throwing away where you were in a video.
  • Android TV launcher cards are published as 16:9 thumbnails instead of posters.
  • The Watch Next background worker is skipped while the app is in the foreground.
  • Completed downloads play instead of being forced into a Dolby Vision transcode.
  • Media3 subtitle offset and size no longer change with the video's aspect ratio.
  • A pad axis that has never rested centred is ignored, which fixes the uncontrollable upward scroll.
  • The download TLS fallback fires on whatever exception type Android reports, and the legacy engine is gated on the self signed certificates setting.

Desktop

  • A maximized window is remembered across restarts, and Windows no longer saves a maximized window as its windowed size.
  • Desktop lifecycle changes no longer restart playback, and scroll wheel steps are paced.
  • The context menu opens where you clicked, and the row under the pointer lights up.
  • Playback controls no longer flicker on click, and web page controls hide on click.
  • The skip button no longer reappears along with the controls overlay after the auto hide timer has hidden it.
  • Fullscreen is restored after the first frame instead of on a timer.
  • The snap package matches the build host so it finds its own audio libraries.
  • Windows download paths keep their drive letter.
  • The Linux video texture is rebuilt after a long render idle, through a media_kit fork we now track.
  • Navbar opacity reaches zero on the sidebar.

Home and Details

  • Studio logos are matched on a shared name start, so the right logo shows up.
  • The Studio row no longer reads the entire studio list to build itself.
  • The trailer button shows for movies that have local trailers.
  • The media bar gradient fades, so a trailer that stops briefly stops flashing the screen.
  • Media bar source collections save where the media bar actually reads them.
  • Mobile media bar trailers stop playing when you leave the home screen.
  • Focusing the toolbar no longer pauses the media bar.
  • The home row info overlay and theme music are turned off on the mobile interface, along with their settings.
  • Forced wide image rows keep the same size as modern rows, and the change stays out of Live TV and library tile rows.
  • Backdrops stop resetting their fade during rapid navigation.
  • Artwork memory and stale keyboard bindings are freed when video playback starts on TV and mobile.
  • Books show their summary and stop being described as audiobooks.
  • Music track rows put the runtime on the artist line, drop the per track year, and lose the redundant play button, so titles stop getting cut off on narrow screens.
  • The play button's real width is measured before the action row folds.
  • Collections use a recursive query with a top level item filter again.
  • Search posters are requested at the size the other card grids use, so they stop looking blurry.
  • Library search and filters apply when Group By is active.
  • Search results stay up when back closes the TV keyboard.
  • The source pickers no longer delete ids they couldn't display, which was losing data.
  • Up Next lists from the track that's playing rather than freezing on the start of the queue.
  • A zoomed comic page pans instead of the page view stealing the drag.
  • Personal rating icons line up on the mobile classic detail screen.
  • Seerr navigation is marked active when you're in it.
  • Admin plugin filters stay usable when they come back empty.

Right to Left Layouts

  • D-pad focus movement is no longer inverted in locked focus rows.
  • The top toolbar mirrors properly, including icon order, the clock, and the avatar, and the navbar itself is pinned to left to right.
  • Hero banner arrow navigation, the remaining tab bars, and carousels all navigate the right way.
  • Quick Connect code digit groups are no longer reordered.
  • The details action bar and tab bar align correctly.

Casting

  • Each Cast receiver is listed once instead of appearing several times.
  • H.264 is capped at level 4.1 for Cast receivers.
  • Your max bitrate preference is honoured when casting, lowering the ceiling without ever raising it.
  • A failed track pick no longer sinks the whole cast.

Connections and Accounts

  • A dead token at startup no longer bursts 401s past fail2ban and locks you out.
  • An unreachable server shows a localized message, and abandoned connection attempts no longer wedge the connection pool.
  • The session re-registers after a server restart, so media controls come back without rebooting the device.
  • Sign in is guarded against a second submit, which was bouncing people back to server selection after a successful login.
  • Servers with internationalized domain names connect properly. Hostnames stay Punycode encoded in the server list on purpose, since decoded Unicode hostnames can be spoofed.
  • Emby is no longer sent a field name it rejects, which fixes the genres options.
  • Downloads fall back to the in-process engine when one never starts.
  • Image requests all go through the shared cache manager with the server user agent, so they stay inside the disk budget and get cleared with everything else.
  • Addresses are redacted from diagnostic logs.

Audio and Subtitle Controls

  • Audio delay buttons no longer fire twice, so a 100ms step steps 100ms.
  • The subtitle outline is drawn under the text instead of stroking the glyphs, which fixes characters rendering wrong.

Contributors

Huge thanks to everyone who contributed this release:

Thanks as well to everyone who filed the issues behind these fixes, including @therealresonix, @AK-NF, @TheRealJayjayli, @r3df0chs, @badgals, @hutcle, @sabogalc, @ztark12, @clau-bucur, @managemygroup, and @bttfw.

This was the biggest translation round Moonfin has had, with more than fifty languages updated through Weblate. Thanks to managemygroup, SCHIZOPHRENE (French), Kisnov and Anonymous (Catalan), oskarkasprzyk and Mats Berg (Polish), idezentas (Turkish), tomdiers (German), Jelmer Houtman (Dutch and German), Simon Hung (Traditional Chinese), wabisabi926 (Simplified Chinese), mikey (Finnish), DrPleb (Italian), Simon Wigzell (Swedish), Simon (Danish), Vitor Abreu (Brazilian Portuguese), Юрий Сапегин (Russian), Farshid Mousavi (Old Persian), and everyone who translated anonymously. If you want to help translate Moonfin into your language, check out our Weblate project.

Don't miss a new Moonfin-Core release

NewReleases is sending notifications on new releases.