Agentic video primitives

Four layers behind one API, from the first frame to your agent. Use the ones you need, in our cloud or yours.

  • About 0.5 sfrom a question to the frames that answer it
  • 100,000 hourschecked and cut into samples in under a week
  • 300+ TBof video processed
  • 1,000+developers and agents use VideoDB every week

Primitives

Files, buckets, cameras and screens go through one pipeline. Ask for any frame or window and get exactly that.

In
RTSP cameras, screens, microphones, files, links, S3, GCS and Azure buckets
Transcoding
In-house and distributed. Seeking costs the same anywhere in the file.
Frames
Any frame or window on request. Tiling packs a window into one image for a model.
See the architecture

Understanding

Any model, open-weight, proprietary or your own, writes what it sees into your own JSON fields.

understand_video

{
  "segmentation": { "type": "time", "seconds": 2 },
  "analyzers": [{
    "type": "vlm",
    "name": "scene",
    "sampling": { "strategy": "uniform",
                  "frame_count": 3 },
    "config": { "model": "pro",
                "prompt": "Describe what is visible…" }
  }]
}

Done: 19 records, one for every 2 seconds of the homepage video

scene: 19 records, 6 shown

  1. 0:00–0:02

    A small round robot in the foreground looks out over a misty mountain valley with a winding river and a cluster of illuminated village houses below…

  2. 0:06–0:08

    A color landscape of snow-capped mountains and a misty valley, partially obscured by a semi-transparent, regular grid of colored dots…

  3. 0:12–0:14

    Abstract, densely layered contour-like lines and swirls that look like a topographic map or fingerprint patterns…

  4. 0:22–0:24

    Closely spaced curved contour lines that form a jagged, fractal edge on the left and broad sweeping arcs to the right…

  5. 0:28–0:30

    A high-contrast black-and-white halftone pattern of evenly spaced dark dots on a pale background…

  6. 0:36–0:37.8

    A small white spherical robot stands in the foreground overlooking a mist-filled mountain valley while the village windows glow…

On WGO-Bench, a VLM pipeline reaches 28.9% semantic F1 at IoU 0.5, against a 19.9% public baseline. Read the annotation benchmark

Indexes

Ask in plain language across a whole collection, then filter and count. Every result is a clip sized to the question.

4 moments from the scene index, best first

Moments that match the search, with their time in the video, an excerpt of the scene record and the score
0:00–0:02…a winding river and a cluster of illuminated village houses below0.45
0:02–0:04…a winding river and a cluster of lit village houses, while jagged snow-capped peaks in the distance catch warm alpenglow0.38
0:04–0:06…warm pink/orange highlights on the summits and house windows0.36
0:36–0:37.8…bathed in warm alpenglow against a deep blue sky and the village windows glow0.35

Answers come from five searches saved from real runs over the 37.8-second video at the top of the homepage, on Oct 30, 2026. Type your own words and the closest saved search answers.

VideoDB puts the right moment first 73.1% of the time, against 65.8% for a commercial video-native engine. Read the technical report

Delivery

Every answer can be a playable stream, an event or a file. Nothing is rendered ahead.

Run in our cloud or yours

The files can stay in your bucket, in the region you choose. Same SDK and MCP server either way.

Security

Runs onor your own cloud

SOC 2 Type IIGDPR

Quickstart

Get your API key at console.videodb.io. Then upload a file, understand it, index it, search it and play the result.

pip install videodbPython
npm install videodbNode
npx skills add video-db/skillsCoding agents
from videodb import connect

# uses your API key from console.videodb.io
conn = connect()
coll = conn.get_collection()
video = coll.upload(url="s3://lab/run-0412.mp4")

u = video.understand(analyzers=[{"type": "vlm", "name": "scene",
    "config": {"prompt": "What happens, and with what result?"}}])
u.wait_until_complete()
idx = video.index(name="scene", source=u.get_analyzer("scene"))

res = video.semantic_search(query="the gripper drops the bottle",
    index_ids=[idx.index_id], top_k=5)
for shot in res.get_shots():
    print(shot.start, shot.end, shot.metadata)

# the result, as a playable stream
stream = res.compile()
Machine

https://videodb.io/products.mdOpen the file