Skip to main content

Open-source camera intelligence — ONVIF discovery, RTSP relay, YOLO detection, VLM scene understanding

Project description

Trio Edge

Open-source camera intelligence for your network

ONVIF discovery + RTSP streaming + YOLO detection + VLM scene understanding.
One pip install. Runs on any Mac, Linux, or Windows machine.

PyPI Python License Stars

Quick Start | Two Modes | Cloud Relay | Local AI | CLI | API | SDK | Architecture


What is Trio Edge?

Trio Edge is the open-source camera agent for Trio AI. It runs on your local network, discovers cameras via ONVIF, and either:

  1. Relays frames to Trio Cloud for full AI analysis (memory, entity tracking, dashboards)
  2. Runs AI locally with your own LLM (Claude, GPT, local Qwen) for standalone use
┌──────────────────────────────────────────────────────────┐
│  Your Network                                            │
│                                                          │
│  IP Camera ──RTSP──► Trio Edge ──HTTPS──► Trio Cloud     │
│                      (this repo)         (paid, $99/cam) │
│                          │                               │
│                          └── or use your own LLM         │
│                             (free, open source)          │
└──────────────────────────────────────────────────────────┘

Core capabilities:

  • Discover — Auto-find cameras on your network via ONVIF
  • Relay — Push RTSP frames to Trio Cloud over HTTPS (NAT-friendly)
  • Detect — YOLO v10n object detection (people, vehicles, 80 classes)
  • Describe — VLM scene descriptions with any LLM (local or cloud)
  • Tailscale auto-proxy — Works through Tailscale networks automatically

Quick Start

# Install
pip install 'trio-edge[mlx]'      # Apple Silicon
pip install 'trio-edge[cuda]'     # NVIDIA GPU
pip install trio-edge              # CPU-only

# Discover cameras on your network
trio discover

# Start watching a camera
trio cam --rtsp rtsp://admin:pass@192.168.1.100/stream

# Or relay to Trio Cloud
trio relay --camera rtsp://admin:pass@192.168.1.100/stream \
           --cloud https://api.trio.ai --token YOUR_TOKEN

Two Modes

Mode 1: Cloud Relay (Trio Cloud customers)

Trio Edge pulls RTSP from your camera and pushes JPEG frames to Trio Cloud. All AI processing (V-JEPA, VLM, entity tracking, insights) happens in the cloud.

trio relay --camera rtsp://admin:pass@192.168.1.100/stream \
           --cloud https://api.trio.ai \
           --token YOUR_TOKEN

What Edge does: RTSP pull → motion filter → JPEG compress → HTTPS push What Cloud does: YOLO → V-JEPA → VLM → Memory → Entity Tracking → Dashboard

Mode 2: Local AI (open-source users)

Run everything locally with your own LLM. No cloud needed, no subscription.

# With local Qwen model (Apple Silicon)
trio cam --rtsp rtsp://admin:pass@192.168.1.100/stream

# With Claude API
ANTHROPIC_API_KEY=sk-xxx trio cam --rtsp rtsp://... --llm claude

# With OpenAI
OPENAI_API_KEY=sk-xxx trio cam --rtsp rtsp://... --llm gpt-4o

Note: Local mode gives you real-time detection and descriptions, but no persistent memory, entity tracking, historical analytics, or dashboard. For those features, use Trio Cloud.


Features

ONVIF Camera Discovery

trio discover
# Found 2 camera(s):
#   [1] Reolink RLC-810A (192.168.1.100)
#       RTSP: rtsp://192.168.1.100:554/h264Preview_01_main
#   [2] Hikvision DS-2CD2143 (192.168.1.101)
#       RTSP: rtsp://192.168.1.101:554/Streaming/Channels/101

Tailscale Auto-Proxy

If you use Tailscale, Trio Edge automatically detects when the macOS network extension blocks camera access and creates a transparent TCP proxy:

trio cam --rtsp rtsp://admin:pass@192.168.1.100/stream
# Tailscale detected — starting TCP proxy via system Python...
# Proxy: 127.0.0.1:15554 → 192.168.1.100:554
# (continues normally, user sees no difference)

YOLO Object Detection

Built-in YOLOv10n (ONNX, 9MB) with tiled detection for accuracy:

trio cam --rtsp rtsp://... --count
# [14:23:46] People: 3, Vehicles: 2
# [14:24:12] People: 5, Vehicles: 2 (+2 people)

VLM Scene Description

Supports multiple VLM backends:

Backend Command Requirements
Local Qwen (MLX) trio cam --rtsp ... Apple Silicon, 4GB+ RAM
Claude trio cam --llm claude ANTHROPIC_API_KEY
GPT-4o trio cam --llm gpt-4o OPENAI_API_KEY
Any OpenAI-compatible trio cam --llm-url http://... API endpoint

CLI

trio discover                          # Find cameras via ONVIF
trio cam --rtsp rtsp://... --count     # Watch + count objects
trio cam --host 192.168.1.100 -p pass  # Auto-discover + connect
trio relay --camera rtsp://... --cloud https://api.trio.ai  # Cloud relay
trio serve                             # Start inference API server
trio analyze photo.jpg -q "What's here?"  # Analyze single image
trio webcam -w "person at the door"    # Webcam with alerts
trio doctor                            # Diagnose setup issues
trio device                            # Show hardware info

API Reference

Start the local inference server:

trio serve                          # default: 0.0.0.0:8100
trio serve --port 9000              # custom port
TRIO_API_KEY=secret trio serve      # enable auth

POST /api/inference/detect

YOLO object detection.

curl -X POST http://localhost:8100/api/inference/detect \
  -H "Content-Type: application/json" \
  -d '{"image_b64": "'$(base64 -i photo.jpg)'"}'
{
  "people_count": 3, "vehicle_count": 1,
  "by_class": {"person": 3, "car": 1},
  "crops_b64": [{"class": "person", "bbox": [100, 50, 200, 300], "confidence": 0.92}],
  "elapsed_ms": 45
}

POST /api/inference/describe

VLM scene description.

curl -X POST http://localhost:8100/api/inference/describe \
  -H "Content-Type: application/json" \
  -d '{"image_b64": "'$(base64 -i photo.jpg)'", "prompt": "Describe what you see."}'

POST /api/inference/crop-describe

Combined: YOLO detects → crop → VLM describes each entity → full scene description.


Python SDK

from trio_edge import TrioCore, EngineConfig

engine = TrioCore()
engine.load()

result = engine.analyze_video("photo.jpg", "What do you see?")
print(result.text)

Supported Models

Tier 1 — Full optimization (native loading + visual token compression + KV reuse)

Model Params 4-bit VRAM Best for
Qwen3-VL-8B 8B ~5GB Recommended — best accuracy
Qwen2.5-VL-3B 3B ~2GB Fast, lightweight
Qwen3.5 0.8-9B 0.5-5G Flexible range
InternVL3 1-2B 1-1.6G Tiny devices

Tier 2 — Inference only (via mlx-vlm)

Gemma 3n, SmolVLM2, Phi-4, FastVLM, and any model supported by mlx-vlm.


Architecture

                          Trio Edge
                              |
              +---------------+---------------+
              |                               |
         YOLO Pipeline                   VLM Pipeline
              |                               |
    YOLOv10n ONNX (9MB)            Qwen/Claude/GPT/any LLM
    tiled 2x2 detection              native MLX loading
    ByteTrack tracking               ToMe token compression
              |                       KV cache reuse
              |                               |
              +---------------+---------------+
                              |
              +-------+-------+-------+
              |       |       |       |
          /detect  /describe  /crop   Relay
                              -describe  to Cloud

Trio Cloud integration

When connected to Trio Cloud, Edge is just a lightweight relay:

Camera → Edge (RTSP pull + compress) → Trio Cloud (all AI in cloud)

Edge sends ~50-100 KB/s per camera. No GPU needed on the edge device.


Configuration

Variable Default Description
TRIO_MODEL Qwen3-VL-8B-4bit HuggingFace model ID
TRIO_YOLO_MODEL (auto-downloaded) Path to YOLO ONNX model
TRIO_API_KEY (none) Bearer token for API auth
TRIO_CLOUD_URL (none) Trio Cloud API URL for relay mode
TRIO_CLOUD_TOKEN (none) Trio Cloud auth token

See src/trio_edge/config.py for all options.


Troubleshooting

Problem Solution
trio discover finds no cameras Make sure cameras are on the same subnet. Some routers block multicast.
Camera found but can't connect Check username/password. Try trio cam --rtsp rtsp://admin:pass@IP/stream directly.
Tailscale blocking camera access Trio Edge auto-detects this and creates a proxy. If it doesn't work, try trio doctor.
First run slow Model download (~2-5 GB). Subsequent runs start instantly.
Out of memory Use a smaller model: TRIO_MODEL=mlx-community/Qwen2.5-VL-3B-Instruct-4bit

Run trio doctor to diagnose most issues.


License

Apache 2.0 — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trio_core-1.1.0.tar.gz (18.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trio_core-1.1.0-py3-none-any.whl (194.3 kB view details)

Uploaded Python 3

File details

Details for the file trio_core-1.1.0.tar.gz.

File metadata

  • Download URL: trio_core-1.1.0.tar.gz
  • Upload date:
  • Size: 18.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for trio_core-1.1.0.tar.gz
Algorithm Hash digest
SHA256 1f3c8b34bdaaadaff2e80e97fd11a27a182544af2a02bb55bdc3db2eb87a5140
MD5 1bd8cf1bb96e85742c2a7f9a7299814f
BLAKE2b-256 111986f11c5b803857b60c5f94413035d502d6a0bb10bdf6b86c05e6c99222cb

See more details on using hashes here.

File details

Details for the file trio_core-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: trio_core-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 194.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for trio_core-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 442b323efd3c9d717c68a32ada11d942ef89cd6f359683b90638eb09d82ce9e6
MD5 74b8fdd945080b7cc72d8301b65d633c
BLAKE2b-256 90c0a2e14482e5d2b6eb526bbf43506c4e3bd43c898ff24657377368ee5cf74a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page