dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證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 |