v0.12.03-beta
Important
AFinity requires Jellyfin 12.0 or newer. If you're still on Jellyfin 10.x, stay on v0.10.10-beta until you upgrade.
New features
Server control panel. The Control Panel now covers server administration, so most jobs no longer need the web dashboard (#252):
- Server. Restart or shut down the server and scan all libraries. The overview warns about a pending restart, recent failed sign-ins, full disks and plugins with problems, and shows what each session is playing and whether it is being transcoded.
- Users. Add users, rename them, set a password, disable or delete an account, and set or remove a profile picture. Permissions cover library access, remote access, transcoding, downloads, which devices a user may sign in from and how many failed sign-ins lock the account. Parental controls set a rating limit, tags, and the hours a user may sign in.
- Libraries. Create a library with its type, folders and options, picking folders by browsing the server. Add or remove folders, rename or remove a library, change its options and images, and scan one library or all of them.
- Devices. See every device that has signed in, filter to those active this week or idle, rename a device, and sign out a single device or a whole group.
- Scheduled tasks. Run or stop any task, see how its last run ended and how long it took, and add, edit or remove its schedules, including a time limit.
- Plugins. Install, update, enable, disable and uninstall plugins, read their changelogs and manage plugin repositories. A plugin's settings page opens in a browser tab, and the app says when a change needs a server restart.
- Activity. The server's activity log, filtered by kind such as playback, sign-ins, user actions and tasks, with today's totals for plays, people, sign-ins and failed sign-ins.
- Server logs. Open any server log file, search it, filter by level and tag, and copy entries with their surrounding lines. Repeated messages are grouped.
- API keys. Create, reveal, copy and revoke API keys. Keys are hidden from screenshots while they are shown.
- Backups. Create a server backup and see the existing ones. Restoring is still done in the web dashboard.
- Server settings. Change the General, Metadata, NFO, Library Display, Playback, Trickplay and Transcoding settings, each with a description. Networking settings can be viewed but not changed.
Card size. Settings > Appearance > Card Size offers Extra Small, Small and Default. Rows and grids across the app size their cards to fit the width of the screen at the chosen size.
Mixed libraries and folders. Libraries that hold both movies and shows are now shown (#120, #226). A mixed library opens as its folders, which you browse into, and each folder shows how many items in it are unwatched. Content from mixed libraries appears in home sections, genre lists and search.
Continue Watching and Next Up in one row. Settings > Appearance > Merge Continue Watching and Next Up shows both in a single row, most recently watched first. Max Days in Next Up sets how long a show stays in Next Up after you last watched it; 0 means no limit.
Music and audiobook players. Swipe the cover left or right to change tracks in the music player, or chapters in the audiobook player; podcasts change episodes. Both can be turned off in Settings > Playback under Music and audiobooks. The mini player has back and forward buttons: previous and next track for music, rewind and forward 30 seconds for audiobooks. In the music player, tapping the artist or album name opens its page.
Keyboard shortcuts. The video player can be controlled from a physical keyboard, with the same keys as YouTube's web player. They work with both ExoPlayer and MPV:
- Space or K plays and pauses. Enter presses Skip Intro or Skip Outro when the button is showing.
- J and L seek back and forward 10 seconds; Left and Right seek 5 seconds. 0-9 jump to 0-90% of the video, and Home and End jump to the start and the end.
- Up and Down change the volume, and M mutes and unmutes.
- < and > slow down and speed up playback in steps of 0.25×.
- Shift+N and Shift+P go to the next and previous episode, and I enters picture-in-picture.
The arrow keys, number keys, Home and End start working once a letter or Space has been pressed on that keyboard. Shortcuts are off while casting, when the controls are locked and while a panel such as tracks, quality or episodes is open.
Also new: Swap gesture indicators, which show the brightness and volume levels on the opposite side from your finger (Settings > Playback) · an About AFinity screen with the app version, links to GitHub, Discord and Ko-fi, and the open-source licences · View All for downloaded movies, shows, audiobooks, podcasts, albums and tracks on the home screen · total tracks and runtime in the music library.
Improvements
- Playback errors show a clear message with Retry and Close buttons, and playback is retried automatically when the connection returns.
- Live TV: tuning a channel gives up after 30 seconds instead of waiting indefinitely; a failed channel shows an error with a retry that re-tunes it, and the previous stream is closed on the server when you re-tune.
- Live TV availability is picked up as it changes, without reloading the app.
- Deleted items disappear from library grids straight away.
- Libraries are listed in the order set on the server, including the Latest rows on the home screen.
- Removing a server or forgetting a saved account now also signs those sessions out on the Jellyfin server.
- Signing in shows a specific message when the server refuses the sign-in.
- When offline mode is switched on, the top bar offers "Go online" instead of "Retry connection".
- Cards adapt to the system font size.
- Logos are requested at the height they are shown at, not only the width.
- API keys and passwords are removed from more places in the app's logs.
- Links from the Control Panel, such as plugin changelogs, open in an in-app browser tab.
- Updated Gradle, the Android Gradle Plugin and Paging.
- Updated translations: Russian, French, Portuguese, German and Italian.
Fixes
- Dolby Vision files the server labels as invalid, such as Profile 8.6 releases, are now played directly on devices with an HEVC HDR10 decoder instead of being transcoded (#250).
- Intros no longer force the Zoom mode. They use the same zoom mode as the video (#109).
- Music: the last position is now reported when playback stops, when the queue ends and when the audio service shuts down. Music that is being cast reports its progress too.
- Casting: when a cast video finishes, it is marked as watched, and the next item plays.
- Fixed crashes on devices without Google Play Services. Chromecast is turned off on those devices.
- MPV now reports media that fails to load, so the player shows an error.
- Control Panel: a running library scan is identified reliably, and tasks that failed, were cancelled or were aborted say so.
What's Changed
- fix: optimise scheduled task monitoring and improve control panel task UI by @MakD in
4dda6de - feat: add swipe-to-skip gestures for music and audiobook player covers by @MakD in
36aa261 - feat: add backward and forward controls to AudioMiniPlayer by @MakD in
766fb6b - build: upgrade Gradle, AGP, and JDK to latest versions by @MakD in
5ab7508 - fix: ensure music playback progress is reported on stop by @MakD in
3099e5b - fix: ensure cast playback progress is reported and handled on completion by @MakD in
12dbf2f - fix: implement robust playback error handling and retry by @MakD in
6a0786b - refactor: remove client-side library sorting by @MakD in
d28634a - fix(cast): conditionally enable Chromecast based on Play Services by @MakD in
0e5cd5d - perf(image): optimize logo loading with height-based resizing by @MakD in
6f00d69 - feat(about): introduce About AFinity screen by @MakD in
4154097 - fix(connectivity): fix top app bar connectivity actions by @MakD in
5a7197a - fix(live-tv-playback): improve live TV stream negotiation and error handling (master) by @MakD in
f02b226 - feat(livetv, library-ui): enhance Live TV access reactivity and local item deletion handling by @MakD in
fe502d3 - feat(ui-cards): implement customizable card sizing by @MakD in
7e0de05 - feat(ui-cards): enhance adaptive card sizing and layout by @MakD in
87e05e1 - fix(ui-cards): fix adaptive card row fitting logic by @MakD in
9473c79 - fix(ui-cards): fix adaptive card row fitting logic by @MakD in
b632bd5 - fix(ui-cards): refine CardDimensions and UI component sizing by @MakD in
32467ab - feat(library-browsing): implement mixed library support and folder browsing by @MakD in
296f6ab - feat(home): allow merging continue watching and next up rows by @MakD in
33a4bd4 - fix(auth): implement token revocation for server and user cleanup by @MakD in
3bd6d49 - feat(admin-control): implement comprehensive server control panel by @MakD in
517e0b7 - feat(admin-control): overhaul user management UI and functionality by @MakD in
b9183d9 - feat(admin-control): overhaul library management and configuration forms by @MakD in
5ff39bc - feat(admin-control): overhaul library management and configuration forms by @MakD in
f26a5ca - feat(admin-control): overhaul activity screen UI and categorization by @MakD in
33a64ed - feat(admin-control): overhaul plugins and server logs administration by @MakD in
9968367 - feat(admin-control): overhaul devices screen UI and functionality by @MakD in
8d7d3f4 - feat(admin-control): overhaul scheduled tasks UI and functionality by @MakD in
4ad4d27 - feat(admin-control): overhaul API keys management UI and functionality by @MakD in
1660dc6 - feat(admin-control): refine admin panel UI for consistency and visual polish by @MakD in
2fc7f9f - feat(admin-control): improve admin panel data handling and UI consistency by @MakD in
8d2c89a - feat(library): streamline library content navigation by @MakD in
6306ba6 - feat(player): add option to swap gesture indicators by @MakD in
dea62a7 - fix(player): include DOVI_INVALID video range when HEVC HDR10 is supported by @MakD in
cd2174d - fix(player): remove zoom mode override during intro playback by @MakD in
76449ae - feat: add YouTube-style keyboard shortcuts to video player by @polferov in
#241 - Translations update from Hosted Weblate by @weblate in
#245 - Translations update from Hosted Weblate by @weblate in
#246 - Translations update from Hosted Weblate by @weblate in
#248 - Translations update from Hosted Weblate by @weblate in
#249 - Translations update from Hosted Weblate by @weblate in
#255
New Contributors
Full Changelog: v0.12.02-beta...v0.12.03-beta