Skip to content

Home Security Intelligence

Turn "dumb" security cameras into an intelligent threat detection system -- 100% local, no cloud APIs required.

  • Getting Started


    Prerequisites, installation, and your first run

    Get started

  • User Guide


    Dashboard, alerts, timeline, analytics, and features

    User Guide

  • Operator Guide


    Deployment, monitoring, GPU setup, and administration

    Operator Guide

  • Developer Guide


    Architecture, API reference, patterns, and contributing

    Developer Guide


How It Works

The system processes security camera footage through a multi-stage AI pipeline, turning raw images into explained security events with risk scores.

1. Camera Capture

Camera Capture

Security cameras upload images via FTP. A file watcher detects new uploads and submits them for analysis.

sequenceDiagram
    participant Camera as IP Camera
    participant FTP as FTP Server
    participant Watcher as File Watcher
    participant Queue as Detection Queue
    Camera->>FTP: Upload image
    FTP->>Watcher: File system event
    Watcher->>Watcher: Validate file type & size
    Watcher->>Queue: Submit for detection

2. Object Detection

Object Detection

YOLO26 identifies people, vehicles, animals, and objects in real-time with bounding boxes and confidence scores.

sequenceDiagram
    participant Queue as Detection Queue
    participant YOLO as YOLO26<br/>:8095
    participant DB as PostgreSQL
    Queue->>YOLO: POST /detect (image)
    YOLO-->>Queue: Detections (person, car, dog...)
    Queue->>DB: Store raw detections

3. AI Enrichment

AI Enrichment

Multiple specialized models add context: Florence-2 captions the scene, CLIP detects anomalies, and enrichment models identify faces, clothing, vehicles, and more.

flowchart LR
    D[Detection] --> F["Florence-2<br/>Scene Caption"]
    D --> C["CLIP<br/>Anomaly Score"]
    D --> E["Enrichment Models<br/>Face / Clothing / Vehicle"]
    F --> M[Merged Context]
    C --> M
    E --> M

4. Event Batching

Event Batching

A 90-second window with 30-second idle timeout groups related detections into a single coherent event, preventing alert fatigue.

sequenceDiagram
    participant Det as Detections
    participant Agg as Batch Aggregator
    participant Event as Event
    Det->>Agg: Detection 1
    Det->>Agg: Detection 2
    Note over Agg: 90s window<br/>30s idle timeout
    Det->>Agg: Detection 3
    Agg->>Event: Window closes
    Note over Event: One explained event<br/>from many detections

5. AI Risk Reasoning

AI Risk Reasoning

Nemotron-3-Nano-30B analyzes the full context -- detections, enrichments, time of day, camera location -- and produces a 0-100 risk score with natural language explanation.

sequenceDiagram
    participant Event as Event + Context
    participant Nem as Nemotron-3-Nano-30B<br/>:8091
    participant DB as PostgreSQL
    Event->>Nem: Full context prompt
    Note over Nem: Reason about scene,<br/>entities, time, location
    Nem-->>Event: Risk: 73/100<br/>"Unknown person near<br/>garage at 2:34 AM..."
    Event->>DB: Store analysis

6. Real-Time Dashboard

Real-Time Dashboard

Events push to the React dashboard via WebSocket in real-time. The risk gauge updates, timeline entries appear, and entity tracking links detections across cameras.

sequenceDiagram
    participant DB as PostgreSQL
    participant Redis as Redis PubSub
    participant WS as WebSocket
    participant UI as React Dashboard
    DB->>Redis: Event published
    Redis->>WS: Broadcast to subscribers
    WS->>UI: Real-time push
    Note over UI: Risk gauge updates<br/>Timeline entry appears<br/>Entity tracking links

Architecture Overview

flowchart TB
    subgraph Cameras["Camera Layer"]
        CAM[IP Cameras]
    end
    subgraph Frontend["Frontend Layer"]
        UI["React Dashboard<br/>:5173"]
    end
    subgraph Backend["Backend Layer"]
        API["FastAPI<br/>:8000"]
        WS["WebSocket"]
    end
    subgraph AI["AI Services"]
        YOLO["YOLO26<br/>:8095"]
        NEM["Nemotron LLM<br/>:8091"]
        FLO["Florence-2<br/>:8092"]
        CLIP["CLIP<br/>:8093"]
        ENR["Enrichment<br/>:8094 / :8096"]
    end
    subgraph Data["Data Layer"]
        DB[(PostgreSQL)]
        REDIS[(Redis)]
    end
    CAM -->|FTP Upload| API
    UI <-->|REST + WebSocket| API
    API --> YOLO & NEM & FLO & CLIP & ENR
    API <--> DB & REDIS

Full Architecture Documentation


AI Model Zoo

The system uses multiple AI models managed with VRAM-efficient on-demand loading. See the complete Model Zoo documentation.

Model Purpose Always Loaded
YOLO26 Object detection Yes
Florence-2 Scene understanding Yes
CLIP ViT-L/14 Anomaly detection Yes
Nemotron-3-Nano-30B Risk reasoning (LLM) Yes
Threat Detection Weapon detection On-demand
Person Re-ID Cross-camera tracking On-demand
FashionCLIP Clothing analysis On-demand
Demographics Age/gender estimation On-demand