Local AI. Privacy first.

Your cameras,
finally understood.

Nurby reads your camera feeds with local vision models, writes plain-language rules, and tells you only what matters. No cloud uploads. No API keys required. Your footage stays on your network.

Don't send your videos to strangersRTSP + ONVIFSelf-hostable
nurby live view
LIVE
Front Door
Person 0.91
01:24:07
LIVE
Nursery
Gentle motion
01:24:07
LIVE
Kitchen
Dog 0.84
01:24:07
LIVE
Porch
Package 0.87
01:24:07
activity feed
live
Built for

Peace of mind that stays on your network.

Watch over babies, pets, and elders without streaming their lives to a stranger's cloud. Nurby whispers when something matters and stays quiet the rest of the time.

  • Per-person privacy blur
    Blur faces in live feeds and clips. Unblur only for you.
  • Gentle check-ins
    Breathing steady. Nap still going. Not another ping.
  • Audio cues
    Baby cry, glass break, smoke alarm, dog bark.
Cloud uploads
0
Per-person blur
on
Audio triggers
4
Nursery camlive
Breathing steady, 3 min ago.
No alert. Gentle check-in only.
10:42 pmBaby cry detected, 12s.
09:15 pmRoom quiet. Lights off.
Scenarios

Ordinary questions your cameras should already answer.

Is the baby still breathing?

Nurby watches for gentle chest movement and writes a soft note when it sees it. No alarms unless something is actually wrong.

LIVE
Nursery
Breathing: steady
01:24:07

Did the dog walker show up?

Face recognition identifies trusted visitors and logs their arrival. You stop wondering. You just check.

Timeline, today
3 events
Front door motion
Person approaching
2:04 pm
Dog walker recognized
Match 0.94, Riley
2:04 pm
Leash attached
Walk starting, yard exit
2:06 pm

Someone lingered at the front door.

Draw a loiter zone on the feed. Nurby timestamps anyone standing inside it longer than you want.

LOITER
Front Door
porch zone
4 pts. 2068% area
Loitering 45s
01:24:07

Package dropped on the porch.

YOLO detection finds parcels the moment they land. Nurby files a clip with label, confidence, and timestamp.

OBJECT
Porch
package 0.87
person 0.72
yolov8m: 34 ms
01:24:07

A stranger in the kitchen at 2 am.

Unknown faces outside your allow list fire rules. Clips get tagged, emails get sent, clusters group repeat visitors.

Timeline, today
3 events
Unknown face, cluster #42
Kitchen camera, low light
2:07 am
Rule fired: Night intruder
Confidence 0.81
2:07 am
Email sent
2:07 am
Watchout routines

Unlimited custom rules. Live updates. Smart actions.

If a camera can see it, Nurby can react to it. Compose anything from a siren when a bear shows up to a silent webhook that logs sheep counts to your farm dashboard. No cap on how many.

Trigger
Bear spotted
Backyard cam, YOLO-World vocab
Action
Yard siren
Broadcast speaker, 20s
Plain language

When a bear is detected in the backyard, sound the yard siren for 20 seconds.

Recent fires3 shown
  • 2 days agoBlack bear near compost bin. Siren fired, cleared in 14s.
  • Last weekCub on deck at 3:42 am. Siren fired twice.
  • Apr 03Adult bear in tree line. Siren fired, siren acknowledged.
All routines
Routines
Latency
live
Hosted
local
Rule builder

Compose behavior in plain language.

Pick a trigger. Toggle conditions. Chain actions. Nurby writes the rule back to you as a sentence so there is no guessing.

Trigger
Conditions2 of 4 on
Actionspick any, they chain
Preview
cooldown 5 min

When a person is detected on Front Door after 10 pm, send an email and record a 30 second clip.

Last fired. 2 hours ago2 actions
Perception stack

Three layers. One clean path from pixels to meaning.

Ingestion
RTSP, ONVIF, MediaMTX
stream.camera.front_door
h264 1080p@30
reencode off
Perception
YOLO, VLM, audio, face
model yolov8m.pt
vlm gemma-3-4b.ollama
face arcface.onnx
Events
Rules, actions, clips
rule id=142 matched
action email sent
clip clip_2310.mp4
Local inference
offline capable

YOLO catalog

17 models from yolov8n through yolo-world and the 600-class OIV7 family. Labels are sourced directly from the active weights.

Labels sourced from. yolov8n.pt
personbicyclecardogcatbackpackbottlecupchaircell phone
Bring your own VLM
optional

VLM providers

Swap providers per camera or per rule. Stay local with Ollama if you have a capable GPU, or route to a cloud provider when you need accuracy without the hardware.

Active provider. Ollama running gemma-3-4b
POST /v1/describe
model: gemma-3-4b
fallback: claude-4-sonnet
Local AI

One-click Ollama. No keys. No uploads.

Ollama runtime
Local: 16 GB free
online
Runs offline
Lose internet. Nurby keeps watching and recording.
No API keys needed for local
Ollama runs on your GPU. You need serious VRAM for VLM inference. NVIDIA Spark, workstation GPUs, or similar.
No data leaves your network
Every frame, clip, and prompt stays inside your LAN.
bash
$ docker compose up -d
nurby: bootstrapping ingestion
ollama: pulling gemma-3-4b
gpu: NVIDIA Spark · 128 GB VRAM
ready at http://localhost:3000
Speaks the protocols you already run
RTSPONVIFMediaMTXOllamaOpenAIAnthropicGeminiTwilioSMTPWebhooksHome AssistantPushover
Privacy

Private by default. Tunable by person.

On-device inference

Ollama plus YOLO runs on your hardware. Nothing leaves unless you wire it to.

CPU: 14%
GPU: RTX 4060, 38%
RAM: 9.2 GB of 32 GB
Net out: 0 KB
Per-person privacy blur

Toggle blur on specific family members in shared timelines. Keep kids private in exports.

Maya
Family
Ben
Family
Riley
Trusted
Unknown 42
Unknown
Nudity and audio guards

NudeNet blurs sensitive frames. Audio triggers fire only on the sounds you pick.

Baby cry
0.2-0.6 kHz
Dog bark
0.3-1 kHz
Glass break
2-8 kHz
Smoke alarm
3.1 kHz
Developers

A platform, not just a dashboard.

Every rule, event, and action is addressable. Query your cameras from Claude Desktop via MCP, fire webhooks when rules trigger, or wire Nurby into your home stack with structured JSON.

mcp — claude desktop configjson
{
  "mcpServers": {
    "nurby": {
      "command": "python",
      "args": ["-m", "services.mcp.server"],
      "env": {
        "NURBY_MCP_TOKEN": "<your-jwt>",
        "DATABASE_URL": "postgresql+asyncpg://..."
      }
    }
  }
}
// "who was at the door today?"
// → answered from your own cameras
rule — real payloadjson
{
  "name": "Late-night front door",
  "trigger_pattern": {
    "type": "object_detected",
    "label": "person"
  },
  "conditions": {
    "camera_id": "front_door",
    "time_after": "22:00",
    "min_confidence": 0.7
  },
  "actions": [
    {"type": "verify"},
    {"type": "telegram"},
    {"type": "email", "to": "[email protected]"}
  ],
  "cooldown_seconds": 300
}
api_call action — outbound webhookjson
{
  "type": "api_call",
  "url": "https://ha.local/api/services/light/turn_on",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer {{ha_token}}"
  },
  "payload_template": {
    "entity_id": "light.porch",
    "brightness": 255
  },
  "secret": "hmac-key-for-signature"
}
// triggers fire → porch light turns on
Open source

Free. Open source. Self-host today.

Run Nurby on your own hardware with a single compose file. The full backend is open source on GitHub.

Unlimited cameras
Unlimited rules
Local AI included
Plain-English search
Webhooks and API
Multi-user with roles
View on GitHub

Apache-2.0, self-host, no credit card

FAQ

Short answers to fair questions.

No. By default everything runs on your hardware. Cloud providers are opt-in per camera or per rule if you want them.
A modern x86 box with 16 GB of RAM runs the baseline. A consumer GPU lets you step up to larger models and more concurrent streams.
Anything that speaks RTSP or ONVIF. That covers most Reolink, Amcrest, Hikvision, Dahua, and Unifi models.
600+ objects out of the box. Swap or extend the detection model any time. Bring your own labels if you need something unusual.
You decide. Retention is time-based or size-based per camera. Clips and detections have independent policies.
Ingestion, detection, rules, and local notifications keep running. Cloud actions queue and replay when the link returns.
Compose multiple triggers and conditions, chain actions, set cooldowns, and gate by face or zone. Rules preview as plain sentences.
Yes. Clips export as standard MP4. Events export as JSON or CSV. Everything lives in Postgres and you own the volume.