Install
openclaw skills install trio-stream-visionAnalyze any YouTube livestream or RTSP camera feed using natural language — ask what's happening, detect specific events, or get periodic summaries. Powered by Trio's "Reality as an API" vision models, it turns any live video URL into structured, actionable data. Just paste a stream URL and describe what you're looking for.
openclaw skills install trio-stream-visionPaste a YouTube Live URL, RTSP camera feed, or HLS stream — ask questions about what's happening in plain English. Detect events, monitor conditions, and get periodic summaries, all without writing ML pipelines. Powered by Trio's Reality-as-an-API.
export TRIO_API_KEY=your_key_herehttps://trio.machinefi.com/apiAsk a yes/no question about what's currently visible on a stream. Costs 1 credit ($0.01).
curl -s -X POST "https://trio.machinefi.com/api/check-once" \
-H "Authorization: Bearer $TRIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stream_url": "STREAM_URL_HERE",
"condition": "NATURAL_LANGUAGE_CONDITION_HERE"
}' | python3 -m json.tool
Optional parameters:
"include_frame": true — returns the analyzed frame as base64 image"input_mode": "clip" — analyze a short video clip instead of a single frame (better for motion detection)"clip_duration_seconds": 5 — clip length (1-10 seconds, only with clip/hybrid mode)Response fields:
triggered (boolean) — whether the condition matchedexplanation (string) — VLM's reasoning about what it seeslatency_ms — processing time in millisecondsInput mode guidance:
"frames" (default) for static objects: "Is there a car in the driveway?", "Is the door open?""clip" for motion/actions: "Is someone walking?", "Did a package get delivered?""hybrid" for maximum accuracy (costs more)Monitor a stream continuously and get alerted when a condition becomes true. Costs 2 credits/min ($0.02/min).
curl -s -X POST "https://trio.machinefi.com/api/live-monitor" \
-H "Authorization: Bearer $TRIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stream_url": "STREAM_URL_HERE",
"condition": "NATURAL_LANGUAGE_CONDITION_HERE",
"interval_seconds": 10,
"monitor_duration_seconds": 600,
"max_triggers": 1
}' | python3 -m json.tool
Optional parameters:
"webhook_url": "https://your-server.com/webhook" — receive HTTP POST notifications on trigger"interval_seconds": 10 — check frequency (5-300 seconds)"monitor_duration_seconds": 600 — how long to monitor (min 5 seconds)"trigger_cooldown_seconds": 60 — minimum seconds between triggers"max_triggers": null — set to null for unlimited triggers"input_mode": "clip" — default for live-monitor, good for motionResponse: Returns a job_id. Use it to check status or cancel.
Delivery modes (automatic based on request):
webhook_url is set → events POST to your webhookAccept: text/event-stream header is set (no webhook) → SSE streamGET /jobs/{job_id}Get narrative summaries of what's happening on a stream at regular intervals. Costs 2 credits/min ($0.02/min).
curl -s -X POST "https://trio.machinefi.com/api/live-digest" \
-H "Authorization: Bearer $TRIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"stream_url": "STREAM_URL_HERE",
"window_minutes": 10,
"capture_interval_seconds": 60
}' | python3 -m json.tool
Optional parameters:
"window_minutes": 10 — summary window length (1-60 minutes)"capture_interval_seconds": 60 — frame capture frequency (10-300 seconds)"webhook_url": "https://..." — receive summaries via webhook"max_windows": 3 — number of summary windows before stopping"include_frames": true — embed frames in summariesResponse: Returns a job_id.
curl -s "https://trio.machinefi.com/api/jobs/JOB_ID_HERE" \
-H "Authorization: Bearer $TRIO_API_KEY" | python3 -m json.tool
Job statuses: pending, running, stopped, completed, failed
curl -s "https://trio.machinefi.com/api/jobs?limit=20&offset=0" \
-H "Authorization: Bearer $TRIO_API_KEY" | python3 -m json.tool
Optional query params: status=running, type=live-monitor, limit=20, offset=0
curl -s -X DELETE "https://trio.machinefi.com/api/jobs/JOB_ID_HERE" \
-H "Authorization: Bearer $TRIO_API_KEY" | python3 -m json.tool
triggered result and explanation to the userAll errors return this structure:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"remediation": "Actionable fix suggestion"
}
}
Common error codes:
NOT_LIVESTREAM — URL is not a live stream. Confirm it's actively broadcasting.STREAM_FETCH_FAILED — Cannot reach the stream. Check URL and network.STREAM_OFFLINE — Stream exists but is offline. Wait for it to go live.MAX_JOBS_REACHED — Too many concurrent jobs. Cancel old ones with DELETE /jobs/{id}.If you get an error, always show the remediation field to the user — it contains actionable guidance.
| Action | Cost |
|---|---|
| Check once | $0.01 / request |
| Live monitor | $0.02 / minute |
| Live digest | $0.02 / minute |
Free tier: 100 credits ($1.00) on signup at https://console.machinefi.com
explanation field from check-once responses — it provides the VLM's reasoning.