{"id":45136693,"url":"https://github.com/MakD/AFinity","last_synced_at":"2026-03-04T21:01:22.739Z","repository":{"id":317516454,"uuid":"1067758672","full_name":"MakD/AFinity","owner":"MakD","description":"A modern, native Android Jellyfin client built with Kotlin, Jetpack Compose, Material 3, and LibMPV.","archived":false,"fork":false,"pushed_at":"2026-03-03T09:40:02.000Z","size":79295,"stargazers_count":125,"open_issues_count":12,"forks_count":6,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-03T11:22:16.343Z","etag":null,"topics":["android","android-app","android-application","audiobookshelf","audiobookshelf-app","jellyfin","jellyfin-client","jellyfin-server","jellyfin-web","jellyseerr","jetpack-android","jetpack-compose","kotlin","kotlin-android","libmpv","material3","material3-android","mediaplayer","mpv","seerr"],"latest_commit_sha":null,"homepage":"https://afinity.vercel.app","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MakD.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"m0rph3us"}},"created_at":"2025-10-01T10:50:36.000Z","updated_at":"2026-03-03T09:40:06.000Z","dependencies_parsed_at":"2025-10-23T13:24:10.738Z","dependency_job_id":"0e4ec643-dfd2-4d69-bb76-79ae7cd24d8e","html_url":"https://github.com/MakD/AFinity","commit_stats":null,"previous_names":["makd/afinity"],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/MakD/AFinity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakD%2FAFinity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakD%2FAFinity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakD%2FAFinity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakD%2FAFinity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MakD","download_url":"https://codeload.github.com/MakD/AFinity/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MakD%2FAFinity/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30092864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-app","android-application","audiobookshelf","audiobookshelf-app","jellyfin","jellyfin-client","jellyfin-server","jellyfin-web","jellyseerr","jetpack-android","jetpack-compose","kotlin","kotlin-android","libmpv","material3","material3-android","mediaplayer","mpv","seerr"],"created_at":"2026-02-20T00:00:37.401Z","updated_at":"2026-03-04T21:01:22.716Z","avatar_url":"https://github.com/MakD.png","language":"Kotlin","funding_links":["https://ko-fi.com/m0rph3us","https://buymeacoffee.com/m0rphi"],"categories":["Kotlin"],"sub_categories":[],"readme":"# Afinity - Yet Another Jellyfin Client\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/MakD/AFinity/refs/heads/master/screenshots/Logo/GithubBanner.png\" alt=\"AFinity Banner\" width=\"100%\"\u003e\n\n[![Release](https://img.shields.io/github/v/release/MakD/AFinity?style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjIyIDIwIDY0IDY0Ij48cGF0aCBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMy4xNiw2OS45NmMwLjA0LC0zLjM3IDAuNjMsLTYuMTEgMS40NywtOC44YzEuNjIsLTUuMiAzLjk4LC0xMC4wNiA2LjY0LC0xNC43OWMyLjQzLC00LjM0IDUuMDksLTguNTIgOC4yMywtMTIuMzljMi4zLC0yLjgzIDQuODEsLTUuNDYgNy44NiwtNy41MWMxLjUzLC0xLjAzIDMuMTYsLTEuODIgNC45OSwtMi4xOGMyLjQ0LC0wLjQ4IDQuNjgsMC4xNSA2LjgxLDEuMjljMi43NywxLjQ5IDUuMDMsMy42MSA3LjE1LDUuOWM0LjEyLDQuNDcgNy4zOSw5LjU1IDEwLjQxLDE0LjhjMi40MSw0LjE4IDQuNTIsOC41IDYuMTMsMTMuMDZjMS4wOCwzLjA4IDEuODksNi4yMyAyLDkuNTFjMC4wOSwyLjUgLTAuMjUsNC45MSAtMS43NCw3LjAyYy0xLjMxLDEuODcgLTMuMTQsMy4wOCAtNS4xNSw0LjA1Yy0zLjMsMS41OCAtNi44MiwyLjQzIC0xMC40MSwyLjk0Yy05LjA4LDEuMjkgLTE4LjE3LDEuMzQgLTI3LjI1LDAuMDFjLTMuOTEsLTAuNTcgLTcuNzIsLTEuNTcgLTExLjIyLC0zLjQ3Yy0yLjAyLC0xLjA5IC0zLjc2LC0yLjUyIC00LjgxLC00LjYyQzIzLjQsNzMuMTEgMjMuMTcsNzEuMjkgMjMuMTYsNjkuOTZ6TTU0LjM1LDM1LjE3YzcuMTIsNC4yNiAxMi45OSw5Ljc3IDE4LjUyLDE1LjY5Yy0wLjA1LC0wLjE5IC0wLjEyLC0wLjM2IC0wLjIxLC0wLjUxYy0xLjQ1LC0yLjQgLTIuODQsLTQuODQgLTQuMzUsLTcuMmMtMi40MiwtMy43NyAtNS4xOSwtNy4yNyAtOC40NiwtMTAuMzVjLTEuMDQsLTAuOTggLTIuMTQsLTEuOSAtMy40NiwtMi40OWMtMS43MywtMC43OCAtMy4xOCwtMC40IC00LjE4LDEuMjFjLTAuNTYsMC45IC0xLjA0LDEuODcgLTEuMzcsMi44NmMtMS42NCw0LjkyIC0yLjI4LDEwLjAyIC0yLjUsMTUuMThjLTAuMTcsMy45NSAtMC4wNSw3LjkgMC4zNCwxMS44NGMwLjAzLDAuMyAtMC4wMiwwLjQ4IC0wLjMxLDAuNjRjLTEuNDgsMC44MyAtMi45NCwxLjY5IC00LjQxLDIuNTNjLTAuMTMsMC4wNyAtMC4yNiwwLjEyIC0wLjQ4LDAuMjJjLTAuNjksLTUuMjMgLTAuNzMsLTEwLjQyIC0wLjQ3LC0xNS42OGMtMC4xMSwwLjA4IC0wLjE0LDAuMSAtMC4xNiwwLjEyYy0wLjA1LDAuMTMgLTAuMDksMC4yNSAtMC4xMywwLjM4Yy0xLjcyLDUuNjMgLTIuOTQsMTEuMzQgLTMuMjYsMTcuMjNjLTAuMDEsMC4yNiAtMC4wOCwwLjQyIC0wLjM1LDAuNTJjLTEuNTUsMC41OSAtMy4xLDEuMiAtNC42NCwxLjhjLTAuMTcsMC4wNiAtMC4zNCwwLjEgLTAuNTksMC4xOGMwLjAyLC00LjExIDAuNTQsLTguMDggMS4zLC0xMi4wM2MwLjc2LC0zLjk0IDEuODEsLTcuODEgMi45NiwtMTEuNjdjLTAuMTUsMC4xMiAtMC4yNiwwLjI1IC0wLjM0LDAuNGMtMC43OCwxLjM1IC0xLjU4LDIuNjkgLTIuMzQsNC4wNmMtMi42NSw0LjgxIC00Ljk0LDkuNzkgLTYuMjYsMTUuMTVjLTAuMzQsMS4zNiAtMC40OCwyLjc4IC0wLjYxLDQuMTdjLTAuMDgsMC44OCAwLjEyLDEuNzYgMC42NywyLjVjMC42NywwLjkgMS42NywxLjI0IDIuNzIsMS4yYzEuMzIsLTAuMDYgMi42NSwtMC4xOCAzLjk0LC0wLjQ3YzMuNzQsLTAuODUgNy4yOSwtMi4yNSAxMC43NSwtMy44OGM0LjQzLC0yLjA5IDguNTksLTQuNjMgMTIuNTgsLTcuNDZjMC4zOCwtMC4yNyAwLjY1LC0wLjI4IDEuMDUsLTAuMDRjMS4zNiwwLjgzIDIuNzUsMS42MSA0LjEzLDIuNDFjMC4xNSwwLjA5IDAuMywwLjE5IDAuNTIsMC4zMmMtNC4yMSwzLjIzIC04LjcxLDUuODYgLTEzLjMzLDguMzFjMC4yMSwwLjAyIDAuMzgsLTAuMDEgMC41NiwwLjA5YzUuNywtMS4zNCAxMS4yNiwtMy4xMiAxNi41MSwtNS43OGMwLjI4LC0wLjE0IDAuNDcsLTAuMTIgMC43MSwwLjA3YzAuOTYsMC43OSAxLjk1LDEuNTUgMi45MiwyLjMzYzAuNDUsMC4zNiAwLjg4LDAuNzQgMS40LDEuMTdjLTcuMTYsNC4wMSAtMTQuODMsNi4zMSAtMjIuNjYsOC4xN2MwLjIsMC4wOCAwLjM4LDAuMSAwLjU2LDAuMDljMy40NSwtMC4xIDYuOTEsLTAuMSAxMC4zNSwtMC4zMmMzLjkyLC0wLjI1IDcuNzgsLTAuOTQgMTEuNTMsLTIuMTJjMS4yOSwtMC40MSAyLjU0LC0wLjg5IDMuNjIsLTEuNzRjMS4yNywtMC45OSAxLjYsLTIuMTkgMS4wNSwtMy43MWMtMC40NSwtMS4yMyAtMS4yNSwtMi4yMyAtMi4xLC0zLjE4Yy0zLjAxLC0zLjM0IC02LjUyLC02LjEgLTEwLjIzLC04LjU5Yy0zLjc3LC0yLjUzIC03Ljc0LC00LjcyIC0xMS44NywtNi41OWMtMC4zMiwtMC4xNSAtMC41LC0wLjMxIC0wLjUsLTAuNjljMC4wMiwtMS42MyAwLjAxLC0zLjI2IDAuMDEsLTAuODhjMCwtMC4xOSAwLjAyLC0wLjM5IDAuMDMsLTAuNjdjNC45MSwyLjA0IDkuNDQsNC42MiAxMy44Nyw3LjRjLTAuMDQsLTAuMTQgLTAuMTEsLTAuMjMgLTAuMTksLTAuMzFjLTQuMDYsLTQuMzUgLTguNDMsLTguMzMgLTEzLjQzLC0xMS41OWMtMC4yNiwtMC4xNyAtMC4zNCwtMC4zNCAtMC4yOCwtMC42NmMwLjE1LC0wLjc4IDAuMjQsLTEuNTcgMC4zNywtMi4zNkM1NC4wMSwzNy4zIDU0LjE3LDM2LjMgNTQuMzUsMzUuMTd6Ii8+PC9zdmc+\u0026labelColor=000000\u0026color=41A67E)](https://github.com/MakD/AFinity/releases)\n[![Stars](https://img.shields.io/github/stars/MakD/AFinity?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iI2ZmZmZmZiI+PHBhdGggZD0iTTguMjQzIDcuMzRsLTYuMzggLjkyNWwtLjExMyAuMDIzYTEgMSAwIDAgMCAtLjQ0IDEuNjg0bDQuNjIyIDQuNDk5bC0xLjA5IDYuMzU1bC0uMDEzIC4xMWExIDEgMCAwIDAgMS40NjQgLjk0NGw1LjcwNiAtM2w1LjY5MyAzbC4xIC4wNDZhMSAxIDAgMCAwIDEuMzUyIC0xLjFsLTEuMDkxIC02LjM1NWw0LjYyNCAtNC41bC4wNzggLS4wODVhMSAxIDAgMCAwIC0uNjMzIC0xLjYybC02LjM4IC0uOTI2bC0yLjg1MiAtNS43OGExIDEgMCAwIDAgLTEuNzk0IDBsLTIuODUzIDUuNzh6IiAvPjwvc3ZnPg==\u0026logoColor=ffffff\u0026labelColor=000000\u0026color=7b68ee)](https://github.com/MakD/AFinity/stargazers)\n[![Downloads](https://img.shields.io/github/downloads/MakD/AFinity/total?style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiBmaWxsPSJ3aGl0ZSI+PHBhdGggZD0iTTIwMC0xNjBoNTYwcTE3IDAgMjguNSAxMS41VDgwMC0xMjBxMCAxNy0xMS41IDI4LjVUNzYwLTgwSDIwMHEtMTcgMC0yOC41LTExLjVUMTYwLTEyMHEwLTE3IDExLjUtMjguNVQyMDAtMTYwWm0yODAtMTA1cS05IDAtMTcuNS00VDQ0OC0yODFMMjUwLTUzNXEtMTUtMjAtNC00Mi41dDM2LTIyLjVoNzh2LTI0MHEwLTE3IDExLjUtMjguNVQ0MDAtODgwaDE2MHExNyAwIDI4LjUgMTEuNVQ2MDAtODQwdjI0MGg3OHEyNSAwIDM2IDIyLjV0LTQgNDIuNUw1MTItMjgxcS02IDgtMTQuNSAxMnQtMTcuNSA0WiIvPjwvc3ZnPg==\u0026logoColor=ffffff\u0026labelColor=000000\u0026color=333446)](https://github.com/MakD/AFinity/releases)\n[![License](https://img.shields.io/github/license/MakD/AFinity?style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiBmaWxsPSJ3aGl0ZSI+PHBhdGggZD0iTTQ4MC00NDBxLTUwIDAtODUtMzV0LTM1LTg1cTAtNTAgMzUtODV0ODUtMzVxNTAgMCA4NSAzNXQzNSA4NXEwIDUwLTM1IDg1dC04NSAzNVptMCAzMjBMMjkzLTU4cS0yMCA3LTM2LjUtNVQyNDAtOTV2LTI1NHEtMzgtNDItNTktOTZ0LTIxLTExNXEwLTEzNCA5My0yMjd0MjI3LTkzcTEzNCAwIDIyNyA5M3Q5MyAyMjdxMCA2MS0yMSAxMTV0LTU5IDk2djI1NHEwIDIwLTE2LjUgMzJUNjY3LTU4bC0xODctNjJabTAtMjAwcTEwMCAwIDE3MC03MHQ3MC0xNzBxMC0xMDAtNzAtMTcwdC0xNzAtNzBxLTEwMCAwLTE3MCA3MHQtNzAgMTcwcTAgMTAwIDcwIDE3MHQxNzAgNzBaIi8+PC9zdmc+\u0026logoColor=ffffff\u0026labelColor=000000\u0026color=665687)](https://github.com/MakD/AFinity/blob/master/LICENSE.md)\n\u003ca href=\"https://discord.com/channels/1381737066366242896/1422939582533730325\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/badge/AFinity-%20Jellyfin%20Community?\u0026logo=discord\u0026logoColor=white\u0026style=for-the-badge\u0026label=Jellyfin%20Community\u0026labelColor=black\u0026color=5865F2\"\u003e\u003c/a\u003e\n\n[Download](#installation) • [View Screenshots](#screenshots) • [Report Bug](https://github.com/MakD/AFinity/issues) • [Request Feature](https://github.com/MakD/AFinity/issues)\n\n\u003c/div\u003e\n\n## Overview\n\n​AFinity is a native Android application that brings your Jellyfin media library to life with a\nclean, responsive interface. Stream your movies, TV shows, and live TV with hardware-accelerated\nplayback, and discover new content through personalised recommendations. Beyond video, AFinity\nextends your experience with optional Audiobookshelf integration for audiobooks and podcasts, and\ndirect media requests via Jellyseerr.\n\n## Installation\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/MakD/AFinity/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/badge/Get%20it%20on-GitHub-181717?style=for-the-badge\u0026logo=github\u0026labelColor=000000\" alt=\"Get it on GitHub\"\u003e\u003c/a\u003e\u0026nbsp;\u003ca href=\"https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22com.makd.afinity%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FMakD%2FAFinity%22%2C%22author%22%3A%22MakD%22%2C%22name%22%3A%22AFinity%22%2C%22supportFixedAPKURL%22%3Afalse%7D\"\u003e\u003cimg src=\"https://img.shields.io/badge/Get%20it%20on-Obtainium-4A148C?style=for-the-badge\u0026logo=obtainium\u0026logoColor=white\u0026labelColor=000000\" alt=\"Get it on Obtainium\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n#### Build From Source\n\n```bash\ngit clone https://github.com/MakD/AFinity.git\ncd AFinity\n./gradlew assembleRelease\n```\n\n## Initial Setup\n\n1. **Launch AFinity** on your Android device\n2. **Enter Server Address** - Your Jellyfin server URL (e.g., `http://192.168.1.100:8096`)\n3. **Sign In** - Use your Jellyfin credentials\n4. **Start Streaming** - Access your entire media library\n\n\u003e **Tip:** For remote access, ensure your Jellyfin server is configured for external connections\n\n### Optional: Seerr Integration\n\nEnable media requests by connecting to your Jellyseerr server:\n\n1. Navigate to **Settings → General**\n2. Toggle **Jellyseerr** on\n3. Enter your Jellyseerr server URL\n4. Choose authentication:\n    - **Jellyfin** - Use your Jellyfin credentials\n    - **Local** - Use Jellyseerr email/password\n5. Tap **Connect**\n\nThe Requests tab will appear in your bottom navigation once connected.\n\n## Screenshots\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/home.png\" width=\"30%\" alt=\"Home Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/movie_details.png\" width=\"30%\" alt=\"Movie Details Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/show_details.png\" width=\"30%\" alt=\"Show Details Page\"\u003e\n  \u003cimg src=\"screenshots/library.png\" width=\"30%\" alt=\"Library Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/person.png\" width=\"30%\" alt=\"Favorite Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/live_tv.png\" width=\"30%\" alt=\"Person Detail Page\"\u003e\n  \u003cimg src=\"screenshots/live_tv_guide.png\" width=\"30%\" alt=\"Library Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/request_screen.png\" width=\"30%\" alt=\"Favorite Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/request_prompt.png\" width=\"30%\" alt=\"Person Detail Page\"\u003e\n  \u003cimg src=\"screenshots/audiobookshelf_screen.png\" width=\"30%\" alt=\"Audiobookshelf Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/book_detail.png\" width=\"30%\" alt=\"Audiobook Detail Page\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/audiobook_player.png\" width=\"30%\" alt=\"Audiobook Player Screen\"\u003e\n  \u003cimg src=\"screenshots/player.png\" width=\"92%\" alt=\"Player Screen\"\u003e\n\u003c/p\u003e\n\n## Features\n\n| **Category**                                | **Details**                                                                                                                                                                                                                                                                                                                                                                                                                                                                |  \n|---------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|  \n| **Media Playback**                          | - Hardware-accelerated video playback with LibMPV\u003cbr\u003e- Multiple audio and subtitle track support\u003cbr\u003e- Customizable subtitle appearance (color, size, position, style)\u003cbr\u003e- Resume functionality across sessions\u003cbr\u003e- Trickplay navigation with thumbnail previews\u003cbr\u003e- Chapter markers and navigation\u003cbr\u003e- Media Segments Support (Intro/Outro Skipper)\u003cbr\u003e- Multiple video zoom modes (Fit, Zoom, Stretch)\u003cbr\u003e- Picture-in-Picture mode with background audio control     |  \n| **Live TV**                                 | - Watch live television channels\u003cbr\u003e- Electronic Program Guide (EPG) with timeline navigation\u003cbr\u003e- Browse programs by category (Movies, Sports, News, etc.)\u003cbr\u003e- Mark channels as favourites\u003cbr\u003e- Real-time program progress updates\u003cbr\u003e- Direct stream support for IPTV sources                                                                                                                                                                                           |  \n| **Content Discovery**                       | - Library browsing by content type\u003cbr\u003e- Personalized home screen with dynamic recommendations\u003cbr\u003e- Genre, studio, and network browsing\u003cbr\u003e- Search and filtering capabilities with alphabet scroller\u003cbr\u003e- Favorites and watchlist management\u003cbr\u003e- Cast and crew information with full filmography\u003cbr\u003e- Episode switcher in player for quick navigation                                                                                                                     |  \n| **Seerr Integration** *(Optional)*          | - Request movies and TV shows with season selection\u003cbr\u003e- Browse trending, popular, and upcoming content\u003cbr\u003e- Search integration with request filter\u003cbr\u003e- Track request status (Pending, Approved, Available)\u003cbr\u003e- Real-time request status updates across app\u003cbr\u003e- Approve / Reject incoming requests (admin only)\u003cbr\u003e- Detailed media information in request dialog (ratings, runtime, cast)                                                                              |  \n| **Audiobookshelf Integration** *(Optional)* | - Connect to Audiobookshelf servers for audiobook and podcast playback\u003cbr\u003e- Browse libraries with tabbed navigation (Home, Series, Libraries)\u003cbr\u003e- Genre-based discovery and series collections\u003cbr\u003e- Background audio playback with media notifications and lock screen controls\u003cbr\u003e- Sleep timer and adjustable playback speed\u003cbr\u003e- Chapter navigation with progress syncing\u003cbr\u003e- Persistent mini-player for navigation during playback\u003cbr\u003e- Integration with main search |\n| **Interface**                               | - Material 3 design with system theming\u003cbr\u003e- Responsive adaptive layouts for phones, tablets, and foldables\u003cbr\u003e- Gesture-based player controls (brightness, volume, seeking)\u003cbr\u003e- Dark and light theme support with dynamic colors\u003cbr\u003e- Customizable episode layout (horizontal/vertical)\u003cbr\u003e- Edge-to-edge display support                                                                                                                                                |  \n| **Server Integration**                      | - Secure authentication with encrypted credential storage\u003cbr\u003e- Multi-server \u0026 multi-user support with quick session switching\u003cbr\u003e- Playback progress synchronization\u003cbr\u003e- Multiple quality options\u003cbr\u003e- Background library updates and downloads\u003cbr\u003e- One-tap login for saved accounts                                                                                                                                                                                     |\n\n## Technical Stack\n\n\u003cdiv align=\"center\"\u003e\n\n![Android 15+](https://img.shields.io/badge/Platform-Android%2015+-3DDC84?style=for-the-badge\u0026labelColor=000000\u0026logo=android\u0026logoColor=white)\n![Kotlin](https://img.shields.io/badge/Language-Kotlin-7F52FF?style=for-the-badge\u0026logo=kotlin\u0026logoColor=white\u0026labelColor=000000)\n![Jetpack Compose](https://img.shields.io/badge/UI-Jetpack%20Compose-3899EC?style=for-the-badge\u0026logo=jetpackcompose\u0026logoColor=white\u0026labelColor=000000)\n![Material 3](https://img.shields.io/badge/Design-Material%203-7F8CAA?style=for-the-badge\u0026logo=materialdesign\u0026logoColor=white\u0026labelColor=000000)\n![Jellyfin 10.10.x](https://img.shields.io/badge/Server-10.10.x-AA5CC3?style=for-the-badge\u0026logo=jellyfin\u0026logoColor=white\u0026labelColor=000000)\n\n\u003c/div\u003e\n\n- **Language**: Kotlin\n- **UI Framework**: Jetpack Compose + Material 3\n- **Architecture**: MVVM with Repository pattern\n- **Dependency Injection**: Hilt\n- **Navigation**: Navigation Compose\n- **Media Player**: LibMPV + ExoPlayer\n- **Networking**: Retrofit + Jellyfin SDK\n- **Image Loading**: Coil with BlurHash\n- **Local Storage**: Room\n- **Security** - Tink (Encrypted Credentials)\n- **Preferences** - Jetpack DataStore\n\n## Roadmap\n\n### Core Features\n\n- [X] Download management for offline viewing\n- [ ] Adaptive streaming with quality selection (transcoding support)\n- [X] Chromecast support\n- [X] Enhanced accessibility features\n- [X] Multi-user profile switching\n- [X] Multi-server support\n\n### Player Enhancements\n\n- [X] Picture-in-picture mode\n- [X] Advanced subtitle styling options\n- [ ] Audio delay adjustment\n- [X] Playback speed controls\n\n### UI/UX Improvements\n\n- [X] Tablet-optimized layouts\n- [X] Advanced search filters\n- [X] Custom library views\n- [X] Gesture customisation\n\n### Technical\n\n- [X] Background sync optimisation\n- [X] Cache management\n- [X] Network quality detection\n- [ ] Performance monitoring\n\n## Contributing\n\nWe welcome contributions from the community! Whether you're a developer, designer, or translator,\nhere is how you can help:\n\n### Help Translate\n\nWe use **Weblate** to manage translations. You can help translate AFinity into your language\ndirectly in your browser without needing any technical knowledge.\n\n1. Visit\n   our [Weblate Project](https://hosted.weblate.org/projects/afinity-yet-another-jellyfin-client/).\n2. Select your language (or start a new one).\n3. Start translating! Changes are automatically synced back to this repository.\n\n### Code Contributions\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/AmazingFeature`)\n3. **Commit** your changes (`git commit -m 'Add some AmazingFeature'`)\n4. **Push** to the branch (`git push origin feature/AmazingFeature`)\n5. **Open** a Pull Request\n\n### Development Commands\n\n```bash\n# Build the project\n./gradlew build\n\n# Run tests\n./gradlew test\n\n# Install debug build\n./gradlew installDebug\n```\n\n## Project Stats\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://star-history.com/#MakD/AFinity\u0026Date\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=MakD/AFinity\u0026type=Datee\u0026legend=bottom-right\u0026theme=dark\" /\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=MakD/AFinity\u0026type=Datee\u0026legend=bottom-right\" /\u003e\n    \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=MakD/AFinity\u0026type=Date\u0026legend=bottom-right\" /\u003e\n  \u003c/picture\u003e\n\u003c/a\u003e\n\n\u0026nbsp;\n\n![GitHub commit activity](https://img.shields.io/github/commit-activity/w/MakD/Afinity?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmZmZmYiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cG9seWxpbmUgcG9pbnRzPSIyMiAxMiAxOCAxMiAxNSAyMSA5IDMgNiAxMiAyIDEyIi8+PC9zdmc+\u0026labelColor=000000\u0026color=05668D)\n![GitHub commits since latest release](https://img.shields.io/github/commits-since/Makd/Afinity/latest?sort=date\u0026style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1naXQtY29tbWl0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0Ij48L2NpcmNsZT48bGluZSB4MT0iMS4wNSIgeTE9IjEyIiB4Mj0iNyIgeTI9IjEyIj48L2xpbmU+PGxpbmUgeDE9IjE3LjAxIiB5MT0iMTIiIHgyPSIyMi45NiIgeTI9IjEyIj48L2xpbmU+PC9zdmc+\u0026labelColor=000000\u0026color=465775)\n![GitHub Downloads (latest release)](https://img.shields.io/github/downloads/Makd/AFinity/latest/total?sort=date\u0026style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1kb3dubG9hZC1jbG91ZCI+PHBvbHlsaW5lIHBvaW50cz0iOCAxNyAxMiAyMSAxNiAxNyI+PC9wb2x5bGluZT48bGluZSB4MT0iMTIiIHkxPSIxMiIgeDI9IjEyIiB5Mj0iMjEiPjwvbGluZT48cGF0aCBkPSJNMjAuODggMTguMDlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuMjkiPjwvcGF0aD48L3N2Zz4=\u0026labelColor=black\u0026color=A3D78A)\n\n[![Issues](https://img.shields.io/github/issues/MakD/AFinity?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJNMTIgMWM2LjA3NSAwIDExIDQuOTI1IDExIDExcy00LjkyNSAxMS0xMSAxMVMxIDE4LjA3NSAxIDEyIDUuOTI1IDEgMTIgMVpNMi41IDEyYTkuNSA5LjUgMCAwIDAgOS41IDkuNSA5LjUgOS41IDAgMCAwIDkuNS05LjVBOS41IDkuNSAwIDAgMCAxMiAyLjUgOS41IDkuNSAwIDAgMCAyLjUgMTJabTkuNSAyYTIgMiAwIDEgMS0uMDAxLTMuOTk5QTIgMiAwIDAgMSAxMiAxNFoiLz48L3N2Zz4=\u0026logoColor=ffffff\u0026labelColor=000000\u0026color=e94b3c)](https://github.com/MakD/AFinity/issues)\n[![Pull Requests](https://img.shields.io/github/issues-pr/MakD/AFinity?style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1naXQtcHVsbC1yZXF1ZXN0Ij48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIzIj48L2NpcmNsZT48Y2lyY2xlIGN4PSI2IiBjeT0iNiIgcj0iMyI+PC9jaXJjbGU+PHBhdGggZD0iTTEzIDZoM2EyIDIgMCAwIDEgMiAydjciPjwvcGF0aD48bGluZSB4MT0iNiIgeTE9IjkiIHgyPSI2IiB5Mj0iMjEiPjwvbGluZT48L3N2Zz4=\u0026labelColor=000000\u0026color=f39c12)](https://github.com/MakD/AFinity/pulls)\n\n\u003c/div\u003e\n\n[![Translation status](https://hosted.weblate.org/widget/afinity-yet-another-jellyfin-client/afinity/multi-auto.svg)](https://hosted.weblate.org/engage/afinity-yet-another-jellyfin-client/)\n\n## Acknowledgments\n\nAFinity stands on the shoulders of giants. Special thanks to:\n\n- [Jellyfin](https://jellyfin.org/) - The open source media server that makes it all possible\n- [MPV](https://mpv.io/) - Media player engine\n- [libmpv-android](https://github.com/jarnedemeulemeester/libmpv-android) by Jarne Demeulemeester -\n  Android MPV integration\n- [Seerr](https://github.com/seerr-team/seerr) - Open-source media discovery and request manager for\n  Jellyfin, Plex, and Emby.\n- [Audiobookshelf](https://github.com/advplyr/audiobookshelf) - Open-source self-hosted audiobook\n  and podcast server.\n\n## Privacy\n\nAfinity respects your privacy:\n\n- **No tracking or analytics** are collected\n- **All data stays local** or with your own Jellyfin server\n- **No third-party services** are used without your explicit consent\n- **Source code is open** for full transparency\n\n## Disclaimer\n\n**AFinity does not support or condone piracy.** This application is designed solely for streaming\nmedia content that you personally own or have legal rights to access. AFinity includes no media\ncontent whatsoever. Any references, discussions, or support requests related to piracy or related\ntools are strictly prohibited and will be removed.\n\n## License\n\nThis project is licensed under the **LGPL-3.0 License** - see the [LICENSE](LICENSE.md) file for\ndetails.\n\n## Support the Project\n\nAFinity is a personal project developed and maintained in my free time. If the app has improved your\nmedia experience, there are a few ways you can help support its growth:\n\n### Community Support\n\n* **Star the Project:** Give us a ⭐ on GitHub—it helps others find the app!\n* **Contribute:** AFinity is open-source. Bug reports and Pull Requests are always welcome.\n* **Join the Discussion:** Share your feedback or get help on\n  our [Discord](https://discord.com/channels/1381737066366242896/1422939582533730325).\n\n### Buy the Developer a Coffee\n\nIf you've spent hours enjoying your library through AFinity and want to show some appreciation, you\ncan support my work here. It helps keep me fueled for those late-night coding sessions!\n\n[![Support on Ko-fi](https://img.shields.io/badge/Support%20on-Ko--fi-FF5E5B?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=white\u0026labelColor=000000)](https://ko-fi.com/m0rph3us)\n[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=white\u0026labelColor=000000)](https://buymeacoffee.com/m0rphi)\n\n*Every contribution, whether it's code, a bug report, or a coffee, helps make AFinity better.*\n\n---\n\n**Made with ❤️ for the Jellyfin community**\n\n*AFinity is an independent project and is not affiliated with Jellyfin, Audiobookshelf or Seerr.*  \n*Jellyfin is a trademark of the Jellyfin project.*\n\n---\n\n**[Back to Top](#afinity---yet-another-jellyfin-client)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMakD%2FAFinity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMakD%2FAFinity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMakD%2FAFinity/lists"}