461 Commits

Author SHA1 Message Date
Alexey Zinoviev 4a00230c96 Audio workspace: exclusive interval end model (#10988) 2026-08-04 17:46:26 +04:00
Andrei Strongin c18932245f Add support for profile create --file, add documentation (#10896)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
This PR adds file-based profile creation:

- `cvat-cli profile create --file <path>`
- Supports plain-text PAT files
- Supports JSON envelopes with `token`, optional `server`, and optional
`name`
- Explicit `--name` and `--server-host` override envelope values
- A complete JSON envelope can create a profile without extra CLI
arguments

It also includes:

- Tests for plain-file import, JSON import, and precedence rules
- CLI/SDK/profile documentation updates
- A changelog entry for `--file`

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [x] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-08-03 14:44:57 +04:00
Aleksei Sosov 194b6754b6 As/add webhook notification for the rest requests (#10897) 2026-07-30 19:10:38 +04:00
Roman Donchenko 4aa0be3df5 Prevent source files from being modified by the Django user (#10575)
Currently, all source files are located in `/home/django`, and owned by
`django`. This means that if there's any vulnerability that lets an
attacker overwrite files in the server, they can replace source files
with their own code, and potentially get that code executed. That's
pretty bad, so I want to harden against that.

Make all source files owned by root, and move them to `/opt/cvat`. Add a
`manage.py` symlink in `/home/django` for backwards compatibility. It
happens that if a script is a symlink, Python does not add the symlink's
directory to `sys.path`, which is great for us, since that lets us avoid
a writable directory on there.

Still, even though `/home/django/manage.py` is owned by root, an
attacker could potentially be able to delete it and replace it with
their own malicious file. To be a bit more safe, replace `~/manage.py`
calls in backend scripts with `django-admin`.

To make sure CVAT can still find the data directory, add a new
environment variable, `CVAT_BASE_DIR` and set it in the Docker image.

This also fixes a minor bug: we no longer override the `HOME`
environment variable in the `Dockerfile`, so now it's automatically set
by `Docker` depending on the current user.
2026-07-23 13:22:24 +03:00
Andrei Strongin 69cdda3e75 CLI profile group (#10875)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
This branch completes the CLI workflow for persistent authentication
profiles. Users can save a CVAT server URL and Personal Access Token
under a named profile, then reuse it with `--profile` instead of
repeatedly passing credentials on the command line.

It adds `cvat-cli profile` commands to:

- List saved profiles, including the active default.
- Create a profile from a PAT, optionally deriving its name from the
server.
- Set, print, or clear the default profile.
- Delete profiles safely.

The implementation builds on the auth/config resolution already present
in `develop`. It uses the SDK’s `AuthStore.put_profile` API, preserves
copy-on-write store updates, and applies the same server-port validation
used by normal CLI client creation.

URL normalization was also moved into shared SDK utilities so both
`Client` and profile creation use one implementation for default HTTPS
schemes, trailing-slash removal, and invalid-scheme validation.

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-07-23 01:12:59 +04:00
Andrei Strongin 59f88379ab CLI dispatch refactor + config group (#10845)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
This branch continues the persistent authentication work for the CVAT
SDK and CLI. It makes saved auth profiles usable from CLI workflows, so
users do not need to repeatedly pass `--server-host`, `--server-port`,
and `--auth` for every command.
The changes centralize CLI auth resolution around the SDK auth helpers,
add support for profile/default-server based connection selection, and
introduce `cvat-cli config default-server` for managing the fallback
server used outside profile-based flows. The branch also adds dispatch
support for CLI commands that do not need an authenticated client, plus
tests and changelog coverage for the new config command and auth
behavior.
### How has this been tested?
Automated and manual tests

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-07-20 00:38:28 +04:00
Andrei Strongin d2b3eea36f Fix regression bug related to port parsing in CLI (#10895)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
<!-- Why is this change required? What problem does it solve? If it
fixes an open
issue, please link to the issue here. Describe your changes in detail,
add
screenshots. -->

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [ ] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.
2026-07-14 15:58:14 +04:00
Roman Donchenko cb55cc676f Enable pytest strict mode (#10886)
This is a new feature added in pytest 9, which includes strict xfail and
a bunch of other strictness options:

https://docs.pytest.org/en/stable/explanation/goodpractices.html#using-pytest-s-strict-mode
2026-07-10 16:38:28 +03:00
Andrei Strongin 6db56e5d2e SDK resolution, arg parser, client builders, exports (#10824)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
<!-- Why is this change required? What problem does it solve? If it
fixes an open
issue, please link to the issue here. Describe your changes in detail,
add
screenshots. -->

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-07-10 15:30:32 +04:00
Andrei Strongin 6de5b99800 feat(sdk): AuthStore profile CRUD, default profile, default server (#10819)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
Implemented all necessary `AuthStore` methods including:

* `list_profiles() -> dict[str, ProfileEntry]`
* `get_profile(name: str) -> ProfileEntry | None`
* `add_profile(name: str, entry: ProfileEntry, *, set_default: bool =
False) -> None`
* `remove_profile(name: str) -> None` — raises KeyError if absent;
clears default_profile if it pointed here.
* `get_default_profile() -> tuple[str, ProfileEntry] | None`
* `set_default_profile(name: str) -> None — raises KeyError if the name
is not a saved profile.`
* `clear_default_profile() -> None`
* `get_default_server() -> str | None`
* `set_default_server(server: str) -> None`
* `clear_default_server() -> None`

### How has this been tested?
Added automated tests

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [ ] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-07-08 14:08:02 +04:00
Maxim Zhiltsov 29ef4d7a33 Validate annotation source (#10521) 2026-07-06 12:42:40 +03:00
Oleg Valiulin 32a62c7dee add worker and redis logging to rest api tests (#10839)
Co-authored-by: Oleg Valiulin <oleg.valiulin@cvat.ai>
Co-authored-by: Andrey Zhavoronkov <andrey@cvat.ai>
2026-07-03 11:34:48 +01:00
Andrei Strongin 0f7232bc87 fix(engine): return 400 when task metadata requested before media_type is set (#10855)
### Motivation and context
#### Fix UnboundLocalError on GET /api/tasks/<id>/data/meta for tasks
without media

#### Motivation

  Production is throwing 500s on GET /api/tasks/<id>/data/meta:
```python
UnboundLocalError: cannot access local variable 'media' where it is not associated with a value
  File "cvat/apps/engine/views.py", line 1935, in metadata
    for item in media
```
 #### Root cause
  
TaskViewSet.metadata() dispatches on db_task.media_type through an if /
elif / elif chain:
```python
if db_task.media_type == AUDIO and mode == INTERPOLATION:
    media = [db_data.audio]; chapters = None; def serialize_media_item(...)
elif db_task.media_type in (IMAGE, POINT_CLOUD):
    media = ...; chapters = ...
elif db_task.media_type:            # ← truthiness guard
    assert False, f"Unknown media type '{db_task.media_type}'"
# no else
```
Task.media_type is declared CharField(..., default="", blank=True), so a
freshly-created Task whose Data row exists but whose media has not been
populated yet has media_type == "". That value is falsy, so none of the
branches execute and media, chapters, and serialize_media_item are never
bound. The subsequent for item in media raises UnboundLocalError and DRF
returns a 500.

The empty-media state was already known at the top of the same method —
the prefetch() match block explicitly handles ("", "") as a no-op — but
that handling was never carried through to the body of the view. The
regression was introduced when the audio media type was added
https://github.com/cvat-ai/cvat/pull/10551, which restructured the
previous if/else into the current chain and put a truthy guard on the
final branch.

 #### Fix

Raise ValidationError early, mirroring the neighbouring db_data is None
check just a few lines above:
```python
  db_data = db_task.data
  if db_data is None:
      raise ValidationError("Data is not uploaded for the task yet")

  if not db_task.media_type:
      raise ValidationError("Task has no media data yet")
  ```
  This turns the silent 500 into an actionable 400 with a clear message, is consistent with the existing "data not uploaded" pattern, and requires no changes to the dispatch chain below.

### How has this been tested?
<!-- Please describe in detail how you tested your changes.
Include details of your testing environment, and the tests you ran to
see how your change affects other areas of the code, etc. -->

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes that apply.
If an item isn't applicable for some reason, then ~~explicitly strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the pull request.
If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in CHANGELOG.md -->
- [x] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](
  https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
  https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-07-03 14:20:26 +04:00
Roman Donchenko 7811d62e3f SDK: Remove server scheme autodetection (#10673)
This has been deprecated in #9384. For maximum compatibility, keep
supporting schemaless URLs, but always assume HTTPS instead of
autodetecting.
2026-07-01 14:59:47 +03:00
Roman Donchenko 6695b48bae Update test packages to enable running tests with Python 3.14 (#10843)
Our Helm tests currently use the default Python version in
`ubuntu-latest`, which will become 3.14 once `ubuntu-latest` becomes
Ubuntu 26.04. We should make sure the tests are ready for that.

Some notes:

* The `numba` pin should not be necessary anymore, since the problem it
  works around was fixed in coverage 7.6.1, and I've already updated
  coverage to 7.14.0 in 76e15a01e0.

* There is no version of NumPy that supports both 3.10 and 3.14. I've
  elected to use the lowest version that supports each, since it helps
  ensure that we didn't make the SDK dependent on a newer version by
  accident.

* pytest 9.0.3 is not the latest version, but the newest one is
  currently incompatible with pytest-cases.

Co-authored-by: Maxim Zhiltsov <zhiltsov.max35@gmail.com>
2026-06-30 16:48:02 +03:00
Andrei Strongin fb5ff45b90 feat(sdk): adjust CLI auth file permissions (#10821) 2026-06-25 10:30:09 +03:00
Andrei Strongin 0112ef9f32 feat(sdk): add 'is_posix' method 2026-06-24 18:12:19 +04:00
Andrei Strongin 40dd78266f feat(sdk): Change value of DEFAULT_SERVER 2026-06-24 17:51:09 +04:00
Andrei Strongin eb9c76ba0a feat(sdk): Add clarifying comment 2026-06-24 17:41:29 +04:00
Andrei Strongin 11de084677 Merge remote-tracking branch 'origin/develop' into feat/sdk-persistent-auth 2026-06-24 17:26:08 +04:00
Andrei Strongin 12703fc426 feat(sdk): unify OS platform checks and remove redundant test 2026-06-24 17:25:39 +04:00
Andrei Strongin 03babd5fed feat(sdk): fix requested changes 2026-06-24 16:53:08 +04:00
Andrei Strongin ad444e26e0 Add list query parameter support to high-level SDK (#10778)
Extend ModelListMixin.list() to accept arbitrary query parameters
(filter, search, ordering, field filters, etc.) and forward them to the
paginated list endpoint. The `filter` argument additionally accepts a
JsonLogic mapping which is serialized to JSON automatically.

---------

Co-authored-by: Maxim Zhiltsov <maxim@cvat.ai>
2026-06-23 16:23:03 +04:00
Andrei Strongin ac3358992a Fix lint 2026-06-23 15:13:07 +04:00
Andrei Strongin 585de84bb4 feat(sdk): add auth store persistence 2026-06-23 14:52:34 +04:00
Andrei Strongin 92c3e627a2 feat(sdk): add ProfileEntry and auth store path 2026-06-23 14:43:17 +04:00
Roman Donchenko 27953f19d2 Fix handling of GET /api/quality/reports with inaccessible parent_ids (#10807)
Currently this either returns 200 and an empty list (if the parent
quality report is in an accessible organization or a personal
workspace), or 500 (if the parent is in an inaccessible organization).
This is inconsistent with all other resource-based filters, where the
endpoint returns 403 if the resource is inaccessible (and obviously we
should never return a 500 status regardless). It's also a (very minor)
security problem, since it lets an attacker learn some information about
a quality report they can't access.

The cause is that we don't explicitly check that the user has
permissions to view the parent, so do that.

Thanks to @geo-chen for the report.
2026-06-19 16:48:24 +03:00
Aleksei Sosov 8b3ab87e03 Use RQ callbacks for export and backup webhooks (#10734) 2026-06-18 18:20:43 +04:00
Andrei Strongin 4f415c09c0 Fix SDK methods IAM issues (#10665)
Fixes #8914 

**Issue**: Several high-level SDK methods — `Project.get_tasks()`,
`Project.get_labels()`, `Task.get_jobs()`, `Task.get_labels()`,
`Job.get_issues()`, `Job.get_labels()`, and `Issue.get_comments()` —
failed with IAM
permission errors when called on resources belonging to an organization,
unless the client had already been configured with the correct
organization context via `client.organization_context()`.
   
**Root cause**: These methods issued API requests without propagating
the organization scope inferred from the resource itself, so CVAT's IAM
layer rejected them as if they were personal workspace requests.

**Fix**: Added a `organization_context_for(client, organization_id)`
context manager in `model_proxy.py`. It looks up the organization from
the resource's organization field and temporarily sets the matching org
slug on the client (skipping the switch if the slug is already correct).
All affected proxy methods now wrap their API calls with this context
manager, so the organization scope is automatically applied regardless
of how the client was initialized.
Tests covering all affected methods with org-owned resources were added
to verify the fix.
2026-06-16 13:11:13 +03:00
Aleksei Sosov 8c704275ba Add attempt and request_duration fields to webhook deliveries (#10693) 2026-06-09 13:08:47 +04:00
Andrei Strongin c4a79cefef Simplify native agent task cache limiter after chunk cache removal (#10714) 2026-06-05 13:09:27 +03:00
Boris Sekachev 7fd11e547b Restrict organization worker exports to resource owners only (#10685) 2026-06-03 23:48:26 +03:00
Andrei Strongin 5f988f26e0 Native function agents now download and process task image chunks incrementally (#10675)
<!-- Raise an issue to propose your change
(https://github.com/cvat-ai/cvat/issues).
It helps to avoid duplication of efforts from multiple independent
contributors.
Discuss your ideas with maintainers to be sure that changes will be
approved and merged.
Read the [Contribution guide](https://docs.cvat.ai/docs/contributing/).
-->

<!-- Provide a general summary of your changes in the Title above -->

### Motivation and context
**Problem Statement:**
Before these changes, when the agent receives a task annotation request,
it first downloads all the images (in chunks), then iterates through
them and runs the model on each one. But it's not the best behavior for
the agent: it means the agent needs enough disk space to store all the
images (even though they're not all in use at the same time); moreover,
the progress bar in the UI hangs at zero for a long time, which isn't
very informative.

Now it works like this: the agent downloads the first chunk, then
immediately processes it. While it's processing, the agent downloads the
next chunk. After processing, the chunk is deleted.

### How has this been tested?
Manual and automated tests.

### Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply.
If an item isn't applicable for some reason, then ~~explicitly
strikethrough~~ the whole
line. If you don't do that, GitHub will show incorrect progress for the
pull request.
If you're unsure about any of these, don't hesitate to ask. We're here
to help! -->
- [x] I submit my changes into the `develop` branch
- [x] I have created a changelog fragment <!-- see top comment in
CHANGELOG.md -->
- [x] I have updated the documentation accordingly
- [x] I have added tests to cover my changes
- [x] I have linked related issues (see [GitHub docs](

https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword))

### License

- [x] I submit _my code changes_ under the same [MIT License](
https://github.com/cvat-ai/cvat/blob/develop/LICENSE) that covers the
project.
  Feel free to contact the maintainers if that's a concern.

---------

Co-authored-by: Roman Donchenko <roman@cvat.ai>
2026-06-03 18:36:00 +04:00
Roman Donchenko 0344ff59de Fix flaky test TestRequestsListFilters (#10707)
There are actually two problems with it:

* The fixtures could execute in the wrong order, because all of the
  fixtures in this test are class-level, and the order pytest executes
  these in is indeterminate. So the DB/Redis reset could happen after the
  creation of test data. Fix it by adding explicit fixture dependencies.

* It takes a while for all the setup to execute, which can time out.
  Bump the timeout.

In addition, update the `wait_background_request` function to stop
waiting if a request fails. This lets the test fail early if something
goes wrong, instead of timing out.
2026-06-02 18:18:48 +03:00
Maxim Zhiltsov 1f0c50d083 Fix flaky TestGetAuditEvents test (#10695) 2026-06-02 14:59:13 +03:00
Maxim Zhiltsov e369f3a371 Fix preview error in tasks in projects with unfinished data processing (#10692) 2026-06-01 16:05:04 +03:00
Maxim Zhiltsov 65adf243fa Add server opt-in for client-side preview placeholders (#10611) 2026-06-01 15:38:56 +03:00
Andrei Strongin a1a2109954 Merge pull request #10654 from cvat-ai/feature/add-transformation-for-instance-segmentations-torchvision
Add transformation for instance segmentations models in torchvision library
2026-05-25 21:53:03 +04:00
Andrei Strongin 4d17f9a60d Fix requested changes 2026-05-23 02:48:06 +04:00
Kirill Lakhov d5ddce049b Resume chunk download (#10651)
This PR adds resumable/retryable annotation chunk downloads to improve annotation page reliability during transient network interruptions.
2026-05-22 13:39:12 +03:00
Andrei Strongin 9db757f427 Remove rectangle and ellipse shapes 2026-05-22 12:18:31 +04:00
Andrei Strongin 2ff4a76ade Add transformation for instance segmentations models in torchvision library 2026-05-22 00:03:41 +04:00
Boris Sekachev 887eab012a Track client IP addresses in event logs (#10545) 2026-05-21 17:00:13 +03:00
Andrei Strongin c5e968b652 Fix test 2026-05-21 16:15:58 +04:00
Andrei Strongin 215d65ac2e Make sure 100% test coverage 2026-05-20 18:26:11 +04:00
Andrei Strongin 9753f49980 Merge branch 'develop' into feature/add-export-import-datasets-for-project-cli
# Conflicts:
#	cvat-cli/src/cvat_cli/_internal/command_base.py
#	cvat-cli/src/cvat_cli/_internal/commands_projects.py
#	cvat-cli/src/cvat_cli/_internal/commands_tasks.py
#	site/content/en/docs/api_sdk/cli/_index.md
#	tests/python/cli/test_cli_projects.py
2026-05-20 17:06:22 +04:00
Andrei Strongin f50dfefb12 Add 'backup' and 'create-from-backup' methods into CLI for Project entity (#10618) 2026-05-20 14:45:37 +03:00
Andrei Strongin 3c7e52d9b0 Fix requested changes 2026-05-20 15:39:11 +04:00
Maxim Zhiltsov 06f14c3768 Audio interval annotations, backups, and TSV dataset format (#10583) 2026-05-20 13:39:29 +03:00
Andrei Strongin 523878c233 Add 'export-dataset' and 'import-dataset' for Project entity in CVAT CLI 2026-05-20 00:38:02 +04:00