A private, minimal photo and video gallery for Android. No network. No cloud. No tracking.
- Photos and video playback
- Camera RAW previews (ARW, DNG, NEF, CR2, ORF, RAF, RW2 and more), shown from the JPEG preview embedded in the file
- Albums organised by folder
- Search by filename
- Photo editor — crop, rotate, brightness, contrast, saturation
- Pinch to zoom in viewer
- Sort by date, modified, size, name
- Filter by photo or video
- EXIF stripped on share
- Pretty themes and stuff
- PIP
Android 13+
arm64-v8a device
git clone https://github.com/jegly/gal.git
cd gal
./gradlew assembleDebug
APK output: app/build/outputs/apk/debug/app-debug.apk
Kotlin + Jetpack Compose
Hilt, Room, DataStore
Coil 3, Media3 ExoPlayer
READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_VISUAL_USER_SELECTED
MANAGE_MEDIA
No INTERNET permission.
Release APKs use hybrid signing (APK Signature Scheme v3.2): the original app key plus an EC P-384 key and an ML-DSA-87 post-quantum key. Android 17 and newer verify the hybrid block, where the ML-DSA-87 key is the signer; earlier Android versions verify the original key as before.
| File | SHA-256 |
|---|---|
Gallery-4.2.1-PQC-signed.apk |
sha256:ae163dfbb18b92a3dca17d7c30eec601cd2800c871c87c82e3aa503c441ce3b0 |
Use this fingerprint with Obtainium AppVerifier to verify the APK was signed by the correct key before installing:
Certificate SHA-256: 98d324d4106a368c62729a0a24d9ac9a6b47f8ac4c6585348531f0ee4eb6a04c
On Android 17 and later the APK is also verified through its post-quantum APK Signature Scheme v3.2 hybrid block:
| v3.2 signer | Certificate SHA-256 |
|---|---|
| PQC (ML-DSA-87) | 5f99de5b3195753d4fe8ddabebd2fb27356b2109d6fbb2471fcbbdf21a9e76a6 |
| Hybrid classical (EC P-384) | fa8f4a07e6a4f2b7dc6e5ab31fc05592b1414ab9436d1e2e39b35ce3bb2e33a2 |
Verify a download (apksigner from build-tools 37.0.0 on JDK 25 shows all three keys):
sha256sum Gallery-4.2.1-PQC-signed.apk
apksigner verify --print-certs Gallery-4.2.1-PQC-signed.apk | grep SHA-256