Skip to content

Quickstart

Install

# Rust toolchain, ffmpeg dev libraries, pkg-config, clang
git clone https://github.com/videoindex/videoindex && cd videoindex
cargo build --release            # add --features cuda on an NVIDIA machine with CUDA 13 + cuDNN 9
./target/release/vidx doctor       # machine facts, GPU, models, provider roles

Index a video

vidx init ./talks.vidx
vidx index ./talks.vidx talk.mp4 --policy coarse_local     # no provider keys needed
vidx status ./talks.vidx

With a config that binds asr, ocr, image_embed and text_embed roles (see config/gcp-a100.toml), the default auto policy runs the full coarse pass.

Search and ask

vidx search ./talks.vidx "regret matching"
vidx ask ./talks.vidx "what does the speaker say about regret matching?"

ask needs an agent_llm role (Anthropic, Gemini or any OpenAI-compatible server) and streams an answer with [[cite:VIDEO:T0-T1]] citations.

Serve

vidx serve --bind 127.0.0.1:8080 --index-root ./ --api-key "$(openssl rand -hex 24)"
curl -s -H "Authorization: Bearer $KEY" localhost:8080/v1/indexes/talks/videos

See HTTP API and MCP.

Python

pip install videoindex
import videoindex as vi
idx = vi.Index.open("./talks.vidx", config=vi.Config.from_file("videoindex.toml"))
for ev in idx.ask("what is regret matching?"):
    if ev["type"] == "token": print(ev["text"], end="")

See Python.