Cloud photo apps made “show me every photo of Grandma” feel ordinary. The cost is uploading a family’s entire history. We wanted the same experience with nothing leaving the computer.
The pipeline
- Detect every face with InsightFace, including group photos.
- Store a 512-dimension embedding per face in PostgreSQL with pgvector, alongside the file path, never the photo itself.
- Cluster embeddings with HDBSCAN, which copes with uneven group sizes and noise.
- Let people name, merge, move and undo, because no clustering is perfect.
Designing for long jobs
Indexing thousands of photos takes time and a laptop’s full attention. So indexing can pause for a video call and resume exactly where it stopped, and folders can queue overnight. Progress shows the file, the stage and any errors, so nobody wonders whether it is still working.
The same building blocks, detection, embeddings and vector search, power our face recognition for attendance and e-KYC, where privacy matters just as much.