Open-source project
kaii-lb/LavenderPhotos avatar
kaii-lb/LavenderPhotos

Lavender Photos: a local gallery with a secure folder and network shares

A sweet looking photo app for android!

688 stars52 forksKotlinGPL-3.0

At a glance

What is it?
Lavender Photos is a Kotlin gallery app for Android that keeps photos and videos on the device while adding the pieces the system gallery leaves out, an AES-256 secure folder, network share browsing, Immich backup and offline editing. It is distributed as signed APKs, F-Droid and IzzyOnDroid builds rather than through a single store, and the project is GPL-3.0 with 28 languages already translated.
Who is it for?
Lavender Photos fits an Android user who wants their media library to stay on the device, needs encrypted storage for sensitive photos, wants to browse SMB or S3 shares from a phone, or wants Immich as a backup target rather than as the gallery itself.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A gallery that keeps the library on the phone

Lavender Photos is described in the README as a no non-sense, stylish and performant gallery app for Android, and its privacy claim is specific rather than decorative: no data is collected, no AI is trained on it, and nothing happens without permission. The list of features reads like a complaint list about the stock gallery on Android. Media is browsed by date, albums can be added and removed at will with no forced selection, and search covers names, dates and tags. There is a tag system for organising media, an album group feature for organising the albums themselves, a favourites system that the README says is compatible with Immich and other apps, and a trash bin sorted by recently trashed so you can find what you removed and when. The point of the design is that the phone holds the library and the app is the interface to it, not a thin viewer over a cloud service.

AES-256 for the photos you do not want browsed

The Secure Folder is the feature that separates this from a gallery. The README describes it as secure sensitive photos with bulletproof AES-256 encryption, and the screenshots list it alongside Privacy as a first-class area of the app rather than a settings toggle. Privacy is a separate screen in the same way, and the surrounding feature set supports the claim that the app is built for people whose media does not belong in a plain directory listing. The encryption is a property of the folder, not a description of the whole library, and the README does not document the key handling, the recovery story, or how the encrypted pictures are decrypted on the fly during browsing, so anyone evaluating this needs to test that path themselves rather than take the wording at face value. The app is also free to modify in the source sense, being GPL-3.0, which matters for a security feature in a way it does not for a wallpaper picker.

Browsing Google Drive, Proton Drive and Dropbox, plus RSAF for everything else

Network shares are the other place this app goes past the system gallery. The README lists native browsing of Google Drive, Proton Drive, Dropbox and other providers, and then adds Extra Network Shares through RSAF, the file access library from Chen Xiaolong, which extends browsing to SMB, FTP, Amazon S3, SSH and a long list of other protocols. That is a wide surface area for one app, and it is the main reason to install it over a gallery that only sees local storage. Copy and Move operations are listed as working across storage mediums and into the cloud, so the same album can span a local folder, a mounted share and a provider account. The dependency is worth naming explicitly: the protocol coverage comes from RSAF, so the security posture of those connections is partly RSAF's and partly whatever the provider account you connect asks for.

Immich as the backup target, not as the gallery

The relationship with Immich is the one integration the README is specific about. Cloud Backup is described as Immich integration for safe and easy cloud media backup, and the favourites system is called compatible with Immich and other apps. So the division of labour is: Lavender Photos owns the local library, the editing and the organisation, while Immich receives the backup copy. That is a different arrangement from installing a self-hosted Immich instance and using it as the primary interface on the phone, and it means the app does not require a running server for its core features. Editing works offline on any photo or video, at any time, without an internet connection, and Quick Info gathers the relevant information for a photo from a single button. The README also promises a clean interface, smooth UX, a playful look, and heavy customisation of colours, behaviours and styles.

Building the APK yourself, including the signing step

The build documentation is unusually concrete for a mobile project, and it is the part a developer will actually need. Cloning the repository and moving into the directory is the first step, and the signing keys are not optional for a release build.

bash
git clone https://github.com/kaii-lb/LavenderPhotos.git && cd LavenderPhotos
mkdir keys
chmod +x ./build.sh

The two key files, releasekey.pk8 and releasekey.x509.pem, are copied into the newly created keys folder by hand, which is the part that stops a first-time builder. The script then takes a tag, either release or debug, and produces an APK per architecture.

bash
./build.sh tag

The result is outputs/photos_signed_${tag}_${abi}.apk, where the abi is arm64-v8a or armeabi-v7a. The script also accepts a --install argument that installs the APK on a connected device as soon as the compile finishes, and for unsigned builds the README points at the normal Gradle commands instead, ./gradlew with assembleRelease or assembleDebug, leaving the unsigned APK in ./app/build/outputs/apk/{debug/release}. The repository carries the Gradle setup at the top level, with app/, buildSrc/, benchmark/, baselineprofile/ and fastlane/ directories alongside build.sh, which tells you the project expects release engineering rather than a hobby debug cycle.

Where to get the app: releases, nightlies and two F-Droid repositories

There are four documented routes to an install, and the README is deliberate about them. A release version comes from the releases page, and a nightly build from the actions page, which the repository badges label as a nightly workflow. A F-Droid build is available for the package com.kaii.photos, and an IzzyOnDroid build is listed through its own package index, also under com.kaii.photos. The versioning is incremental rather than dramatic, with the recent tags being v2.1.2, v2.1.3 and v2.1.4 across August 2026, and the last push to the repository was on 2026-10-20, so the code is moving faster than the release cadence suggests. The verification section gives the package name and the signing hash, which is the number to check if you are installing an APK from outside a store: the README publishes it so that a user can confirm the build they downloaded is the one the project intended to publish.

GPL-3.0, 28 languages and the limits of what the README says

The project is GPL-3.0, with the licence in LICENSE.md at the root of the repository, and it is translated through a Weblate instance with more than 28 languages supported. That combination, a copyleft licence on a full gallery application, matters if you intend to fork it into a product, and it is also why the README asks for translation help rather than shipping an English-only interface. What the documentation does not tell you is the harder part. There is no statement of the minimum Android version, no permission list, no description of how much storage the app expects for its index, and no documented behaviour for what happens to the trash bin, the secure folder or the album metadata when you uninstall. The README also closes its feature list with a Future line promising more to come, which is a plan, not a schedule. If you need a guarantee about upgrade behaviour across versions, the source and the release notes are where you have to look, because the project page does not offer one.

Editorial conclusion

Lavender Photos fits an Android user who wants their media library to stay on the device, needs encrypted storage for sensitive photos, wants to browse SMB or S3 shares from a phone, or wants Immich as a backup target rather than as the gallery itself. It does not fit someone who wants an iOS build, a desktop client, or an app distributed through a single mainstream store, since the documented install paths are the releases page, the nightly actions page, F-Droid and IzzyOnDroid. Before you install it, check the signing hash B2:6E:8A:CD:20:D2:BD:B5:1D:EE:0D:F9:65:AA:40:BD:86:43:D3:F8:95:E8:25:A0:CD:DF:51:FE:27:5B:3E:C1 against the package name com.kaii.photos, and read the build.sh steps before you try to reproduce a release APK.

Frequently asked questions

What is Lavender Photos and what platform does it run on?

It is an Android gallery app written in Kotlin, described in the README as a stylish and performant app for browsing photos and videos. The package name is com.kaii.photos, and the project is licensed under GPL-3.0.

Does Lavender Photos upload my photos to a server?

Not by default. The README states that no data is collected, no AI is trained, and nothing happens without permission, and that editing works offline without an internet connection. Cloud backup is an optional integration with Immich, and the network share browsing covers providers such as Google Drive, Proton Drive and Dropbox.

How is the Secure Folder protected?

The README describes it as AES-256 encryption for sensitive photos, with a dedicated Secure Folder screen. The documentation does not describe the key storage or the recovery process, so that part would need testing before you rely on it for anything irreplaceable.

How do I install Lavender Photos on an Android phone?

The README lists four routes: a release version from the GitHub releases page, a nightly build from the actions page, the F-Droid build for com.kaii.photos, and the IzzyOnDroid build, each of the F-Droid ones installed with an F-Droid client. The signing hash is published so you can check the package you installed.

Can Lavender Photos browse network storage such as SMB or S3?

Yes. It natively browses Google Drive, Proton Drive, Dropbox and other providers, and it adds RSAF support for browsing SMB, FTP, Amazon S3, SSH and many other protocols. Copying and moving between local albums, shares and cloud storage is also listed as supported.

Official sources

  1. Issues
  2. kaii-lb/LavenderPhotos on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/kaii-lb-lavenderphotos.svg)](https://hysenlabs.com/projects/kaii-lb-lavenderphotos)

Was this useful?