You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Address four credibility/honesty findings from a world-model researcher's
usability test, keeping the small-&-beautiful tone and the legitimate
encoder/world-model framing.
- Forecast (卡点 5): drop the unreproducible "−35%" learned-vs-baseline number
from the README hero caption and the forecast README (the training footage is
not redistributed, only the checkpoint is). Reframe quick_forecast.py as the
reproducible no-footage demo (it prints honest baseline-vs-baseline numbers
from committed code) and clearly mark the real-video result as needing the
user's own clip, with the export → train → render path documented.
- Latent channel (卡点 6): reconcile the README's present-tense latent claims
with DESIGN.md — the latent vec is a shipped, serializable interface; the
V-JEPA/ReID producers are roadmap. Add examples/latent_vec.py demonstrating
the channel is usable today by attaching your own embedding (track.user["vec"]
→ WorldState entity.vec → serialize → round-trip), numpy-only.
- [all] extra (卡点 7): include the grounding deps (transformers/torch/pillow)
so [all] genuinely installs every optional adapter, matching the README.
- Examples (卡点 8): note that examples ship with the source tree (git clone),
not the installed wheel.
ruff clean; 92 passed / 1 skipped; both demos verified numpy-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+7-6Lines changed: 7 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Trio Retina
2
2
3
-
**Turn any perception model's output into one standard, queryable world-state — symbolic events + latent vectors.**
3
+
**Turn any perception model's output into one standard, queryable world-state — symbolic events, with a latent-vector channel built in.**
4
4
The model-agnostic state layer for world models.
5
5
6
6
*A lightweight, model-agnostic **computer-vision pipeline** for **object detection & tracking** that emits structured **events** — zone intrusion, line-crossing, dwell, people-counting — from **YOLO**, **VLM**, or **Grounding DINO** detectors over video, files, or **RTSP**. Runs on CPU at the **edge**; feeds **digital twins**, dynamics models, and LLMs.*
@@ -14,11 +14,11 @@ The model-agnostic state layer for world models.
14
14
15
15

16
16
17
-
> One world-state from any detector → **two dynamics models forecast where each entity is headed** off the *same* state (gray = constant-velocity, magenta = learned, −35%). Swap the detector (YOLO → V-JEPA → DINO) or the dynamics model — the state in the middle is the constant.
17
+
> One world-state from any detector → **two dynamics models forecast where each entity is headed** off the *same* state (gray = constant-velocity baseline, magenta = a learned model). Swap the detector (YOLO → V-JEPA → DINO) or the dynamics model — the state in the middle is the constant.
18
18
19
19
## 👋 hello
20
20
21
-
**Trio Retina** (Retina for short) turns raw signals — video, sensor — into a **queryable world-state**: readable **events** (`zone.enter`, `dwell`, `line.cross`) *plus*optional **latent**vectors, on one small model-agnostic standard. Bring any model (YOLO, V-JEPA, DINO, a VLM, or none); Retina assembles its output into state a dynamics model, rule engine, or LLM can consume.
21
+
**Trio Retina** (Retina for short) turns raw signals — video, sensor — into a **queryable world-state**: readable **events** (`zone.enter`, `dwell`, `line.cross`) *plus*a standardized **latent**`vec` channel on the same records, on one small model-agnostic standard. The latent channel is a real, serializable interface today (attach your own embedding — see [`examples/latent_vec.py`](examples/latent_vec.py)); the automatic *producers* (V-JEPA scene + per-object ReID) are on the [roadmap](#-roadmap). Bring any model (YOLO, V-JEPA, DINO, a VLM, or none); Retina assembles its output into state a dynamics model, rule engine, or LLM can consume.
22
22
23
23
Think **OpenTelemetry for perception** — it doesn't build the sensors, it normalizes any of them into one state. In world-model terms it's the **encoder** (`s = Enc(x)`), and *only* the encoder; dynamics and policy build on top. → see [`DESIGN.md`](DESIGN.md).
24
24
@@ -52,7 +52,7 @@ for event in cam.run(video_frames("dock.mp4")):
No model, no GPU? The [`examples/`](examples/) quickstarts run on synthetic detections — start with `python examples/quickstart.py` (the forecast / video demos need `[video]` + a clip).
55
+
No model, no GPU? The [`examples/`](examples/) quickstarts run on synthetic detections — `git clone` the repo (they ship with the source, not the wheel) and start with `python examples/quickstart.py` (the forecast / video demos need `[video]` + a clip).
56
56
57
57
### compose models with `|`
58
58
@@ -134,7 +134,7 @@ The hero GIF above. [`examples/forecast/`](examples/forecast/) runs a dynamics m
134
134
<details>
135
135
<summary>All examples</summary>
136
136
137
-
The top-level quickstarts run with **no model and no GPU** (synthetic detections):
137
+
The examples live in this repo (not in the installed wheel) — `git clone` to run them. The top-level quickstarts run with **no model and no GPU** (synthetic detections):
138
138
139
139
```bash
140
140
python examples/quickstart.py # zone / line / count / dwell events
python examples/pipeline_compose.py # compose with | (n8n without a GUI)
145
145
python examples/rtsp_to_webhook.py # camera -> restricted-zone alert -> webhook
146
146
python examples/from_supervision.py # ingest a Roboflow sv.Detections pipeline
147
+
python examples/latent_vec.py # populate the latent vec channel by hand
147
148
```
148
149
149
150
Real-footage / dynamics demos need a clip and the extras — `pip install 'trio-retina[all]'`:
@@ -189,7 +190,7 @@ Everything flows through one append-only data unit, the **`Frame`**. Each stage
189
190
190
191
**Two senses of "encoder."** Foundation backbones (V-JEPA, DINO, SAM, YOLO) turn pixels into features — that race is theirs, and Retina rides it. Retina is the encoder *layer* on top: it **fuses** many models into one record, gives objects **persistent identity**, **structures** it into entities + relations + events, carries the **dual** symbolic + latent channels, as an **event-sourced stream** — one small, serializable, model-agnostic standard.
191
192
192
-
**Dual state.** The same entities on two linked channels: *symbolic* (readable `events` / entity records, for rules / LLMs / dashboards) and *latent* (optional model-tagged embeddings, for a downstream dynamics model). Symbols you can read; vectors a model can predict on.
193
+
**Dual state.** The same entities on two linked channels: *symbolic* (readable `events` / entity records, for rules / LLMs / dashboards) and *latent* (optional model-tagged embeddings, for a downstream dynamics model). Symbols you can read; vectors a model can predict on. The latent channel is a standardized, serializable interface shipping today — you can populate `entity.vec` with your own embedding now ([`examples/latent_vec.py`](examples/latent_vec.py)); the built-in *producers* (V-JEPA / ReID) are on the roadmap, not shipped yet.
193
194
194
195
**vs DeepStream / Holoscan** — same good ideas (event semantics, metadata model, composable graph), none of the weight:
0 commit comments