People and faces

Private face recognition that runs on our own service.

Faces are detected with InsightFace (buffalo_s, ONNX, CPU) in the PhotoMemory ML service. Each face becomes a 512-dimensional ArcFace embedding stored in PostgreSQL with pgvector; a face is matched to an existing person when the cosine distance is below 0.6, otherwise a new person is created. Nothing is sent to an outside provider and embeddings are per-user.

Managing people

  • Rename a person from the People page (PATCH /api/people/{id}).
  • Merge two people who are the same person (POST /api/people/{id}/merge/{other_id}).
  • Filter search by person.

Face crops (256×256) are cached in storage and served as thumbnails.