# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## \[2.44.2\] - 2025-09-08
### Fixed
- User may create a skeleton with invalid structure in configurator, leads to UI crash
()
- Crash on job export if the job contains tags or is not the first job in the task
()
## \[2.44.1\] - 2025-09-02
### Fixed
- Attribute/label input fields are not disabled when the object is locked
()
## \[2.44.0\] - 2025-09-01
### Added
- Introduced bulk actions to perform operations on multiple selected resources at once
- Multi-select resources using click with Ctrl, Shift or using Select all button at the top bar
- Supported resources: Tasks, Jobs, Projects, Requests, Organization members, Webhooks, Cloud Storages
- Supported operations: Export, Backup, Delete, Download, Change: Assignee, State, Stage, Role
()
- \[SDK\] Auto-annotation functions are now able to output tags
()
- Now it is possible to move projects and tasks between organizations
()
- Improved validation errors for invalid json filter queries
()
- \[SDK, CLI\] Support for exporting with server-generated filename
()
- Organization transfer now supported as a bulk action
()
- Ability to replace cloud storage for tasks.
()
- Lightweight backup option in Export backup dialog (excludes media for cloud-storage tasks).
()
### Changed
- Updated Yarn version from 1.22.22 to 4.9.2
()
- \[SDK\] simplified sending of custom requests with `ApiClient`, added documentation
and improved related APIs. Documented using foreign libraries for sending requests.
()
- \[CLI\] `task backup` and `task export-dataset` now download files with the server-generated
filenames by default
()
- \[CLI\] `task backup` and `task export-dataset` now always export files locally,
regardless of the default export location on the server
()
- The cvat/server Docker image is now configured with a numeric UID
rather than a username
()
- The frontend container no longer runs as root
()
- \[Helm\] The Clickhouse, PostgreSQL and Redis containers now use
the images from the Bitnami Legacy repository by default
()
- \[Compose, Helm\] The Vector container now runs as a non-root user
()
- \[Helm\] The Kvrocks container now has overridden UID/GID, making
it compatible with the `runAsNonRoot` security context setting
- Made the error message when a particular image cannot be saved
to a compressed chunk more useful
()
- When registering a user, the server will now reject overly long email,
first name and last name fields, instead of truncating them
()
### Removed
- Removed deprecated `seed` parameter in job creation in favor of `random_seed`
()
### Fixed
- Invalid GT job frame numbers in backups of video tasks with custom start/stop frame or frame step
()
- Server error in GT job creation if the `random_per_job` frame selection method
was used with the `seed` parameter.
()
- \[Helm\] A useless `/models` directory is no longer created in the main
data volume
()
## \[2.43.0\] - 2025-08-07
### Added
- Django command to remove user with all resources `python manage.py deleteuser `
()
### Changed
- Better validation of fields specified in raw labels editor
()
- Optimized preview requests for Projects, Tasks, Jobs, etc. — now sent sequentially to reduce load on the server
()
### Fixed
- Issue dialogs appear outside the visible area when the issue is located near the right or bottom edges of the frame
()
- Job meta could include `deleted_frames` outside the job
()
## \[2.42.0\] - 2025-07-29
### Added
- \[SDK, CLI\] Added an auto-annotation function interface for tracker
functions, and agent support for it
()
- \[SDK\] `TaskDataset` now supports tasks with video chunks when created
with `MediaDownloadPolicy.PRELOAD_ALL`; this also means that agents can
process interactive detection requests on such tasks
()
- Support for cgroup v2 to calculate the number of threads when downloading images from cloud storages
()
### Fixed
- Bump Python runtime version for Segment Anything interactor Nuclio function from 3.8 to 3.10
()
- User could not log in if an email used for the invitation had a different case
than the one used during manual registration
()
- Fixed downloading images only in 1 thread when preparing chunks in case of using cloud storage
()
### Security
- Added missing email verification check when Basic HTTP authentication is used
and server is configured to require email verification (`ACCOUNT_EMAIL_VERIFICATION` == `mandatory`)
()
## \[2.41.0\] - 2025-07-09
### Added
- Page size selector for different resource pages
()
- Selector that allows inline editing of the following fields from card views: `assignee`, `state`, and `stage`.
()
### Changed
- Improved email templates for email confirmation and organization invitation
()
- \[CLI\] Reduced log clutter in the `function run-agent` command
()
- The `PATCH` and `PUT` methods on the `/api/(tasks|jobs)//annotations`
paths now verify that annotation IDs are present/absent, depending on the
action
()
- Changed the default Django cache backend from LocMem to Redis
()
- Unified design of actions menu on organization page to match style of other action menus
()
### Deprecated
- \[Server API\] Token authentication
()
### Fixed
- Fixing COCO keypoints export for case when some keypoints are absent
()
- Incorrect logo in email template for email confirmation
()
- Fixed LDAP as an issue was formed with the wrong arguments being apart of the function definition
()
- \[Server API\] Actualized outdated API schema for token and session authentication
()
- Low performance in `GET /api/jobs(tasks)//annotations`
when a target resource have many tracks with attributes, especially mutable
()
- Shortcuts cannot be properly configured in tag annotation mode
()
- Setting "Automatically go to the next frame" does not apply when the first tag is added
on tag annotation workspace
()
## \[2.40.1\] - 2025-07-07
### Fixed
- Low performance of DELETE `/api/tasks/` and GET `/api/jobs(tasks)//annotations`
Because of inefficient database queries ()
## \[2.40.0\] - 2025-06-25
### Added
- Serverless tracker functions may now accept shapes other than rectangles
()
- \[CLI\] A more helpful error message is now raised if a loaded
auto-annotation function has no `spec` attribute
()
- `CVAT_CACHE_ITEM_MAX_SIZE` option that limits size of data chunk at CVAT level.
Generating data that exceeds the size will result in an exception.
()
- CVAT server tracks `last_activity_date` of a user, the field is updated once a day
()
- Filtration by username to Grafana dashboards
()
### Changed
- Updated zooming algorithm, it works much smoother with touchpads and a little bit smoother for mice
()
- Kvrocks: configured auto compaction at scheduled time.
()
- Nuclio tracker functions are no longer passed the previous frame's shapes
when continuing the tracking
()
- Endpoints accepting annotations as input now check that shapes have
point and element counts that are appropriate for the shape type
()
### Fixed
- Reduced excessive DB use in dataset export
()
- Page size selector on organization page was not working
()
- Incorrect width of project field on webhook setup page
()
- Relevant task quality reports now can be reused in project quality reports
()
- Fixing 3d export for projects
()
### Security
- Added missing file name validation when initiating an import process
from a file uploaded via the TUS protocol
()
## \[2.39.0\] - 2025-06-05
### Added
- \[SDK\] Added `decode_mask`, a utility function that creates a bitmap
based on the `points` array in a mask shape
()
- \[SDK\] `encode_mask` may now be called without specifying a bounding box
()
### Changed
- \[TUS\] After finishing file upload using the TUS protocol, the next request that initiates
the import process must include the TUS `file_id` instead of the original file name.
It can be obtained from the `Upload-Filename` response header.
()
- Frame input field now dynamically adjusts its width according to the maximum frame number in the job
()
### Removed
- \[TUS\] `Upload-Filename` header from server responses when handling append chunk requests
()
### Fixed
- \[TUS\] TUS metadata files store only declared fields
()
- \[Helm\] Fixed configuration of Grafana Clickhouse data source,
which led to the impossibility to connect to the Clickhouse database
()
- Improved performance of GET `api/lambda/requests` requests
()
## \[2.38.0\] - 2025-05-27
### Added
- Set `file` as default source of annotations imported from files
()
- CVAT measures the size of data, uploaded by users, like images, videos and different guide assets.
Newly created resources will be measured automatically.
For existing resources, please, run `python manage.py initcontentsize`.
()
### Changed
- Cache files with exported events now are stored in `/data/cache/export/` instead of
`/data/tmp/`. These files are periodically deleted by the
`cleanup_export_cache_directory` cron job
()
### Deprecated
- The `GET /api/events` endpoint is deprecated in favor of the `POST /api/events/export`,
`GET /api/requests/rq_id`, and `GET result_url`, where `result_url` is obtained from
background request details
()
- The `POST /api/quality/reports/rq_id=rq_id` is deprecated in favor of
`GET /api/requests/rq_id`
()
### Removed
- The `POST /api/consensus/merges?rq_id=rq_id` endpoint no longer supports
process status checking
()
- The `GET /api/projects/id/dataset?action=import_status` endpoint no longer
supports process status checking
()
- The `POST /api/projects/backup?rq_id=rq_id` endpoint no longer supports
process status checking
()
- The `POST /api/tasks/backup?rq_id=rq_id` endpoint no longer supports
process status checking
()
- The `PUT /api/tasks/id/annotations?rq_id=rq_id&format=format` endpoint
no longer supports process status checking
()
- The `PUT /api/jobs/id/annotations?rq_id=rq_id&format=format` endpoint
no longer supports process status checking
()
- \[SDK\] `DatasetWriteRequest`, `BackupWriteRequest`, `TaskAnnotationsWriteRequest`,
`JobAnnotationsUpdateRequest`, `TaskAnnotationsUpdateRequest` classes were removed
()
### Fixed
- YOLO formats can now be imported from archives where dataset is located in a folder
()
- Quality setting `Check orientation` was not updated after save
()
- Only first 10 tasks were shown on project quality page
()
- When restoring a task or a project from backup, 'owner' field for assets has empty value
()
- Ultralytics YOLO format could not import annotations
if no image info was provided in the dataset
()
### Security
- Fixed disclosure of certain resource names and IDs via the browsable API
()
## \[2.37.0\] - 2025-05-15
### Added
- Annotation quality checks for projects
()
- \[CLI\] Agents are now able to handle interactive detection requests
()
- \[SDK\] `BackgroundRequestException` which is now raised instead of `ApiException`
when a background request (e.g., exporting a dataset or creating a task) fails
()
- Datumaro format now supports ellipses
()
- Frame search by filename
()
### Changed
- Requests that initiate background processes (e.g. exporting datasets) now return a request ID
too when a 409 status is returned
()
### Deprecated
- \[Server API\] `GET api/quality/reports` and `GET api/quality/reports/{id}/` responses:
- `frame_count` - deprecated in favor of the new `validation_frames` field,
- `frame_share` - deprecated in favor of the new `validation_frame_share` field
()
### Fixed
- Optimized `GET api/quality/reports/`, `GET api/quality/conflicts/` requests,
permission checks in `api/quality/*` endpoints
()
- Do not require COCO annotations to have fields which are not necessary for import
()
- `redis.exceptions.ResponseError: wrong number of arguments for 'watch' command` exception that
could be raised inside a worker when enqueuing jobs that depend on a running job
()
- Fixed issue on track interpolation: 'tuple' object has no attribute 'copy'
()
- \[SDK\] Fixed outdated note about attributes in the docstring of
`DetectionFunction.detect`
()
- When no shortcuts were assigned, the tooltip displayed empty brackets
()
## \[2.36.0\] - 2025-05-08
### Added
- UI button to export raw resource events on analytics page
()
- Input size controls for cuboids in 3D workspace
()
### Changed
- Export of events using the server endpoint `GET /api/events` ignores `send:exception` scope.
()
- Updated default value of `from` query parameter in GET `/api/events`.
Now it exports all events of the target resource if `from` and `to` are not specified.
()
- Export table as CSV feature now considers applied filtration on the table
()
- \[CLI\] The default value for `--server-host` is now `http://localhost`
()
### Deprecated
- \[SDK, CLI\] Automatic server URL scheme detection is deprecated.
Add `https://` or `http://` to the host explicitly to avoid future breakage
()
### Fixed
- Fixed helm-chart to use selectorLabels template for matchLabels #9358
()
- 500 status code returned when an API method is not allowed
()
- Optimized the `api/jobs/` server endpoint
()
- Optimized DB requests for server permission checks
()
- \[CLI\] Commands with invalid arguments or `--help` no longer ask for the
server password
()
- Improved performance of `GET /api/tasks`, `GET /api/quality/conflicts`
and `GET /api/cloudstorages` requests
()
- Improved performance of `GET /api/webhooks` requests
()
- Tracking with the AI model was not starting automatically after being re-enabled
()
## \[2.35.0\] - 2025-04-29
### Changed
- Streaming import for YOLO and COCO formats
()
- The `POST /api/lambda/functions/` endpoint now returns the results
in the same format as the `GET /api/tasks//annotations` endpoint
when the function is of the `detector` kind
()
### Fixed
- Numeric attribute values returned by Nuclio functions are now checked
for being in the acceptable range when running whole-task auto-annotation
()
- With per-frame auto-annotation, numeric attribute range validation now
works correctly when the minimum value is not a multiple of the step
()
- Reduced memory consumption for annotation export to CVAT formats
()
- UI crashes when paste cuboids with hold Ctrl key
()
- Fixed service name of utils worker in `docker-compose.external_db.yml`
()
- Slow performance in exports that require CVAT RLE to COCO RLE conversion
()
## \[2.34.0\] - 2025-04-17
### Added
- Cuboid orientation arrows for 3D canvas
()
### Fixed
- Fixed rotation of shapes existing in CVAT before #9289
()
## \[2.33.0\] - 2025-04-15
### Added
- \[CLI\] Agents can now receive real-time notifications about new annotation
requests from the server
()
- Collecting User-Agent info in events
()
### Fixed
- Reduced memory consumption for annotation import to tasks
()
- Reduced memory consumption for annotation import to jobs
()
- Links in the actions menu now behave as regular links, allowing middle-click to open them in a new tab.
()
- Recorded working time may be less than actual when dealing with complex masks or polygons
()
- Rotated rectangles and ellipses unstably reset after resizing
()
- Redis migration `002_update_meta_in_export_related_jobs` could fail
due to stale RQ job keys in the deferred job registry
()
- Duplicate buttons in skeleton point config modal
()
- Fixed inference with the YOLOv7 model on grayscale images
()
- Reduced memory consumption for dataset import to project
()
- Rough rotation of cuboids in 3D workspace
()
- Dataset structure validation now runs when uploading task/job annotations in CVAT format
()
- Incorrect link on job import success notification
()
## \[2.32.0\] - 2025-03-24
### Added
- Added parameter `conv_mask_to_poly` support for importing annotations in projects,tasks and jobs
()
- \[SDK\] Auto-annotation functions that output skeletons can now be used
via agents
()
- Search bar and filtering components on the organization page ()
- Error notification if something is wrong in quality/consensus settings
()
- \[Helm\] Added a new value, `cvat.backend.extensionEnv`, to support
supercharts adding environment variables to backend containers
()
- Timestamps to Uvicorn stdout logs
()
- Added robots.txt file to manage crawling traffic
()
### Changed
- \[SDK\] `DetectionFunctionSpec` now requires that the type of keypoint
sublabels is set to `points`. Accordingly, `keypoint_spec` now sets
this type by default
()
- Optimized memory usage on export with YOLO and COCO formats for tasks
()
- Optimized memory usage for project export in YOLO and COCO formats
()
- Updated Traefik to v3.3.x
()
- \[Compose\] Traefik access log is now limited to the same fields as in
Helm-based deployments
()
### Deprecated
- Utilizing `GET /api/projects/id/dataset?action=import_status` API endpoint
to check the status of the import process. Instead, the `GET /api/requests/rq_id`
requests API should be used ()
### Removed
- `GET /api/projects/id/dataset` API endpoint no longer handles dataset export process
()
- `GET /api/projects/id/annotations` API endpoint no longer handles annotations export process
()
- `GET /api/projects/id/backup` API endpoint no longer handles project export process
()
- `GET /api/tasks/id/dataset` API endpoint no longer handles dataset export process
()
- `GET /api/tasks/id/annotations?format=` API endpoint no longer handles annotations export process
()
- `GET /api/tasks/id/backup` API endpoint no longer handles task export process
()
- `GET /api/jobs/id/dataset` API endpoint no longer handles dataset export process
()
- `GET /api/jobs/id/annotations?format=` API endpoint no longer handles annotations export process
()
- Existing implementation of analytics reports
()
### Fixed
- Removed extra sliders on quality control page
()
- Server returns a 404 status code with details instead of a 500
when cloud storage preview defined by a manifest cannot be downloaded
()
- Broken styles on Consensus management page
()
- \[Helm\] Fixed frontend deployment template issue that caused rendering to fail if
additional volumes and volume mounts were defined.
()
- Incorrect behavior of standard browser back button on the quality page
()
- Fixed a 500 status code that could occur when listing requests by GET /api/requests
()
- Memory usage optimization on backup import
()
## \[2.31.0\] - 2025-03-03
### Added
- \[SDK\] Auto-annotation detection functions can now output shape/keypoint attributes
()
- \[SDK\] Added a utility module for working with label attributes,
`cvat_sdk.attributes`
()
- Simple merging for consensus-enabled tasks
()
- A setting to display rectangles and ellipses dimensions and rotation
()
### Changed
- Hidden points in skeletons now also contribute to the skeleton similarity
in quality computations and in consensus merging
()
- SDK `task.upload_data()` can accept resources of the `Path` type
when `resource_type` is `REMOTE` or `SHARE`
()
### Deprecated
- Utilizing `PUT /api/tasks|jobs/id/annotations?rq_id=rq_id` API endpoint
to check the status of the import process
()
### Fixed
- 500 status code returned by API endpoints that support TUS OPTIONS requests
()
- Possible race condition that could occur when importing annotations
()
- Issue label scaling on image filter application
()
- Invalid display of images in simple GT jobs
()
- Related images in a simple GT jobs are displayed incorrectly
()
## \[2.30.0\] - 2025-02-14
### Added
- Gamma filter settings are now automatically saved and restored upon reload
()
- Ability to customize `api/sever/about` endpoint via settings including logo and sign-in page subtitle
()
### Changed
- Client settings are now saved automatically
()
### Fixed
- \[SDK\] `skeleton_label_spec` now correctly forwards `kwargs` to
`PatchedLabelRequest`
()
- Error: Cannot read properties of undefined (reading 'width') that occurs when changing frames in a video-based GT job
()
## \[2.29.0\] - 2025-02-10
### Added
- Tasks created from cloud storage can be backed up now
()
- \[CLI\] `function create-native` now sends the function's declared label types
to the server
()
### Changed
- When invoking Nuclio functions, labels of type `any` can now be mapped to
labels of all types except `skeleton`
()
### Fixed
- Fixed invalid server-side track interpolation in tasks with deleted frames
()
## \[2.28.0\] - 2025-02-06
### Added
- Support for managing Redis migrations
()
### Changed
- Updated limitation for minimal object size from 9px area to 1px in dimensions
()
### Fixed
- Invalid chunks and backups after honeypot updates in tasks with cloud storage data
()
- In some cases effect of drag/resize may be reset implicitly for a user
()
## \[2.27.0\] - 2025-02-04
### Added
- Saving drawn shape on submit in `single shape` mode
()
- An option to create tasks with consensus jobs
()
- \[SDK\] The shapes output by auto-annotation functions are now checked
for compatibility with the function's and the task's label specs
()
- A `threshold` parameter to UI detector runner
()
### Changed
- `DetectorFunctionSpec` will now raise `BadFunctionError` if it detects
any violations of the documented constraints on the labels
()
### Fixed
- Improved performance and memory utilization for quality reports in tasks with ellipses and masks
()
- \[Compose\] An outdated version of Traefik is no longer used in
deployments with HTTPS enabled
()
## \[2.26.1\] - 2025-01-29
### Added
- A button to copy a filename of the image into the clipboard
()
### Changed
- Changed location of events cache dir
()
### Removed
- \[Helm\] Removed `disableDistinctCachePerService` settings
()
### Fixed
- The backend now rejects invalid label types
()
- \[Helm\] Impossible to download exported annotations
()
## \[2.26.0\] - 2025-01-27
### Added
- Setting `TMP_FILE_OR_DIR_RETENTION_DAYS`, which defines maximum retention period
of a file or dir in temporary directory
()
- Cron job to remove outdated files and directories from CVAT tmp directory
()
- Ability to set Django's secret key using an environment variable
()
### Changed
- Export cache cleaning moved to a separate cron job
()
- Improved UX of quality management page: better table layout, file name search, ability to download table as `.csv`
()
- Enhanced MIL tracker. Optimized memory usage. Now it is runnable on many frames, and applicable to drawn rectangles.
()
- The UI only displays one version for the whole client component,
which is now aligned with the server version
()
### Fixed
- Fixed webhook worker not restarting after losing Redis connection
()
- Fixed incorrect results being returned from lambda functions when all
detected shapes have labels that aren't mapped
()
- Optimized importing from cloud storage
()
- A job cannot be opened if to remove an image with the latest keyframe of a track
()
- A track will be interpolated incorrectly if to delete an image containing the object keyframe
()
- Error: Cannot read properties of undefined (reading 'startPoints') when dragging an object
()
- Extra shortcuts enabled from brush tools on views where not necessary
()
- \[Helm\] Fixed Nuclio dashboard crashes when running in a cluster
that doesn't use Docker
()
- \[SDK\] `cvat_sdk.auto_annotation.functions.torchvision_detection` and
`torchvision_instance_segmentation` no longer declare meaningless "N/A" labels
()
### Security
- Protected tracker functions against deserializing untrusted input
()
## \[2.25.0\] - 2025-01-09
### Added
- \[CLI\] Added commands for working with native functions
()
- Ultralytics YOLO formats now support tracks
()
### Changed
- YOLOv8 formats renamed to Ultralytics YOLO formats
()
- The `match_empty_frames` quality setting is changed to `empty_is_annotated`.
The updated option includes any empty frames in the final metrics instead of only
matching empty frames. This makes metrics such as Precision much more representative and useful.
()
### Fixed
- Changing rotation after export/import in Ultralytics YOLO Oriented Boxes format
()
- Export to yolo formats if both Train and default dataset are present
()
- Issue with deleting frames
()
## \[2.24.0\] - 2024-12-20
### Added
- \[CLI\] Added new commands: `project create`, `project delete`, `project ls`
()
- \[SDK\] You can now use `client.projects.remove_by_ids` to remove multiple
projects
()
- Support for boolean parameters in annotations actions
()
### Changed
- Improved uniformity of validation frames distribution in honeypot tasks and
random honeypot rerolls
()
- \[CLI\] Switched to a new subcommand hierarchy; now CLI subcommands
have the form `cvat-cli `
()
- \[CLI\] The output of the `task create`, `task create-from-backup` and
`project create` commands is now just the created resource ID,
making it machine-readable
()
- /api/events can now be used to receive events from several sources
()
### Deprecated
- \[CLI\] All existing CLI commands of the form `cvat-cli `
are now deprecated. Use `cvat-cli task ` instead
(