https://github.com/sureshfizzy/JellyCine
A Jellyfin + Emby Client App with modern UI
https://github.com/sureshfizzy/JellyCine
android emby emby-api emby-client jellyfin jellyfin-client jellyfin-media-player kotlin
Last synced: 11 days ago
JSON representation
A Jellyfin + Emby Client App with modern UI
- Host: GitHub
- URL: https://github.com/sureshfizzy/JellyCine
- Owner: sureshfizzy
- License: gpl-3.0
- Created: 2025-07-19T07:30:16.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2026-06-16T05:16:54.000Z (16 days ago)
- Last Synced: 2026-06-16T07:43:34.697Z (16 days ago)
- Topics: android, emby, emby-api, emby-client, jellyfin, jellyfin-client, jellyfin-media-player, kotlin
- Language: Kotlin
- Homepage: https://github.com/sureshfizzy/JellyCine
- Size: 5.57 MB
- Stars: 86
- Watchers: 0
- Forks: 5
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
JellyCine
Jetpack Compose Android client for Jellyfin and Emby, focuses on a fast, fluid UI and smooth playback.
## Features
- Seerr integration for discovery, search, recommendations, detail pages, request badges, request limits, and title requests
- MPV playback engine with fallback when ExoPlayer cannot render video
- Merge-version support with local version selection for multi-source items (No server side support required)
- Jellyfin and Emby support with automatic endpoint resolution
- Spatial audio passthrough when supported by the device/output route
- Compose-first UI with Home, My Media, Search, Favorites, and Settings sections
- Offline-aware navigation mode that falls back to downloaded content when network is unavailable
- Immersive search experience with suggestions, live results, and categorized results
- Offline downloads with queueing, pause/resume/cancel, and persistent state recovery
- Season and series download actions with storage estimation before enqueueing
- Media3 ExoPlayer playback with Jellyfin FFmpeg extension integration
- In-player streaming quality selection, audio transcoding controls, and configurable player cache
- Subtitle styling controls with improved subtitle and audio track handling
- Google Cast support with inline remote playback controls
- Gesture controls in player (seek, volume, brightness), lock mode, and start-maximized preference
- Skip Intro support: shows a Skip Intro button when IntroDB/TheIntroDB markers are available; configurable in player settings
## Screenshots
For community discussions and support, see [Discussions](https://github.com/sureshfizzy/JellyCine/discussions).
## Project Structure
- `phone`: Phone-specific Android app module (Compose UI, navigation, player, settings)
- `tv`: TV-specific Android app module (leanback/DPAD support, sidebar rail, TV-specific UI/flows)
- `data`: APIs, repositories, models; multiplatform/shared networking and serialization helpers
- `core`: Shared player, preferences, and utility code used by app modules
- `shared`: Shared UI components and image infrastructure moved into its own module
- `docs`: Screenshots and documentation assets
## Tech Stack
- Kotlin, Coroutines, Flow
- Jetpack Compose + Material 3 + Navigation Compose
- Hilt + KSP for DI/code generation
- Ktor Client + OkHttp 5
- Coil 3 for image loading
- Media3 ExoPlayer (`exoplayer`, `ui`, `session`, `dash`, `hls`, `smoothstreaming`, `effect`)
- `org.jellyfin.media3:media3-ffmpeg-decoder` extension
## Getting Started
### Prerequisites
- Android Studio (latest stable recommended)
- JDK 17
- Android SDK platform for API 36
### Build and Run
1. Clone the repository.
2. Open it in Android Studio.
3. Let Gradle sync complete.
4. Select a device/emulator (Android 8.1+).
5. Run the `app` module.
CLI build:
```bash
./gradlew :phone:assembleDebug
```
Debug and release APKs are named as:
- `jellycine-debug-.apk`
- `jellycine-release-.apk`
## Privacy
See [PRIVACY](PRIVACY) for the current privacy policy.
## Contributing
Issues and pull requests are welcome. For large feature work, open an issue first to align on scope.
## License
This project is licensed under the GNU General Public License v3.0. See [LICENSE](LICENSE).