Vision that never uploads a face.
FaceVision runs face detection, recognition and liveness entirely in the browser with ONNX Runtime Web. Camera frames never leave the device; the backend stores compact embeddings and matches them on enrolment and verification.
- Inference
- On device, ONNX Runtime Web
- Liveness
- Defeats photo replay
- Storage
- Embeddings only, zero images
- Backend
- FastAPI, PostgreSQL, TypeScript
Why in the browser
The privacy story is simple to explain and simple to audit.
Most face-recognition products ship frames to a server and ask users to trust what happens there. FaceVision does the detection, recognition and liveness check on the device, then sends only a compact embedding to the API. Because no image is ever persisted, the privacy story fits in one sentence, and an audit can confirm it.
- Detection, recognition and a liveness check in the browser, with ONNX Runtime Web.
- Enrolment and verification match vector embeddings in PostgreSQL.
- Photo replay is caught by the liveness step before anything is compared.
Where it fits
The shapes of product this pattern suits.
Attendance and access
Enrol once, verify on each visit, without a server-side photo archive to protect.
KYC-style checks
A liveness step before matching, and an embedding store that is useless if leaked.
Kiosks and low bandwidth
Inference happens locally, so the API call is a few kilobytes, not a video stream.
Gallery
FaceVision.

Building something that sees?
Vision, OCR or speech: I can scope it with you in twenty minutes.
