Add a Review tab for bulk annotation auditing as a chip grid - #1897
Draft
mattdawkins wants to merge 3 commits into
Draft
Add a Review tab for bulk annotation auditing as a chip grid#1897mattdawkins wants to merge 3 commits into
mattdawkins wants to merge 3 commits into
Conversation
New top-level Review tab (desktop: after Training; web: after Models) showing many annotations at once as cropped image chips, so a whole class (or everything carrying an attribute) can be checked across several datasets and wrong types corrected in place, without opening each sequence in the viewer. - Datasets view / Grid view toggle: pick datasets through the platform picker or listing (multicam parents expand into their cameras), then page through matching annotations in a rows x columns grid (5x4 by default, settable, with zoom in/out keeping the shape) and a context slider for the margin around each box (30% by default). - Query by type above a confidence threshold, or by attribute key/value on tracks and/or detections; sort by dataset, confidence or frame. The grid keeps its entries until the query is re-run so edits never reshuffle it. - Chips are cropped client-side from image sequences or by seeking a hidden video element (shared frame->time mapping extracted from VideoAnnotator into videoSeek.ts), through a concurrency-limited queue that renders the first box of every visible entry before any track's extra frames. Track entries then cycle through up to 8 boxes sampled along the track, with the object kept centred. - Types are edited per cell (assign, or mark correct) or for a whole page, batched and saved through saveDetections; unsaved edits are counted and guarded on navigation. - Clicking a chip opens the viewer on that dataset, seeking to the frame and selecting the track (new initialFrame / initialTrackId Viewer props read from the route query on both platforms). - Api gains an optional peekConfig for reading dataset configs without the viewer bookkeeping (desktop recents, web browse location); the web dataset store now shares its config merge with it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W1C4QY6hxjHaUPJfWPfQuu
A square chip letterboxed into a wide cell wasted most of the cell, so the crop region now extends the padded square around the box to the cell's width/height ratio (coarsened to a tenth so window resizes rarely force a re-render), keeping the object centred whatever the grid shape. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W1C4QY6hxjHaUPJfWPfQuu
Move the review page's paging, zoom, chip-resolution and keyboard handling into useReviewGrid, its grid-shape/context/pager row into ReviewGridControls, and the persisted grid settings into gridSettings.ts, so another view showing ReviewItems (e.g. video search results) gets the same behaviour without copying the page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W1C4QY6hxjHaUPJfWPfQuu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a top-level Review tab (desktop: right of Training; web: right of Models) that shows many annotations at once as a grid of cropped image chips, so a whole class, or everything carrying an attribute, can be audited across one or more datasets and wrong types corrected in place without opening each sequence in the viewer.
What it does
/review?datasetIds=a,bdeep links work on both.<video>element seeking to the frame (the frame → time mapping is extracted fromVideoAnnotatorintovideoSeek.tsand shared). A concurrency-limited queue renders the first box of every visible entry before any track's extra frames; track entries then cycle through up to 8 boxes sampled along the track with the object kept centred. Chips are rendered at the cell's resolution and aspect ratio.reassignPairs/acceptPairAsCorrectsemantics as the viewer, respecting the dataset's type hierarchy. Edits are batched and written withsaveDetectionson Save; unsaved edits are counted, Discard reloads, and navigating away with unsaved edits prompts.initialFrame/initialTrackIdprops, read from?frame=&track=on both platforms.Plumbing
Api.peekConfig?(optional):loadConfigwithout the platform's viewer bookkeeping (desktop recents, web browse location). The web dataset store now shares its config merge (mergeDatasetConfig) with it.dive-common/review/*(pure item building, chip cropping, frame sources, chip queue),dive-common/use/useReview.ts(service) anddive-common/components/Review/*; platform shells are thin (ReviewPage.vueon desktop,views/Review.vueon web).ReviewCell/ReviewGridare presentation-only with action / footer slots so other item sources can reuse them; this is the hook a follow-up PR uses to show video-search results (Add optional video search capabilities to DIVE [DRAFT] #1743) in the same panel.docs/Review.md, linked from the user guide nav.Testing
npm run lint,npm run typecheck,npm testandvite buildpass.result_*.json, then reverted), and chip click → viewer at the right frame with the track selected.Known limitations
🤖 Generated with Claude Code
https://claude.ai/code/session_01W1C4QY6hxjHaUPJfWPfQuu