A native Android client for Jellyfin servers built with Jetpack Compose and Material 3.
Afinity provides a clean, responsive interface for accessing your Jellyfin media library on Android devices. Browse and stream your content with smooth playback performance, discover new media through personalized recommendations, and request movies and TV shows directly through Seerr integration.
Connect with us on Discord and be part of the discussion
| Category | Details |
|---|---|
| Media Playback | - Hardware-accelerated video playback with LibMPV - Multiple audio and subtitle track support - Resume functionality across sessions - Trickplay navigation with thumbnail previews - Media Segments Support (Intro/Outro Skipper) |
| Content Discovery | - Library browsing by content type - Search and filtering capabilities - Favorites management - Cast and crew information |
| Seerr Integration | - Request movies and TV shows directly from the app - Browse trending, popular, and upcoming content - Search integration with request filter - Track request status (Pending, Approved, Available) - Approve / Reject incoming requests (admin only) |
| Interface | - Material 3 design with system theming - Responsive layouts for different screen sizes - Gesture-based player controls - Dark and light theme support |
| Server Integration | - Secure authentication - Playback progress synchronization - Multiple quality options - Background library updates |
Download the latest APK from our Releases page
git clone https://github.com/MakD/AFinity.git
cd AFinity
./gradlew assembleRelease- Install and launch Afinity
- Enter your Jellyfin server address (e.g.,
http://192.168.1.100:8096) - Sign in with your credentials
- Access your media library
For remote access, ensure your Jellyfin server is configured for external connections.
- Open Settings > General
- Enable Jellyseerr toggle
- Enter your Jellyseerr server URL
- Choose authentication method:
- Jellyfin: Use your Jellyfin credentials
- Local: Use your Jellyseerr email and password
- Tap "Connect"
Once connected, the Requests tab will appear in the bottom navigation.
- Language: Kotlin
- UI: Jetpack Compose + Material 3
- Architecture: MVVM with Repository pattern
- DI: Hilt
- Navigation: Navigation Compose
- Player: LibMPV + ExoPlayer
- Networking: Retrofit + Jellyfin SDK
- Images: Coil with BlurHash
- Storage: Room
- Tink - Encryption library for secure credential storage
- Jetpack DataStore - Modern data storage solution
Building
./gradlew build
./gradlew test
./gradlew installDebugContributing
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
- Download management for offline viewing
- Adaptive streaming with quality selection (transcoding support)
- Chromecast support
- Enhanced accessibility features
- Multi-user profile switching
- Multi-server support
- Picture-in-picture mode
- Advanced subtitle styling options
- Audio delay adjustment
- Playback speed controls
- Tablet-optimized layouts
- Advanced search filters
- Custom library views
- Gesture customization
- Background sync optimization
- Cache management
- Network quality detection
- Performance monitoring
- Jellyfin - Open source media server
- MPV - Media player engine
- libmpv-android by Jarne Demeulemeester - Android MPV integration
- Seerr - Open-source media request and discovery manager for Jellyfin, Plex, and Emby.
Afinity respects your privacy:
- No tracking or analytics are collected
- All data stays local or with your own Jellyfin server
- No third-party services are used without your explicit consent
- Source code is open for full transparency
AFinity does not support or condone piracy. The app is only for streaming media you personally own. It includes no media content, and any references or support requests related to piracy or related tools are strictly prohibited.
LGPL-3.0 License - see LICENSE for details.
Made with ❤️ for the Jellyfin community
Afinity is not affiliated with Jellyfin. Jellyfin is a trademark of the Jellyfin project.







