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.