Repository navigation
v2.0.0
Changes
What is New
Litefin is now on Android (TV, Firestick, and mobile), Windows, Linux, macOS, and Web Plugin! All under the same codebase with all the great customizations, with 2 new player backends joining the family: ExoPlayer for Android, Movi player for the new platforms, and direct playing for almost everything along the way, along with a lot of bug fixes and performance improvements to webOS and Tizen, and some new cool features.
New Features:
-
An app scaling setting has been added (in the Display tab), allowing you to zoom in or out as you want, the default scale has changed to try to look good on all screens dynamically, you can change it to a static value to stop this behavior.
-
Mobile ui has been adapted, it's not perfect as Litefin started as a smart tv client, but it works thanks to @bdwandry for the help.
-
Audio track remembering of TV shows is now more persistent, a restart no longer forgets the used tracks.
-
Library has a new infinite scroll mode (change item limit in performance tab) along with an option to move the alphabetical selector (in layout) to the right instead of the top.
-
Subtitle shifting has been added, moving subtitles up when osd is shown, can be toggled off in settings (playback tab). Another option was added to stop seeking acceleration, and an option to reset seek speed when changing seek direction.
-
A new subtitle OSD layout was added, hiding OSD and only showing action icons, hold down to show osd in this mode.
-
You can now set an offset to resume the value from the playback tab in settings (resume 10 seconds earlier).
-
If Seerr is set up, a row for Seerr recommendations has been added directly to the Jellyfin details page.
-
You can now change the mark as played setting of Litefin, it defaults to 80%, could follow the Jellyfin value.
-
You can now add Custom Collections rows to the home screen page thanks to @eduardomoreiraps .
-
You can now set up to 3 fallbacks for preferred audio tracks thanks to @chwps.
Notes:
-
On the web plugin, you can't use the Movi player unless your Jellyfin server is on HTTPS, or if you are using localhost, if you are using http you will be stuck with the HTML player, use desktop builds to avoid this.
-
The auto player backend option was removed, instead, it now shows what is selected and marks it as recommended. Just in case the fallback fails, double-check on your end which player is selected. The recommended player backend for each platform is as follows: Tizen: Avplay, webOS: webOS Player, Android: Exo Player, all the rest: Movi player
New Features:
- Support Android, Windows, Linux, macOS with Tauri v2, along with a new way to access Litefin on the web via a server plugin (This has so much more potential in the future).
- Update about tab to include links and QR codes to most of Litefin stuff.
- Support multiple intro items for local intro plugin (works with other plugins that uses the same api).
- Add channel and continue watching data to Android launcher.
- Support mobile layout on web as well, with support for scaling.
- Display scale setting to change the whole app's scale at one go, dynamic scaling on by default.
- Include new web plugin build of Litefin, to access Litefin directly from the server with auto updates.
- Allow user control over when an item is considered watched.
- Add a back button on the navbar to make navigation easier.
- Expand Hungarian locale thanks to @Gabor2180 and Traditional Chainese, Taiwan thanks to @nick322.
- Route anime series to dedicated Sonarr profile and directory.
- Switch to landscape mode on player enter, and switch back on exit.
- Redesign settings for mobile screens.
- Add mobile navbars in portrait mode.
- Initial support for mobile UI.
- Scale the focused OSD button.
- Add web/desktop adapter, fullscreen, and debugging to Windows build.
- Add auto server discovery and WOL support for Android TV and desktop builds.
- Add Android adapter for better control support.
- Add Seerr recommendations row to details page.
- Support ExoPlayer for Android.
- Implement MoviVideoPlayer backend powered by movi-player.
- Add MoviPlayer direct play profile and prewarm support.
- Add desktop detection and Movi backend player settings.
- Add subtitle shifting when OSD is on/off for text subtitles.
- Support Bazarr and SubBuzz plugin badges.
- Allow disabling the player seek acceleration.
- Add custom collection rows and fix season title resolution in trending rows.
- Add resume rewind feature to rewind slightly when resuming.
- Add new OSD layout, stealth / anti-spoiler mode.
- Scroll to item instead of re-querying after clicking a letter from alphabetic selector (only in infinite scroll mode).
- Add an option to reset seek speed when going the other direction during a seek.
- Add the option for infinite scrolling for library pages.
- Add an option to switch to a right-side alphabetic selector in library.
- Add Manrope to the bundled font list thanks to @schweppes-0x.
- Add optional streaming availability via Seerr thanks to @Lightspeed50.
- More persistent remember track for seasons, now remembers them for as long as possible.
Bug fixes:
- focus: fix next items not loading on focus restoration to a media row
- library: fix scrolling on the side menu in the filter modal
- sidebar: fix sidebar not scrolling when overflown in Tizen
- player: increase the height at which subtitles are pushed up when using subtitle dodging
- tizen: restore the lock on EAC3 for now, as it has no audio when copied in a remux in Tizen <6
- settings: hide languages tabs from preferred language setting when there is no favorite languages
- player: before applying zoom, restore to auto mode
- tizen: add back zoom effect to tizen avplay
- webos: fix transparent player background
- home-page: correctly display info for recently added tv shows in home page like Jellyfin
- settings: improve preferred audio selection ux
- trailers: many improvements and bug fixes to remote trailer player
- details: hide tags from rich metadata table by default, was causing massive lag spikes, also improve their performance a tiny bit
- web: fix fonts not being loaded
- home-screen: experimental fixes to scrolling lag on home screen
- home-screen: improve scrolling performance
- home-screen: fix carousel height when window height is smaller than usual
- player: fallback correctly when selected player is not included in the build
- player: remove auto option, instead, show recommended players
- web: default to movi player instead of HTML
- webos: fix an error from an older commit for audio track transcoding support badge
- webos: fix zoom and stretch aspect ratio by using geometry calculation instead of CSS object-fit
- user-switcher: rename logout button to forget server to avoid user confusion
- tizen: add "PLAYER_DISPLAY_MODE_AUTO_ASPECT_RATIO" as a selectable aspect ratio in player
- player: add unsupported badge to playback speed depending on player backend, but still allow users to pick them just in case
- movi: disable click interception to fix Android mobile not having an OSD
- mobile - desktop: fix back behavior inside the player
- desktop: show scrolling arrows for desktop
- adapt language menu text in settings/details page to focused/filled button states
- seerr: keep user-picker rows and request-as button legible on focus
- seerr: adapt request modal text to focused/filled button states
- mobile: final touches to UI fixes on Android mobile
- mobile: improve details page on mobile
- mobile: improve homepage user experience
- subtitles: fix libass-wasm subtitle position on some aspect ratios
- subtitles: fix libass-wasm subtitles flickering on webOS
- android: always full screen mode to avoid colliding ui
- osd: use document.contains for the overlay click guards
- player: improve dialogs and fix subtitle size
- osd: let a highlighted skip prompt handle the OK press thanks to @kaiffeetasse
- player: auto-transcode on playback failure, can be disabled from settings
- login: add server information on auto discovery, show if saved servers are actually currently on
- exo-player: fix libass-wasm not working
- osd: resolve the focused overlay button reliably on OK
- osd: keep play/pause as the focus target while the OSD is hidden
- player: fix resume flashing in exo-player showing older frames and hiding loading too early
- exo-player: fix audio track switching
- tizen: fix player restarting mid-play, force remux option and remove EAC3 restrictions
- app: improve device information in about tab, fix a focus bug in homepage
- exo-player: fix aspect ratio, AV1 transcoding
- android: exo player now works! picture is showing
- player: override audio codec support list for the new player backends
- html-player: apply the same remux - transcoding fallbacks for resume failure as the webOS player
- player: improve the audio codec transcoding detection logic
- skip-intro: fix skip intro getting stuck in a loop on the same intro
- library: fix view mode not changing for certain libraries
- home-screen: fix initial focus not sticking to the home screen carousel
- movi: fix movi video rendering with WebGL1, not good performance tho
- android: fix app scale on Android TV
- library: keep loading screen active until focus restoration completes
- movi: fix FLAC and TrueHD audio codecs failing to start playback
- player: remove the chapter fallback images if there are no chapter thumbnails
- app: remove movi player from tv builds to save on size, actually check if the browser supports WebCodecs, fallback to HTML if it doesn't
- osd: recognize Movi Player in PlaybackInfo and safeguard resume progress
- player: fix remuxing failing to resume in correct position and seek bar getting locked at old value
- home-screen: respect max days in next up setting when merge continue watching and next up is enabled
- trailers: update trailer playback method for web/desktop to fix trailers not working
- app: allow disabling refresh on app restoration, this is now disabled by default for web/desktop
- player: fix audio track changing doesn't restore direct playing after remuxing
- player: fix subtitle track selection being forgotten after a playback mode switch
- player: improve HLS stability and audio de-sync issues
- music: fix some music files failing to start
- home-screen: fix home screen carousel on Emby
- home-screen: improvements to home screen carousel performance
- player: don't ignore audio track preference when selecting the best audio to direct play
- homepage: restore the defensive filtering on next up and continue to watch
- library: fix genres filter on Jellyfin 12
- tizen: hide zoom aspect ratio on tizen, doesn't work
- sidebar: fix more issues with the sidebar
- webos: fix issues with resume showing frames too early
- sidebar: more fixes to sidebar coloring
- player: fix seeking player behavior with stealth mode OSD
- queue: smarter queue window method instead of the static 500 items
- tizen: fix some HEVC content transcoding
- player: fix multiple issues with live TV
- osd: improve new OSD layout
- sidebar: fix always hidden sidebar mode on legacy devices
- osd: fix subtitle offset not working with d-pad
- library: test fix for infinity loading lazy loader
- tizen: fix player being stuck after some seeks
- library: improve infinite scrolling
- live-tv: fix OSD being stuck on some live TV items
- sidebar: fix sidebar libraries menu opening in the wrong place
- library: fix focus restoration failing sometimes
- player: fix player resuming playback before seeking
- player: size the webOS video box to the stream's aspect ratio thanks to @schweppes-0x
- sidebar: fix floating island taking more space than it should
- sidebar: fix sidebar background in settings with ambient glow theme
- ui: fix multiple visual issues in legacy and ultra-legacy
- player: confirm seek with ok in default seek behavior to avoid resume bug
- tizen: fix transcoding AAC5 audio failing to seek
- player: fix transcode audio codec preference not being respected
- sidebar: add support to old classic sidebar settings to the modern layouts
- login: fix adding 2 users with passwords removes other users
- tizen: fix AAC 5.1 audio always transcoding
- wol: fix hex is not a function on older devices
- tizen: semi-fix to player always falling back to remux
- seerr: improve request dialog error message
- home: fix merged up next and continue to watch rows having seasons
- mdb-list: fix user choices not being respected
🌐 Web & Server Plugins
Extend Litefin with enhanced features (Seerr discovery, Where to Watch streaming availability, MDBList ratings) and access Litefin directly inside your web browser:
🔌 Server Plugins (Features & Integrations)
- Litefin Plugin for Jellyfin: Required on Jellyfin server for Seerr integration, per-season requests, and TMDB streaming availability.
- Litefin Plugin for Emby: Companion plugin for Emby server setups.
📦 Which Version Should I Choose?
Litefin is available across Smart TVs, Android devices, Desktop environments, and as a Jellyfin Web plugin. Pick the build matching your hardware below:
📺 Smart TVs (Samsung Tizen & LG webOS)
Smart TV packages come in 4 performance tiers to squeeze maximum performance out of both modern and vintage hardware:
| Build Variant | Recommended Hardware | OS / Platform Target | Package Format |
|---|---|---|---|
| Modern | High-end / Recent TVs (2021+) | Tizen 6.5+ / webOS 22+ (6.0+) | .wgt / .ipk |
| Normal | Most Smart TVs (2019–2021) | Tizen 5.0+ / webOS 5.0+ | .wgt / .ipk |
| Legacy | Mid-lifecycle TVs (2017–2018) | Tizen 4.0+ / webOS 4.0+ | .wgt / .ipk |
| Ultra-Legacy | Older & vintage TVs (Pre-2017) | Tizen 3.0 & below / webOS < 4.0 | .wgt / .ipk |
Tip: If you're unsure which tier your TV needs, start with Normal. If it fails to launch, switch to Legacy.
For vintage Tizen 2.4 TVs, use the dedicatedUltra-Legacy (No-Service)build.
- Samsung Tizen: Sideload
.wgtusing Apps2Samsung or Tizen CLI. - LG webOS: Install
.ipkvia webOS Homebrew Channel or Try Scoty's lg-dev-manager.
📱 Android (Android TV, Google TV, Fire TV & Mobile)
Android builds are native packages powered by Media3 ExoPlayer with hardware decoding and audio passthrough:
| Package | Target Hardware & Devices |
|---|---|
*-Android-arm64.apk |
Most Modern Devices (Recommended): Android TV / Google TV boxes, Nvidia Shield, Fire TV Cube (3rd gen), and modern Android phones / tablets (64-bit ARM). |
*-Android-arm.apk |
32-bit Devices: Fire TV Stick (Basic, 4K, 4K Max 1st gen), budget Android TV sticks, older Android mobile devices (32-bit ARM). |
*-Android-x86_64.apk / x86.apk |
Android emulators, Intel-based Android hardware, and Chromebooks running Android runtime. |
- Sideload via ADB (
adb install <file>.apk), Downloader app, or Send Files to TV (SFTV).
🖥️ Desktop (Windows, Linux, macOS)
Native desktop builds powered by Tauri v2 with low resource usage and hardware-accelerated playback:
| OS | Available Formats | Notes |
|---|---|---|
| Windows | *.exe, *_x64-setup.exe, *.msi |
Standalone executable, setup wizard, or MSI enterprise installer (Windows 10/11 64-bit). |
| Linux | *.AppImage, *.deb, *.rpm |
Universal standalone (AppImage), Debian/Ubuntu (.deb), or Fedora/RHEL/openSUSE (.rpm). |
| macOS | *.dmg |
Drag-and-drop disk image installer. |
Notes: For the macOS build, I don't have an Apple Developer account, so it's not signed. To run it, open Terminal and run:
xattr -cr /Applications/Litefin.app
⌨️ Keyboard Controls (Desktop & Web)
| Key / Shortcut | Action |
|---|---|
Space / K |
Play / Pause toggle |
J / L |
Seek backward / forward 10 seconds |
← / → |
Navigate UI items or seek timeline during playback |
↑ / ↓ |
Navigate UI items, menus, and OSD controls |
Enter |
Select / Activate focused item or reveal OSD |
Esc / Backspace |
Go back / Close modal / Exit player |
F / F11 |
Toggle Fullscreen |
M |
Mute / Unmute audio |
| Media Keys | Hardware Play, Pause, Next, Previous, Stop |
🌐 Litefin Client Plugin (Web Client in Browser)
Integrates Litefin Client directly into the official Jellyfin web client, giving you the Litefin experience in any browser.
Option 1: Via Repository Manifest (Recommended)
- Copy this manifest repository URL:
https://github.com/MoazSalem/litefin/releases/latest/download/litefin-plugin-manifest.json - In your Jellyfin Server, navigate to Dashboard > Plugins > Repositories.
- Click Add (+), enter a name (e.g.
Litefin Plugins), and paste the URL. - Switch to the Catalog tab, locate Litefin Client Plugin under General, and click Install.
- Restart your Jellyfin Server.
- After restart, Litefin Client is available in your browser at
http://<Jellyfin-IP>:<Jellyfin-Port>/litefin.
Option 2: Manual Installation
- Download the
Litefin.Client.Plugin_*.ziparchive from the Releases page (or compile from source). - Extract the archive (specifically
Litefin.Client.Plugin.dllandmanifest.json) into your server's plugin folder:- Windows (Service):
C:\ProgramData\Jellyfin\Server\plugins\Litefin_Client\ - Windows (Portable):
<Jellyfin-Directory>\data\plugins\Litefin_Client\ - Linux / Docker:
/config/plugins/Litefin_Client/
- Windows (Service):
- Restart your Jellyfin Server.
New Contributors
- @nick322 made their first contribution in #455
- @kaiffeetasse made their first contribution in #470
- @silentpager-rocks made their first contribution in #475
- @Gabor2180 made their first contribution in #481
- @chwps made their first contribution in #482
Full Changelog: v1.9.0...v2.0.0