Jession Diwangan

visionseek — search inside your videos, fully local

Local semantic video search: ffmpeg scene cuts, llama.cpp vision-language captions, embeddings — describe any moment in English and jump the player to it.

Sole engineer · 2026

visionseek video page: a search for a described moment returning captioned frames with similarity scores and timestamps beside the player
Live semantic search: every indexed moment carries a model-written caption, a score, and frame or clip export.

Problem

Finding one moment in hours of footage means scrubbing a timeline by hand. The cloud tools that can search video want your files uploaded — a non-starter for private recordings, and overkill when the machine on your desk has a perfectly good GPU.

What I built

A local web app: drop in a video and visionseek indexes it — ffmpeg detects scene cuts, one frame per shot is captioned by a local vision-language model running on llama.cpp (GGUF), and the captions are embedded for semantic search. Type "whiteboard with diagrams" or "red car at night" and the player jumps to the matching second, with similarity scores and per-moment frame and clip exports.

Everything runs on your machine. First run offers presets sized to the GPU — a 4 GB laptop card gets SmolVLM2-2.2B plus a nomic embedder (about a 2.3 GB one-time download); an 8 GB card gets Qwen2.5-VL. The app manages the model servers itself: it spawns them, health-checks them, and keeps captioning and embedding co-resident within the VRAM budget. FastAPI and SQLite underneath; no cloud calls after the model download.

Result

Fully offline semantic search over a personal video library, captioning at roughly 1.4 seconds per frame on a 4 GB RTX 3050 laptop GPU. Indexing survives restarts, the library is durable, and the whole pipeline — upload, scene detection, captioning, embedding, search, playback — converged at 100% of its acceptance suite.

visionseek — search inside your videos, fully local · Jession Diwangan