github Moonfin-Client/Moonfin-Core 2.7.0
v2.7.0

3 hours ago

Moonfin 2.7.0 Release Notes github

Moonfin 2.7.0 lands less than two weeks after 2.6.0 with around two hundred and forty commits. If your server runs the Achievement Badges plugin you can now add friends and chat with them, phones get a redesigned bottom bar in three styles, and a seasonal Home row brings out the holiday movies at the right time of year next to a rebuilt set of seasonal effects. The in-app remote gained a D-pad and can type a search onto your TV from your phone, Live TV recovers from a stalled channel on its own, and you can now set your library order and hide detail screen sections. On the fix side, Moonfin finally honors the self-signed certificate setting on every server connection, DTS and TrueHD passthrough got another round of work, Android Auto actually plays on Media3, and Windows and Linux go back to the Skia renderer to end the laggy scrolling some of you saw in 2.6.0.

Important

Moonfin now checks your server's certificate on every connection. If your server uses a self-signed or private CA certificate, sign-in will say it isn't trusted and offer to allow it, or you can turn on Settings > Account & Security > Allow self-signed certificates before you update.

Note

Don't forget to update to Plugin v2.4.0 here. The seasonal row needs it, and it syncs the new bottom bar, Friends button, detail sections and seasonal density settings.

Features

Friends and Chat

  • Friends and chat from the Achievement Badges plugin. If your server runs the Achievement Badges plugin with friends turned on, Settings > Integrations > Achievement Badges > Friends shows who's online and what they're watching or last watched, and opens the item from there.
  • Friend requests, incoming and sent, with an Add friends search across the people on your server. Each friend gets a card with their stats and badges plus Send message, Remove and Block, and blocking stops direct messages without pulling you out of groups you share.
  • One to one and group chats with photos, emoji, read ticks, and editing or deleting your own messages. Groups can be renamed, have members added or removed, and have their own admins, and chat works with a D-pad on TV.
  • Privacy holds the plugin's own settings for appearing offline, hiding what you're watching or last watched, and message notifications. They're stored on the server, so they apply on every client.
  • New message banners, held back while a video or game is playing unless you turn Mute during playback off.
  • A Friends button for the top bar, the sidebar and the phone's You sheet, with a count of friend requests and unread messages. It's off by default under navigation settings, and only shows up where the plugin has friends turned on.
  • Unlock notifications. A switch above Badges on the Achievements screen shows a banner when you earn a badge. It writes the plugin's own setting, so jellyfin-web follows it too, and the plugin decides the minimum rarity and whether several unlocks share one banner. Tapping it opens Achievements.
  • The plugin has no push, so friends and messages refresh every thirty seconds and an open chat every six, and both stop while the app is in the background.

A New Bottom Bar on Phones

  • The bottom bar on Android and iOS phones and tablets was redesigned in three styles. Dock is a floating pill with a label under every tab and the mini player floating above it. Split puts the tabs in one capsule with Search as its own round button, and shrinks to the active tab while you scroll so the mini player can sit in the middle. Strip is an edge to edge bar the content fades into, with the mini player docked into it.
  • Pin up to three tabs between Home and You, or leave it on Automatic to follow your navigation button switches.
  • The You tab shows your avatar and opens a hub with your account, tiles for everything you haven't pinned, from Libraries, Favorites, Genres, Live TV and Seerr Discover to Shuffle, SyncPlay, Quick Connect and Remote Control, and rows for Friends, Server Messages and Settings.
  • Both settings are under Settings > Personalization > Navigation while the bar is at the bottom, the setup wizard asks which style you want, and they sync through Moonbase. If you already use the bottom bar you start on Dock.

Seasonal Row and Effects

  • A seasonal Home row. Holiday movies from your library, plus Seerr suggestions if Seerr is set up, in a row right after Continue Watching and Next Up. It covers New Year's, Valentine's Day, Easter, Pride, Halloween, Thanksgiving in the US and Canada, Christmas from the day after US Thanksgiving, Lunar New Year and Diwali. Turn it on under Settings > Integrations > External Lists > Seasonal Row.
  • Each holiday can be unticked on its own, and the country follows your device region unless you pick one, which is how Lunar New Year and Diwali show up where they're celebrated. It's off by default and syncs through Moonbase.
  • The seasonal effects were redone. Snow, Fireworks, Confetti and Falling Leaves used to be text symbols redrawn every frame that started from an empty screen. They're drawn as real sprites now, start full and fade in, move at the same speed whatever the frame rate, and fireworks are actual rockets that burst into sparks.
  • Four new effects. Christmas is snow with baubles and stars, Spring Petals has cherry blossoms and bees, Fireflies, and Halloween brings bats, ghosts, candy and orange and purple leaves.
  • A Density setting of Light, Normal or Heavy. Effects also pause behind the screensaver, respect the system's reduce motion setting, and run at a lower frame rate on low performance devices.
  • Seasons picked in the original Android TV app and older Moonfin for webOS and Tizen builds carry over onto the new effects instead of drawing nothing.

Remote Control

  • The in-app remote has a D-pad. A round pad with OK, plus Back and Home, sits alongside the playback and volume controls and works whether or not anything is playing. Each button only shows if the device you're controlling supports it.
  • Every Moonfin client can be driven from a remote now, not just TV. Phones, tablets, desktop and web take navigation as real key presses, so menus, overlays, Next Up and the screensaver react the same way they do to a physical remote.
  • Search from your phone. A Search button opens Search on the device you're controlling and brings up your phone's own keyboard. On a Moonfin receiver the query updates live as you type, predictive text and paste included, and Back takes the viewer back to where they were. Text sent from the Jellyfin dashboard or another controller opens Search with it too.
  • The Apple TV player answers the remote, including its menus, the channel carousel, SyncPlay and the info panel, and Home closes dialogs, the TV keyboard and the player.
  • Remote volume reaches more devices. Apple TV applies it as playback volume, phones and tablets set the system volume, unmute goes back to the level you had, and Moonfin for webOS and Tizen get TV volume and mute buttons when nothing is playing.

Live TV Recovery

  • A stalled channel recovers on its own. A picture frozen for eight seconds, or a fresh tune with no picture after thirty, starts up to three paced attempts: reopen the stream, get a fresh session from the server, then have the server remux or transcode that channel. You see Reconnecting (1 of 3) while it works, and your own pause or a phone call taking the audio is never mistaken for a stall.
  • A Retry card when it can't. If all three attempts fail, the tuner is freed and a Failed to play card with Retry stays up until you act, with the guide and channel list still usable. The attempts come back after a clean minute, so the next hiccup isn't an instant give up. Apple TV reconnects quietly without the overlay.
  • Live channels can remux when Live TV Direct is off, keeping the original codecs instead of forcing a full transcode, and a recovery no longer turns direct play back on by itself.
  • On demand transcodes recover too. One that runs dry well before the end gets the same limited retries, and tells you it couldn't recover instead of sitting on its last frame.

Libraries and Details

  • Library Order. Settings > Personalization > Libraries > Library Order sets the order of your libraries for My Media, the recently added rows and the navigation bars. It's saved to your server account, so other apps you sign in to follow it too, and libraries hidden from My Media are still listed with a Hidden tag.
  • Hide detail screen sections. Settings > Personalization > Details Screen > Sections lists the parts your current style draws, from the logo, tagline and version badge to cast, crew, chapters, extras, More Like This, the Seerr sections and person biographies. One switch hides a section in every style, kept per kind of device and synced through Moonbase.
  • Sort & Filter got a Clear for each category and a search box on any list of ten or more values, so a TV remote can find and undo one filter without scrolling the whole panel. The search ignores accents.
  • View Details on playlist items, right after Play and Play Next, with Back returning you to the playlist. On the Classic layout, selecting a video in a playlist now plays it like the other layouts do.

Playback

  • External PGS subtitles without a transcode on Android. Media3 reads .sup files itself now, where any external PGS file used to have the server burn it into the video. Embedded PGS tracks are still burned in when a transcode is needed.
  • YouTube trailers in up to 1080p, through YouTube's Vision Pro client, with the 360p file as a fallback.

Interface

  • The TV interface is bigger. 2.6.0 put every TV on one 1324 point canvas, which made Android TV noticeably smaller than it had been. Every TV now lays out on 1150 points, so everything is about fifteen percent larger than 2.6.0 on Android TV, Fire TV and Apple TV.
  • A Great-Grandparents UI scale, a step above Grandparents at 1.6x.
  • Playback languages in the setup wizard. The last step has an optional section under the themes for your default audio language, preferring the default audio track, subtitle language and subtitle mode. Only what you change is saved.
  • A Top Shelf setting on Apple TV. Home Screen settings have an Apple TV home screen section where Top Shelf shows either your latest media or a Moonfin banner. It's kept per device.

Windows

  • A Microsoft Store build for x64 and ARM64, which updates through the Store rather than the in-app updater.

Diagnostics

  • Android reports how the last run ended. On Android 11 and later, a crash, ANR, failed start or memory kill shows up in the diagnostic log on the next launch, and Android 12 and later add the crashing thread and its last error logs. Like other crash reports these only go to your own server, and only while Send crash reports to server is on.
  • The diagnostic report also carries the system uptime, since some Amlogic and MediaTek audio drivers misbehave after long uptimes, plus why image fetches failed and how long they took.

Bug Fixes

Security

  • Allow self-signed certificates is respected for server connections. Moonfin's server client accepted any TLS certificate whatever that setting said, and only images, downloads and the players followed it. Sign-in and every Jellyfin and Emby call went through that client, so on an HTTPS server someone on your network path could present their own certificate and read your sign-in. It now only trusts valid certificates unless the setting is on, and a rejected certificate says so on Add Server, server select and sign-in, with a button to allow it and retry. The web app was never affected, since the browser checks certificates itself.

Passthrough and Audio on Android

  • TrueHD Atmos stays TrueHD after a seek with App (IEC) passthrough. The first buffer after a seek can start between TrueHD sync points, the packer failed on it, and the session gave up on IEC and came out as Dolby Digital Plus for the rest of the film. Those units are skipped until the next sync point now.
  • DTS-HD MA titles start again. Some receivers take longer than 700ms to start a bitstream, and 2.6.0's silence detector tore the track down during that wait and left nothing playing, which showed up as an unexpected playback error or a black screen. A stream that hasn't played yet now gets three seconds of grace.
  • Blu-ray DTS in .ts and .m2ts files has sound. Media3 skips Blu-ray's DTS stream types, so DTS, DTS-HD MA and DTS:X in transport streams played silent. Moonfin reads them itself now, only when the stream is marked as Blu-ray so broadcast TV keeps working.
  • DTS Core passthrough sends a DTS-HD track as its core when DTS-HD MA passthrough is off, instead of decoding it in the app.

Playback on Android

  • Resuming after a pause no longer buffers forever. Some devices come back from a pause of half a minute or so with a decoder that never restarts. If a resume is still buffering after three seconds with plenty already loaded, the player reloads at the same spot.
  • No more strips of artifacts along the edge of 4K video on Shield and Fire TV. Flutter's last UI frame was left under the video and showed through the softened edge when the UI plane is upscaled, and video whose height isn't a multiple of eight let its padded rows through as a line.
  • Transcodes with external subtitles stop stalling. Media3 only loads whichever source is furthest behind, so a subtitle the server was still extracting from a large file held the video at one segment, sometimes for minutes. Subtitles are only fetched once you pick one now and never hold the video back, and adding external subtitles no longer restarts playback once per subtitle.
  • Transcoded subtitles stay in sync after a seek. 2.6.0 shifted sideloaded subtitles by the same offset Media3 uses to correct the video, but Media3 already corrects the video, so subtitles ran about ten seconds early, mostly after seeking. The shift and its Auto label are gone, a manual delay takes effect straight away, and the delay resets for each new viewing.
  • Bunched frames no longer get dropped. Some files deliver frames in pairs a few milliseconds apart, so on a display already at the content's rate two frames landed on one refresh and about a quarter never showed, which Media3 never counted as dropped. Each frame is held to its own refresh now, which clears the judder on pans in 50fps video on a 50Hz display.
  • Android Auto actually plays on Media3. Every Media3 player lived inside a video view, so with no view on screen, as when a car cold starts the app, playback reported success and made no sound. Audio plays without a view now. Signing in from the car no longer loops, car browsing survives the phone app opening, CarPlay's shuffle and repeat buttons work, and failures show as offline or unavailable instead of a silent playing.
  • Two ANRs are gone, one when adding a long WebVTT subtitle and one when leaving playback while a passthrough track was being set up.
  • The DLNA cast picker stops crashing when two scans overlap.
  • 4K TV boxes stop piling up GPU memory behind the screensaver. Skia sized its cache to the screen, around 400MB at 4K, and it's capped at the 1080p budget now.

Playback Everywhere

  • Auto bitrate picks a sensible bitrate. It timed a single download including connection setup, which under-read fast links, and a source above the measurement went out with no ceiling, so a transcode that happened anyway came out at the smallest size. It now measures in steps, and a source above the measurement still direct plays, capped at its own bitrate.
  • Max Resolution applies to VP9, VP8, MPEG-4 and MPEG-2, so a 4K VP9 file is transcoded down on a device that can't handle it instead of direct playing.
  • Hi-res TrueHD direct plays on Android, Windows and Linux. 2.6.0 capped bridged audio at 48 kHz on every player when only the Apple engine needed it, so 96 kHz TrueHD and similar tracks were transcoded on Media3 and mpv.
  • An external audio file no longer shifts the embedded tracks. Tracks were numbered with the external file counted, so picking the main track could play the commentary. Choosing the external file asks the server to mux it in.
  • mpv picks the right subtitle. If an external subtitle failed to load because the server was still extracting it, mpv fell back to a position in its track list and could select another language. That track stays off now and is retried every ten seconds, up to five times, and a failed subtitle no longer raises a playback error.
  • Subtitles set to Off stay off on web. Every external track was made visible as it loaded.
  • Trailers keep their original soundtrack. YouTube lists its auto-dubbed tracks first without marking a default, so players picked a dub.
  • The player controls hide on their own after Resume. The hide timer ran out during the slow open and seek, and nothing set it again.
  • Wide logos in the player stay a sensible size, at most about a third of the screen width.
  • Offline progress syncs when you reopen the app online. The sync only ran when the server went from unreachable to reachable, so a cold start with the network already up never sent it, and pressing Resume saved the server's older position over yours. It runs after each sign-in now, and only to the server it belongs to, where it had been pushing one server's progress to another.
  • A collection page only shows its own download progress. Every series, season or collection page showed whatever batch was running, and Cancel there stopped all of them.
  • Cast, DLNA and AirPlay status survive a cold start from a car or a media button on Android and iOS. The event streams connected before the app had a native handler, died for the session, and filed a crash report on your server.

Live TV

  • Stopping a channel releases it on the server. A fresh resolve, such as a transcode retry, opened the channel a second time and the stream it replaced was never closed, so the tuner or IPTV connection stayed busy. A session could also close the stream more than once and cut off another viewer sharing the channel. Each session closes its stream once now, after any replacement is up.
  • Recording tiles open with Select or Enter on the Recordings, Schedule and Series Recordings screens, where they took focus but only answered taps. The Recordings header also wraps on phones instead of overflowing.

Android TV

  • Back from a movie lands on its details page. The player closed on key down, and the system back Android sends once the key comes up popped the details page too.
  • Back works right after closing a player menu, and Android 12 and older no longer swallow the first Back on a details page.
  • Back leaves the details page once focus is back on Play instead of getting stuck after you've been down in the tabs.

Apple

  • Music remote controls work on Apple TV and iPhone. 2.6.0's engine update opened its own Now Playing session for music, which the system showed instead of Moonfin's, so the Siri Remote, the iPhone remote, the Watch and earbuds did nothing and the Now Playing card was blank. Moonfin fills that session with the title, artist and artwork and takes its presses now, and next and previous track show instead of ten second skips.
  • AirPods play and pause keep working after Picture in Picture closes on iPad.
  • Downmix to Stereo works on macOS, iOS and tvOS. The engine can't downmix on its own, so the setting did nothing while the device kept advertising surround. It asks the server for stereo now.
  • Intel Macs are back on the Skia renderer. Flutter 3.47's Impeller default garbled text and lagged on Intel graphics.
  • Top Shelf only shows your Latest rows and clears on sign out. Favorites, Last Played, Since You Watched and Rewatch rows could fill it, and the last account's artwork stayed on the Apple TV home screen after signing out.

Windows and Linux

  • Library scrolling is smooth again. Flutter 3.47 made Impeller the desktop default, which made scrolling laggy on Windows and held the GPU near full while idle on Linux. Both are back on Skia.
  • Moonfin launches on machines with a missing or outdated Visual C++ runtime, which now ships next to moonfin.exe.
  • Launching in fullscreen no longer leaves a gray window. Restoring fullscreen before the window was shown saved a hidden window style that got written back later.
  • Downloads play on Windows. mpv reports a path back with forward slashes, so it never matched the path Moonfin held and a download sat on Loading stream until it timed out.
  • Uninstalling removes the moonfin:// link handler from the registry.
  • The AppImage stops adding a second menu entry under Gear Lever, AppImageLauncher and AppManager. 2.6.0's fix missed that Gear Lever's copy of the desktop entry starts the same as Moonfin's own, so Moonfin took it for its own and wrote another. moonfin:// links pass through a manager's copy now too.

Home, Search and Libraries

  • Search shows results without waiting on People. A slow People lookup held the whole search, for thirty seconds on some servers. Results show within about a second and people fill in when they arrive.
  • Multi-server search covers every signed-in server, with each result labeled by its server. It only ever searched the active one.
  • Continue Watching is current on launch when it's merged with Next Up. That row never saved to the home cache and loaded after everything else, so a cold start showed episodes you'd already finished for half a minute. Next Up also sorts a round trip sooner on Jellyfin and Emby.
  • An empty Home stays empty. When every library was gone, the old cached rows came back on every cold start, and the last backdrop and theme music stayed behind the empty message.
  • The first Home card you reach from the media bar or toolbar plays its preview.
  • Home rows and the media bar stop going blank on Firefox after scrolling away and back. A shown image was decoded a second time, which paints blank on Firefox.
  • Blocked ratings apply to IMDb, TMDB and MDBList rows, and once you block any rating they hide unrated titles too.
  • Custom rows load large lists. They wait forty five seconds for a response instead of fifteen, and the check when you add or edit one shows the real failure instead of No results returned.
  • Mixed and home video libraries sort properly. Every sort put folders first, so shows came before movies, Premiere Date and the rating sorts were missing, and a saved sort reset to Name. They open on Folders First now and sort by exactly what you pick.
  • Collections of Live TV channels show their channels. Modern collections get an Other tab for anything that isn't a movie or series, and channel cards in a collection tune the channel in every layout.
  • Collections open on Movies with Expanded Tabs, where a Studios tab that loaded late took the selection.
  • Classic details show a row for every collection a movie belongs to, not only the first.

Details and Interface

  • Detail and player buttons follow UI Scaling on desktop and TV. Text grew with the scale while the Modern, Spotlight, Minimalist and Nouveau buttons and the player controls stayed the same size.
  • Play only highlights when focused on desktop and TV, like the buttons beside it, and focus only shows while you're using keys or a remote, so Play no longer stays expanded next to the button under your mouse.
  • Detail rows line up. Every row starts its cards the same distance under its title, Classic's Next Up keeps the same header height as the rest, and extras rows lose the big empty gap under featurettes.
  • The last content on detail and settings pages clears the bottom bar and the system navigation buttons on phones.
  • A long artist list no longer stretches the top bar music player across the screen. The title is capped and scrolls.
  • Classic home row titles stop drawing over the info overlay while you scroll with a mouse.
  • Animated avatars redraw half as often. Every GIF frame redrew the whole window twice, which kept the GPU busy on an idle desktop.
  • The server messages button fills the top bar on hover.

Emby

  • Next Up matches Emby's own. 2.6.0's workaround only looked at your last hundred played episodes, so a binged show could crowd out everything else, leaving one user with a single item where Emby showed sixty one. Moonfin asks Emby 4.10 for the same Next Up list Emby's home screen uses.
  • Recently Released rows stop repeating. They asked Emby without a user, so a series came back once per folder, a movie once per version, and parental controls were ignored.
  • All Genres and the home Genres row fill again. Emby's genre list has no item counts, so every genre looked empty.
  • Unable to connect after a restart is gone off LAN. Emby answers its ping with a 401 from outside its network, which read as the server being down.

Seerr

  • The Seerr detail page keeps up with a request until the title is available, refreshing every fifteen seconds while it downloads and every thirty while it waits. It used to sit on Cancel Request until you reopened it.
  • Seerr notifications show up in the app. The plugin's settings stream timed out before the server's heartbeat and kept dropping, web never received it at all, notifications without a page to open were thrown away, and one screen closing could unhook the rest.
  • Seerr rows load quickly after sign-in. Sign-in waited on that same stream, which the server can hold until its heartbeat and which never finished on web, and a late home reload stole focus. Moonfin also skips signing in to Seerr again when the plugin already holds the session.
  • Seerr banners on TV use the theme's text style instead of Flutter's debug style with a yellow underline.

Connections and Admin

  • Deep links open as the user they name on a warm app, and on a cold start that restores the last user. Both opened under whoever was signed in, so the item came up as not found. Kids Mode, a PIN or always authenticate still block the switch.
  • New Jellyfin libraries keep their folders. Moonfin sent them in a field the server doesn't read.
  • The add library buttons are button sized again, admin card highlights are rounded, the plugin page loses its second back button, and the previous admin page no longer shows through during a page change.

Contributors

Huge thanks to everyone who contributed this release:

Translations were updated through Weblate by mikey (Finnish), Kisnov (Catalan), SCHIZOPHRENE (French), Adrian Szyłak and oskarkasprzyk (Polish), eliastitecnologia (Brazilian Portuguese), therealresonix and rekiznuh1 (German), idezentas (Turkish), managemygroup (British English), Benedek Dunavölgyi (Hungarian), Licaa21 (Romanian), Sergio Suarez (Mexican Spanish), 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.