Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
ad58631
Add in-app multicam calibration tool modeled on keypointgui
romleiaj Jul 1, 2026
f20cea5
Add aligned picking and transform-type selection to camera calibration
romleiaj Jul 1, 2026
d8e3568
Support web as well
romleiaj Jul 1, 2026
de74f71
Add linked pan/zoom and right-click recenter to camera calibration
romleiaj Jul 1, 2026
af03715
Add Clear Last, points.txt loading, and homography.txt export to cali…
romleiaj Jul 1, 2026
a8f3ea4
Fix calibration ghost overlay for video and surface degenerate-fit er…
romleiaj Jul 1, 2026
1293c2e
Fix calibration ghost projective warp, save gating, and stale image g…
romleiaj Jul 4, 2026
be9b626
Sync zoom in linked navigation; collapse file IO into an expansion panel
romleiaj Jul 5, 2026
ee2bfb5
Drag picked calibration points to refine their position
romleiaj Jul 5, 2026
c7955fd
Fix drag state fields being wiped by class field initializers
romleiaj Jul 5, 2026
4c47a10
Move Pick points above the camera selectors and mark the exact pixel
romleiaj Jul 7, 2026
5cdd7c9
Drop points.txt / homography.txt file IO from the calibration panel
romleiaj Jul 7, 2026
c159cfb
Add click-select and delete for calibration markers; markers show onl…
romleiaj Jul 7, 2026
89fb55b
Collapse the correspondences table into a dropdown panel
romleiaj Jul 7, 2026
4fe8ffc
Add a Load calibration button that reads a portable calibration JSON
romleiaj Jul 7, 2026
9447b0c
Minimize the sidebar and detections graph while calibrating
romleiaj Jul 7, 2026
b7e013c
Add aligned-view transform resolution and store
romleiaj Jul 4, 2026
ced4016
Warp imagery and annotation rendering under the aligned view
romleiaj Jul 4, 2026
c645ebb
Generalize linked pan/zoom to all cameras under the aligned view
romleiaj Jul 5, 2026
af9c58e
Add aligned-view toggle and wire transform resolution into the Viewer
romleiaj Jul 5, 2026
780b35d
Guard aligned warp image lookup against cleared controllers
romleiaj Jul 5, 2026
32b99ea
Sync zoom in aligned-view linked navigation
romleiaj Jul 5, 2026
6a1beda
Load/save portable calibration JSON; align resolves solely from the s…
romleiaj Jul 6, 2026
65bcfc6
Tidy the calibration panel layout
romleiaj Jul 6, 2026
4a8366d
Unify the calibration JSON on the calibration.json pairs shape
romleiaj Jul 6, 2026
8ce8d80
Drop points.txt / homography.txt file IO from the calibration panel
romleiaj Jul 6, 2026
71f830f
Carry a producer provenance stamp through the calibration round trip
romleiaj Jul 6, 2026
7b204ef
Flag calibration pairs refined in-app since the source was produced
romleiaj Jul 6, 2026
3e09460
Derive a missing calibration matrix direction in the desktop pair loader
romleiaj Jul 6, 2026
ce7e0c9
Save calibration with the dataset; one pan/zoom link control at a time
romleiaj Jul 6, 2026
85fb513
Keep the Align button visible and explain why it is unavailable
romleiaj Jul 6, 2026
8c5ed9b
Link aligned-view panes by identity, not camera-to-camera transforms
romleiaj Jul 6, 2026
55605cc
Snap panes to the reference view the moment the aligned view activates
romleiaj Jul 6, 2026
019cb70
Reset panes on aligned-view exit; right-click recenter while aligned
romleiaj Jul 6, 2026
56cc56d
Right-click recenter everywhere; picking-only markers; one link knob
romleiaj Jul 6, 2026
7f9b5e2
Simplify the Align button tooltip to "Align View (requires calibration)"
romleiaj Jul 6, 2026
e59afe5
Drop the aligned-view chip; carry its state in the Align button tooltip
romleiaj Jul 6, 2026
267e344
Show only the active pair while picking; click-select and delete markers
romleiaj Jul 6, 2026
9ce1517
Hide non-pair panes with d-none; v-show loses to d-flex !important
romleiaj Jul 6, 2026
2f440a4
Disable Align while picking; picking turns off with the calibration tab
romleiaj Jul 6, 2026
746dd09
Restore hollow-ring marker and Pick-points-above-cameras after the merge
romleiaj Jul 7, 2026
8b2a6c5
Add ITK HDF5 transform reader for desktop backend
romleiaj Jul 4, 2026
e6aa056
Store per-camera ITK transforms on multicam meta at import time
romleiaj Jul 4, 2026
660e432
Add per-camera ITK transform picker to the multicam import dialog
romleiaj Jul 4, 2026
e5444d6
Add parse-itk-transform IPC for in-memory legacy .h5 transform files
romleiaj Jul 6, 2026
8f6b1df
Load/save portable calibration JSON; align resolves solely from the s…
romleiaj Jul 6, 2026
d4419d9
Seed the saved camera calibration from import-time transform files
romleiaj Jul 6, 2026
61aa844
Drop points.txt / homography.txt file IO from the calibration panel
romleiaj Jul 6, 2026
f11aa03
Remove legacy ITK .h5 transform support; calibration JSON only
romleiaj Jul 6, 2026
3cf2344
Seed the calibration provenance stamp from import-time transform files
romleiaj Jul 6, 2026
b295ebd
Auto-discover a calibration .json in the multicam import parent folder
romleiaj Jul 6, 2026
32ef0ca
Derive a missing calibration matrix direction in the desktop pair loader
romleiaj Jul 6, 2026
61d0524
Rename the calibration panel to "Manual Alignment"
romleiaj Jul 7, 2026
bed08a3
Show only the selected camera pair while Manual Alignment is open
romleiaj Jul 7, 2026
e82715a
Make picking always on while the Manual Alignment panel is open
romleiaj Jul 7, 2026
b13fef0
Redesign the Overlay Warp section; default to Similarity; add a fit-r…
romleiaj Jul 7, 2026
4f978cd
Enable the Save button only when the calibration has unsaved changes
romleiaj Jul 7, 2026
f413b13
Recolor calibration markers as locked (blue) vs unlocked (yellow)
romleiaj Jul 7, 2026
c8c9205
Add a "Fit pan/zoom" checkbox gated on fit-readiness
romleiaj Jul 7, 2026
9cac0c4
Keep the Warp Opacity controls visible, greyed out when not warping
romleiaj Jul 7, 2026
3be8ba1
Drop ghost-pane picking; pick only in the "Picking" mode
romleiaj Jul 7, 2026
b3e044a
Add a rig alignment-status block to the Manual Alignment panel
romleiaj Jul 7, 2026
1c1d167
Shorten names
romleiaj Jul 7, 2026
4c4efcb
Name the uncalibrated cameras in the Align button tooltip
romleiaj Jul 7, 2026
0995fb1
Simplify the alignment status to "N/M cameras calibrated"
romleiaj Jul 7, 2026
34139c5
Make the camera-status chips read as static, not clickable
romleiaj Jul 7, 2026
bd8dbc0
Drop the "needs calibration" chip text; the amber warning suffices
romleiaj Jul 7, 2026
2613e6c
Unify the pair transform-type default to Similarity across platforms
romleiaj Jul 7, 2026
f0850a4
Re-arm calibration picking when the dataset changes under the panel
romleiaj Jul 7, 2026
ce288c2
Let a null cameraCalibrationSource clear the stored stamp (web)
romleiaj Jul 7, 2026
fd1c780
Guard getCameraImage against a cleared controller
romleiaj Jul 7, 2026
c77e4a3
Extract the shared pan/zoom-link plumbing into useLinkedViewers
romleiaj Jul 7, 2026
4805204
Merge branch 'dev/sealtk' into dev/keypoint-gui
BryonLewis Jul 8, 2026
57d0d69
Hide antialiasing seams between warp sub-quads with a cell overlap
romleiaj Jul 8, 2026
0983087
Stop resize resetZoom from dragging the aligned view into a corner
romleiaj Jul 8, 2026
457c5cf
Allow drawing/editing on the unwarped reference camera under Align View
romleiaj Jul 8, 2026
988c4ab
Snap the pair link immediately when "Fit pan/zoom" engages
romleiaj Jul 8, 2026
564b608
Add homography geometry-mapping helpers for cross-camera annotations
romleiaj Jul 8, 2026
bb59b4c
Mirror tracks drawn under Align View onto every calibrated camera
romleiaj Jul 8, 2026
9300782
Allow drawing/editing on any camera under Align View
romleiaj Jul 9, 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
20 changes: 18 additions & 2 deletions client/dive-common/apispec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import { Attribute } from 'vue-media-annotator/use/AttributeTypes';
import { CustomStyle } from 'vue-media-annotator/StyleManager';
import { AttributeTrackFilter } from 'vue-media-annotator/AttributeTrackFilterControls';
import { ImageEnhancements } from 'vue-media-annotator/use/useImageEnhancements';
import {
CameraHomographies, CameraCorrespondences, CameraTransformTypes, CalibrationSource,
} from 'vue-media-annotator/CameraCalibrationStore';
import type { PercentileStretch } from 'vue-media-annotator/use/useImageEnhancements';

type DatasetType = 'image-sequence' | 'video' | 'multi' | 'large-image';
Expand Down Expand Up @@ -136,6 +139,12 @@ export interface MultiCamImportFolderArgs {
sourceList: Record<string, {
sourcePath: string;
trackFile: string;
/**
* Optional alignment transform file for cameras after the first (desktop
* only): a DIVE calibration .json, parsed at import time to seed the
* dataset's saved camera calibration.
*/
transformFile?: string;
/** Per-camera media type when cameras differ (e.g. EO JPG + IR TIFF on web). */
type?: 'image-sequence' | 'video' | 'large-image';
}>; // path/track file per camera
Expand Down Expand Up @@ -186,9 +195,14 @@ interface DatasetMetaMutable {
attributes?: Readonly<Record<string, Attribute>>;
attributeTrackFilters?: Readonly<Record<string, AttributeTrackFilter>>;
datasetInfo?: Record<string, unknown>;
cameraHomographies?: CameraHomographies;
cameraCorrespondences?: CameraCorrespondences;
cameraTransformTypes?: CameraTransformTypes;
/** Producer provenance of the camera calibration (see CalibrationSource). */
cameraCalibrationSource?: CalibrationSource | null;
error?: string;
}
const DatasetMetaMutableKeys = ['attributes', 'confidenceFilters', 'timeFilters', 'imageEnhancements', 'customTypeStyling', 'customGroupStyling', 'attributeTrackFilters', 'datasetInfo'];
const DatasetMetaMutableKeys = ['attributes', 'confidenceFilters', 'timeFilters', 'imageEnhancements', 'customTypeStyling', 'customGroupStyling', 'attributeTrackFilters', 'datasetInfo', 'cameraHomographies', 'cameraCorrespondences', 'cameraTransformTypes', 'cameraCalibrationSource'];

interface DatasetMeta extends DatasetMetaMutable {
id: Readonly<string>;
Expand Down Expand Up @@ -278,7 +292,7 @@ interface Api {
saveAttributeTrackFilters(datasetId: string,
args: SaveAttributeTrackFilterArgs): Promise<unknown>;
// Non-Endpoint shared functions
openFromDisk(datasetType: DatasetType | 'bulk' | 'calibration' | 'annotation' | 'text' | 'zip', directory?: boolean):
openFromDisk(datasetType: DatasetType | 'bulk' | 'calibration' | 'annotation' | 'text' | 'zip' | 'transform', directory?: boolean):
Promise<{canceled?: boolean; filePaths: string[]; fileList?: File[]; root?: string}>;
/** Desktop: immediate child directory names under a parent folder (multicam subfolder import). */
listImmediateSubfolders?(parentPath: string): Promise<string[]>;
Expand All @@ -294,6 +308,8 @@ interface Api {
): Promise<string>;
/** Desktop: stereoscopic calibration file in a parent folder root. */
findParentFolderCalibrationFile?(parentPath: string): Promise<string | null>;
/** Desktop: DIVE camera-calibration .json (alignment transforms) in a parent folder root. */
findParentFolderTransformFile?(parentPath: string): Promise<string | null>;
/** True when the dataset folder has an attached stereoscopic calibration file. */
hasCalibrationFile?(datasetId: string): Promise<boolean>;
/** Web: stash a calibration File for multicam upload lookup. */
Expand Down
Loading
Loading