Face recognition infrastructure that stays in your network.
Own the complete face recognition stack in one self-hosted Linux service—detection, comparison, enrollment, exact 1:N search, and persistent RTSP monitoring through a Web UI, REST API, and Python SDK. In measured INT8 tests on a single RTX 5090, search scales to 58.9M image vectors and delivers 3.84 ms Top-5 latency at 10M vectors.
Model licensing for production
Server and SDK code are MIT licensed; model rights are separate. License public models for commercial use, or request higher-accuracy private models for million- and ten-million-scale 1:N search.
Request model licensing
One self-hosted service
Private by architecture, practical by design.
Images, embeddings, models, and indexes can remain inside infrastructure you control. The multilingual console calls the same public API as your applications and uses no CDN, analytics, remote fonts, or third-party JavaScript.
Detect
Return bounding boxes, five landmarks, detector confidence, and local quality signals for JPEG, PNG, and WebP images.
Compare
Compare one selected face from two images with an explicit threshold and a raw cosine similarity—not a probability.
Enroll
Organize identities as Collections, People, and FaceSamples with multi-image enrollment, review modes, and explicit rejection reasons.
Search
Run exhaustive 1:N person search. Each person is ranked by the strongest matching FaceSample above the Collection threshold.
Monitor
Run persistent RTSP recognition tasks with recent enter, exit, error, and recovery events plus an optional operator preview.
Integrate
Use the Web UI, 29 REST operations, interactive OpenAPI reference, or the lightweight typed Python client.
Recognition pipeline
From image to ranked match.
The same explicit processing contract powers the console, REST API, Python SDK, and RTSP monitors.
Image or RTSP frame
JPEG, PNG, WebP, or the newest live camera frame.
Multi-resolution SCRFD
Detect faces, merge candidates, and apply one global NMS.
Align and embed
Five-point alignment, ArcFace embedding, and L2 normalization.
Model-bound Collection
Pin the model, preprocessing, detector, threshold, and capacity.
Exact CPU/GPU search
Exhaustively score every live FaceSample in the selected profile.
Person matches
Return ranked people with raw cosine scores and request IDs.
SQLite stays authoritative
The durable database is the source of truth; in-memory exact indexes are rebuildable projections. Accepted enrollments are added to the index before a successful response returns, and deletions are removed from both stores.

Explicit identity contracts
Collections keep models, policies, and data boundaries clear.
Each Collection pins the model identity, preprocessing version, embedding dimension, detector policy, search profile, capacity, and match threshold. That contract prevents silent mixing when a model or runtime changes.
- Add multiple FaceSamples per person and inspect partial enrollment results instead of losing a whole batch.
- Choose off, standard, or strict review to apply face count, size, sharpness, brightness, pose, and within-person checks.
- Connect a trusted upstream embedding pipeline through the Collection embedding contract; images still pass detection and review.
- Optionally store a 112×112 bounding-box crop per accepted face. Original uploads and aligned recognition inputs are not retained.
Measured search proof
Exact search at single-GPU scale.
Native exhaustive search profiles let you trade vector precision for capacity and throughput without switching to an approximate nearest-neighbor index.
Measured maximum for 512-dimensional vectors on one RTX 5090.
Measured at exactly 10M vectors with one query in flight.
Measured exhaustive Top-5 search throughput at 10M vectors.
Measured INT8 capacity multiplier on the same GPU.
| GPU data type | Maximum vectors | 10M Top-5 p50 | 10M serial QPS |
|---|---|---|---|
| FP32 | 15.8M | 12.84 ms | 77.85 |
| FP16 | 30.7M | 6.83 ms | 146.32 |
| BF16 | 30.7M | 6.83 ms | 146.33 |
| INT8 | 58.9M | 3.84 ms | 260.81 |
91.25% for FP32 and INT8
On ICCV21-MFR MR-ALL at FAR 1e-6, both profiles report 91.25% at two-decimal precision. The unrounded INT8 difference from FP32 was −0.001102 percentage points.
Measured on one NVIDIA GeForce RTX 5090. Capacity is an isolated native-index ceiling without loaded ONNX models or Server workload. Speed uses exactly 10M 512-dimensional image vectors, exhaustive GPU-resident Top-5, one query in flight, 10 warm-ups, and 100 measured queries. Production deployments must reserve VRAM for models, requests, concurrency, index rebuilds, and allocator headroom. Search is exact within each stored representation; lower-precision storage can still change scores and rankings relative to FP32.
Persistent RTSP monitors
Camera monitoring that runs without the browser.
Create server-side RTSP Monitors, tune inference cadence and event confirmation, then let independent clients poll current state and recent events. Closing the console does not stop recognition, and enabled Monitors resume after a Server restart. Frames are never recorded; recent events are bounded and non-durable, and preview is off by default.
Use recognition as an operator aid, not as the sole control for a high-impact decision. Define consent, retention, deletion, review, and incident-response policies for every deployment.

Docker deployment
Choose CPU for a simple start or CUDA 12 for scale.
Run from a complete InsightFace repository checkout. The host does not need Python, OpenCV, ONNX Runtime, CUDA Toolkit, or cuDNN; the containers carry the runtime while models remain a separate licensed installation.
mkdir -p server/.models
docker compose -f server/deploy/compose.cpu.yml pull
docker compose -f server/deploy/compose.cpu.yml \
run --rm models install buffalo_l --accept-license
docker compose -f server/deploy/compose.cpu.yml up -d
curl -fsS http://127.0.0.1:18097/v1/healthCPU
Linux x86_64 with Docker Engine and Docker Compose. A practical path for evaluation and moderate workloads.
NVIDIA CUDA 12
Add a supported NVIDIA GPU, driver, and NVIDIA Container Toolkit. Startup fails instead of silently falling back to CPU.
Deployment boundary
Operations and security
A clear boundary you can harden.
The Server exposes the state needed to operate a private deployment while keeping secrets, images, embeddings, and credentials out of diagnostics.
Readiness and diagnostics
Check service, database, model, provider, capacity, and recent safe error summaries.
Fail-fast CUDA
Validate the real provider, sessions, libraries, GPU compatibility, and warm-up inference at startup.
Durable data boundary
Keep models read-only, persist /data, and rebuild disposable exact indexes from SQLite.
Protected credentials
Hash the API key, encrypt RTSP credentials in /data, and redact sources from responses.
API-only mode
Disable the console and guides while retaining /v1 and /openapi.json for private services.
Secure it before network access
The bundled Compose files disable authentication for isolated evaluation. This release provides plain HTTP inside the container, one undifferentiated API key, and no built-in user accounts, RBAC, IAM, rate limiter, TLS, or legal-compliance layer. It does not add liveness, deepfake detection, demographic analysis, recording/NVR, or distributed workers. Enable authentication, terminate HTTPS at a trusted reverse proxy, restrict CORS and network access, apply edge rate/body/time limits, and protect data volumes and backups as biometric data.
Implementation guides
Go from first container to working integration.
Use the focused quick start for your first private deployment, then move to the API and Python SDK workflow when you are ready to connect an application.
Start with a private deployment.
Bring up the CPU image, create a Collection, enroll one person, and run your first exact search. When the workflow is proven, size the runtime and security boundary for production.
Server source code and SDK licensing do not grant commercial rights to model files. Contact InsightFace for commercial model authorization.