A Jetpack Compose based client for Jellyfin and Emby — designed for phone, TV, and beyond.
- Custom MPV player set as default engine — built from a custom fork with HDR10/HDR10+/Dolby Vision support and format badges
- HDR passthrough with dynamic dataspace switching and headroom hints (Android 14+)
- Configurable tone-mapping, rendering quality, and GPU filter settings
- Audio passthrough (TrueHD, DTS-HD, Atmos) when supported by device/output
- Spatial audio passthrough on compatible devices
- Media3 ExoPlayer fallback when MPV cannot render
- Jellyfin FFmpeg extension integration for broad codec coverage
- In-player quality selection, audio transcoding controls, and configurable player cache
- Gesture controls (seek, volume, brightness), lock mode, and start-maximized preference
- Skip Intro button when IntroDB/TheIntroDB markers are available
- Track selection dialog with format badges and AMOLED styling
- Subtitle styling controls with improved track handling
- Google Cast with inline remote playback controls
- In-app Trailers with autoplay in feature carousel (capped to 720p on phones)
- Trailers & Extras section on detail screens
- For You personalized recommendations with watched feed
- Awards category powered by Wikidata
- Immersive search with suggestions, live results, and categorized output
- Favorites tab with compact header and view-all navigation
- Discovery, search, recommendations, and detail pages
- Request badges, request limits, and title requests
- Trailer support for Seerr detail items
- Offline downloads with queue, pause/resume/cancel, and persistent state recovery
- Transcoded download support with quality picker
- Audio track selection in download quality picker
- Season and series download with storage estimation
- Offline-aware navigation — falls back to downloaded content when network is unavailable
- Redesigned TV UI with D-pad navigation and remote control support
- Cinematic full-bleed detail screen overlay
- Immersive backdrop for suggestions
- Keyboard overlay search with carousel results
- Feature hero card with card expand and backdrop crossfade
- Watch activity stats with daily breakdown charts
- Watched items list with poster images and media type filter
- Dual chart filters for media type and time range
- Week and month navigation for historical viewing
- Tablet-optimized layout
- Jellyfin and Emby support with automatic endpoint resolution
- Merge-version support with local version selection (no server-side changes required)
- Discord Rich Presence via official Social SDK with connection management
- Admin Panel with live server info, now-playing sessions, and activity log
| Platform | Status |
|---|---|
| Android Phone | Stable |
| Android TV | Stable |
| iOS | In Development |
| Layer | Technology |
|---|---|
| Language | Kotlin 2.3, Coroutines, Flow |
| UI | Jetpack Compose + Material 3 |
| DI | Hilt + KSP |
| Networking | Ktor Client + OkHttp 5 |
| Images | Coil 3 |
| Player | MPV (primary), Media3 ExoPlayer (fallback) |
| Multiplatform | Kotlin Multiplatform (Android + iOS) |
phone/ — Phone app module (Compose UI, navigation, player, settings)
tv/ — TV app module (leanback/DPAD, sidebar rail, TV-specific flows)
data/ — APIs, repositories, models; multiplatform networking
core/ — Shared player, preferences, and utilities
shared/ — Shared UI components and image infrastructure
- Android Studio (latest stable)
- JDK 17
- Android SDK API 36
# Phone
./gradlew :phone:assembleDebug
# TV
./gradlew :tv:assembleDebugAPK naming: jellycine-{debug|release}-<version>.apk
Help translate JellyCine into your language on Weblate.
Issues and pull requests are welcome. For large feature work, open an issue first to align on scope.
For community discussions and support, see Discussions.
See PRIVACY for the current privacy policy.
This project is licensed under the GNU General Public License v3.0.






