Visual embeddings
Every extracted frame is encoded by SigLIP (google/siglip-so400m-patch14-384), producing a 1152-dimensional vector that captures the frame’s visual content. These vectors are stored in a vector database, each tagged with org_id, video_id, and timestamp for isolation and retrieval.
When you submit a text or image search query, Pureframe AI encodes it with the same model and finds the nearest frame vectors — this is what makes queries like "whiteboard with a diagram" or a reference image work without exact keyword matching.
Scene label classification
Scene segments (Pay as you go/Enterprise plans) use the same encoder in a different mode — zero-shot classification against a fixed label set, run once per detected shot rather than per frame. See Processing Lifecycle for where this fits in the pipeline.Transcript matching (not embeddings)
Spoken audio is transcribed by Whisper (medium) into timestamped speech segments, stored in Postgres. Transcript search does not use vector embeddings — it uses Postgres full-text search (websearch_to_tsquery), a lexical match against the transcribed words.
This matters practically: transcript search rewards queries that share actual words with what was said ("pricing objection" matches a segment containing those words), while visual search rewards conceptual/visual similarity even with no shared vocabulary at all.
Why combined search works
Because these are fundamentally different techniques, they catch different things:- Visual embeddings find moments by what’s shown — no dependence on anyone talking
- Full-text transcript search finds moments by what’s said — precise on wording, even if the visual content is static
Model versions
Each video’smodel_version field records which embedding model indexed it. When Pureframe AI ships a new visual encoder, existing videos can be re-embedded from frame data already stored, without re-running Whisper transcription, since transcription and visual embedding are independent stages.