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 or local video, registers a camera with Trio Cloud, and pushes HTTP MPEG-TS to the cloud ingest endpoint. All AI processing 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: source capture → ffmpeg MPEG-TS mux → authenticated HTTP upload What Cloud does: session management → ingest → analysis → 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.1.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.1-py3-none-any.whl (194.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for trio_core-1.1.1.tar.gz
Algorithm Hash digest
SHA256 f29369f448bb2f3ddd46c7797c94359d68c2d6e64a8be5f9c36d6eef269a7ee2
MD5 347318c13d421401c86293543403051b
BLAKE2b-256 b896b8d7834b202511a8610d5b887dca6c665e7184dc4dbe1875615db2b26fac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: trio_core-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 194.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trio_core-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 88847f0a74e3782d2b4bb10c34af5bd23c1e4e26414bf4cd52f0deaf37e368b7
MD5 6060fe871a38110a8c347648fe2c2caf
BLAKE2b-256 058c6e988704ae1da8441a08d203e00df2d7837c570d1924d84a1b25fd30e433

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