An OSS Android TV client for Jellyfin
Find a file
damontecres 56bf3cb7a0
Optimizes recommended content & image caching (#359)
## Details
This PR contains a number of optimizations

### Images
Updates to request images with maximum sizes

The max sizes are estimates on the maximum number of pixels that will be
actually displayed. This means the server is downscaling large images
which means 1) better quality downscaling and 2) smaller images sent
over the network and cached

This should mean slightly better quality images and more images that can
be cached locally

### Paging
Reduces network calls when fetching paginated data, ie grid pages and
some rows. This PR combines the total record count & first page queries
which slightly reduces total time to load paginated data.

Additionally, on movies/tv show recommended pages, the rows now only
fetch a limited number of items (same as number on home page). While
they previously fetched using pagination, there is an overhead required
to paginate requests, so this is slightly faster.

### Async recommended fetching
On movies/tv show recommended pages, the rows are now fetched completely
separately from each other. Previously, the rows were requested
separtely, but each was only added to the UI in order as each completed.
Now they will add as the data arrived.

Note: Top unwatched TV shows is still very slow on `10.11.x`, see #204


### Image cache

The local, on-disk image cache size is increased from 100mb to 200mb.
Combined with the smaller images, this covers about 1500-2000 poster
images, but will vary by server.

The cache size is now also configurable in advanced settings from 25mb
to 1000mb. Additionally, you can see how much of both the disk and
memory caches are in use.

## Issues
Closes #330 
Related to #120
2025-12-02 16:00:21 -05:00
.github Few dev related fixes (#291) 2025-11-21 16:05:27 -05:00
app Optimizes recommended content & image caching (#359) 2025-12-02 16:00:21 -05:00
gradle Bump dependency versions & update issue templates (#270) 2025-11-20 12:55:49 -05:00
scripts Add experimental MPV player backend (#161) 2025-11-16 18:46:25 -05:00
.editorconfig Basics for user prefs, logging in, etc 2025-09-21 19:56:40 -04:00
.gitignore Add experimental MPV player backend (#161) 2025-11-16 18:46:25 -05:00
.pre-commit-config.yaml Add pre-commit 2025-09-23 18:02:25 -04:00
build.gradle.kts Add pre-commit 2025-09-23 18:02:25 -04:00
CONTRIBUTING.md Add translation info to readme 2025-11-21 14:05:59 -05:00
DEVELOPMENT.md Add experimental MPV player backend (#161) 2025-11-16 18:46:25 -05:00
gradle.properties Set update URL (#8) 2025-10-15 17:17:16 -04:00
gradlew Initial app creation 2025-09-20 16:36:38 -04:00
gradlew.bat Initial app creation 2025-09-20 16:36:38 -04:00
LICENSE Initial commit 2025-09-20 16:31:30 -04:00
README.md Add support for Android TV 6 & 7.0 (#350) 2025-11-30 20:26:42 -05:00
settings.gradle.kts Rebrand 2025-10-15 15:27:30 -04:00

Wholphin - an OSS Android TV client for Jellyfin

"Never half-phin two jellies. Always wholphin one jelly."

Wholphin is an open-source Android TV client for Jellyfin. It aims to provide a different app UI that's inspired by Plex for users interested in migrating to Jellyfin.

This is not a fork of the official client. Wholphin's user interface and controls have been written completely from scratch. Wholphin v0.3.0+ supports playing media using either ExoPlayer/Media3 or MPV (experimental).

Help get Wholphin listed on the Play Store

Current Release Translation status

0 3 0_home

Features

  • A navigation drawer for quick access to libraries, search, and settings from almost anywhere in the app
  • Show Movie/TV Show titles when browsing libraries
  • Play TV Show theme music, if available
  • Plex inspired playback controls, such as:
    • Using D-Pad left/right for seeking during playback
    • Quickly access video chapters during playback
    • Optionally skip back a few seconds when resuming playback
  • Other (subjective) enhancements:
    • Subtly show playback position along the bottom of the screen while seeking w/ D-Pad
    • Force Continue Watching & Next Up TV episodes to use their Series posters
  • Different media playback engines, including:
    • Default ExoPlayer/Media3
    • Experimental MPV

Roadmap

See here for the roadmap

Installation

Downloader Code: 8668671

  1. Enable side-loading "unknown" apps
  2. Install the APK on your Android TV device with one of these options:
    • Install a browser program such as Downloader, use it to get the latest apk with short code 8668671 or URL: http://aftv.news/8668671
    • Download the latest APK release from the releases page or http://aftv.news/8668671
      • Put the APK on an SD Card/USB stick/network share and use a file manager app from the Google Play Store / Amazon AppStore (e.g. FX File Explorer). Android's preinstalled file manager probably will not work!
      • Use Send files to TV from the Google Play Store on your phone & TV
      • (Expert) Use ADB to install the APK from your computer (guide)

Upgrading the app

After the initial install above, the app will automatically check for updates. The updates can be installed in settings.

The first time you attempt an update, the OS should guide you through enabling the required additional permissions for the app to install updates.

Compatibility

Requires Android 6+ (or Fire TV OS 6+) and Jellyfin server 10.10.x or 10.11.x (tested on primarily 10.11.3).

The app is tested on a variety of Android TV/Fire TV OS devices, but if you encounter issues, please file an issue!

Contributions

Issues and pull requests are always welcome! Please check before submitting that your issue or pull request is not a duplicate.

If you plan to contribute, please read the contributing guide!

You can help translate Wholphin!

Acknowledgements

  • Thanks to the Jellyfin team for creating and maintaining such a great open-source media server
  • Thanks to the official Jellyfin Android TV client developers, some code for creating the device direct play profile is adapted from there
  • Thanks to the Jellyfin Kotlin SDK developers for making it easier to interact with the Jellyfin server API
  • Thanks to numerous other libraries that make app development even possible

Additional screenshots

Movie library browsing

0 3 0_movies

Series page

0 3 0_series_overview

Playlist

0 3 0_playlist