Skip to content

Video annotation: temporal detections + keyframe propagation#7686

Draft
tom-vx51 wants to merge 4 commits into
bugfix/va-label-syncfrom
chore/va-integration
Draft

Video annotation: temporal detections + keyframe propagation#7686
tom-vx51 wants to merge 4 commits into
bugfix/va-label-syncfrom
chore/va-integration

Conversation

@tom-vx51
Copy link
Copy Markdown
Member

@tom-vx51 tom-vx51 commented May 31, 2026

🔗 Related Issues

None

📋 What changes are proposed in this pull request?

Adds temporal detections and keyframe interpolation to the video annotation surface.

  • Temporal detectionsTemporalDetection fields render as timeline rows with a draggable support interval (move / resize-start / resize-end, snapped to fps). Drag-end stages an edit that persists via a sample-level delta supplier, with optimistic rendering through the server round-trip.
  • Keyframe propagation — linear interpolation between bracketing keyframes via a PropagateCommand and a browser propagation agent; results are written per frame into the label-stream cache and persisted through the normal video-labels path, with provenance recording the parent keyframes.
  • Auto-interpolation — adjacent segments are re-interpolated automatically when a keyframe changes (including on bbox drag/resize).

Stacked on #7685.

🧪 How is this patch tested? If it is not, please explain why.

Unit tests for the temporal-detection delta supplier and track building; tested locally in the app.

📝 Release Notes

Is this a user-facing change that should be mentioned in the release notes?

  • No. You can skip the rest of this section.
  • Yes. Give a description of this change to be included in the release
    notes for FiftyOne users.

What areas of FiftyOne does this PR affect?

  • App: FiftyOne application changes
  • Build: Build and test infrastructure changes
  • Core: Core fiftyone Python library changes
  • Documentation: FiftyOne documentation changes
  • Other

mcdoh and others added 4 commits May 28, 2026 15:01
* resizable TimelineTrack events

* temporalDetectionSupportChanged event

* timeline rows and interval edit

* cleanup

* stub in undo/redo

* better naming

* feat(video-annotation): persist TemporalDetection.support edits

* get on the annotation bus + tests

---------

Co-authored-by: Gavin <gavin@mcmorgans.us>
Co-authored-by: Tom Schmidt <tom.schmidt@voxel51.com>
* fix(annotate): skip dropdown enum when no class list is configured

* feat(annotation): PropagationBrowserAgent + linear interp dispatch

* narrowing type checking

---------

Co-authored-by: Tom Schmidt <tom.schmidt@voxel51.com>
MarkKeyframeCommand emits `annotation:keyframeChanged`; a new
`useAutoInterpolate` hook listens and dispatches PropagateCommand for
each in-between segment whose bracketing keyframes touch the changed
frame.
`upsertFromOverlay` already promotes the touched frame to a keyframe
via `toLocalDetection`. Mirror MarkKeyframeCommand by dispatching
`annotation:keyframeChanged` after the cache write so adjacent
segments re-lerp against the new bbox.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 31, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 95bd1ff3-88fb-46e5-9c9b-9020610f4961

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/va-integration

Comment @coderabbitai help to get the list of available commands and usage tips.

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.

3 participants