{"id":13642496,"url":"https://github.com/Radiokot/photoprism-android-client","last_synced_at":"2025-04-20T16:32:34.120Z","repository":{"id":142398333,"uuid":"612884518","full_name":"Radiokot/photoprism-android-client","owner":"Radiokot","description":"📸 A convenient Android gallery for your PhotoPrism library with plenty of useful features","archived":false,"fork":false,"pushed_at":"2025-04-19T08:36:10.000Z","size":10216,"stargazers_count":487,"open_issues_count":2,"forks_count":38,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-04-19T15:04:18.035Z","etag":null,"topics":["android","exoplayer","foss","gallery","koin","kotlin","kotlin-android","photoprism","self-hosted"],"latest_commit_sha":null,"homepage":"https://radiokot.com.ua/p/photoprism-android-gallery","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/Radiokot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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},"funding":{"custom":["https://radiokot.com.ua/tip"]}},"created_at":"2023-03-12T09:17:29.000Z","updated_at":"2025-04-19T08:36:14.000Z","dependencies_parsed_at":"2024-01-22T21:10:50.943Z","dependency_job_id":"77a13ada-bd25-4e8d-a06a-0190d0d24458","html_url":"https://github.com/Radiokot/photoprism-android-client","commit_stats":null,"previous_names":[],"tags_count":56,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Radiokot%2Fphotoprism-android-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Radiokot%2Fphotoprism-android-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Radiokot%2Fphotoprism-android-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Radiokot%2Fphotoprism-android-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Radiokot","download_url":"https://codeload.github.com/Radiokot/photoprism-android-client/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249926474,"owners_count":21346567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","exoplayer","foss","gallery","koin","kotlin","kotlin-android","photoprism","self-hosted"],"created_at":"2024-08-02T01:01:32.177Z","updated_at":"2025-04-20T16:32:34.113Z","avatar_url":"https://github.com/Radiokot.png","language":"Kotlin","funding_links":["https://radiokot.com.ua/tip"],"categories":["Kotlin","🎬 Media \u0026 Entertainment"],"sub_categories":["🖼️ Gallery \u0026 Tools"],"readme":"# \u003cimg src=\"app/src/main/res/mipmap-hdpi/ic_launcher.png\" alt=\"Icon\" style=\"vertical-align: bottom; height: 36px;\"/\u003e Gallery for PhotoPrism\n\n[![GitHub discussions](https://img.shields.io/github/discussions/Radiokot/photoprism-android-client?label=Discussions\u0026color=e2e0f6\u0026style=flat-square)](https://github.com/Radiokot/photoprism-android-client/discussions) \n[![GitHub contributors](https://img.shields.io/github/contributors/Radiokot/photoprism-android-client?label=Contributors\u0026color=e2e0f6\u0026style=flat-square)](https://github.com/Radiokot/photoprism-android-client/graphs/contributors) \n[![Sponsors](https://img.shields.io/static/v1?label=Sponsors\u0026message=36\u0026color=e2e0f6\u0026style=flat-square)](#sponsors) \n\nThis Android app brings a convenient mobile gallery experience for [PhotoPrism](https://www.photoprism.app/).\n\n\u003cp float=\"left\"\u003e\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/1.png\" width=200 /\u003e\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/2.png\" width=200 /\u003e\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/3.png\" width=200 /\u003e\n\u003cimg src=\"fastlane/metadata/android/en-US/images/phoneScreenshots/4.png\" width=200 /\u003e\n\u003c/p\u003e\n\nIt does not support all the official web app functionality, but nevertheless has plenty of useful features:\n- Sending photos and videos to Gmail, Telegram or any other app\n- Grouping the content by days and months\n- Timeline scroll that lets you quickly jump to a specific month\n- [Configurable search](https://github.com/Radiokot/photoprism-android-client/wiki/How-to-search-the-library)\n- [Search bookmarks](https://github.com/Radiokot/photoprism-android-client/wiki/How-to-use-search-bookmarks) that let you save search configurations and apply them later\n- Enhanced live photo viewer, which works best with Samsung and Apple shots\n- Full-screen slideshow with configurable speed and video autoplay\n- Deleting items without archiving them first\n- Importing photos and videos trough sharing\n- Endless session without the need to re-enter the password\n- [Connection to both private and public libraries](https://github.com/Radiokot/photoprism-android-client/wiki/Connection-guide)\n- Support of [mTLS (mutual TLS)](https://github.com/Radiokot/photoprism-android-client/wiki/How-to-connect-to-a-library-with-mTLS-(mutual-TLS)-auth%3F), [HTTP basic auth](https://github.com/Radiokot/photoprism-android-client/wiki/Connection-guide#examples-of-valid-urls) and [SSO](https://github.com/Radiokot/photoprism-android-client/wiki/Connection-guide#sso) like Authelia, Cloudflare Access, etc.\n- TV compatibility to easily browse your library with a remote-control (Search is only available with a mouse for now. [Install through APK](https://github.com/Radiokot/photoprism-android-client/issues/66#issuecomment-1667426238))\n- ⭐ Extensions:\n  - [Memories](https://github.com/Radiokot/photoprism-android-client/wiki/Memories-extension) – get a daily collection of photos and videos from the same day in past years\n  - [Photo frame widget](https://github.com/Radiokot/photoprism-android-client/wiki/Photo-frame-widget-extension) – see random photos from your library on the home screen\n\nThe gallery is not intended to sync content with the library. \nFor this, I recommend [Autosync](https://play.google.com/store/apps/details?id=com.ttxapps.autosync).\n\n## Compatibility\nThe gallery runs on Android 5.0+ and it is confirmed to work with the PhotoPrism release of \n[March 21, 2025](https://github.com/photoprism/photoprism/releases/tag/250321-57590c48b).\nCompatibility with older PhotoPrism versions may be partial.\n\n## Download\n[\u003cimg src=\"repository-assets/icon-github.svg\" alt=\"APK\" style=\"height: 1em;\"/\u003e APK from the latest release](https://github.com/Radiokot/photoprism-android-client/releases/latest)\n\n[\u003cimg src=\"repository-assets/icon-obtainium.svg\" alt=\"Obtainium\" style=\"height: 1em;\"/\u003e Obtainium](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22ua.com.radiokot.photoprism%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FRadiokot%2Fphotoprism-android-client%22%2C%22author%22%3A%22Radiokot%22%2C%22name%22%3A%22PhotoPrism%20Gallery%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Afalse%2C%5C%22appName%5C%22%3A%5C%22Gallery%20for%20PhotoPrism%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22A%20convenient%20gallery%20for%20PhotoPrism%20library%20with%20plenty%20of%20useful%20features%5C%22%2C%5C%22refreshBeforeDownload%5C%22%3Atrue%7D%22%2C%22overrideSource%22%3A%22GitHub%22%7D)\n\n[\u003cimg src=\"repository-assets/icon-fdroid.png\" alt=\"F-Droid\" style=\"height: 1em;\"/\u003e F-Droid](https://f-droid.org/packages/ua.com.radiokot.photoprism)\n\n\n[\u003cimg src=\"repository-assets/icon-gplay.svg\" alt=\"Google Play\" style=\"height: 1em;\"/\u003e Google Play](https://play.google.com/store/apps/details?id=ua.com.radiokot.photoprism) (has no [extension store](https://github.com/Radiokot/photoprism-android-client/wiki/Gallery-extensions))\n\n## Sponsors\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/14095706?s=100\" alt=\"Jans Rautenbach\" title=\"Jans Rautenbach\" height=70 /\u003e](https://github.com/J4NS-R)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/58886740?s=100\" alt=\"james856\" title=\"james856\" height=70 /\u003e](https://github.com/james856)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/38279393?s=100\" alt=\"Beet4\" title=\"Beet4\" height=70 /\u003e](https://github.com/Beet4)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/31888202?s=100\" alt=\"bleepblub\" title=\"bleepblub\" height=70 /\u003e](https://github.com/bleepblub)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/5235732?s=100\" alt=\"Tim Omer\" title=\"Tim Omer\" height=70 /\u003e](https://github.com/timomer)\n[\u003cimg src=\"https://github.com/user-attachments/assets/0ea9bd10-05d3-4cbf-bb44-f4b26d299f74\" alt=\"Pablo Martín Ferraro\" title=\"Pablo Martín Ferraro\" height=70 /\u003e](https://www.instagram.com/pmferraro/)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/75267371?s=100\" alt=\"raghubhaskar\" title=\"raghubhaskar\" height=70 /\u003e](https://github.com/raghubhaskar)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/9728953?s=100\" alt=\"reverendj1\" title=\"reverendj1\" height=70 /\u003e](https://github.com/reverendj1)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/103765434?s=100\" alt=\"₿logging₿itcoin\" title=\"₿logging₿itcoin\" height=70 /\u003e](https://github.com/BrutusBondBTC)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/104279101?s=100\" alt=\"PitRejection2359\" title=\"PitRejection2359\" height=70 /\u003e](https://github.com/PitRejection2359)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/35728385?s=100\" alt=\"Sayantan Santra\" title=\"Sayantan Santra\" height=70 /\u003e](https://github.com/SinTan1729)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/136379342?s=100\" alt=\"Philipp\" title=\"Philipp\" height=70 /\u003e](https://github.com/Blendan1)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/28670365?s=100\" alt=\"Daniel Fuchs\" title=\"Daniel Fuchs\" height=70 /\u003e](https://github.com/dfoxg)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/12165268?s=100\" alt=\"Hulmgulm\" title=\"Hulmgulm\" height=70 /\u003e](https://github.com/hulmgulm)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/36690764?s=100\" alt=\"Jonas Gustavsson\" title=\"Jonas Gustavsson\" height=70 /\u003e](https://github.com/jonasgustavsson)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/5047127?s=100\" alt=\"Florian Voswinkel\" title=\"Florian Voswinkel\" height=70 /\u003e](https://github.com/FlorentBrianFoxcorner)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/9214215?s=100\" alt=\"Koen Koppens\" title=\"Koen Koppens\" height=70 /\u003e](https://github.com/koen81)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/6559064?s=100\" alt=\"Radon Rosborough\" title=\"Radon Rosborough\" height=70 /\u003e](https://github.com/raxod502)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/301686?s=100\" alt=\"Michael Mayer\" title=\"Michael Mayer\" height=70 /\u003e](https://github.com/lastzero)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/15210372?s=100\" alt=\"Theresa Gresch\" title=\"Theresa Gresch\" height=70 /\u003e](https://github.com/graciousgrey)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/3181318?s=100\" alt=\"Juha Lehtiranta\" title=\"Juha Lehtiranta\" height=70 /\u003e](https://github.com/yatzy)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/2885748?s=100\" alt=\"Neil Castelino\" title=\"Neil Castelino\" height=70 /\u003e](https://github.com/TwistTheNeil)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/40500387?s=100\" alt=\"Seth For Privacy\" title=\"Seth For Privacy\" height=70 /\u003e](https://github.com/sethforprivacy)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/111684368?s=100\" alt=\"C-Iaens\" title=\"C-Iaens\" height=70 /\u003e](https://github.com/C-Iaens)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/6351543?s=100\" alt=\"Tobias Fiechter\" title=\"Tobias Fiechter\" height=70 /\u003e](https://github.com/tobiasfiechter)\n[\u003cimg src=\"https://avatars.githubusercontent.com/u/52239579?s=100\" alt=\"ippocratis\" title=\"ippocratis\" height=70 /\u003e](https://github.com/ippocratis)\n\u003cbr\u003e\n…and 10 anonymous sponsors.\n\n*I am very grateful to everyone [supporting this project](https://radiokot.com.ua/tip) ❤️ To join this public list, email me the transaction reference once it is complete. By the way, sponsors get [extensions](https://github.com/Radiokot/photoprism-android-client/wiki/Gallery-extensions) for free.*\n\n## License\nI reject the concept of intellectual property. Claiming ownership over information that can be replicated perfectly and endlessly is inherently flawed. Consequently, any efforts to uphold such form of ownership inevitably result in some people gaining unjustifiable control over other's tangible resources, such as computers, printing equipment, construction materials, etc. \u003csup\u003e[1](repository-assets/kinsella_against_intellectual_property.pdf)\u003c/sup\u003e\nWhen talking specifically about source code licensing – without a state violently enforcing [copyright monopolies](https://torrentfreak.com/language-matters-framing-the-copyright-monopoly-so-we-can-keep-our-liberties-130714/), it would be ludicrous to assume that a mere text file in a directory enables someone to restrict processing copies of this information by others on their very own computers. \nHowever, there is [such a file](LICENSE) in this repository bearing the GPLv3 license. Why?\n\nOne would expect someone with such an attitude to not use the license at all, use a permissive license, or [explicitly unlicense](https://unlicense.org/).\nBut for me, to do so is to voluntarily limit my means of defense. To act as a gentleman with those who readily exploit state violence against you is to lose.\nIn a world where copyright monopolies are violently enforced, I choose GPLv3 for the software I really care for, because under the current circumstances this license is a tool that:\n- Allows **others** to freely use, modify and distribute this software, without the risk of being sued;\n- Enables **me** to pull all the valuable changes from public forks back to the trunk, also without the risk of being sued;\n- **Knocks down a peg** individuals or companies willing to monopolize their use case or modifications of this software.\n\n## Tech stack\n- Kotlin\n- Classic views \u0026 ViewModel\n- RxJava for concurrency\n- Koin for dependency injection\n- OkHTTP \u0026 Retrofit for networking\n- Room database\n- kotlin-logging \u0026 slf4j-handroid for logging\n- Picasso for images \u0026 ExoPlayer for videos\n- FastAdapter for lists\n- Offline License Key for extensions activation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRadiokot%2Fphotoprism-android-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRadiokot%2Fphotoprism-android-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRadiokot%2Fphotoprism-android-client/lists"}