Skip to content

juand666/ExaVMS2.0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

<<<<<<< HEAD

ExaVMS 2.0 - Unified Frontend for Multiple Frigate Servers

A comprehensive surveillance management system that serves as a unified frontend for multiple Frigate NVR servers, providing centralized camera monitoring, event management, and recording search capabilities.

Documentation

Features

  • 🔗 Multi-Frigate Server Support: Connect and manage multiple Frigate servers from a single interface
  • 📹 Live Camera Monitoring: Real-time JPEG streams from all connected Frigate cameras
  • 🎯 Event Detection: View and search events detected by Frigate's AI across all servers
  • 📼 Recording Search: Search and playback recordings by time, camera, or detection type
  • 🎨 Custom Views: Create drag-and-drop camera layouts with customizable grids
  • 🔐 User Authentication: Secure login system with admin and user roles
  • 🐳 Docker Deployment: Production-ready containerized deployment
  • 📊 Centralized Management: Single pane of glass for all your Frigate installations
  • Real-time Updates: Live event notifications and status monitoring

Architecture

ExaVMS 2.0 acts as a frontend orchestrator for multiple Frigate servers:

  • Backend: Node.js + Express API server that proxies requests to Frigate servers
  • Frontend: React application providing unified UI for camera management
  • Storage: SQLite database for user management and view configurations
  • Integration: RESTful communication with Frigate's API endpoints
┌─────────────────┐    ┌─────────────────┐
│   ExaVMS Web    │────│  ExaVMS API     │
│   Frontend      │    │  (Node.js)      │
└─────────────────┘    └─────────────────┘
                              │
                    ┌─────────┼─────────┐
                    │         │         │
            ┌───────▼───┐ ┌───▼───┐ ┌───▼───┐
            │ Frigate  │ │Frigate│ │Frigate│
            │ Server 1 │ │Server │ │Server │
            │          │ │  2    │ │  N    │
            └──────────┘ └───────┘ └───────┘

Quick Start

Prerequisites

  • Multiple Frigate servers (v0.13+) running and accessible
  • Docker and Docker Compose (for deployment)
  • Node.js 18+ (for development)

Production Deployment

  1. Deploy with Docker:

    # Make the deploy script executable (Linux/Mac)
    chmod +x deploy.sh
    
    # Run the deployment script
    ./deploy.sh

    Or manually:

    # Build and start services
    docker compose build
    docker compose up -d
  2. Access the application:

Default Credentials

  • Admin: admin / admin123
  • User: usuario / usuario123

Development Setup

# Install dependencies
npm install

# Start development server
npm run dev

The application will be available at http://localhost:5000

Database

The system uses SQLite with automatic initialization. Default data includes:

API Integration

ExaVMS integrates with Frigate servers through their REST API:

Supported Endpoints:

  • GET /api/config - Camera configuration
  • GET /api/events - Detection events with filtering
  • GET /api/recordings - Recorded footage with search
  • GET /api/{camera}/latest.jpg - Live JPEG streams

Features:

  • Multi-server aggregation: Events and recordings from all servers in one view
  • Real-time filtering: By camera, object type, confidence, and time range
  • Unified search: Cross-server recording search capabilities
  • Live streaming: Direct access to Frigate's live camera feeds

Project Structure

├── client/                 # React frontend
│   ├── src/
│   │   ├── components/     # UI components
│   │   ├── contexts/       # React contexts
│   │   ├── hooks/          # Custom hooks
│   │   ├── lib/            # Utilities
│   │   └── pages/          # Page components
├── server/                 # Express backend
│   ├── auth.ts            # Authentication setup
│   ├── db.ts              # Database connection
│   ├── index.ts           # Server entry point
│   ├── init.ts            # Database initialization
│   └── routes.ts          # API routes
├── shared/                 # Shared types/schemas
├── docker-compose.yml     # Docker deployment config
├── Dockerfile             # Client container
├── Dockerfile.server      # Server container
└── deploy.sh              # Deployment script

API Endpoints

Authentication

  • POST /api/auth/login - User login
  • POST /api/auth/logout - User logout
  • GET /api/auth/me - Get current user

Hosts (Frigate Servers)

  • GET /api/hosts - List all hosts
  • POST /api/hosts - Add new host
  • PUT /api/hosts/:id - Update host
  • DELETE /api/hosts/:id - Delete host
  • GET /api/hosts/:id/cameras - Get cameras from host

Views

  • GET /api/views - List all views
  • POST /api/views - Create new view
  • PUT /api/views/:id - Update view
  • DELETE /api/views/:id - Delete view
  • GET /api/views/:id/share - Get share token
  • POST /api/views/:id/share - Create share token

Search

  • GET /api/search/events - Search events across hosts

Docker Services

  • web: Nginx serving the React frontend (port 8080)
  • api: Express.js backend API (port 8081)

Environment Variables

Server

  • NODE_ENV: Environment (development/production)
  • PORT: Server port (default: 8080)
  • SESSION_SECRET: Session secret key
  • DATABASE_URL: SQLite database path

Client

  • VITE_API_BASE: API base URL (default: /api)

Troubleshooting

Services not starting

# Check service status
docker compose ps

# View logs
docker compose logs -f

# Restart services
docker compose restart

Database issues

# Reset database
docker compose down
docker volume rm exavms_db_data
docker compose up -d

Port conflicts

Edit docker-compose.yml to change exposed ports if needed.

Roadmap

Sprint A - Hosts + Health ✅

  • Backend: /api/hosts CRUD with ping validation
  • UI: Hosts management page
  • Authentication system

Sprint B - Views Editor/Viewer ✅

  • Backend: /api/views CRUD
  • UI: Drag-drop grid editor with react-grid-layout
  • Video: HLS player with hls.js

Sprint C - Sharing + Public ✅

  • Backend: /api/views/:id/share
  • UI: Share dialogs and public viewer
  • Security: JWT-based tokens

Sprint D - Multi-Host Search

  • Backend: /api/search/events fan-out
  • UI: Unified event search across hosts

License

MIT

test

29de7b82829a438bec1a22d7eea081145e3b73e1

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors