Skip to content

Conversation

@MhhhxX
Copy link

@MhhhxX MhhhxX commented Oct 21, 2025

Motivation and context

Searching for relevant frames to annotate in freshly uploaded and especially long videos can be very time consuming without any kind of hint.
To give a help for the worker who annotates the video this PR uses the chapter marks stored inside the metadata of
some video container formats. Chapter marks are shown as clickable ticks underneath the player slider and there are new player buttons to jump the previous/next chapter in the video. A worker can use these navigation features on newly uploaded videos and (immediately) start annotating on relevant frames.
Example:

  1. Record the video you want to annotate
  2. While recording write chapter marks in the video file (for example press a button on the recording device when you see a car you later want to annotate)
  3. Upload the video to cvat and jump to the chapter marks and start annotating
cvat chapters cvat chapter tooltip

How has this been tested?

I extended the rest api test case for TaskMetaData

e2e test cases

Checklist

  • I submit my changes into the develop branch
  • I have created a changelog fragment
  • I have updated the documentation accordingly
  • I have added tests to cover my changes
  • I have linked related issues (see GitHub docs)

License

  • I submit my code changes under the same MIT License that covers the project.
    Feel free to contact the maintainers if that's a concern.

@zhiltsov-max zhiltsov-max requested a review from klakhov October 21, 2025 12:28
@klakhov
Copy link
Contributor

klakhov commented Oct 22, 2025

It seems chapter marker can overlap with frame name:
image

@MhhhxX
Copy link
Author

MhhhxX commented Oct 23, 2025

It seems chapter marker can overlap with frame name: image

@klakhov I could show the ticks above the slider like this:
Bildschirmfoto am 2025-10-23 um 10 35 51
What do you think about this?

@klakhov
Copy link
Contributor

klakhov commented Oct 23, 2025

@MhhhxX, Yes, I think it would be better.

@MhhhxX
Copy link
Author

MhhhxX commented Oct 24, 2025

@MhhhxX, Yes, I think it would be better.

Markers are now above the slider.

@MhhhxX
Copy link
Author

MhhhxX commented Nov 28, 2025

@zhiltsov-max do you know why the consensus e2e test is failing now? The same test ran through before.

@zhiltsov-max
Copy link
Contributor

Some tests can fail sporadically, need to restart a couple of times and check if it helps. We're working on this problem, but haven't fixed it completely yet.

@zhiltsov-max
Copy link
Contributor

Please wait for #10056 to fix the issue with consensus tests.

@archibald1418
Copy link
Contributor

#10056 merged

@zhiltsov-max
Copy link
Contributor

@MhhhxX, it seems there's some loop in the player navigation, could you please check it?

@archibald1418
Copy link
Contributor

This requires at least some basic e2e coverage

@MhhhxX
Copy link
Author

MhhhxX commented Dec 2, 2025

@MhhhxX, it seems there's some loop in the player navigation, could you please check it?

The shortcut test failed locally for me because some of the existing shortcuts moved to a different page on the shortcut overview. I implemented a search function which navigates through all the pages and checks if the shortcut with the description exists on one of the pages.

Actually I couldn't find a loop. The shortcut test now runs through on my machine.

@MhhhxX
Copy link
Author

MhhhxX commented Dec 2, 2025

This requires at least some basic e2e coverage

I implemented some frontend tests for chapters.

@@ -0,0 +1,101 @@
context('Video chapters', () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
context('Video chapters', () => {
// Copyright (C) CVAT.ai Corporation
//
// SPDX-License-Identifier: MIT
context('Video chapters', () => {

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

}

cy.wrap($btn).click();
cy.wait(500);
Copy link
Contributor

@archibald1418 archibald1418 Dec 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arbitrary waiting is an anti-pattern. Please try to find a UI state to push off of or use a cy.intercept if there's a request

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed. I wait for the active page class to appear on the new page.

@codecov-commenter
Copy link

codecov-commenter commented Dec 3, 2025

Codecov Report

❌ Patch coverage is 91.30435% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.63%. Comparing base (392a9ba) to head (bc37b5e).

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #9924      +/-   ##
===========================================
+ Coverage    75.09%   82.63%   +7.53%     
===========================================
  Files          428      484      +56     
  Lines        46254    49435    +3181     
  Branches      4139     4143       +4     
===========================================
+ Hits         34734    40850    +6116     
+ Misses       11520     8585    -2935     
Components Coverage Δ
cvat-ui 77.61% <75.00%> (+0.14%) ⬆️
cvat-server 86.42% <95.83%> (+13.33%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 5, 2025

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.

6 participants