github Moonfin-Client/Moonfin-Core 2.6.0
v2.6.0

3 hours ago

Moonfin 2.6.0 Release Notes github

Moonfin 2.6.0 is the biggest release Moonfin has had, around six hundred and sixty commits from more than twenty contributors. There are three new detail screen styles, Kids Mode strips the app back behind a PIN, and if your server runs the Achievement Badges plugin, Moonfin now draws the whole thing natively. Windows can send HDR to your display untouched, you can follow a series and have its new episodes downloaded on their own, and N64 games are finally playable on Android through hardware rendering. Live TV got a redone guide and a quick channel changer, anime libraries can show filler and canon markers, and the loading animation, screensaver and animation speeds are all yours to customize. Android TV also stops being so zoomed in and matches the other TV clients UI scale, which is worth the upgrade on its own.

Features

Three New Detail Screen Styles

  • Spotlight. The title or logo sits on a hero over a full bleed backdrop, with Play and a few actions under it and the rest behind a More Actions menu. The backdrop rotates through the item's own artwork.
  • Spotlight has cards instead of tabs. Cast, Chapters and Extras, Similar and Recommendations, Seasons and Episodes and the rest each get a card with artwork and a count. Opening one brings the grid up as a pop-up. Person pages get a still from the filmography as their backdrop, with separate cards for what's in your library and what Seerr knows about.
  • Nouveau is a full screen layout that stacks its sections one after another instead of hiding them behind tabs.
  • Minimalist is artwork, one play button and the episodes, and nothing else.
  • All three are on every platform and all three appear as previews in the setup wizard.
  • Missing collection items. A collection now shows the titles you don't have next to the ones you do, marked with a Seerr badge. Opening one takes you to its request page. Modern has this too.
  • Season tiles show their Seerr availability, with a toggle to hide them.

Achievement Badges

  • Moonfin draws the Achievement Badges plugin natively. The plugin's own interface only worked by injecting scripts into the Jellyfin web client, so it had been invisible here. If your server runs it, Settings > Integrations > Achievement Badges opens the whole thing. There is nothing to turn on, the entry appears once the server answers, and Moonbase is not involved.
  • A rank header with your tier, score, the bar to the next tier and the points left to reach it, plus badges unlocked, completion, and your current and best streak. A showcase strip holds the badges you pinned.
  • Badges open onto their own page, with the description, progress against the target, and the titles the plugin suggests watching to finish it. Tapping a suggestion jumps straight to that item. Badges group by category, filter by All, Unlocked or Locked, and secret ones read as hidden.
  • Daily and weekly quests, each with its goal, progress and reward. You get one reroll of each to swap a set you don't want, coming back at midnight UTC or on Monday.
  • A score bank and power-ups. XP Boost doubles score for an hour, Double Credit makes the next thing you finish count twice, and Streak Freeze covers one missed day. Hold and spend them in the loadout, and buy more from the shop with score.
  • Avatars and rank titles are bought with score or earned at a lifetime score, and what you wear replaces the rank icon and name on the header.
  • A stats screen of watch records, what you watch and when, and variety across genres, decades, countries and languages.
  • A leaderboard, a week, month or year recap, per-library completion, and an activity feed of what the server has unlocked lately. Your admin can switch the leaderboard, quests and feed off from the plugin, and privacy mode hides the server wide figures.

Kids Mode and Parental Controls

  • Kids Mode strips the app back and locks the way out with a PIN. It's under Settings > Account & Security, and turning it on asks you to set a fresh PIN, separate from the sign-in one and cleared when you leave.
  • What goes away. Settings collapse to a single Exit Kids Mode entry. Admin, Seerr, Live TV, SyncPlay and the libraries menu leave the navigation. The home screen keeps the library tiles and one combined Continue Watching and Next Up row, search loses its Seerr tab, and detail screens lose their admin, download, delete and request buttons.
  • Detail screens are forced to Minimalist with no technical details, no description, no ratings and no expanded tabs, and trailers stay in the app rather than opening YouTube.
  • Deep links to admin, Seerr and Live TV bounce back to home, so a saved link can't get around the hidden buttons.
  • Wrong PIN attempts back off after five tries, up to fifteen minutes. Nothing you had set is rewritten, so switching it off gives your own layout back. It's off by default and deliberately doesn't sync, so putting the TV in Kids Mode doesn't lock your phone.
  • Blocked ratings block everywhere now. They only ever filtered home rows. They now cover search and its suggestions, favorites, library and folder browsing, the media bar, multi-server rows, the detail screen and playback itself, and a blocked title shows a padlock rather than artwork.
  • Episodes are judged by their series rating, so blocking a rating no longer leaves the episodes playable underneath a hidden series.
  • The list is a ceiling. Blocking a rating blocks everything stronger than it, and ratings the app can't rank sit in their own section that only blocks itself. The list is stored per server and per user instead of once per device.

Anime Markers

  • Anime episodes get Filler, Recap, Mixed, Manga Canon and Anime Canon markers, and episodes and seasons get Subbed, Dubbed or Subbed/Dubbed based on the audio tracks in your files. They show on episode and season cards, the detail screen, and the player's Next Up card.
  • They come from Moonbase, which matches your anime against the Anime Filler List and the Tenrai API with no API key needed, and reads the audio languages from your own files. Turn them on under Integrations, where each marker type toggles on its own. The first scan of a big library takes a while, since the sources are rate limited.

Live TV

  • The channel guide was redone. More channels fit on screen, the grid is anchored to the left with a mark on programs that started before the visible window, and the sort, date and recordings buttons moved above the grid so the genre filters get the full width. Programs that have ended show faded, and stepping left in the time bar is how you reach them.
  • A quick channel changer. Press up during live playback for a carousel over what you're watching, wrapping around instead of stopping at the ends, with the selected channel's program in a hero bar above it. Cards tint with the channel's genre color, the order follows your guide sort, down brings up the shuttle controls, and it goes away on its own after two minutes.
  • It works on Apple TV too, in the native player. Both players carry a Channels button for the carousel next to a Guide button for the grid.
  • The guide hero shows the program's own artwork and fuller program detail, falling back to the channel logo when a program has no image.
  • Episode titles and their numbering show in more places, including the program dialog and the now playing line, and a listing that names an episode without numbering it still reads correctly.
  • Back returns you to the channel you came in on, at now, instead of dropping you out of Live TV, and the guide opens on the channel you last watched.
  • Fast forward and rewind page the guide, squashed cell text scrolls as a marquee, and clicking a program defaults to Watch unless it's recording, where it defaults to cancelling.
  • Both the guide and the carousel refresh when a program boundary passes, so 5:59 turning into 6:00 updates what you're looking at.
  • A Live TV button for the top toolbar, sidebar and mobile bottom bar, shown only when the server has a Live TV library. It's off by default, under navigation settings.
  • Category filters cover the whole lineup. The Movies, Series, Sports, News and Kids chips only ever filtered the first fifty channels, so a sports channel further down could never appear. They now walk the whole lineup and page in more as you scroll.

Retro Games

  • Hardware rendering for native cores on Android. N64 games, which were unplayable on Shield and Fire Cube class devices, run now. There's an experimental kill switch on the game details screen if a device misbehaves, and the texture cache is capped to head off out of memory crashes. Don't crank the render resolution too far.
  • Emulator settings can be changed before launch, so a core setting that stops a game from starting, N64's default renderer for one, no longer locks you out of retrying.
  • The mapping screen says whether the buttons are customised for this game or for every game, so you know what a reset would change.

Native HDR on Windows

  • HDR titles reach an HDR display untouched. With Native HDR output on, mpv draws into its own window behind the app so HDR10 goes to the monitor as HDR10, instead of being tone mapped to SDR through the 8 bit texture the interface renders on. The controls, dialogs and OSD draw over it as before. It engages per playback, only when the title is HDR and the display is already in HDR mode, and Live TV and the mini player stay on the old path.
  • It follows the display if HDR mode changes mid session, and re-decides once mpv reports what it actually decoded.
  • mpv's statistics overlay can be opened for HDR diagnostics, and HDR and tone mapping keys are allowed through mpv.conf.

Downloads

  • Follow a series and its new episodes download themselves. Auto-download keeps up to a set number of unwatched episodes on the device, oldest first, skipping specials and unaired episodes, and removes them after you've watched them following a delay you choose. Checks run when the app connects or resumes, on library events, when you press Check now, and in the background through Background App Refresh on iOS and a WorkManager job on Android. Manual downloads and whatever is playing are never touched.
  • The downloads panel is now a Downloads home. An Active Downloads tab sits beside your saved media, and each item has a menu for playing from the start, opening the show, playing the next unwatched episode, or deleting a download, a season, or a set of episodes. There's a per-show screen, a strip showing how much of your storage limit is used, sorting by size, name or date added, and a search box.
  • Unwatched only. Downloading a series, season or collection asks whether you want everything or just the unwatched items, with counts on each, before the quality picker.
  • Transfer rate and remaining time for original quality downloads, which had no estimate at all before.
  • A Downloads button in the navigation, which stays hidden until you actually have something saved or a download running.
  • Downloads are refused up front when they won't fit, with the sizes, instead of failing partway through, and they're staged on the same volume as their destination so finishing is a rename rather than a copy.
  • Download notifications name the show and episode, are translated, and show progress on Android, and iOS asks for notification permission at the first download.
  • The downloads panel stays responsive with hundreds of items queued.

Loading, Skeletons and Animation Speed

  • Custom loading animations. Pick the Moonfin logo, a spinner, the running Moonfin, or one of three moon phase cycles, place it in one of nine spots or let it bounce around the screen, set its size and speed, and choose whether the text shows. It's under Settings > Extras with a live preview.
  • Skeleton placeholders replace blank space and lone spinners while the home screen, libraries and detail pages load, matching the card and row geometry so the layout doesn't jump once content arrives.
  • Animation speed settings for desktop and TV under General Style. Page transition fade from none to long, navigation speed, Modern card transition speed, and a toggle that delays card expansion while you scroll quickly with a D-pad.

Screensaver

  • The screensaver was rebuilt. Settings are grouped into general, visual components and library content, with a live preview that shows what you're choosing.
  • Gradient backdrops as an alternative to library art, including a Moonfin one, a Calm one, and a Neon Pulse that actually pulses.
  • A component on top. Add the Moonfin logo, a clock or the runner, with its own movement speed, one of nine anchor positions, and a size.
  • The source library, collection, genre and rating filters from the media bar now apply to the screensaver too, and all of it syncs through Moonbase.

Playback

  • Crop black bars. A new toggle that detects letterbox and pillarbox bars encoded into the file, crops them, and fills the screen. It's deliberately separate from Auto Crop, which is a plain cover zoom. It runs on desktop through libmpv and on Android phones and TV through Media3, and stays hidden where there's no cropper.
  • An app-side passthrough packer on Android TV. A Passthrough output setting lets you switch from the system's bitstream packer to Moonfin's own IEC 61937 packer, for devices where passthrough comes out silent or glitchy.
  • Chapter Marks, a synced toggle that marks where each chapter starts on the seek bar.
  • Pause While Scrubbing is now a choice. Leave it on for the pause and resume behaviour, or turn it off to keep playing and jump straight to the new spot.
  • Scrub thumbnails are preloaded several positions ahead and behind, and the previous frame stays up until the next one has loaded, so scrubbing stops flickering black.
  • Current Time joins the progress bar time slot options alongside elapsed, remaining and end time.
  • Audio settings name the two lists apart. The Audio Transcode Target row is split into Locally Decoded Codecs and Transcode Target Codecs, both built from the lists the device profile actually sends the server.
  • A dismiss chip on the skip intro prompt on mobile and desktop, so you can clear it instead of waiting it out.
  • The Android TV player closes when you've been gone a while. Come back more than thirty minutes after leaving the app and you land on the details screen instead of a stale held frame. The screensaver, an incoming call and picture-in-picture don't count as leaving.
  • AV1 Dolby Vision plays through its HDR10 base layer on Android and on the Apple engine, where it had given a black screen or a failed transcode.

Subtitles

  • A subtitle time offset on Media3, which only mpv had before.
  • Seven more colors. Light Grey, Grey, Dark Grey, Blue, Magenta, Navy and Semi-transparent White bring the palette to fifteen, on all six settings: text fill, stroke and background, for SDR and HDR separately.

Home Screen and Libraries

  • Jellyfin 12 recommendations. Similar items and the Since You Watched rows can use Jellyfin 12's server side similar items, and with Moonbase installed the scoring runs on the server so results come back fast without straining the client. Detail screens cap similar items at twenty and use the same two hundred point model the server does, so client and plugin results agree. Older servers fall back to client scoring.
  • Library sort and filter categories collapse, with Sort open to start, so a long filter list no longer means scrolling past sections you don't care about.
  • Music video playlists get their own section on the Playlists page, with a matching filter option.
  • A Modern cards on My Media row toggle. Turn it off for static landscape artwork sized to match the expanded cards on neighbouring rows.
  • Continue Watching and Next Up default to posters.
  • Mixed content libraries can feed the media bar and appear in the shuffle picker.
  • Comics. Books libraries detect comic formats and badge them, books and audiobooks get separate rows, and the Authors row is scoped to the section you're in.
  • A Show Book Library Discovery toggle, which hides the Open Library and LibriVox Discover tab inside book and audiobook libraries.

Details Screen

  • A customizable metadata row. Release year, parental rating, runtime and seasons, series status, upcoming episodes, genres and Seerr availability can each be reordered or hidden per device, and the layout syncs through Moonbase.
  • Upcoming episode air dates. Series and seasons say when the next episode airs, as Today, Tomorrow, a weekday or a date with the season and episode number, resolved from Sonarr's calendar through Moonbase with TMDB as the fallback.
  • Action Buttons on Screen. Pick how many action buttons stay visible before the rest fold into More Actions, from Play only up to ten, or All for a row that scrolls sideways.
  • Direct play failures explain themselves. When File Information says a file can't direct play, it lists the reasons in plain language with a hint about the setting that would change it.
  • Season cards show unplayed episode counts and watched checkmarks on the Modern style, which had lost them.
  • Badges are easier to read. Watched ticks, unplayed counts, favorite hearts and Seerr dots got a contrast ring and a shadow so they stay visible on bright, dark or red artwork, and they recolor the moment you switch theme.
  • Date added appears under File Information, and Remove from Collection is on the context menu and the detail screen for both Jellyfin and Emby.
  • Navigation chevrons on the Cast, Chapters, Crew, Extras, Studios, Seerr and Filmography rows, so desktop users can browse them with a mouse.
  • Long button labels scroll as a marquee instead of clipping.
  • Playlist reads Add to Playlist, the Seerr watchlist button reads Add to or Remove from Watchlist, and Watch with Group only shows when SyncPlay is set up.
  • Episode titles lose the "Episode X" prefix in episode lists, so the name has room on narrow screens.
  • The back button fades out with the top bar on scroll, and Quick Return works on detail screens.

Audiobooks

  • The audiobook player was laid out again. The chapter drawer has its own column on TV with compact rows that fit far more chapters, focus can leave it again, up and down stay within a column while left and right cross between them, the timelines are labelled by offset and the slider fills its row, the mini player title is reachable with a remote, and macOS gets the cursors and hover states it never had.

Remote Control

  • Moonfin answers the Jellyfin session API. Pause, seek and volume sent from another client or the web dashboard reach the player, and Moonfin reports its real volume back so the controlling device's slider stays in step.
  • D-pad commands on TV for move, select, back and home, plus fullscreen toggling on desktop.

Desktop and Input

  • A keyboard shortcut reference. Settings > About > Keyboard shortcuts lists the app, player and reader keys, and ? or F1 opens the same list on any screen trimmed to what applies there, including over a playing video.
  • Deep links can name the user. moonfin://play links accept a userId, so a cold start goes straight into that profile's session instead of the picker, unless the profile has a PIN or always authenticate set. (Home Assistant again.)
  • A Grandfather interface scale, a step above Extra Large.
  • Siri Remote touchpad swipe sensitivity on Apple TV, for a touch surface that carries focus further than you meant.
  • Keep video clear of the Dynamic Island, an iPhone setting that holds the picture back from the camera housing in landscape.

Emby

  • Client logs upload to an Emby server through the Moonfin plugin, and Emby network calls are recorded in the diagnostic report.

Privacy and Diagnostics

  • The web build no longer fetches fonts from Google. Roboto ships inside the app, so nothing about your viewers reaches a third party on startup, and pages render correctly on an offline or firewalled network. NotoSans now sits behind every theme rather than only the pixel ones, so non-Latin titles keep rendering everywhere.
  • Credentials are redacted from logged URLs, not just the host, and the redaction catches more URL and address patterns including internationalized domain names.
  • Media3's own HLS traffic is recorded in the diagnostic report, and the display capabilities the probe found are shown in settings.

Elsewhere

  • The glass theme's focus halo, button press feedback and sliding pill tabs were reworked.
  • The Tizen build target was removed from Core, since the Smart-TV client is what Tizen TVs run.
  • Moonfin is built on Flutter 3.47 now, and the tvOS project moved from CocoaPods to Swift Package Manager.

Bug Fixes

Android TV Layout

  • The interface is no longer drawn undersized on Android TV. A television tells the app how big its screen is, and different sets answer very differently for the same panel. Apple TV reports 1920 points across where a 1080p Android TV reports 960. Moonfin's ten-foot screens are drawn against one reference canvas, but only Apple TV was laying out on it, so on Android TV every card, font and padding written for that canvas came out around two thirds the size it should have been. Every television now uses the same canvas and scales the result up to fill the screen.

Playback on Android

  • DTS:X and TrueHD passthrough stop downgrading. A brief HDMI audio route drop re-probed the device into a lesser answer, so DTS:X came out as its 5.1 core. The capability is now held through the drop.
  • Sound comes back on resume. A passthrough audio track that went silent is rebuilt, with writes held until the dead track is released so the replacement can open.
  • 4K Dolby Vision with passthrough no longer freezes after about seventy minutes. The audio HAL resetting mid stream stopped the audio clock, and playback stalled behind it.
  • Multichannel PCM survives an HDMI renegotiation instead of latching a stereo downmix for the rest of the session.
  • Two channel TrueHD plays on devices whose bundled decoder stalls on it. The profile asks the server for a surround track there.
  • A ten second skip no longer buffers for half a minute on low-RAM devices. The watchdog seeks in place to unwedge the player before giving up.
  • Passthrough toggles are respected. Turning a codec's passthrough off didn't remove it from the device profile, so the server kept sending the original EAC3 bitstream to a chain that couldn't handle it. Only the audio transcodes now, and the video is left alone.
  • Transcode subtitles are in sync on Media3, where they drifted while the same file was fine under mpv.
  • A title left paused through the screensaver resumes where it was. Android hands decoders to whatever needs them, so the screensaver could take the player's, which Media3 reported as unrecoverable and ended the session.
  • SubRip lines that share a timestamp stack instead of painting over each other.
  • A codec probe that can't answer no longer forces the whole session to transcode, and a failed display probe keeps what it found rather than erasing the saved capabilities until a restart.
  • Refresh rate switching works on Fire TV, and the display switch can change resolution as well as refresh rate.
  • Low-RAM Android TV devices stop freezing or crashing, sometimes taking the TV down with them. Image cache memory is capped and media bar trailers are held back.
  • Transcoded downloads seek, where any scrub jumped back to the start, and they keep going in the background instead of being killed at the nine minute limit.
  • Still watching asks about you, not a counter. Any input from you resets it.
  • The remote comes back when an overlay closes, and track menus on the Live TV overlay can be selected with the D-pad.
  • Closing a player no longer leaves the phone's navigation bar hidden, and player swipes that start in the bottom edge strip are ignored so a home gesture isn't read as a seek.
  • A subtitle downloaded during playback appears in the track list rather than after a restart.
  • The playback info sheet shows what a transcode is sending rather than only the source values.

Apple

  • Offline playback no longer spins on Loading stream forever.
  • Subtitles stop disappearing. SRT subtitles that periodically vanished on tvOS, and in fullscreen on iPadOS 27, are fixed, and external SRT draws on macOS without an embedded track in the container.
  • Subtitles downloaded alongside a video stay selectable offline. The sidecar files were registered after the engine had started loading, and it clears its external subtitle list at the start of a load, so a downloaded title came up with no options.
  • A subtitle change applies straight away in the Apple TV and Live TV players, which only pushed the style once at startup, and bold can be turned back off.
  • ASS subtitles draw on the picture rather than the whole player view, so they no longer land in the letterbox bars.
  • Picking a non default audio track no longer reloads the stream every time.
  • TrueHD direct play stops falling back to silence. The bridged track was offered as 96 kHz E-AC3, which nothing supports.
  • Direct play isn't reported as unavailable when the probe is slow.
  • Home screen previews on tvOS aren't blank, and some Live TV channels no longer give a black screen from a demux probe that outran the load watchdog.
  • The loading spinner only shows when the picture has actually stopped, not every time the engine loses its connection.
  • The screensaver runs while playback is paused, where any mounted player counted as active.
  • Progress bar time slots apply on the native tvOS OSD, and the trickplay preview respects its size setting.
  • Third party remotes and controllers work on tvOS. The Siri Remote press gate was dropping their D-pad input.
  • The tvOS system keyboard submits on completion, which restores SyncPlay group creation.
  • AC3 and EAC3 show as passthrough capable on HDMI routes instead of Unknown.
  • Artwork loads on macOS again after the 2.5.1 regression, and swapping the video view no longer trips Swift's exclusivity check and crashes.

SyncPlay

  • Apple TV no longer loops after a group seek. Every buffering edge sent a Ready, the server echoed the current Unpause, the client seeked, and on tvOS every seek raises a buffering edge. A scrub on the Apple TV is now a group seek like everywhere else.
  • Automatic intro and outro skips fire once. Most players land a frame short of the segment end, which looked like a fresh entry, so every client re-issued the skip forever.
  • Drift correction can't park a client seconds behind, and a backgrounded client stays in step with its group.

Windows

  • Auto HDR display switching engages. A bad preprocessor guard meant the stub always compiled, so it could never fire.
  • The window opens on older Windows 10 releases. The bundled SQLite had been dropped from the package and the system copy is too old, so startup died before the window was shown.
  • Launch no longer leaves the UI drawn small in a corner, at half size, or white until a resize.
  • Downloaded media plays past ten seconds.

Desktop

  • Escape leaves fullscreen instead of stopping playback, and works in the book reader, photo viewer and trailer screens where the global handler had been standing aside.
  • Plugin settings open in your browser rather than an embedded web view that showed a stuck splash or a black screen.
  • Game controllers are recognised in EmulatorJS. Desktop web views don't usefully expose a gamepad, so Moonfin reads the pad itself.
  • The AppImage stops adding a duplicate menu entry on every close, and honours the no desktop integration opt-out.
  • The top navigation buttons expand as soon as the pointer reaches them, with a click cursor, rather than waiting on a delay timer.

Performance

  • Artwork decodes at the size it paints, the disk cache keeps its index in memory instead of re-reading the folder, and queued fetches are ordered by what's on screen.
  • Artwork stops going missing app-wide. The image cache admitted more fetches than the HTTP client had connections, so dropped connections wedged every image until a restart.
  • A stalled image cache index no longer holds every image in memory, and a stall now shows up in a diagnostic report.
  • Home and library rows ask for fewer fields per item, with the cache keyed to the field list so rows saved under the old shape are refetched rather than restored with gaps.
  • Next Up loads about as fast as the Jellyfin web UI now that it stops asking for the People and Artists fields. People alone could double the query time.
  • Continue Watching and Next Up load fast. The resume queries use MediaTypes like every other Moonfin client, which goes through an indexed lookup instead of joins that took seconds.

Home and Library

  • Home loads again when the server comes back, instead of staying empty after a brief outage at launch.
  • Recently Added TV cards show the show's artwork. A show added as an individual episode displayed that episode's screenshot instead of the poster, while one added as a season looked correct, so the row was inconsistent.
  • Android TV launcher channel artwork is back, and Recently Added TV Shows lists shows rather than raw episodes. After the Jellyfin 12 upgrade the unscoped latest items endpoint ignored the item type filter and returned music for movie and show queries.
  • Watched state updates while the app is open, so views reflect what you just finished without a restart.
  • Rows fill a wide window on first load, and a row no longer loads, vanishes and reloads on repeat.
  • Recently Released rows populate for movie libraries with subfolders or multiple paths.
  • Custom external rows refresh daily instead of being cached forever, and the offline fallback accepts a stale cache when the server is unreachable.
  • Multiple Since You Watched rows from Moonbase all show, not just the first.
  • The genre page shows the right items and counts. Clicking a genre was pulling in playlists, collections, seasons and episodes.
  • Latest Media rows normalise properly on Jellyfin 12, which can hand back a series, a season or an episode for the same show.
  • Continue Watching stops reordering as it pages. Every new page re-sorted the whole row by last played, and a Next Up episode carries its series' date, so it landed among items you had already scrolled past.
  • Home section checkboxes respond to clicks and taps, and the Home screen stops scrolling a blank screen past its last row on touch.
  • Playlist images change when you replace the auto-generated collage, and Recordings, Favorites and genre cards stop showing old artwork.
  • Books libraries stop showing a black screen, single file audiobooks play on Jellyfin 12, and audiobooks stay out of the video Continue Watching row.
  • Season episode counts come from the server, so a season no longer reads as empty after its folder moves, and collections made up of episodes render.
  • Library grid focus stops drifting on vertical scroll, and a letter jump no longer yanks the viewport back.
  • The left sidebar no longer opens itself when Home loads, and the TV rail doesn't flash open at startup.
  • Hidden libraries stay hidden. The sidebar, top toolbar and mobile bottom bar each filtered your library list differently, and recursive rows and searches swept the whole server regardless.
  • Game libraries open their games. A library marked as games but typed as Live TV, books, audiobooks or music was routed to the guide, the reader or the music browser.
  • Shuffle spreads across the library instead of picking clusters of alphabetically adjacent titles.

Details and Interface

  • Focused artwork stays crisp. A focused or hovered card scaled as one unit, so its title and subtitle drifted and went soft during the animation. The artwork scales on its own now, and row spacing is derived from the poster size so it tracks custom poster sizes and interface scaling.
  • Changing the navigation bar position doesn't lose the remote. On a details page focus dropped into the invisible background, Back from inside Settings was trapped, and the screen lost its scroll position. Focus now hands off to the page's primary action button and the screen keeps its state.
  • Text follows the theme on detail screens instead of being forced white, along with home cards and the accent pill.
  • A details screen behind an open dialog stops taking focus back when a preference change rebuilds it.
  • An item with only your personal rating shows a ratings row, where the visibility check never looked at it.
  • The bottom navbar draws inside the screen, which removes the black band behind it and the doubled safe area above it.
  • Action buttons stay on screen when they have room, and their text stays inside the pill with longer translations.
  • The focus outline on the Skip Intro and Next Up overlays sits flush with the card edge and the shading behind it, and the Next Up thumbnail is clipped back inside the rounded corners.
  • Approve and decline on a Seerr request tile are icons now. Two labelled buttons needed more room than a TV tile has, so decline was clipped outside the card while still being focusable.
  • The Seerr requester line gives the name its own line, where a long username was cut off mid-sentence.
  • Pressing up on the Playlists page steps into the row above instead of jumping to the Home button on the filter bar.
  • Read More is reachable by D-pad on Classic collection pages, and collections with no studios, directors or writers no longer trap focus.
  • Focused cards aren't covered by the card to their right, and the Card Focus Expansion setting is respected on the Similar tab and collection grids.
  • The library dropdown is sized to its content rather than a fixed width.
  • The focus ring on pill tabs is painted over the pill under the glass themes.
  • The classic home row info overlay lines up with the row titles and cards, and episode cards there carry the episode name beside the numbering.
  • Compact media bars keep their peek when you scroll into a multi row home screen on TV, and collection titles wrap instead of overflowing under the Next Up poster.
  • The extras row loses its gap, the version chip no longer pushes the logo row off the hero, album and playlist pages have their back arrow, and the skip button no longer overlaps the time row.

Search

  • Accented titles match unaccented typing. Typing canco finds Cançó in the library search bar, which had matched literally while the server folded accents.
  • An accented title files under its own letter on the alphabet strip instead of dropping into the number and symbol bucket. The same folding covers Live TV channels, games and downloads.

Connections and Errors

  • Jellyfin 12 servers authenticate studio images, book pages and car artwork. Jellyfin 12 dropped the api_key query name, so the token is sent under the name each server reads.
  • A pooled connection that dies before it answers is retried rather than surfacing as a can't reach server error.
  • Web trickplay previews load, where the JPEG requests had been coming back 401.
  • Deep links play on a warm app. A second moonfin://play link landed on the detail page, and after that every Play press did nothing.
  • Raw DioException text is gone. Errors show the server's own reason, the HTTP status, or a plain connection message, and Seerr requests and issues read an empty response as an empty list rather than a failure.
  • Saving a server log works on Android and iOS, and saves as .txt so the device offers to open it.

Seerr and Emby

  • Seasons Seerr marks deleted can be requested again. The deleted status was parsed as available, so those seasons carried a green check and could not be selected.
  • Next Up comes back on Emby 4.10. Emby answers an unscoped Next Up query with an empty list however much watch history exists, so Moonfin asks per series across what you recently played.
  • Dolby Vision Profile 8.1 direct plays on Emby. Emby reports the profile in a typed field Moonfin never read, so every Dolby Vision stream was taken for Profile 5 and transcoded on Android TV.
  • Delete is offered on Emby for users who are allowed to, and HDR shows as HDR in the playback info panel.

Retro Games

  • Controller mappings are kept per game and per controller instead of clobbering each other.
  • Button presses stop being dropped. Mashing could merge presses within a poll window, about one in seven at the extreme, and holding a direction on a remote while pressing fire cancelled the direction.
  • N64 cores stop crashing the app over a missing environment callback, and the render thread is attached once per session instead of sixty times a second.
  • Audio latency dropped on Android, from 147ms to 115ms measured.

Contributors

Huge thanks to everyone who contributed this release:

Translations were updated through Weblate by mikey and Vesa-Matti Salminen (Finnish), Kisnov (Catalan), Miloš (Serbian), therealresonix and finneus (German), wabisabi926 (Simplified Chinese), Simon Hung (Traditional Chinese), Stefan van der Linden (Dutch), Mohamed El (Arabic), idezentas (Turkish), oskarkasprzyk (Polish), RocketPear (Czech), SCHIZOPHRENE, myrad2267 and 4rn0d (French), Kjetil F. and Jonas Engen Larsen (Norwegian Bokmål), spacecowboy and Fredrik Lidén (Swedish), Carl Robert Sookael (Estonian), canepazzo77 (Italian), คนแปล มังงะฝึกหัด (Thai), managemygroup and terry tibbs (British English), 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.