Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ddce549
Check in WIP
mattdawkins Jan 14, 2026
e46415c
Better working version, almost there
mattdawkins Jan 14, 2026
2220d5a
Add missing files
mattdawkins Jan 15, 2026
17aabf5
Add bulk run text query as pipe option, switch to sam3
mattdawkins Jan 16, 2026
829bef7
Check in sam3 WIP
mattdawkins Jan 20, 2026
e1a005a
Checkpoint workable SAM2 for seg, SAM3 for text
mattdawkins Jan 20, 2026
4477b66
Update segmentation for latest VIAME changes
mattdawkins Jan 21, 2026
e138aed
Check in missed file
mattdawkins Jan 21, 2026
49bfbb2
Do not show dots on other frames besides the one they're made on
mattdawkins Jan 21, 2026
d2a04ef
Fix lint formatting in EditorMenu.vue
mattdawkins Jan 26, 2026
965e79d
Add error dialog for segmentation/text query model loading failures
mattdawkins Jan 26, 2026
5b0bce2
Fix text query loading loop - properly forward events and callbacks
mattdawkins Jan 26, 2026
d96c335
Fix text query error message to not mention segmentation
mattdawkins Jan 26, 2026
da886cb
Fix polygon mode being exited when segmentation async init completes
mattdawkins Jan 26, 2026
b622102
Use VIAME install config files for segmentation and stereo services
mattdawkins Jan 28, 2026
8e011d0
Remove model-specific references; rename service to viame_segmentation
mattdawkins Jan 28, 2026
2adacdb
Add interactive stereo IPC handlers and frontend API
mattdawkins Jan 28, 2026
de5dd3d
Add stereo interactive annotation mode to the client UI
mattdawkins Jan 28, 2026
caf10f6
Fix missing isStereoDataset prop in horizontal and bottom sidebar lay…
mattdawkins Jan 30, 2026
7f05a1c
WIP: Stereo only-once warp, line click handling, and edit auto-detection
mattdawkins Jan 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
477 changes: 477 additions & 0 deletions client/bundle.css

Large diffs are not rendered by default.

116 changes: 116 additions & 0 deletions client/dive-common/apispec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,122 @@ function useApi() {
return use<Readonly<Api>>(ApiSymbol);
}

/**
* Interactive Segmentation Types
*/
export interface SegmentationPredictRequest {
/** Path to the image file */
imagePath: string;
/** Point coordinates as [x, y] pairs */
points: [number, number][];
/** Point labels: 1 for foreground, 0 for background */
pointLabels: number[];
/** Optional low-res mask from previous prediction for refinement */
maskInput?: number[][];
/** Whether to return multiple mask options */
multimaskOutput?: boolean;
}

export interface SegmentationPredictResponse {
/** Whether the prediction succeeded */
success: boolean;
/** Error message if failed */
error?: string;
/** Polygon coordinates as [x, y] pairs */
polygon?: [number, number][];
/** Bounding box [x_min, y_min, x_max, y_max] */
bounds?: [number, number, number, number];
/** Quality score from segmentation model */
score?: number;
/** Low-res mask for subsequent refinement */
lowResMask?: number[][];
/** Mask dimensions [height, width] */
maskShape?: [number, number];
/** RLE-encoded full-resolution mask for display: [[value, count], ...] */
rleMask?: [number, number][];
}

export interface SegmentationStatusResponse {
/** Whether segmentation is available */
available: boolean;
/** Whether the model is currently loaded */
loaded?: boolean;
/** Whether the service is ready for predictions */
ready?: boolean;
}

/**
* Text Query Types for open-vocabulary detection/segmentation
*/

/** A single detection returned from a text query */
export interface TextQueryDetection {
/** Bounding box [x1, y1, x2, y2] */
box: [number, number, number, number];
/** Polygon coordinates as [x, y] pairs */
polygon?: [number, number][];
/** Confidence score */
score: number;
/** Label/class name (often the query text) */
label: string;
/** Low-res mask for refinement (optional) */
lowResMask?: number[][];
}

export interface TextQueryRequest {
/** Path to the image file */
imagePath: string;
/** Text query describing what to find (e.g., "fish", "person swimming") */
text: string;
/** Confidence threshold for detections (default: 0.3) */
boxThreshold?: number;
/** Maximum number of detections to return (default: 10) */
maxDetections?: number;
/** Optional boxes to refine [x1, y1, x2, y2][] */
boxes?: [number, number, number, number][];
/** Optional keypoints for refinement [x, y][] */
points?: [number, number][];
/** Labels for points: 1 for foreground, 0 for background */
pointLabels?: number[];
/** Optional masks to refine */
masks?: number[][][];
}

export interface TextQueryResponse {
/** Whether the query succeeded */
success: boolean;
/** Error message if failed */
error?: string;
/** List of detections found */
detections?: TextQueryDetection[];
/** The original query text */
query?: string;
/** Whether fallback method was used (no native text support) */
fallback?: boolean;
}

export interface RefineDetectionsRequest {
/** Path to the image file */
imagePath: string;
/** Detections to refine */
detections: TextQueryDetection[];
/** Optional additional keypoints for refinement [x, y][] */
points?: [number, number][];
/** Labels for additional points: 1 for foreground, 0 for background */
pointLabels?: number[];
/** Whether to include refined masks in response */
refineMasks?: boolean;
}

export interface RefineDetectionsResponse {
/** Whether the refinement succeeded */
success: boolean;
/** Error message if failed */
error?: string;
/** Refined detections */
detections?: TextQueryDetection[];
}

export {
provideApi,
useApi,
Expand Down
3 changes: 3 additions & 0 deletions client/dive-common/components/DeleteControls.vue
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ export default Vue.extend({
if (this.editingMode === 'rectangle') {
return true; // deleting rectangle is unsupported
}
if (this.editingMode === 'Point') {
return true; // Point mode uses reset instead of delete
}
return false;
},
},
Expand Down
Loading