memo-pic

One photo a day, described before the story behind it is lost.

AndroidPrivate repository
Overview

memo-pic is an Android app that serves up a small batch of undescribed photos each day and asks for the dates, names and places behind them. Most family archives — scanned prints especially — carry no usable metadata, and the people who can still supply it won't always be around to. The app turns that backlog into a habit small enough to actually keep, rather than a cataloguing project nobody starts.

How it works

memo-pic indexes a photo library over SMB and identifies photos still missing metadata. A daily session serves one set — a burst of photos the scanner grouped by capture time — rather than isolated images, so context carries across the batch and a date typed once can land on all twelve prints from the same afternoon. Sessions prefetch on home Wi-Fi and run offline, with edits queued and written back later.

Everything the app authors is written to XMP sidecar files next to each photo; original files are never modified. That constraint was chosen deliberately — embedded EXIF/XMP rewriting is where file corruption actually happens, and a sidecar write can't damage an original. Sidecars are also read by other tools in the same library, so descriptions added here show up elsewhere for free. Photos are identified by a SHA-256 content hash rather than a file path, so the index survives renames and moves on the share.

Highlights

  • Habit-loop design: a weighted sampler serves clustered sessions instead of an infinite oldest-first backlog, because tedium is what kills the habit.
  • Sidecar-only metadata writes with an XMP engine that round-trips unknown namespaces, so another tool's fields are preserved rather than clobbered.
  • Three-way merge with set-union for tags and people, scalar conflict detection, and a compare-and-swap write loop for safe concurrent writers.
  • Content-hash identity that survives renames and moves across the share.
  • Scan-group handling for print scanners: the plain scan, the enhanced rendition, and the handwritten back of a print recognised as one physical photo.
  • Correctness-critical engine split into a pure-JVM Gradle module with no Android dependencies, unit-testable on any JDK against golden files.
  • Explicit safety rules for coexisting with an existing MemoryLink library — skipped paths, no embedded writes, legacy format detection.
Snapshot

Status

In active development

Platform

Android

Distribution

Signed APK via Obtainium

Built with

Kotlin · Jetpack Compose

Room · WorkManager

smbj (SMB2/3) · Adobe XMP Core

Gradle · GitHub Actions