Features/object tag issue explorer - #25
Merged
fwrise merged 7 commits intoJun 24, 2026
Merged
Conversation
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.
Editable object/frame tags, tag generation from inspection, and sidebar overhaul
This PR adds first-class support for editing object tags, moves the inspection workflow into the tag system, and cleans up the sidebar layout.
Editable object tags
Object tags (object_data.vec entries) can now be added and removed from the UI, not just read from the input JSON. Additions and removals are undoable via the standard Ctrl+Z/Ctrl+Y stack. On save, the updated tag state is written back to the OpenLabel JSON.
Sidebar tag tree
The previous QListWidget for frame tags has been replaced with a QTreeWidget that shows both frame tags and object tags for the current frame. Clicking a tag expands it to reveal a detail row with a Remove button. The expanded state is preserved while navigating frames. The Delete key shortcut continues to work on the selected item. The "Frame Issues" panel that was previously embedded in the bottom playback bar has been removed.
Inspection as tag generation
"Perform inspection" has been removed from the Edit menu. Instead, the Object Tag & Warnings Explorer (View menu) now contains a "Generate additional tags" button. This runs the same ghost-detection and double-detection logic, but stores the results as ghost_detection and double_detection object tags directly on the affected objects, so they persist to JSON on save. Re-running generation is safe; tags are treated as a set and existing entries are not duplicated. Newly generated tag names appear immediately in the "Select tags to display" dropdown without closing the dialog.
Detection functions now return object IDs alongside frame indices (detect_ghost_frames returns dict[str, list[int]], detect_double_frames returns dict[int, list[str]]) so the tag store knows which object each detection belongs to.
Tests
12 new unit tests for add_object_tag / remove_object_tag. Existing inspection service tests updated to match the new return types. All 183 tests pass.