The camera alarm you can trust.
SmartCam watches your cameras for a person moving around your home, and ignores the parked car, the lamp and the afternoon sun. When you're away it sends the snapshot and clip to your phone, and when the alarm is armed it lights up the cameras' red and blue warning lights.
Fewer false alarms, no missed people
Replayed against a real home's labelled Frigate history: 305 cases from seven cameras, by day, at night, indoors and out.
One home's footage, not a benchmark, and the cases were mostly sampled from Frigate's own events. The regression tools are in the repository, so you can run it on yours.
What it does
Everything a camera system needs to be useful, and nothing that wakes you up for a lamp.
The moving person wins
Every track carries its own evidence of how far it travelled. A person walking past a parked car is the alert; the car, which never moved, never is.
Lamp- and sun-proof
Motion is measured against each pixel's neighbourhood, so a lamp switching on or sunlight sweeping a wall isn't motion. A sudden whole-frame change is treated as lighting.
It learns your house
Spots where a "person" sits without ever moving, like a coat on a hook or a stack of tyres, are remembered and need much stronger evidence next time. Mark an event as a false alarm and its spot is remembered at once. And when the same box is a cat most of the time, it is never your burglar.
Suspicion, not just detection
Events are scored: away mode, night, loitering, door zones, a person seen on one camera and then the next. Only what matters reaches your phone.
Push with picture and clip
Notifications through the Home Assistant companion app, each with its own snapshot, followed by the clip with five seconds of lead-in. They work away from home too, and every picture and clip saves to your phone with one tap.
At home in Home Assistant
An alarm panel, a person sensor and a snapshot camera per camera appear automatically over MQTT. Already have an alarm switch your keypad and scripts use? SmartCam follows it, both ways.
An alarm, not just alerts
Arm it from the dashboard or your keypad, with an exit delay to leave and an entry delay to disarm. A person indoors while you're away, or someone loitering at the door at night, sets off the cameras' red and blue warning lights and a critical alert that sounds even on silent. Armed home at bedtime, it ignores the family indoors, warns you about anyone lurking outside, and disarms when you come down the stairs in the morning. Working from home, one switch makes every person outside a push, day or night.
Live cameras in your dashboards
One button adds every camera to Home Assistant as a live camera entity, streamed by Home Assistant itself, at home and away. Or open the wall view on a spare screen: every camera at once, and the one that sees someone lights up and grows. For a TV or an old tablet, SmartCam can put the wall together as one video.
Cameras that look after themselves
A camera whose stream dies is restarted on its own: power-cycled through a smart plug in Home Assistant, or rebooted through the camera's API. Their clocks are kept right too.
Lights on people after dark
Someone in the driveway at night? That camera's Home Assistant lights go to full, then back to exactly how they were two minutes after the person has gone.
Private when you're home
Indoor cameras record nothing while you're home, and pick up again when you leave. They still tell Home Assistant which rooms are occupied, people sitting still included, so your lights can follow you.
Presence simulation that learns
While armed, your lights replay a real evening from when you were home, the same kind of day, at its brightness, shifted with the season's sunset. Holidays replay your latest Sunday.
It knows who it is
Your Home Assistant family is always on the list; add the grandparents or the neighbour who feeds the cat. SmartCam learns faces from your events, carries a name from the front door to the garden when the clothes match, and says who it is in every push. Family isn't pushed while you work from home, and a known face never silences an alarm. Faces never leave the house.
Answer the alarm from the push
Every alarm, a break-in or a smoke detector going off, arrives with pictures from inside and two buttons: confirm it, and every light in the house goes to full while your speakers wail a siren, or mark it a false alarm and the warning lights go off. One more tap puts the lights and speakers back exactly as they were. Everyone sees who answered.
See who rang
Press the doorbell and everyone's phone shows the front door and the hall side by side in one picture, taken at the moment it rang.
Speed checks on your road
Two lines across the road and the distance between them: every passing car gets its speed, a full-resolution shot of the car where it was measured, a close-up and its licence plate, with a push above your limit.
Runs on what you have
YOLO11 on an NVIDIA GPU (GTX 10-series and newer), Intel graphics with OpenVINO (Core Ultra, Arc) or Apple Silicon, hardware video decoding on Intel graphics.
How it works
One container. go2rtc is the only thing that talks to your cameras; everything else reads its restreams.
Record
Main streams are copied to 10-second segments, continuously, with no re-encoding.
Watch
Sub streams are decoded at 5 fps and checked for real, lighting-robust motion.
Detect
YOLO11 finds people and vehicles in the full frame, more often while something moves.
Track
Tracks gather evidence: travel, in-box motion, how long they've stood still.
Decide
Confirmed people become events, scored for suspicion against zones, time and away mode.
Tell you
Home Assistant entities update, and above the threshold your phone gets the snapshot and clip.
Install
A Docker image is published for every commit. Your config stays on your server.
- Create a data folder and put your config in it as
smartcam.yml, starting from the example config. - Start the stack with
docker compose up -d, or as a Portainer stack straight from the repository. On an Intel machine without NVIDIA, use theintelimage anddocker-compose.intel.yml(OpenVINO on the integrated graphics). - Open the web UI on port 8971, or add it to the Home Assistant sidebar (below). Everything else is set up in its Settings tab.
# docker-compose.yml services: smartcam: image: ghcr.io/ulfendk/smart-camera-home:latest restart: unless-stopped network_mode: host devices: - /dev/dri/renderD128:/dev/dri/renderD128 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] volumes: - /srv/smartcam:/app/data # smartcam.yml + recordings
In the Home Assistant sidebar
The SmartCam add-on puts the web UI in Home Assistant's sidebar and the companion app, behind Home Assistant's login and wherever Home Assistant reaches, remote access included. It only forwards to your SmartCam server, so it is light enough for a Raspberry Pi. It needs Home Assistant OS or a Supervised install.
- Add the repository to the add-on store:
or by hand: Settings → Add-ons → Add-on Store → ⋮ → Repositories, and add
https://github.com/ulfendk/smart-camera-home. - Find SmartCam in the store (reload the page if it isn't there yet) and install it.
- On its Configuration tab, set
serverto your SmartCam address as Home Assistant sees it. - Start the add-on and switch on Show in sidebar.
# add-on configuration server: "http://192.168.1.10:8971" # http:// or https://, host and port. # Live view goes through the same address, # so nothing else has to be reachable.
Inspired by Frigate
SmartCam exists because Frigate showed what a local, private NVR for Home Assistant can be. It borrows Frigate's best ideas: go2rtc restreaming, continuous recording with events on top, zones and masks in normalised coordinates, and MQTT entities. If you need face recognition, a mature UI or a large community, use Frigate. SmartCam is a smaller project with a narrower aim: fewer false alarms.
Support SmartCam
SmartCam is free and MIT licensed, built in spare evenings. If it keeps an eye on your home, you can say thanks.
Also built on go2rtc, Ultralytics YOLO11, ONNX Runtime, FFmpeg and Material Design Icons.