Releases: OpenSportsLab/VideoAnnotationTool
V1.2.4
- Merge pull request #21 from OpenSportsLab/dev-silvio
- feat: Update application version to v1.2.4
- feat: Display OpenSportsLib version in info popup, handle missing package gracefully
- Refactor question-answer tests to improve clarity and functionality
- feat: Add download script for Hugging Face dataset splits with support for JSON and Parquet formats
- Refactor Q/A system to support grouped answers and remove legacy structures
- Refactor HF download/upload dialogs to use repo ID, revision, and split parameters
- feat: Add confidence sorting feature to Dataset Explorer with UI toggle
- feat: Enhance Dataset Explorer with confidence score display and natural sorting
- Refactor media playback architecture with backend support
- Add support for tracking parquet files in GUI tests and visualization tool
- feat: Enhance upload_dataset_to_hf tool to create missing repos and branches during upload
- feat: Add upload_dataset_to_hf tool for uploading OSL datasets to Hugging Face
- feat: Implement video conversion tool to generate 224p copies from OSL JSON dataset
- feat: Add script to merge MVFouls classification labels into XFoul VQA annotations
- feat: Enhance shard handling in upload dialog and CLI; add shard size configuration
- Refactor media controller integration and enhance frame preview functionality
- feat: Update inference and training managers to use new model API; enhance prediction handling and add tests
- refactor: Migrate tools to opensportslib and update documentation
- feat: Add application metadata and shortcuts help text; enhance main window with help menu
v1.2.3
- Merge pull request #20 from OpenSportsLab/dev-silvio
- Update documentation and improve user experience
- feat: Enhance MediaController to improve file type validation and allow unknown video formats
- Merge pull request #19 from OpenSportsLab/dev-silvio
- feat: Enhance MediaController to validate video input and prevent playback on non-video files
- update format metadata parquet to accomodate for other modality input
- feat: Implement batched upload for parquet datasets in Hugging Face with commit operation
- Merge pull request #18 from OpenSportsLab/dev-silvio
- feat: Enhance dataset upload functionality with batched commits and JSON upload option
- feat: Add Question/Answer mode to OSL Annotation Tool
- Enhance dataset explorer functionality with improved file handling and grouping logic
- Merge pull request #17 from OpenSportsLab/dev-silvio
- Update tools/parquet_webdataset_to_osl_json.py
- Update tools/README.md
- Update annotation_tool/tools/osl_json_to_parquet.py
- Fix branch creation to use the initial commit as base in Hugging Face dataset
- Add conversion utilities for OSL annotation datasets
- Add scripts for converting OSL JSON to Parquet/WebDataset and vice versa
- Implement inference cancellation feature and related UI updates
- Add Hugging Face dataset upload functionality and related tests
v1.2.2
Added Question/Answer data format
What's Changed
- Added Workflow for Question Answering by @SilvioGiancola in #18
Full Changelog: v.1.2.1...v1.2.2
v.1.2.1
- Merge pull request #17 from OpenSportsLab/dev-silvio
- Update tools/parquet_webdataset_to_osl_json.py
- Update tools/README.md
- Update annotation_tool/tools/osl_json_to_parquet.py
- Fix branch creation to use the initial commit as base in Hugging Face dataset
- Add conversion utilities for OSL annotation datasets
- Add scripts for converting OSL JSON to Parquet/WebDataset and vice versa
- Implement inference cancellation feature and related UI updates
- Add Hugging Face dataset upload functionality and related tests
- Merge pull request #16 from OpenSportsLab/dev-silvio
- yet anotehr tiny bug
- Merge pull request #15 from OpenSportsLab/dev-silvio
- minor fix for windows
- Merge pull request #14 from OpenSportsLab/dev-silvio
- fixed dependencies for CI/Release workflow
- Merge pull request #13 from OpenSportsLab/dev-silvio
- Remove conditional checks for manual runs in artifact zipping and uploading steps in CI workflow
- Add loc_config.yaml to data collection in CI and release workflows
- Merge pull request #12 from OpenSportsLab/dev-silvio
- Merge branch 'dev-silvio' of https://github.com/OpenSportsLab/VideoAnnotationTool into dev-silvio
v1.2.0
Improve dataset state management, undo/redo behavior, project close flows, and annotation workflows across classification, localization, description, and dense description. Add broader GUI regression coverage and polish media and editor interactions.
What's new
- Centralized dataset runtime state around the Dataset Explorer flow
- Improved undo/redo behavior for dataset and annotation mutations
- Better dataset header inspector editing and JSON preview handling
- Safer unsaved-changes workflow when closing projects
- Immediate manual-save behavior in Classification
- Autosave support in Description
- Improved Localization smart annotation, head/label management, and label color handling
- Chronological ordering guarantees for Dense Description and Localization events after add/edit/delete
- Updated media controls, including mute support
- Broader GUI regression coverage across lifecycle, explorer, media, history, and mode workflows
Fixes and polish
- Fixed dense description removal behavior
- Improved tab visibility and tab-removal behavior in editor panels
- Refined controller boundaries and signal-based coordination across modules
- Updated tests and workflow coverage for recent projects, dataset explorer behavior, and mode-specific interactions
Commits:
- Merge pull request #11 from OpenSportsLab/dev-silvio
- Fix dense description test: use on_media_position_changed instead of mocking player.position
- Copilot advise: rename question in dialog
- feat(localization): Adjust button styling and hide tab bar when only one tab remains
- feat(localization): Implement label color management and UI integration
- feat(classification): Implement head management with add, rename, and delete functionalities
- feat(classification): Hide training tab and refactor tab removal logic
- feat(localization): Enhance localization inference with head context and configuration management
- feat(localization): Enhance smart event handling and UI interactions
- Refactor Localization and Classification Controllers
- fix: dense desription removal was not working
- feat: Ensure chronological order of dense and localization events after add, modify, and delete operations
- feat: Enhance Dense Description module with improved signal handling and controller API
- feat: Enhance Description module with improved signal handling and API methods
- feat: Improve column layout handling in DenseAnnotationPanel with retry mechanism
- feat: Add mute button with icon and tooltip to MediaCenterPanel
- Refactor tests to use dataset_explorer_controller directly
- feat: Refactor media handling by removing QMediaPlayer dependencies and implementing signal-based playback control
- feat: Enhance dense description functionality with new event handling and UI updates
- feat: Enable immediate saving of manual annotations and update confirm button visibility in ClassificationAnnotationPanel
What's Changed
- Refactor dataset state management and stabilize annotation workflows across all modes by @SilvioGiancola in #11
Full Changelog: v1.1.6.1...v1.2.0
v1.1.6.1
Release Notes
Scope
This release includes all changes merged from:
Highlights
- Major UI/controller architecture simplification across all modes.
- Full migration to Qt Designer
.ui-driven panels for core app surfaces. - Dataset Explorer is now the central owner of sample lifecycle and selection routing.
- Persistent Recent Datasets in Welcome screen (QSettings-backed).
- Large pytest-qt GUI suite expansion for lifecycle and mode workflows.
New and Improved
Unified and simplified app structure
- Flattened
ui/structure (removed deep nesting andui/common). - Flattened shared controllers (removed
controllers/common). - Standardized package pattern per panel:
__init__.py+.ui+README.md.
Dataset Explorer-first workflow
- Terminology normalized from “video/clip” to sample in explorer flows/UI.
- Add/remove/filter/clear operations centralized in
DatasetExplorerController. - Selection contract now uses canonical Data ID dispatch to mode controllers.
- Multi-view media routing handled centrally through Dataset Explorer + media player.
Navigation and media routing cleanup
- Media selection is routed directly from Dataset Explorer to central media player.
- Removed dead/duplicate navigation code from mode controllers.
- Navigation controls were relocated to mode-appropriate widgets.
- Filter behavior improved: when a filter leaves no visible samples, media and annotations are cleared.
Mode panel/controller refactors
- Description and Dense Description moved to single-controller architecture with
.uipanels. - Localization moved to
.uipanel + consolidated controller architecture. - Classification panel and controller were aligned with the same architecture direction.
- Old/unused child widget files and obsolete manager patterns were removed.
Welcome and project lifecycle UX
- Welcome screen now has Recent Datasets integration with persistent storage via
QSettings. - Improved close workflow for dirty projects with explicit options:
- Save
- Save As
- Close Without Saving
- Cancel
- No unsaved-changes popup when dataset is clean.
Testing and Quality
- Expanded GUI coverage with
pytest-qtacross:- app lifecycle
- recent datasets
- dataset editing
- classification/localization/description/dense workflows
- Added deterministic test fixtures, headless defaults, and QSettings isolation.
- Added tests for routing and filter behavior (including empty-visible-list clearing behavior).
Breaking/Internal Migration Notes
- Import paths changed after UI/controllers flattening (clean-cut, no compatibility aliases).
DatasetExplorerControllernow owns add/remove/filter/clear logic; mode controllers no longer own these flows.- Selection wiring is now Data ID-based (
on_data_selected(data_id)style). - Some older media/player navigation signals and legacy dispatcher paths were removed.
- If you maintain local extensions/plugins, update imports and controller entrypoints accordingly.
Notes
- “Show Smart Labelled” remains future-ready for Description/Dense; current behavior may produce no smart matches for those modes until smart labeling is introduced there.
VideoAnnotationTool_V1.1.6
-
Data Sandbox Logic: Implemented strict data isolation between Manual and Smart annotations, featuring a dual-list UI (Predicted vs. Confirmed) for accumulated AI results.
-
OSL JSON Standard: Standardized export format by merging all events into a single array, using confidence scores to distinguish AI results and ensuring strict integer types for timestamps.
-
Robust Undo/Redo: Added comprehensive history support for Smart Annotation (Run, Confirm, Delete) with tab-aware UI refreshing to prevent view-switching bugs.
-
UX & Stability: Added an indeterminate progress bar for inference, fixed schema registration for new projects, and implemented full state resetting when switching or creating projects.
-
Fix some bugs of deployment(ci.yml and release.yml)
VideoAnnotationToolV1.1.5
- Introduced a compact dynamic label flow layout that replaces the rigid 2-column grid, with auto-sized buttons and natural wrapping for better space usage.
- Added quick timestamp editing with a Set to Current Video Time action for fast event updates.
- Improved event list navigation so newly created or modified events remain highlighted and auto-scroll into view after re-sorting.
- Refined the interface with reduced button height and a cleaner blue + Add Label style to minimize visual clutter.
- Integrated the training workflow with
soccernetprothrough a backgroundQThread, keeping the UI responsive during training. - Added real-time training monitoring with a progress bar and status updates by parsing live stdout/stderr logs.
- Fixed configuration and path issues, including missing keys and external-drive dataset support.
- Added user controls for safe training interruption and automatic checkpoint saving next to annotation files.
- Documented FFmpeg-based fixes for macOS video decoding issues with unsupported formats.
VideoAnnotationTool V1.1.4.1
- Modified apply_action_filter to make Hand Labelled and Smart Labelled filters inclusive rather than mutually exclusive.
- Added real-time filter refreshing and refactored logic for batch confirmation, undo/redo, and robust confidence parsing.
- Added logic to reset smart annotation UI components in the right panel within the _clear_workspace method.
- Inserted filter refresh calls in refresh_ui_after_undo_redo to ensure the left list syncs immediately after undo/redo.
- Fixed key mismatch in batch undo logic by changing old_batch to old_data to match the history stack.
- Corrected undo key names and updated batch results to pass rich dictionaries with confidence instead of plain strings.
- Added descriptive "Start:" and "End:" labels before the batch inference selection comboboxes in the UI.
- Fix Save/Export button state to properly recognize confirmed smart annotations in Classification mode.
VideoAnnotationTool V1.1.4
- Implemented dynamic label mapping in config.yaml to remove hardcoded class dependencies.
- Fixed cross-loading bugs; eliminated the need to start from an empty JSON; fixed task-name validation errors.
- Implemented dual-track export (Hand/Smart labels); refined schema to ensure standard action_classification output.
- Implemented "hard-root" logic; eliminated redundant dataset copying by referencing source paths directly.
- Introduced a compact tabbed interface (Hand/Smart); optimized vertical spacing and implemented dynamic font scaling.
- Developed independent Smart Annotation confirmation; added a 4-state filter (All/Hand/Smart/None).
- Expanded the Undo/Redo system to support batch operations and AI inference tasks.