Releases: MakD/AFinity
Release list
v12 Support
v0.12.00-beta
Important
This release requires Jellyfin 12.0 or newer. Older servers show an "unsupported server" message and can't be used. If you're still on Jellyfin 10.x, stay on v0.10.10-beta until you upgrade.
New features
Streaming quality and transcoding. Videos and music can be streamed at a lower quality, with separate limits for Wi-Fi and mobile data. AFinity now tells the server which formats this device can play, so files it can't decode are converted by the server instead of failing. Tap the resolution badge in the player to change quality mid-video and see why it's transcoding.
Music. Karaoke-style word-by-word lyrics, album normalisation gain, separate Album Artists and Artists views, "More from this artist" and "More like this" on albums, and MusicBrainz and AudioDB links.
Remote control. Control active sessions from the server control panel — play, pause, seek, volume, mute, skip, stop and send a message — and AFinity now responds to commands from other Jellyfin clients.
Sleep timer. Preset durations or "End of item" in the video player, with a fade out and a chance to extend. Audiobookshelf can also stop at the end of a chapter.
Downloads. A poster grid grouped by show, album and podcast, with category filters and multi-select delete, plus a storage bar broken down by media type. Download and cache settings moved to their own Storage screen.
Setup and accounts. Jellyseerr can be signed in with Quick Connect, and saved accounts can be forgotten with a long-press, which removes their sign-in, cached data and downloads.
Also new: Audiobookshelf bookmarks · an in-app log viewer with crash reports (Settings → View logs) · server storage and library stats · audio and subtitle language filters · collection auto-queue · local network permission support on Android 17.
Improvements
- Item pages and images load faster, and unreachable servers now fail after 6 seconds instead of 15.
- Smoother Live TV guide, and a home screen that refreshes only the rows that changed.
- Playback settings are grouped into sections; the music and audiobook players moved secondary actions into a "More" sheet.
- Better Dolby Vision and HDR10+ detection, metadata in your device's language, and Continue Watching limited to movies and episodes.
- Server addresses show their port and handle sub-paths and IPv6 more reliably.
- Updated translations, including Russian, German, Indonesian, Polish and Swedish, and a new Malayalam translation.
Fixes
- Fixed audio stopping when switching between an audiobook and music.
- Fixed player panels and the episode details sheet sitting under the notch or system bars.
- The episode switcher shows live progress and marks an episode as watched past 90%.
- Videos fall back to transcoding when the device can't play the video track.
- Exported logs are now scrubbed of sensitive details.
What's Changed
- Add anidb person icon by @enter-a-random-username in #227
- Translations update from Hosted Weblate by @weblate in #225
- V12 support by @MakD in #230
- Translations update from Hosted Weblate by @weblate in #229
Full Changelog: v0.10.10-beta...v0.12.00-beta
Nightly 2026-09-17
Automated nightly build — 2026-09-17 (IST)
Changes
e9338f19 chore: bump targetSdk to 37 and refine local network permission logic
e9228597 perf: optimize home screen loading sequence for faster perceived performance
0fa0e6af feat: implement network-aware server resolution and detailed connectivity states
b8cfdcea refactor: refine network connectivity monitoring and internet validation
Caution
Deobfuscating a crash from this build
Download AFinity-nightly-2026-09-17-mapping.txt.gz,
then:
gunzip AFinity-*-mapping.txt.gz
retrace mapping.txt stacktrace.txt
The mapping only matches this nightly — each nightly replaces the previous one.
Nightly 2026-09-04 (v12-support)
Automated nightly build — 2026-09-04 (IST)
Changes
381441eb feat: add audio format and transcoding indicators to player UI
9ac7fc40 fix: preserve AudioService during playback engine switch
56bc70f5 fix: refine music playback stats tracking and thread safety in AudioService
63578986 feat: implement stream resolution and audio transcoding for music playback
5a974b3b perf: coalesce playback section refreshes and streamline media change handling
86338f60 fix: improve HDR capability detection, transcode fallback, and log redaction
8dd305ca refactor: improve home screen refresh strategy and spotlight layout calculation
f79a132e feat: overhaul downloads screen with grouped catalog grid and multi-selection
006e3e4d refactor: standardize destructive action tints and eager-load bookmarks
111129d7 refactor: reorganize settings structure and introduce playback options sub-navigation
ad826473 feat: add Audiobookshelf bookmarks support and standardize landscape orientation checks
4468b803 refactor: standardize audio player controls and introduce overflow options sheet
c6b25895 feat: add dynamic device profiles, streaming quality options, and transcode negotiation
bfa9dfb0 fix: update player controls window insets to use safe drawing
fcb07810 perf: optimize EPG rendering, state flows, and Live TV guide querying
701c6722 feat: implement remote session control and remote message handling
2989e73e feat: enhance music screens with related content, external links, and library scoping
8b164781 feat: filter music genres and artists by parent library ID
2a83364e feat: add user setting for toggling landscape side sheet layout
1c52aeb7 feat: lazy load library filter options and improve filter sheet UI
e1b9dc54 fix: adjust SdkLogBridge log level based on build configuration
97423173 perf: optimize image loading, blurhash decoding, and network timeouts
4933c543 feat: add Quick Connect sign-in support for Jellyseerr
26be9dc3 perf: optimize show background sync and eager load next up item
1455f680 perf: optimize item detail loading and prevent redundant network fetches
de2c99ae feat: support separate views for album artists and all artists in music library
0f0b576c feat: enhance lyrics caching logic and refine continue watching filters
e9064802 refactor: improve service tile layout and bottom sheet inset handling
9cbda756 refactor: centralize server URL parsing and improve server management UI
50ce9d04 feat: implement "forget account" functionality to clear saved user data
4539079d feat: introduce unified UserAvatar component and refactor profile UI logic
ff4599e5 fix: ensure correct draw scope for lyrics progress rendering
0bc75575 feat: enhance server management, media metadata display, and music playback
981a3a9e feat: implement interactive in-app log viewer and live console
ac635228 build: add kotlin-logging dependency
7b0b3d99 feat: add predictive back animations to main navigation
135e3a28 refactor: update Jellyfin SDK API class names and playback reporting logic
bd8f3d59 build: add SLF4J API dependency
1c46ef7e build: Initial Jellyfin v12 support
Caution
Caution
Built from the v12-support branch, not master.
This build targets Jellyfin 12 and breaks compatibility with Jellyfin 10 servers.
Future releases will drop v10 support entirely. Do not install this against a v10 server.
v0.10.10-beta
v0.10.10-beta
New features
- Episode details now show cast and guest stars directly in the episode overlay. Performers can be opened from the episode, and the detail view uses a side sheet on wider screens.
- Awards can now be shown for movies, shows and people using Wikidata. Award wins and nominations are grouped by year and can be opened as a full history.
- "Latest Movies" and "Latest TV" can now be hidden from the home screen. Related settings are disabled when they depend on those rows, and hidden rows are no longer fetched in the background.
- Downloads now respect Jellyfin's server-side download permission as well as the Wi-Fi-only restriction. The app no longer offers download actions when the current account is not allowed to download.
- Downloading a playlist now lets you choose what to download: Audio, Video or All. Mixed-media playlists prompt for the choice before starting the download.
- Music library track rows now show download progress and let you cancel or resume downloads directly from the track list.
- Jellyseerr login now probes the server before authentication, allowing the app to show the instance name and select the appropriate local or Jellyfin authentication mode.
Improvements
- User data is now kept in a shared state across the app, so watched status, favourites, and playback state stay consistent when the same item appears in different screens.
- Jellyfin media changes are handled more selectively. Small batches of changes can update the affected items directly instead of triggering broader refreshes, reducing unnecessary reloads and UI flicker.
- Multiple Jellyseerr requests for the same movie or show are now grouped into one entry, with the additional requesters shown alongside the original requester.
- Downloaded items whose storage volume is currently unavailable are now shown as unavailable instead of being treated as ready to use.
- Login fields for Jellyseerr and Audiobookshelf now provide better information to password managers for username, email, and password autofill.
- More of the app now uses localized strings and formatting, including dates, file sizes, notification text, and dynamic counts such as episodes, members, and seasons.
- Settings group titles are now consistent, and subtitle-related sliders use more precise steps.
- Updated translations across the app, including Russian, Turkish, Hungarian, Bengali, Hindi, German, Spanish, French, Italian, Japanese, Portuguese, Swedish, Polish, Bulgarian, Indonesian, and Dutch.
Fixes
- Cast members were sometimes hidden when multiple entries referred to the same person. The cast section now correctly keeps and displays those entries.
- Fixed the combined Latest TV view not correctly showing content when multiple libraries are combined.
- Fixed download notifications not being cleaned up correctly when a download is cancelled or completes.
- Fixed chapter items in movie details using non-unique keys when chapters shared the same start position.
- Fixed episode list items using unstable keys during Paging updates.
- Fixed episode detail overlays not handling system navigation insets correctly.
What's Changed
- Translations update from Hosted Weblate by @weblate in
#220 - Userdata rework by @MakD in
#221 - Translations update from Hosted Weblate by @weblate in
#222 - Wikidata awards by @MakD in
#223 - Translations update from Hosted Weblate by @weblate in
#224
Full Changelog: v0.10.9-beta...v0.10.10-beta
v0.10.9-beta (hotfix)
v0.10.9-beta
A hotfix release for v0.10.8-beta.
Improvements
- The pause screen shows the full set of ratings on a line of its own: the community rating, Rotten Tomatoes, IMDb, TMDB, Letterboxd, Metacritic and everything else the ratings service returns, each with its own icon. Awards appear underneath when the film has any.
- Ratings and awards are now fetched once per item and shared between the detail screen and the player, and kept for 48 hours. Pausing something you have just opened no longer asks for them again.
- Jellyfin's community rating uses a neutral star icon instead of the IMDb logo on cards, carousels, search results and detail screens, because a server's community rating is not always IMDb's. The real IMDb score is shown separately with the IMDb logo when it is available.
- Rotten Tomatoes falls back to the ratings service when your server has no critic rating of its own, instead of showing nothing.
- Rating icons are sized consistently across cards, lists, carousels and overlays.
Fixes
- Pausing a video, turning the screen off and turning it back on showed a black screen with a loading spinner instead of the pause screen. The screen's video surface is destroyed while the display is off, and the player briefly reported that as buffering; the pause screen now stays up across it.
- The "Show ratings" setting was ignored everywhere inside the player. The pause screen, the next-up overlay, the episode switcher, and the cast episode list all showed ratings even when ratings were turned off.
- Jellyseerr sessions could bleed between accounts on the same server, and a login could be dropped when the server did not return a session cookie on the login response itself. Sessions are now kept per server and account, and signing out properly clears them.
- Playback positions and last-played dates recorded while the server was unreachable are now uploaded as UTC timestamps, so they are applied with the correct time once the queue is flushed.
What's Changed
- fix: improve user data sync by using UTC-formatted timestamps in
f4d1444 - fix: fix Jellyseerr cookie management and session handling in
5cc8990 - fix: refine player control visibility during buffering and pause states in
eabfe3f - feat: centralise and refactor media ratings system with persistent caching in
0459320 - fix: fix preference-based toggle for ratings in player UI in
2739dd0
Full Changelog: v0.10.8-beta...v0.10.9-beta
v0.10.8-beta
v0.10.8-beta
New features
- Playlists now work for video, not just music. Video and mixed audio/video playlists can be browsed, played and downloaded, and a mixed playlist asks which half you want to play.
- "Add to playlist" from the item detail screen for movies, series, seasons and episodes, in the overflow menu.
- Reorder playlist items by long-pressing and dragging. The new order is saved to the server.
- Connection type is detected properly and shown in the app: Local, Tailscale, VPN or Remote. It appears on the Services Hub for Jellyfin, Jellyseerr and Audiobookshelf, and next to your profile in Settings. Tailscale is recognised by its address ranges, MagicDNS and
.ts.netnames rather than by guessing from the URL. - Playback progress is now recorded while the server is unreachable. Position, played status and favourites are stored locally and uploaded as soon as the server comes back, for every account signed in on the device rather than only the active one.
- Library order set on the server is respected. If you have arranged your libraries in Jellyfin, the Libraries screen matches, and only falls back to sorting locally when no server order exists.
- Libraries you excluded from "Latest" in your Jellyfin user settings are now left out of the home screen's Latest rows.
Improvements
- Latest rows interleave libraries round-robin, so one large library no longer fills the row.
- Items no longer vanish from Latest the moment you mark them played; a larger pool is kept behind the visible cards.
- Metadata refresh is clearer for admins: the modes are now Scan, Missing and Replace all; the separate "Replace all metadata" toggle is gone, and "Replace existing images" only appears for the modes that search online.
- "Made For You" in the music library remembers its layout between visits. Cards keep their place and fill in with a shimmer instead of shifting around while mixes load.
- Server reachability checks run on their own network client and thread pool, so probing no longer competes with normal API traffic.
- Live TV access is answered from your account permissions and the cached library list instead of an extra request each time. Accounts without Live TV skip those calls entirely.
- Live TV progress bars and "Live" badges share one clock that ticks every 30 seconds, so they stay in step with each other. Switching between the Live TV Home and Guide tabs no longer reloads on every tap.
- Many list requests stopped asking the server to count total results, which is work the app never used. This applies to media queries, user data and the download, trickplay and subtitle workers.
- The splash screen stays up until sign-in, and the first data load have both finished, so the app no longer flashes an empty home screen on launch.
- Home loading placeholders were unified into one skeleton sized from the real card dimensions, which removes the height jump when content arrives.
- Carousels size themselves from the available space and orientation, and item text fades with scroll position instead of by index.
- QuickConnect code entry scales to the screen, so the digits fit on small screens and in split-screen.
- Durations are formatted the same way everywhere: detail screens, episode lists, the player, the chapter and episode switchers and download settings.
- Language flags come from one shared mapping with much wider coverage, including regional variants such as pt-BR and pt-PT.
- Playlist covers use a square shape and show an item count.
- Images are requested as JPG, and requests now identify AFinity with its version, Android version and device model.
- Updated Media3/ExoPlayer, the libass subtitle renderer and the Compose libraries.
- Hungarian translation added. Russian and Indonesian updated.
Fixes
- Items deleted on the server could come back from the local cache. Deletions are now remembered and filtered out of home rows, genre and people sections until the caches catch up, and are reverted if the item is added again.
- Home screen custom and pinned sections did not pick up metadata edits made on the server.
- The keyboard covered input fields in the metadata editor and the add/edit server screen.
- Genre rows on the home screen showed an empty heading when they had nothing in them.
- "Watch Again" kept items after they were marked unwatched.
- Backdrops on detail screens fall back through season, series and poster images instead of leaving a blank area when one image fails to load.
- The Libraries screen did not refresh after creating or deleting a playlist.
- Signing out or switching accounts now returns to Home and clears the back stack, instead of leaving the previous account's screen mounted.
- Fixed a possible crash from a negative height calculation in the shared layout offset used by person pages.
- Skip segments are no longer tied to the episodes table, so they can be stored for other media types.
What's Changed
- Translations update from Hosted Weblate by @weblate in
#205 - Translations update from Hosted Weblate by @weblate in
#207 - Translations update from Hosted Weblate by @weblate in
#209 - Translations update from Hosted Weblate by @weblate in
#210 - Playlist impl by @MakD in
#212 - Translations update from Hosted Weblate by @weblate in
#213 - Translations update from Hosted Weblate by @weblate in
#214 - Translations update from Hosted Weblate by @weblate in
#218
Full Changelog: v0.10.7-beta...v0.10.8-beta
v0.10.7-beta
v0.10.7-beta
After installing, clearing the Jellyseerr requests cache is recommended. This release changes how the RequestList is built, so requests stored by the older version can persist and show stale entries or entries from another account if you use more than one.
Go to Settings > Downloads > Clear cache, tick "Jellyseerr requests" and confirm.
New features
- Search filters for content type: Movies, TV Shows, Episodes, Box Sets, Music, Requests, and Audiobooks. Previously you could only pick a library.
- Episodes are searched separately and shown in their own section, so episode matches do not crowd out films and series.
- Libraries moved into a dropdown at the start of the filter row, which lists Audiobookshelf libraries when the Audiobooks filter is selected.
- Clear cache now lets you choose what to remove: images, video, network, player, Jellyfin metadata, Jellyseerr requests and Audiobookshelf data. Jellyseerr and Audiobookshelf caches could not be cleared from the app before.
Improvements
- Search sends smaller requests, returns results in less time, and orders them by relevance, preferring exact and prefix matches. The speed difference is largest on servers with many episodes.
- Audiobookshelf: search requests fewer results and can be scoped to one library; home fetches each shelf once instead of twice, and library contents are cached for 15 minutes so reopening within that window does not refetch.
- Listening progress is read from a faster endpoint, so it appears sooner in the Audiobooks tab.
- Requests are cached between visits, with posters and titles fetched once per request and only for cards scrolled into view.
- Images use a low-resolution placeholder while loading, with consistent sizing and a shorter crossfade.
- Update checks are cached and request fewer releases.
- Filter chips use Material 3 container colours, and search section headings use a lighter style. Removing the selection check icon also stops the row shifting when a chip is selected.
Fixes
- Approved requests showed a status of "Unknown" instead of "Processing".
- After switching users, one account's requests / Audiobookshelf shelves and genre rows could appear under another.
- The Requests cache was cleared on every refresh, causing posters and titles to be downloaded again each time the screen opened.
- Episode watch status did not update in search results.
- "No results found" appeared briefly while a search was still running.
- The "Prefer SDH subtitles" toggle appeared active in subtitle modes where it has no effect.
- The Requests screen shows all requests, not just the 20 most recent.
- The Available section is sorted by the date media became available rather than by request date.
What's Changed
- feat: implement granular cache management and refactor Audiobookshelf state by @MakD in
552dcd3 - feat: implement granular search filters and scoped library selection by @MakD in
2dfd7da - perf: optimize Audiobookshelf data fetching and implement library item caching by @MakD in
4889064 - feat: implement lazy request enrichment and improved Jellyfin ID resolution by @MakD in
085d89d - fix: enhance Jellyseerr request enrichment with context safety checks by @MakD in
7f6987f - feat: optimize image loading and refine subtitle preference logic by @MakD in
ad32195 - perf: optimize BlurHash decoding dimensions in AsyncImage by @MakD in
a5db0ab - perf: implement GitHub API caching and limit release results by @MakD in
8e481b4 - Translations update from Hosted Weblate by @weblate in
#203
Full Changelog: v0.10.6-beta...v0.10.7-beta
v0.10.6-beta
v0.10.6-beta
After installing, clearing the app cache is highly recommended.
This release changes how the home screen and caching work, so data cached by the older version can stick around and cause odd behaviour.
On your device, go to Settings > Apps > AFinity > Storage and tap Clear cache.
New features
- The home screen is now customizable. Reorder rows, hide them, or build your own.
- Custom sections: pick a library, genre, studio, playlist or saved filter, then refine it.
- Seasonal sections that turn themselves on and off inside a date range you pick.
- A "View All" page for every home section.
- Export and restore your settings, including the home screen layout. The layout can also be exported on its own and moved between devices.
- New Subtitle Mode setting. Follow your Jellyfin account, or pick one per device.
- Preferred audio and subtitle language can now follow your Jellyfin account. This is the new default.
- Option to prefer SDH (hearing impaired) subtitles.
- Visual chapter switcher with thumbnails.
- Custom input bindings and gesture overrides for the MPV player.
- Cache controls, including a video cache limit and automatic cleanup.
- More options menu on Continue Watching and Next Up cards.
Improvements
- Better "Watch Again" suggestions.
- Home sections can be styled per content type.
- Deleted items now disappear from the home screen right away.
- Resuming an item restores the tracks you were using.
- Audio tracks show channel layout and codec. Subtitle tracks get clearer labels.
- Language flags follow the media source you picked.
- Faster loading across the app, especially person pages and series.
- New album library icon.
- Translations updated for Dutch, French, Indonesian and Russian.
Fixes
- Fixed wrong audio and subtitle tracks being picked, and "No track selected". Mostly affected items with sidecar audio or subtitle files.
- Fixed a startup crash when a VPN was active over cellular.
- Fixed next episode selection and season ordering.
- Fixed Live TV streaming reliability and seeking.
- Search no longer runs before login finishes.
- Seerr requests are cleaned up when the matching item is removed.
What's Changed
- Translations update from Hosted Weblate by @weblate in #198
- feat: rework audio and subtitle track selection by @MakD in #202
- fix(home, jellyseerr): remove deleted items immediately from home page and cleanup requests/media in Seer by @Arnab11 in #200
- Translations update from Hosted Weblate by @weblate in #201
Full Changelog: v0.10.5-beta...v0.10.6-beta
v0.10.5-beta
v0.10.5-beta
Player
- Audio and Subtitles are now a single combined panel (previously two separate buttons); the bottom control layout was reorganised, and the aspect-ratio toggle moved to the top bar.
- Added an optional pause screen: pausing shows item details, ratings, cast, and resume/restart, after a configurable delay. Off by default.
- Added an optional long-press chapter-skip gesture — the screen edges skip chapters while the middle holds 2× speed.
- Next/Previous now move between episodes instead of stepping through chapters.
- Added native ASS/SSA subtitle rendering for the ExoPlayer backend.
- Added
mpv.conf/input.confeditors in Player Options (MPV player only) [Credit - Findroid 624e0c7 and 8cff6e2]
Language flags
- Audio and subtitle tracks now show language flags on movie and episode details.
- Flags are bundled with the app (no network requests at runtime).
- Handles region variants (pt-BR/pt-PT, en-GB/en-US) and labels tracks with no language (
zxx) or an unidentified language (und).
Connectivity
- Automatic server reconnection when the network changes, plus a manual retry button.
- Improved error handling and session resiliency.
- Added a Services Hub for connecting Seerr and Audiobookshelf, with server identity verification and log redaction.
Seerr (formerly Jellyseerr)
- Renamed the Jellyseerr integration to Seerr; reworked API key management and setup screens.
- Added TMDB logos on Seerr media detail pages.
- Server URL is now handled per session.
Audiobookshelf
- Added series support (series shelves).
- Prefer locally downloaded cover art; fixed resume for finished items.
Music
- Queue management, download reliability, and authentication fixes.
Admin
- Delete items when signed in with a Jellyfin admin account.
Other
- User avatars are cached locally.
- Added AniDB to external links (with icon); fixed duplicate external links.
- Fixed logo sizing on item detail in landscape.
- Added a loading indicator for random-item selection.
What's Changed
- Translations update from Hosted Weblate by @weblate in #183
- Translations update from Hosted Weblate by @weblate in #185
- Translations update from Hosted Weblate by @weblate in #187
- Translations update from Hosted Weblate by @weblate in #188
- Add anidb link & icon by @enter-a-random-username in #193
- feat(feature): add delete item option for Jellyfin admin accounts by @Arnab11 in #191
- Translations update from Hosted Weblate by @weblate in #190
- Translations update from Hosted Weblate by @weblate in #195
- Translations update from Hosted Weblate by @weblate in #196
New Contributors
- @enter-a-random-username made their first contribution in #193
- @Arnab11 made their first contribution in #191
Full Changelog: v0.10.4-beta...v0.10.5-beta
v0.10.4-beta
Release Notes v0.10.4-beta
Major Improvements
Library & Music Filtering
- New persistent filtering and sorting framework for video and music libraries, replacing filter chips with dedicated bottom sheets. Supports Played/Unplayed, Resumable, Favourites, Watchlist, Genres, Parental Ratings, Tags, Video Type, and Release Year, applied server-side.
- Searchable multi-select for genres, tags, ratings, and years.
- Music library gained a dedicated sort dialog (Album Artist, Community Rating, Play Count) plus "Play All" / "Shuffle All" that respects active filters.
- Filter and sort selections are saved per library and restored across restarts.
- Standardised dialog layouts with a consistent action footer, height constraints for smaller screens, active filter badges, and improved keyboard handling in search fields.
- Toggling favourite or played status now updates filtered lists immediately.
Favorites & Watchlist
- New Favourites and Watchlist category screens with full-screen, sortable grids (Name, IMDb Rating, Date Added, Release Date).
- Favourite music playlists are now supported and included in the Favourites view.
- Favourite status changes reflect immediately across library, favourites, and watchlist views.
Home Screen
- Downloaded content supports offline "Next Up," falls back to local data when offline, and refreshes automatically as downloads complete or local music changes.
- Added a "Play something random" shortcut to jump to an unwatched movie or show.
- Added a scroll-to-top button on the home list.
- Refactored hero carousel with a unified layout and a capped maximum height.
Music Player
- Added a music equaliser with presets for music (Rock, Pop, Jazz, etc.) and spoken word (Podcast, Audiobook, Voice Boost).
- Added a real-time playback stats view (codec, bitrate, buffer health, decoder type).
Video Player
- Expanded playback stats overlay with connection type, decoder names, A/V sync offset, network speed, cache status, and HDR/color metadata for both ExoPlayer and MPV.
- Improved ExoPlayer cache key stability and simplified MPV buffer configuration.
- Player now closes automatically when playback ends with nothing queued.
Navigation Drawer
- Consolidated drawer header into a single account switcher combining avatar, username, and server/connection status.
Admin
- Fixed image uploads to Jellyfin by Base64-encoding image data and normalising MIME types.
UI & Minor Updates
- Externalised remaining hardcoded strings across settings, download, and appearance screens.
- Standardised dropdown menus and spacing across Appearance, Download, and Player options screens.
Acknowledgements
- "Play something random" is credited to Jellyfin Enhanced.
What's Changed
- Translations update from Hosted Weblate by @weblate in #181
- Translations update from Hosted Weblate by @weblate in #182
Full Changelog: v0.10.3-beta...v0.10.4-beta