Open-source biometric access control

Your face
is your ticket.

SmartPass turns any standard webcam into a zero-friction entrance. No lines, no QR codes, no lost badges — just real-time facial recognition that checks guests in the instant they arrive.

<1msdb-side matching
128-dbiometric vector
0raw images stored
reception · entrance AANALYZING FRAME
[ live camera feed ]
webcam_stream · 1280×720 · base64
encoding face → 128-d signaturecomputing…
[
Real-time facial recognitionpgvector similarity searchZero raw-image storageZIP bulk enrollmentUUID-secured eventsFastAPI + SQLAlchemy 2.0Microsecond matchingUnattended-only query poolReal-time facial recognitionpgvector similarity searchZero raw-image storageZIP bulk enrollmentUUID-secured eventsFastAPI + SQLAlchemy 2.0Microsecond matchingUnattended-only query pool
The friction problem

Registration lines kill the first impression.

Every second a guest waits at the door is a second of your event spent on logistics instead of experience. The old toolkit is slow, costly, and easy to lose.

The old way

Paper tickets get lostReprints, disputes, and a desk full of will-call envelopes.
QR codes take timeGuests dig through email threads while the line backs up.
RFID is expensiveCards cost money, get shared, and end up in a drawer at home.
No live visibilityOrganizers have no idea who's actually in the room.

With SmartPass

Nothing to carryGuests just walk up to the camera. Their face is the credential.
Instant check-inA match resolves in under a millisecond, directly in the database.
Free to runOpen-source, webcam-driven. No hardware to buy or distribute.
Live attendance feedWatch arrivals stream into your dashboard in real time.
Why SmartPass

Engineered for speed, built for trust.

Every capability is designed around two constraints that usually fight each other: be instant, and respect privacy. SmartPass refuses to trade one for the other.

Privacy by design

SmartPass never stores raw images. Every photo is converted into a 128-dimensional mathematical signature the moment it arrives — and the original is discarded immediately.

image → vector → /dev/null

Database-driven AI speed

Facial matching runs inside PostgreSQL via pgvector, comparing signatures in microseconds. No slow Python loops shuttling data in and out of the engine.

ORDER BY embedding <-> $1 LIMIT 1

In-memory bulk upload

Drop one ZIP of attendee photos labeled by name. The backend unpacks and enrolls hundreds of profiles entirely in RAM — no temp files left on disk.

zip → ram → enrolled

Smart live check-in

A browser loop streams base64 webcam frames to the API, which silently filters empty frames and matches only against the unattended pool.

unattended-only query

Open source

Self-host the whole stack, audit every line, and extend it for your venue. No vendor lock-in, no per-scan fees, no black boxes.

MIT · self-hostable
How it works

From zero to live check-in in four steps.

Create your event

Spin up a free-access event in seconds — no global admin signup. Each one gets a unique, secure UUID-based URL you can share with your team.

02

Upload your guests

Add attendees one at a time with a drag-and-drop photo, or drop a single ZIP of labeled images to enroll hundreds at once — all processed in memory.

03

Open the webcam terminal

Point any laptop or tablet at the entrance and open the reception screen. It streams frames continuously and matches every face the instant it appears.

04

Track arrivals live

Watch your dashboard fill in real time — names, roles, and exact timestamps appear the moment each guest is verified at the door.

new event● created
DevConf 2026 — Main Hall
smartpass.io/e/8f3a-c41d
Free public access
Face check-in
Discard raw images
no admin registrationuuid-securedfree tier
Two screens, one system

Built for the organizer and the front door.

A control room for whoever runs the event, and a calm, full-screen welcome for whoever's standing at the entrance.

DevConf 2026 — Main Hall
event/8f3a-c41d-…-9e2b
LIVE
Checked in
2 / 8
Attendance
25%
Avg match time
0.8ms
LIVE ARRIVALS
auto-updating
AO
Amara OkaforGENERAL
09:41:12
ARRIVED
WZ
Wei ZhangGENERAL
09:42:58
ARRIVED
For developers

A modern stack, doing the hard part in the database.

Matching happens where the data already lives. One indexed query returns the closest signature — no model server, no vector cache, no round trips.

FastAPI async

High-throughput async endpoints for frame ingestion and check-ins.

PostgreSQL 16

The single source of truth for events, guests, and signatures.

pgvector hnsw

In-database similarity search over 128-d embeddings, indexed for speed.

SQLAlchemy 2.0

Modern typed ORM with the new async query style throughout.

checkin.py
# incoming webcam frame → 128-d signatureasync def check_in(frame: str, event_id: UUID): sig = encode_face(frame) # discard image if sig is None: return # empty frame, skip silently stmt = ( select(Guest) .where(Guest.event_id == event_id) .where(Guest.arrived_at.is_(None)) .order_by(Guest.embedding.l2_distance(sig)) .limit(1) ) match = (await db.execute(stmt)).scalar() return welcome(match) # <1ms, db-side
Spin one up

Your next event opens
its doors with a glance.

Create a free event in under a minute, or clone the repo and run the whole stack yourself. No card, no hardware, no lines.

bash
$ git clone smartpass/smartpass
$ docker compose up
✓ pgvector ready · api on :8000