Double Take
Unified UI and API for face recognition on camera feeds
Double Take provides a unified interface and API to coordinate multiple face recognition services for your surveillance cameras. It connects to Frigate and detectors like CompreFace to deliver named-person alerts.
Key features
- Unified face recognition UI
- Frigate integration
- Multiple detector backends
- Named-person alerts
Pros & cons
Strengths
- Coordinates several detectors
- Good Frigate companion
Trade-offs
- Companion tool only
- Requires a detector backend
Double Take replaces
Last reviewed Sep 13, 2026 · 778 words
Frigate can tell you a person walked up to the door. Double Take is the layer that tells you it was Alex, and it does that without recognising a single face itself: it watches Frigate for person events, cuts the snapshots, sends them to one or more recognition backends, keeps the best match, and publishes "this is Alex, confidence 87%" to MQTT where Home Assistant can act on it. If you install it expecting a face recogniser you will spend an evening confused. If you already run Frigate and want named-person notifications, it is the component that saves you from writing 200 lines of glue in Node-RED, and 512 MB of RAM covers it.
Run the maintained fork
The original repository under jakowenko/double-take went quiet a while back. Development continued in the skrashevich/double-take fork, which is where CodeProject.AI support and the recent Frigate compatibility fixes live. The catalogue entry points at the original, and the concepts below apply to both, but pull the fork's image unless you enjoy patching. Same config format, same port 3000, same /.storage volume for the database, config and training images.
The pipeline, step by step
Frigate publishes an event on frigate/events when it tracks a person. Double Take subscribes, waits for the event to produce a usable snapshot, and pulls the latest frame plus the snapshot image from Frigate's API. Each image goes to every detector you have configured; the results come back as bounding boxes with names and confidence. Double Take applies your thresholds, deduplicates across cameras, saves a match record with the crop, and publishes to double-take/matches/<name> and double-take/cameras/<camera>. With MQTT discovery on, Home Assistant sees a sensor per known person with last-seen camera and confidence.
The loop takes seconds, not milliseconds: fast enough for a doorbell notification and not fast enough to release a door lock before someone reaches the handle. Treat it as a notification and logging aid.
Picking a backend
- CompreFace: the default choice. Free, self-hosted, good accuracy, trains from Double Take's own upload, but it wants a PostgreSQL container and more RAM than the rest of this stack combined, so it is the heaviest part.
- CodeProject.AI: the pragmatic choice if you already run it for Frigate or Blue Iris. Lighter, with GPU and Coral options, slightly less accurate on partial faces.
- DeepStack: older and largely superseded by CodeProject.AI, still supported for existing installs.
- Amazon Rekognition: works and is accurate, but every snapshot of every visitor leaves your network and is billed per call. For a self-hosting site I will not recommend it.
Running two backends and letting Double Take keep the higher confidence is a supported pattern and genuinely improves results at the cost of double the inference load.
Training is 20 photos, not 2
The Double Take UI has a train page: upload photos of each household member, or promote good matches from the match history into the training set. Use 15 to 25 images per person across lighting conditions and angles, including hats and glasses if they wear them. Retrain after any camera move. Confidence thresholds default around 60% for a match; push the "unknown" threshold up if you get false positives from delivery drivers, and lower the match threshold only once the training set is solid. A doorbell camera at face height gives dramatically better results than a soffit camera looking down, and no amount of tuning fixes geometry.
It is a companion, and it is fragile in specific ways
Double Take depends on Frigate's MQTT topic names and API shape, and Frigate changes those between major versions. Every Frigate upgrade is a "check the Double Take issues first" event. It does not do detection on its own video streams, does not work without Frigate (or a similar event source), and has no user accounts beyond a single optional password. The video surveillance category has full NVRs; this is not one.
What I'd do
Frigate already running, then the skrashevich fork of Double Take and CompreFace on the same host, MQTT discovery enabled, 20 training photos per person from the doorbell camera. One Home Assistant automation: notify with the crop when a match over 80% appears on the front camera, and a different notification for "unknown person, confidence under 50%". Pin both the Frigate and Double Take image tags and upgrade them together. If you do not already run Frigate, start with Frigate for 2 months and only add this when you are sure named alerts are the missing piece.
Compare Double Take
10 head-to-head comparisons.
Similar video surveillance apps
MediaMTX
Video SurveillanceReady-to-use media server and RTSP/WebRTC proxy
Replaces Wowza
go2rtc
Video SurveillanceUltimate camera streaming gateway with low latency
Replaces Nest Cam
OpenALPR
Video SurveillanceAutomatic license plate recognition library
Replaces Rekor Scout, Plate Recognizer
CompreFace
Video SurveillanceSelf-hosted face recognition service with REST API
Replaces Amazon Rekognition
OpenCvSharp
Video Surveillance.NET wrapper for OpenCV computer vision
Replaces Commercial vision SDKs
ZoneMinder
Video SurveillanceFull-featured closed-circuit television software suite
Replaces Blue Iris, Milestone XProtect