An OSS Android TV client for Jellyfin
Find a file
YogiBear12 2908f539e2
Redesign alphabet picker to fit all letters on screen (#480)
- Switch to tv.material3.Button with ButtonDefaults for better styling
- Add opacity changes based on focus (0.85f focused, 0.2f unfocused)
- Keep selected letter fully visible when picker is unfocused
- Reduce button size from 24.dp to 14.dp to fit all letters
- Reduce spacing between letters (1.1.dp vertical, 2.dp horizontal)
- Use transparent backgrounds for unfocused letters
- Use border color for selected letter when focused, tertiary when
unfocused
- Add Box with CircleShape clip to prevent focus indicator overflow
- Reduce font size by 15%
- Add 16.dp end padding to push picker away from screen edge

When using the 'Show details' view option, the alphabet picker will
still overflow the bottom edge of the screen. I find this an acceptable
option though, as the backdrop pushes the card grid further down the
page.

Closes https://github.com/damontecres/Wholphin/issues/386

>[!NOTE]
> AI was used in the making of this PR

---------

Co-authored-by: Damontecres <damontecres@gmail.com>
2025-12-17 12:16:46 -05:00
.github Add pull request template 2025-12-16 20:01:56 -05:00
app Redesign alphabet picker to fit all letters on screen (#480) 2025-12-17 12:16:46 -05:00
gradle Backdrop improvements (#476) 2025-12-17 11:18:57 -05:00
scripts Add additional ffmpeg audio decoders (#423) 2025-12-11 12:55:52 -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 Prefetch trickplay images (#445) 2025-12-12 22:04:52 -05: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 Update development.md with info on setting up the dev environment 2025-12-16 19:35:14 -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 Update readme with features 2025-12-11 16:28:03 -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).

Current Release Translation status
Get Wholphin on Google Play

0_3_5_home

Features

User interface

  • A navigation drawer for quick access to libraries, favorites, search, and settings from almost anywhere in the app
  • Option to combine Continue Watching & Next Up rows
  • Show Movie/TV Show titles when browsing libraries
  • Play theme music, if available
  • Search & download subtitles (requires compatible server plugin such as OpenSubtitles)
  • Customize layout grids for libraries
  • Multiple app color themes

Playback

  • Different media playback engines, including:
    • Default ExoPlayer/Media3
    • Experimental MPV
  • Plex inspired playback controls, such as:
    • Using D-Pad left/right for seeking during playback
    • Quickly access video chapters & queue during playback
    • Optionally skip back a few seconds when resuming playback
  • Live TV & DVR support
  • Auto play next episodes with pass out protection
  • Option for automatic refresh rate switching on supported displays
  • Trickplay support
  • 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

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

Movie page

0_3_5_movie

Series page

0_3_5_series

Playlist

0 3 0_playlist