Blog

Notes from the workshop

How All Our Years actually works, written in public by the person building it: the algorithms, the wrinkles that almost broke them, and the honest limits.

Your folder names were the training data

Twelve years of hand-named event folders turned out to be a labeled dataset. How the family's own naming habit became the ground truth an event-clustering pass was tuned against — and the three quiet wrinkles (camera clocks, digitized tapes, and where "home" is) that would have corrupted it otherwise.

Read the post →
Finding the same face across twenty years

Face embeddings drift as children grow, so one global clustering pass can't hold a newborn and a ten-year-old at once. Half-year windows, a union-find chain across the gaps, a purity gate that cut clusters in half, and the honest limit where siblings get flagged for a human instead of auto-merged.

Read the post →
The archive stays where it is

Read-only by construction, an index on the internal disk, and a WAL journal that survived two literal power cuts with zero data loss. Why "runs locally" is a much bigger architectural commitment than it sounds, and what it costs to keep a full study invisible on a base Mac.

Read the post →