dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
ArgusAI는 AI 기반 가정 보안 이벤트 탐지 시스템으로, UniFi Protect·RTSP·USB 카메라 영상을 분석합니다
ArgusAI is an AI-powered event detection system for home security. Analyze video feeds from UniFi Protect, RTSP, and USB cameras with multi-provider AI.
보안Python · TypeScriptGitHub @project-argusai온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Smart temporal aware video motion detection
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI-powered event detection and monitoring for home security. Analyzes video feeds from multiple camera sources, detects motion and smart events, and uses AI to generate natural language descriptions of what's happening.README 전문 보기 ↗AI-powered event detection and monitoring for home security. Analyzes video feeds from multiple camera sources, detects motion and smart events, and uses AI to generate natural language descriptions of what's happening.
/api/v1/ai/context-metrics endpoint for monitoring context system performanceread:events, read:cameras, write:cameras, admin scopes--profile postgres--profile ssl/api/v1/mcp so an assistant bot can answer "what happened at home?" with a dedicated read:mcp API key (docs)┌─────────────────────────────────────────────────────────────────────────┐
│ Camera Sources │
├─────────────────┬─────────────────┬─────────────────────────────────────┤
│ UniFi Protect │ RTSP Cameras │ USB/Webcam │
│ (WebSocket) │ (Polling) │ (Capture) │
└────────┬────────┴────────┬────────┴──────────────┬──────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Event Processing Pipeline │
│ ┌───────────┐ ┌───────────────┐ ┌────────────┐ ┌──────────────┐ │
│ │ Motion │──▶│ AI Provider │──▶│ Event │──▶│ Alert │ │
│ │ Detection │ │ (Multi-API) │ │ Storage │ │ Engine │ │
│ └───────────┘ └───────────────┘ └────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Next.js Dashboard │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────────────┐│
│ │ Live │ │ Event │ │ Alert │ │ Settings ││
│ │ Cameras │ │ Timeline │ │ Rules │ │ (Cameras, AI) ││
│ └────────────┘ └────────────┘ └────────────┘ └────────────────────┘│
└─────────────────────────────────────────────────────────────────────────┘
| Layer | Technology | Version |
|---|---|---|
| Frontend | Next.js (App Router) | 15.x |
| UI Components | shadcn/ui + Tailwind CSS | Latest |
| State Management | TanStack Query + React Context | v5 |
| Backend | FastAPI | 0.115+ |
| Database | SQLite (default) / PostgreSQL | 3.x |
| ORM | SQLAlchemy + Alembic | 2.0+ |
| Camera Processing | OpenCV + PyAV | 4.12+ |
| AI Providers | OpenAI, xAI, Anthropic, Google | Latest APIs |
| UniFi Integration | uiprotect | Latest |
| HomeKit | HAP-Python | Latest |
| MQTT | aiomqtt | 2.x |
The easiest way to set up the application is using the installation script:
# Make the script executable
chmod +x install.sh
# Run full installation
./install.sh
# Or check dependencies only
./install.sh --check
# Or install specific components
./install.sh --backend # Backend only
./install.sh --frontend # Frontend only
./install.sh --services # Generate service files only
The installation script will:
After installation, visit http://localhost:3000/setup for the first-run setup wizard.
If you prefer manual installation:
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your settings (ENCRYPTION_KEY, AI API keys)
# Run migrations
alembic upgrade head
# Start server
uvicorn main:app --reload
Backend runs at: http://localhost:8000
API docs at: http://localhost:8000/docs
node --versionnpm --versionOptional but recommended:
cd frontend
# Install dependencies
npm install
Create a .env.local file in the frontend directory:
# Required: Backend API URL
NEXT_PUBLIC_API_URL=http://localhost:8000
Or create it with a single command:
echo "NEXT_PUBLIC_API_URL=http://localhost:8000" > .env.local
# Start development server with hot reload
npm run dev
Frontend runs at: http://localhost:3000
The easiest way to deploy ArgusAI is using Docker Compose:
# Clone the repository
git clone https://github.com/project-argusai/ArgusAI.git
cd ArgusAI
# Copy environment template
cp .env.example .env
# Generate required secrets
python -c "from cryptography.fernet import Fernet; print(f'ENCRYPTION_KEY={Fernet.generate_key().decode()}')" >> .env
openssl rand -hex 32 | xargs -I {} echo "JWT_SECRET_KEY={}" >> .env
# Start the application
docker-compose up -d
Access the application at http://localhost:3000
| Command | Description |
|---|---|
docker-compose up -d | Start with SQLite (default) |
docker-compose --profile postgres up -d | Start with PostgreSQL |
docker-compose --profile ssl up -d | Start with nginx SSL reverse proxy |
docker-compose --profile postgres --profile ssl up -d | PostgreSQL + SSL |
For production deployments, PostgreSQL is recommended:
# Set PostgreSQL password
echo "POSTGRES_PASSWORD=your-secure-password" >> .env
echo "DATABASE_URL=postgresql://argusai:your-secure-password@postgres:5432/argusai" >> .env
# Start with PostgreSQL
docker-compose --profile postgres up -d
For secure deployments with HTTPS:
# Create certificates directory
mkdir -p data/certs
# Generate self-signed certificate (for testing)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout data/certs/key.pem \
-out data/certs/cert.pem \
-subj "/CN=localhost"
# Or use your own certificates:
# cp /path/to/your/cert.pem data/certs/cert.pem
# cp /path/to/your/key.pem data/certs/key.pem
# Start with SSL
docker-compose --profile ssl up -d
Access the application at https://localhost
The nginx reverse proxy provides:
# View logs
docker-compose logs -f
# View specific service logs
docker-compose logs -f backend
# Stop containers (preserves data)
docker-compose down
# Stop and remove volumes (WARNING: deletes all data)
docker-compose down -v
# Rebuild images
docker-compose build --no-cache
# Update to latest images
docker-compose pull
docker-compose up -d
All persistent data is stored in Docker volumes:
| Volume | Contents |
|---|---|
argusai-data | SQLite database, thumbnails, frames, certificates |
pgdata | PostgreSQL data (when using --profile postgres) |
| Command | Description |
|---|---|
npm run dev | Start development server with hot reload |
npm run build | Create optimized production build |
npm run start | Start production server (requires build first) |
npm run lint | Run ESLint code quality checks |
npm run test | Run Vitest in watch mode |
npm run test:run | Run all tests once |
npm run test:coverage | Run tests with coverage report |
Port 3000 already in use:
# Find process using port 3000
lsof -i :3000
# Kill the process or use a different port
npm run dev -- -p 3001
npm install fails with permission errors:
# Clear npm cache and retry
npm cache clean --force
rm -rf node_modules package-lock.json
npm install
API connection errors (CORS or 404):
.env.local.env includes http://localhost:3000.env.localNode.js version mismatch errors:
# Check your Node.js version
node --version
# If below 18, update Node.js:
# macOS: brew upgrade node
# Linux: nvm install 18 && nvm use 18
# Windows: Download from nodejs.org
TypeScript/Build errors after pulling new code:
# Clean and reinstall dependencies
rm -rf node_modules .next
npm install
npm run build
rtsp://192.168.1.50:554/stream1Configure AI providers in Settings → AI Providers:
| Provider | Model | Use Case |
|---|---|---|
| OpenAI | GPT-4o-mini | Primary (best cost/quality) |
| xAI | Grok 2 Vision | Fast vision analysis |
| Anthropic | Claude 3 Haiku | Reliable fallback |
| Gemini Flash | Free tier fallback |
The system automatically falls back to the next provider if one fails.
To enable xAI Grok:
grok-2-vision-1212 model for image analysisArgusAI supports secure remote access via Cloudflare Tunnel, allowing you to access your dashboard from anywhere without port forwarding or VPN.
Install cloudflared on your ArgusAI server:
# Debian/Ubuntu
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install cloudflared
# macOS
brew install cloudflared
Create a tunnel in Cloudflare Zero Trust dashboard
Copy the tunnel token
In ArgusAI, go to Settings → Integrations → Cloudflare Tunnel
Enable tunnel and paste the token
Click Test Connection
For detailed setup instructions, see the Tunnel Setup Guide.
ArgusAI includes native HomeKit integration via HAP-Python:
See Troubleshooting Guide for common issues.
ArgusAI publishes events to MQTT which Home Assistant can use to trigger automations and notifications.
| Entity | Type | Purpose |
|---|---|---|
sensor.liveobject_{camera}_event | Sensor | AI description of latest event |
sensor.liveobject_{camera}_status | Sensor | online/offline/unavailable |
sensor.liveobject_{camera}_last_event | Sensor | Timestamp of last event |
sensor.liveobject_{camera}_events_today | Sensor | Daily event count |
binary_sensor.liveobject_{camera}_activity | Binary | ON when motion detected |
automation:
- alias: "ArgusAI - Motion Alert"
trigger:
- platform: state
entity_id: sensor.liveobject_front_door_event
condition:
- condition: template
value_template: "{{ trigger.to_state.state not in ['unknown', 'unavailable', ''] }}"
action:
- service: notify.mobile_app_your_phone
data:
title: "{{ trigger.to_state.attributes.camera_name }}"
message: "{{ trigger.to_state.state }}"
data:
image: "{{ trigger.to_state.attributes.thumbnail_url }}"
automation:
- alias: "ArgusAI - Person Detected"
trigger:
- platform: state
entity_id: sensor.liveobject_front_door_event
condition:
- condition: template
value_template: "{{ trigger.to_state.attributes.smart_detection_type == 'person' }}"
action:
- service: notify.mobile_app_your_phone
data:
title: "Person at Front Door"
message: "{{ trigger.to_state.state }}"
data:
image: "{{ trigger.to_state.attributes.thumbnail_url }}"
automation:
- alias: "ArgusAI - Package Delivered"
trigger:
- platform: state
entity_id: sensor.liveobject_front_porch_event
condition:
- condition: template
value_template: "{{ trigger.to_state.attributes.smart_detection_type == 'package' }}"
action:
- service: notify.mobile_app_your_phone
data:
title: "Package Detected"
message: "{{ trigger.to_state.state }}"
Use these in your automation templates:
trigger.to_state.state - AI descriptiontrigger.to_state.attributes.camera_name - Camera nametrigger.to_state.attributes.smart_detection_type - person, vehicle, package, animal, ringtrigger.to_state.attributes.is_doorbell_ring - true/falsetrigger.to_state.attributes.thumbnail_url - URL to event imagetrigger.to_state.attributes.confidence - 0-100For comprehensive automation examples, see the Home Assistant Integration Guide.
argusai/
├── backend/ # FastAPI backend
│ ├── app/
│ │ ├── api/v1/ # REST API endpoints
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ └── services/ # Business logic
│ │ ├── camera_service.py # RTSP/USB capture
│ │ ├── protect_service.py # UniFi Protect integration
│ │ ├── ai_service.py # Multi-provider AI
│ │ ├── event_processor.py # Event pipeline
│ │ ├── correlation_service.py # Multi-camera correlation
│ │ ├── homekit_service.py # HomeKit bridge
│ │ └── alert_engine.py # Rule evaluation
│ ├── alembic/ # Database migrations
│ └── tests/ # 3,100+ tests
├── frontend/ # Next.js frontend
│ ├── app/ # App Router pages
│ ├── components/ # React components
│ │ ├── cameras/ # Camera management UI
│ │ ├── entities/ # Entity management
│ │ ├── events/ # Event timeline
│ │ ├── protect/ # UniFi Protect components
│ │ ├── settings/ # Settings pages
│ │ └── ui/ # shadcn/ui components
│ └── lib/ # API client, utilities
└── docs/ # Project documentation
├── architecture.md # System architecture
├── PRD-phase*.md # Phase requirements
├── epics-phase*.md # Story breakdowns
└── sprint-artifacts/ # Completed stories
cd backend
source venv/bin/activate
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=app --cov-report=html
# Run specific test file
pytest tests/test_api/test_protect.py -v
Current Coverage: 3,100+ tests including integration and performance tests
cd frontend
# Run tests
npm run test:run
# Run with coverage
npm run test:coverage
# Lint check
npm run lint
# Type check
npm run build
# Required
DATABASE_URL=sqlite:///./data/app.db
ENCRYPTION_KEY=<generate-with-fernet>
# AI Providers (at least one required)
OPENAI_API_KEY=sk-...
XAI_API_KEY=xai-... # xAI Grok
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=AIza...
# Optional
DEBUG=True
LOG_LEVEL=INFO
CORS_ORIGINS=http://localhost:3000
# SSL/HTTPS (Phase 9)
SSL_ENABLED=false # Enable HTTPS
SSL_CERT_FILE=data/certs/cert.pem
SSL_KEY_FILE=data/certs/key.pem
SSL_REDIRECT_HTTP=true # Redirect HTTP to HTTPS
SSL_MIN_VERSION=TLSv1_2 # TLSv1_2 or TLSv1_3
# HomeKit (auto-generated if not set)
HOMEKIT_PIN=123-45-678
Generate encryption key:
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
NEXT_PUBLIC_API_URL=http://localhost:8000
| Document | Description |
|---|---|
| User Guide | Complete guide for setup and usage |
| Tunnel Setup Guide | Remote access via Cloudflare Tunnel |
| API Reference | Full REST API documentation |
| API Quick Reference | One-page endpoint summary with curl examples |
| OpenAPI Guide | Export and use OpenAPI specs |
| Webhook Integration | Connect to Slack, Discord, Home Assistant, etc. |
| Troubleshooting UniFi Protect | Common issues and solutions |
| Document | Description |
|---|---|
| Product Brief | Project vision and goals |
| Architecture | System design and decisions |
| UX Design | UI/UX specifications |
| PRD Phase 2 | UniFi Protect integration requirements |
| PRD Phase 3 | Video analysis requirements |
| PRD Phase 4 | Context & smart home requirements |
| PRD Phase 5 | HomeKit & quality requirements |
| PRD Phase 9 | AI accuracy & entity management |
| Apple Apps Research | SwiftUI vs React Native vs Flutter analysis |
| Cloud Relay Design | Remote access architecture (Cloudflare Tunnel) |
| Epics Phase 5 |
MVP (Phase 1)
Phase 2: UniFi Protect Integration
Phase 3: Video Analysis
Phase 4: Intelligent Context & Smart Home
Phase 5: HomeKit & Quality
Phase 6: Polish & Performance
Phase 7: HomeKit & Entities
Phase 8: Video Analysis & AI Enhancements
Phase 9: AI Accuracy & Entity Management (Complete)
Phase 10: Docker & Kubernetes (In Progress)
--profile postgres--profile sslPhase 11: Remote Access (Complete)
Phase 13: API Key Management (Complete)
Phase 14: Technical Excellence & Quality Foundation (Complete)
SSL/HTTPS Not Working:
SSL_CERT_FILE, SSL_KEY_FILE)GET /api/v1/system/ssl-statusPush Notifications Not Working:
Camera Connection Issues:
rtsp://user:pass@ip:port/streamAI Provider Errors:
Events Not Appearing:
Settings > LogsFor detailed troubleshooting, see:
MIT
We welcome contributions! Here's how to get started:
./install.sh to set up the development environmentCLAUDE.md for codebase conventions and architecture detailsThis project uses the BMAD Method for structured development:
docs/sprint-artifacts/docs/architecture.md/bmad:bmm:workflows:dev-story to execute story implementationmainpytest tests/ -v and npm run test:runFor questions or issues, please open a GitHub issue.
| Phase 5 story breakdown |
| Epics Phase 6 | Phase 6 story breakdown |
| Epics Phase 7 | Phase 7 story breakdown |
| Epics Phase 8 | Phase 8 story breakdown |
| Epics Phase 9 | Phase 9 story breakdown |