# Upload screenshots, videos and traces

Source: https://docs.qualflare.com/docs/cli/artifacts · Last updated: 2026-10-28

Attach screenshots, videos and Playwright traces to results you upload with qf collect: what uploads by default, --upload-artifacts, Detox files and limits.

To attach screenshots, videos and Playwright traces to results you upload to Qualflare, run `qf <identifier> collect` with `--upload-artifacts video,trace`. Screenshots upload by default.

> **Caution: Uploaded screenshots, videos and traces are deleted after 30 days**
>
> Screenshots, videos and trace files that `qf <identifier> collect` uploads with your test results are deleted 30 days after upload and can't be restored. Download any you need to keep before then. See [Data Retention](https://docs.qualflare.com/docs/administration/project-settings#data-retention).

## Before you begin

* A saved identifier: [Authenticate with qf login](https://docs.qualflare.com/docs/cli/authentication).
* An access token whose creator still holds the project role that uploads need (requires the Editor role or higher in the project).
* A report that references files: a [native reporter](https://docs.qualflare.com/docs/cli/collect#native-reporters)'s output directory, [Allure results](https://docs.qualflare.com/docs/cli/formats#allure), or Detox's artifacts folder.

## What uploads by default

* `qf` knows three artifact kinds: `image` (screenshots, on by default), `video` and `trace` (Playwright traces).
* Inline PNG, JPEG and GIF screenshots move out of the report before it is sent, up to 8 uploads at a time.
* Other inline attachments, such as logs and text, stay inside the report.

*Figure: qf collect uploads the screenshots in a report by default.*

## Upload videos and traces

1. Run `collect` with the kinds you want, and give it more time:
   ```bash
   qf myapp collect ./qualflare-results --upload-artifacts video,trace --timeout 5m
   ```
2. Open a case run in the launch: its **Attachments** panel lists the uploaded files.

In CI, set `QF_UPLOAD_ARTIFACTS=video,trace` instead of passing the flag. Without either, `collect` leaves the videos and traces out and says so:

```text
skipped 2 video attachment(s): upload them with --upload-artifacts=video
```

## Turn off artifact uploads

`--upload-artifacts none` uploads no artifacts at all, screenshots included. `none` can't be combined with a kind:

```text
artifact kind "none" cannot be combined with other kinds
```

## Attach Detox artifacts

For Detox, point `--artifacts-dir` at the Detox artifacts folder so `qf` can attach its files to the matching tests:

```bash
# The @qualflare/detox report directory
qf myapp collect ./qualflare-results --artifacts-dir ./artifacts

# Detox's own Jest JSON
qf myapp collect jest-results.json --format detox --artifacts-dir ./artifacts
```

`--artifacts-dir` takes the Detox artifacts root or one `<configuration>.<timestamp>` run inside it; nothing is scanned without it. It works only for Detox and Jest reports, and fails for any other format:

```text
--artifacts-dir is not supported for playwright reports; it currently applies to detox (and jest, since a Detox report is a Jest report)
```

## Give uploads enough time

Uploading videos and traces uses time from the `--timeout` deadline, so raise it too, for example `--timeout 5m`.

Screenshot and video uploads are not cut off by this deadline: each one gets its own 5-minute limit. The deadline starts when `collect` starts, though, so the time they take still counts against it. Raise `--timeout` when you upload videos, traces or many screenshots. `QF_TIMEOUT` (default `120s`) caps each single HTTP request, so raise it as well only when one request takes longer than two minutes.

## Size limits

Each input file can be up to 100 MB. The report `qf` sends must fit the server's 10 MB limit, and `qf` keeps it under 9.5 MB: it moves screenshots out of the report first, then drops the remaining inline attachments, other files before images and the largest first, with a warning for each. If the results alone are still too large, the upload fails.

```text
warning: dropped attachment "<name>" (<size>) from "<case>" to keep the upload under the server's 10 MB limit
the results are <size>, over /collect's 10 MB limit even without attachments; split the upload, e.g. collect fewer files per run
file <file> is too large (<bytes> bytes, max 104857600 bytes)
```

## Troubleshoot

* `unknown artifact kind "vidoe": must be one of video, trace, image, or "none" to upload none`: fix the spelling in `--upload-artifacts`. A misspelt `QF_UPLOAD_ARTIFACTS` is ignored instead, so check it when videos don't arrive.
* `artifact kind "none" cannot be combined with other kinds`: pass `none` on its own.
* `skipped 2 video attachment(s): upload them with --upload-artifacts=video`: the report references videos you didn't ask for. Add the flag it names.
* `skipping video attachment "<name>" (<path>): <error>`: that file's upload failed, and the case keeps a placeholder for it. `collect` still uploads the results.

## Next steps

* [Sharded runs and result directories](https://docs.qualflare.com/docs/cli/sharding) · [Upload results with qf collect](https://docs.qualflare.com/docs/cli/collect) · [Launches](https://docs.qualflare.com/docs/runs/launches) · [Analyze launch results](https://docs.qualflare.com/docs/runs/analyze-results)
