HDR10+ are designed to be backward-compatible with HDR10 which means we can just advertise HDR10+ as supported for HDR10 supported clients. This will avoid the server to force a remux to remove the HDR10+ metadata to ensure compatibility. At least the server-side removal is not needed for major web browsers and the tvs that uses the web client. For TVs, we need to relax the device profile even more by exposing not-supported but can be played ranges. This is due to the HLS support on TVs are often lacking features and the remux on server side would end up removing more than just the dynamic range. I don't personally own any of the TVs, so I'm not sure if this relaxed profile would break anything though.
Jellyfin Web
Part of the Jellyfin Project
Jellyfin Web is the frontend used for most of the clients available for end users, such as desktop browsers, Android, and iOS. We welcome all contributions and pull requests! If you have a larger feature in mind please open an issue so we can discuss the implementation before you start. Translations can be improved very easily from our Weblate instance. Look through the following graphic to see if your native language could use some work!
Build Process
Dependencies
- Node.js
- npm (included in Node.js)
Getting Started
-
Clone or download this repository.
git clone https://github.com/jellyfin/jellyfin-web.git cd jellyfin-web -
Install build dependencies in the project directory.
npm install -
Run the web client with webpack for local development.
npm start -
Build the client with sourcemaps available.
npm run build:development
Directory Structure
Note
We are in the process of refactoring to a new structure based on Bulletproof React architecture guidelines. Most new code should be organized under the appropriate app directory unless it is common/shared.
.
└── src
├── apps
│ ├── dashboard # Admin dashboard app
│ ├── experimental # New experimental app
│ ├── stable # Classic (stable) app
│ └── wizard # Startup wizard app
├── assets # Static assets
├── components # Higher order visual components and React components
├── constants # Common constant values
├── controllers # Legacy page views and controllers 🧹 ❌
├── elements # Basic webcomponents and React equivalents 🧹
├── hooks # Custom React hooks
├── lib # Reusable libraries
│ ├── globalize # Custom localization library
│ ├── jellyfin-apiclient # Supporting code for the deprecated apiclient package
│ ├── legacy # Polyfills for legacy browsers
│ ├── navdrawer # Navigation drawer library for classic layout
│ └── scroller # Content scrolling library
├── plugins # Client plugins (features dynamically loaded at runtime)
├── scripts # Random assortment of visual components and utilities 🐉 ❌
├── strings # Translation files (only commit changes to en-us.json)
├── styles # Common app Sass stylesheets
├── themes # Sass and MUI themes
├── types # Common TypeScript interfaces/types
└── utils # Utility functions
- ❌ — Deprecated, do not create new files here
- 🧹 — Needs cleanup
- 🐉 — Serious mess (Here be dragons)