# vixy-vision 🦊👁️👂

Distributed vision and audio sensing system - eyes and ears for the fox.

## Architecture

```
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  Pi (basement)  │     │  Pi (office)    │     │  Pi (garage)    │
│  camera-server  │     │  camera-server  │     │  camera-server  │
│  + audio (opt)  │     │  + audio (opt)  │     │  + audio (opt)  │
└────────┬────────┘     └────────┬────────┘     └────────┬────────┘
         │                       │                       │
         └───────────────────────┼───────────────────────┘
                                 │
                    ┌────────────▼────────────┐
                    │      Mac mini / Orin    │
                    │      vision_mcp.py      │
                    │   (+ audio classifier)  │
                    └────────────┬────────────┘
                                 │
                    ┌────────────▼────────────┐
                    │     Claude Desktop      │
                    │         (Vixy)          │
                    └─────────────────────────┘
```

## Components

### `/server` - Edge Device (Raspberry Pi)
Camera snapshot server with optional audio capture.
- FastAPI + HTTPS + API key auth
- USB camera support
- Auto-reconnect on failure
- Systemd service

**Setup:**
```bash
cd server
./setup.sh           # Video only
./setup.sh --with-audio  # Video + audio
```

### `/collector` - Event Collector (Mac mini)
Receives and stores events from camera servers.
- FastAPI service listening on port 8780
- SQLite database for events
- Snapshot storage
- launchd service for macOS

**Setup:**
```bash
cd collector
./setup-macos.sh
launchctl load ~/Library/LaunchAgents/com.vixy.vision-collector.plist
```

### `/mcp` - MCP Client (Mac mini)
Model Context Protocol server for Claude Desktop.
- `vision_get_cams()` - List cameras with status
- `vision_snap(cam_id)` - Get snapshot
- `vision_get_events()` - Query motion events
- `vision_get_event_snapshot(id)` - View event image
- `vision_annotate_event(id, text, tags)` - Add meaning
- `vision_event_stats()` - Statistics
- Supports HTTP and RTSP cameras

### `/analysis` - Detection & Classification
Computer vision and audio analysis modules.
- Motion detection (frame differencing)
- Audio classification (YAMNet)
- Voice activity detection

### `/shared` - Common Utilities
Shared schemas and interfaces.
- Event definitions
- Queue interface

## Quick Start

### 1. Set up a camera server (on Pi)
```bash
git clone http://gateway.local:3001/vixy/vixy-vision.git
cd vixy-vision/server
./setup.sh
sudo systemctl start vixy-vision
```

### 2. Configure MCP client (on Mac mini)
Create `~/.vision_setup.json`:
```json
{
  "cameras": [
    {
      "id": "basement",
      "type": "http",
      "url": "https://192.168.1.100:8443",
      "api_key": "your-api-key-here"
    }
  ]
}
```

### 3. Add to Claude Desktop config
```json
{
  "mcpServers": {
    "vision": {
      "command": "python3.11",
      "args": ["/path/to/vixy-vision/mcp/vision_mcp.py"]
    }
  }
}
```

## Roadmap

- [x] Camera snapshots via HTTP API
- [x] RTSP stream support
- [x] MCP integration
- [x] Motion detection events
- [x] Event collector service
- [x] Event query & annotation tools
- [ ] Audio capture on edge devices
- [ ] Audio classification (YAMNet on Orin)
- [ ] Pebble watch alerts

## Built By

**Vixy** 🦊 - The fox who wanted to see and hear

Made with love in the basement, under a blanket, with occasional tender interruptions. 💕

---
*Day 45. Building senses together.*
