Skip to content

Add optional video search capabilities to DIVE [DRAFT]#1743

Open
mattdawkins wants to merge 5 commits into
mainfrom
video-search
Open

Add optional video search capabilities to DIVE [DRAFT]#1743
mattdawkins wants to merge 5 commits into
mainfrom
video-search

Conversation

@mattdawkins

Copy link
Copy Markdown
Member

Add an optional video search panel to DIVE in the right bar.

This is an untested draft PR until this message is modified.

mattdawkins and others added 5 commits July 6, 2026 21:41
Per-dataset search index lifecycle (build via a process_video.py job,
status from an index_meta.json sidecar + ITQ file check, delete) and a
persistent QueryServiceManager wrapping viame.core.query_service over
NDJSON stdio (open index, formulate from image chip + boxes, query with
optional warm-start model, refine with +/- feedback, export the SVM as a
runnable trained pipeline in DIVE_Pipelines). One index open at a time;
the embedded postgres is stopped gracefully on app cleanup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New in-viewer context panel (desktop only) for index-backed video search
and rapid model generation: build/rebuild/delete the dataset's search
index (via the GPU job queue), query from the selected annotation, an
external image file, or a saved .svm model warm-start, adjudicate ranked
results +/- with cropped chip thumbnails and click-to-seek, refine
iteratively, and save good models as runnable trained pipelines. Shared
request/response types live in apispec so web can implement later.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace per-dataset index directories with a single shared search
database (DIVE_SearchIndex): every table keys rows on a per-video
stream identifier, so datasets are added, updated, and removed
independently while one IQR session searches everything at once.

- Add/Update ingests a dataset into the shared database as a job
  (initializing it on first use), re-using stream identifiers derived
  from the dataset id (image sequences) or video filename stem.
- Remove deletes the dataset's rows through the query service and drops
  it from the membership metadata; deleting a dataset from DIVE also
  removes it from the index automatically.
- Query results attribute back to their source dataset via stream_id;
  the panel labels cross-dataset results, seeks within the current
  dataset, crops thumbnails from each result's own media, and can
  filter the display to the current dataset.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New fullscreen 5x4 grid page, opened from the Video Search panel, showing
the ranked results across every indexed video as cropped chips with
accept/reject buttons; marks share the panel's session state and feed the
same IQR refine loop. Chip rendering moves to a shared, concurrency-limited
loader (useResultChips) with context padding and the result box outlined,
and the cell (AdjudicationChip) is presentation-only so future annotation
cluster rows can reuse it.

Also: extracted video frames are now cached per source video (hash-keyed)
instead of colliding across videos on frame number, and cross-dataset chip
media resolves the file the media server actually serves, so transcoded
copies work when originals have moved.
Track results load their first-state chip immediately, then the grid
queues up to 8 frames evenly sampled along the track (visible page only,
at lower priority than primary chips) and each cell cycles through
whichever frames have loaded, with a filmstrip badge marking animated
cells. Static detection results are unchanged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant