# Getting started

## Overview

The BlurIt On Premise version (aka BlurIt OP) provides a full offline and unlimited self hosted use of BlurIt by deploying the solution directly on your servers.

This guide will go through the installation process of a standard BlurIt OP setup. If you require custom settings related to the number of GPUs and/or the number of workers, please contact us at <contact@blurit.io>.

**If you want to install BlurIt OP on a cloud provider (AWS, Azure, GCP), please** [**follow instructions here**](/2.15.0/cloud-images/introduction)**.**

## Before you start

Before you start, be sure you have received from Wassa the BlurIt OP archive that contains the installation files.

BlurIt OPs runs in a dockerized environment on Linux or Windows, hence the installation of BlurIt OP requires basic knowledge of Linux/Windows and Docker usage.

If you need any help installing BlurIt OP, please contact us at <contact@blurit.io>.


# Requirements

## Hardware requirements

* CPU recommended: 3-4 threads as the base and 1-2 cores per worker on each machine.
* GPU Nvidia (consumer and professional) [computer capability](https://developer.nvidia.com/cuda-gpus) >= sm\_37 for optimal performance
* RAM GPU 4-6 GB for 1 worker depending of the resolution
* RAM > 16 GB
* 60 Go + local storage

## Software dependencies

* Linux Ubuntu ≥ 20.04 / Debian ≥ 10 / CentOS-Rocky ≥ 7 / Amazon Linux 2 or 2023 Deep Learning AMI GPU&#x20;
* Windows 10 Pro, 11 Pro and server 2022 with Windows Subsystem for Linux (WSL)
* Install the following dependencies either using the provided script ([Linux](/2.15.0/blurit-on-premise/installation/linux-dependencies) only) or manually ([Linux](/2.15.0/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.15.0/blurit-on-premise/installation/windows-dependencies-wsl)):
  * [nvidia drivers](https://www.nvidia.com/download/index.aspx) (recommended >= 580 for CUDA 13.0)
  * [docker ce](https://docs.docker.com/engine/install/) and [post install linux](https://.docker.com/engine/install/linux-postinstall/)
  * [docker desktop](https://docs.docker.com/desktop/install/windows-install/) for Windows WSL
  * [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)

## Blurit archive

| File                               | Always provided | Description                                   |
| ---------------------------------- | --------------- | --------------------------------------------- |
| **licence.txt**                    | **Yes**         | License file                                  |
| **login-registry.txt**             | **Yes**         | Credentials used to download the Blurit files |
| **blurit**                         | **Yes**         | Blurit CLI used during installation           |
| blurit\_stack.yml                  | No              | Custom configuration file                     |
| .env                               | No              | Custom configuration file                     |
| Blurit-op.postman\_collection.json | No              | Postman collection for the Blurit OP API      |
| README.md                          | No              | Custom documentation file                     |
| install\_dependencies.sh           | No              | Installation script (deprecated)              |

###


# Installation

{% content-ref url="/pages/XGRsi3LnCyZ37pzzDvji" %}
[Linux dependencies](/2.15.0/blurit-on-premise/installation/linux-dependencies)
{% endcontent-ref %}

{% content-ref url="/pages/u0NzVXfbZPsHjuBnJzJp" %}
[Windows dependencies (WSL)](/2.15.0/blurit-on-premise/installation/windows-dependencies-wsl)
{% endcontent-ref %}

{% content-ref url="/pages/33MB6VJhfv9yRtJwhgQf" %}
[Install Blurit OP](/2.15.0/blurit-on-premise/installation/install-blurit-op)
{% endcontent-ref %}

{% content-ref url="/pages/usinf50sM4HYGmrXTSW3" %}
[Run Blurit OP](/2.15.0/blurit-on-premise/installation/run-blurit-op)
{% endcontent-ref %}

{% content-ref url="/pages/QyDYTQ2GDnrCXKq64Mpq" %}
[Multi-servers installation](/2.15.0/blurit-on-premise/installation/multi-servers-installation)
{% endcontent-ref %}

{% content-ref url="/pages/1j3QnV6qSF26ovSTpiXI" %}
[Post installation verifications](/2.15.0/blurit-on-premise/installation/post-installation-verifications)
{% endcontent-ref %}


# Linux dependencies

*Note: Don't follow this step if you plan to run BlurIt OP on Windows.* *Go there* *instead.*

## Choice 1 : use the Blurit CLI (recommended)

{% hint style="warning" %}
The `install_dependencies.sh` script shipped with older archives is deprecated. Dependencies are now installed by the Blurit CLI, with the `blurit requirements` command described below.
{% endhint %}

### Step 1 : extract the archive

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

The `blurit` binary is provided in the archive you received: there is nothing to download and nothing to install — run it straight from the directory where you extracted the archive:

```bash
tar -xzf filename.tar.gz
cd blurit-op
```

Replace "filename" with the actual name of the archive that was provided to you.

At the end of the `requirements` run, the command detects that `blurit` is not in your `PATH` and offers to copy it there for you, so you don't have to do it by hand.

### Step 2 : run `./blurit requirements`

{% hint style="warning" %}
If you are installing BlurIt on an old server and want to maintain specific version dependencies, we don't recommend to use it but rather to [manually install everything](#choice-2-manual-dependencies-installation).
{% endhint %}

{% code lineNumbers="true" %}

```sh
./blurit requirements
```

{% endcode %}

{% hint style="danger" %}
Run the command as your **regular user, not with `sudo`**. It calls `sudo` on its own for every step that needs root privileges (you will be prompted for your password), and it adds **the user running it** to the `docker` group. Launching it with `sudo` would add `root` to that group instead, and you would still not be able to use Docker as your own user afterwards.
{% endhint %}

The command is **interactive** and **safe to re-run**: it only checks what is already present and installs what is missing, so you can run it again after fixing a problem or after adding a GPU to the server.

#### 1. Distribution detection

The distribution and version are read from `/etc/os-release` (or `lsb_release`).

An unsupported distribution or version does not stop the command: it is reported as a failed `OS` requirement and the other steps still run, but the installation is then unsupported and may fail.

#### 2. Installation type

You are asked to choose between a CPU-only and a GPU installation:

```
Choose installation type:
1) CPU-only installation (no NVIDIA components)
2) GPU installation (with NVIDIA drivers and container toolkit)
Enter your choice (1 or 2):
```

Choose **2** if the server has an NVIDIA GPU — this is the recommended setup for Blurit OP, and by far the fastest. Choose **1** for a CPU-only server: all NVIDIA-related steps are then skipped.

#### 3. GPU detection

For a GPU installation, the GPU is detected with `lspci` (or `nvidia-smi` when `lspci` is not available) and the driver to install is selected accordingly — a **Tesla** (datacenter) GPU uses the NVIDIA CUDA repositories, a standard GPU uses the distribution's driver packages.

If no NVIDIA GPU is found, the NVIDIA components are skipped and a warning is printed at the end of the run.

#### 4. Requirements report

The status of every requirement is then printed, in green when satisfied, in red when missing, in yellow for warnings:

```
Requirements:
  OS............................. Ubuntu 22.04.4 LTS
  RAM (>= 16 GB)................. Installed
  Disk space (>= 60 GB).......... Yes
  Docker......................... Not installed
  Docker Compose (optional)...... Not installed
  User in docker group (optional) Missing
  Shell completion (optional).... Not installed
  NVIDIA driver.................. Not installed
  NVIDIA Container Toolkit....... Not installed
  Docker NVIDIA runtime.......... Not configured
```

{% hint style="info" %}
If you run `blurit requirmeents` after havign already installed Blurit OP, the CLI may report insufficient disk space. In that cas, you can probably safely ignore the warning as no extra installation files will be downloaded.
{% endhint %}

| Requirement                  | What is checked                                                                                            | What is installed / configured                                                                                                |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **OS**                       | Distribution and version are in the supported list                                                         | Nothing — informational warning only                                                                                          |
| **RAM (>= 16 GB)**           | Total RAM reported by `/proc/meminfo`                                                                      | Nothing — a warning is printed below 16 GB, BlurIt may not run optimally                                                      |
| **Disk space (>= 60 GB)**    | Free space on the Docker data directory (`docker info -f '{{.DockerRootDir}}'`, usually `/var/lib/docker`) | Nothing — a warning is printed below 60 GB, BlurIt may not run optimally                                                      |
| **Docker**                   | The `docker` command exists                                                                                | Docker CE from Docker's official repository (`docker-ce`, `docker-ce-cli`, `containerd.io`, buildx and compose plugins)       |
| **Docker Compose**           | `docker compose version` succeeds, or `docker-compose` exists                                              | Installed with Docker; on Amazon Linux, the latest Compose plugin is downloaded into `/usr/local/lib/docker/cli-plugins`      |
| **User in docker group**     | Your user belongs to the `docker` group                                                                    | `sudo usermod -aG docker $USER`, so that BlurIt can be operated without `sudo`                                                |
| **Shell completion**         | The completion line is present in your `~/.bashrc` or `~/.zshrc`                                           | Adds the `blurit` auto-completion line to that file                                                                           |
| **NVIDIA driver**            | The `nvidia-smi` command exists                                                                            | The NVIDIA driver for your distribution and GPU model (GPU installation only)                                                 |
| **NVIDIA Container Toolkit** | The `nvidia-ctk` command exists                                                                            | `nvidia-container-toolkit`, then `nvidia-ctk runtime configure --runtime=docker` and a Docker restart (GPU installation only) |
| **Docker NVIDIA runtime**    | `"default-runtime": "nvidia"` is set in `/etc/docker/daemon.json`                                          | Writes that runtime configuration into `/etc/docker/daemon.json` and restarts Docker (GPU installation only)                  |

Requirements marked **(optional)** are not blocking: BlurIt runs without them, but you will have to prefix every Docker command with `sudo` if you skip the `docker` group.

#### 5. Selecting what to install

Only the missing requirements are then offered, in a checkbox list where everything is selected by default:

```
Select requirements to install (up/down to move, space to toggle, enter to confirm):
> [x] Docker
  [x] Docker Compose
  [x] User in docker group
  [x] Shell completion
  [x] NVIDIA driver
  [x] NVIDIA Container Toolkit
  [x] Docker NVIDIA runtime
```

* **up / down arrows** move the cursor,
* **space** toggles the entry under the cursor,
* **enter** confirms and starts the installation.

Uncheck an entry to keep an existing setup of your own — for example a Docker installation managed by your IT department. If you uncheck everything, nothing is installed.

If all requirements are already satisfied, the command simply prints `All requirements are already installed.` and moves on to the final steps.

#### 6. Installation

Each selected requirement is installed in turn, then re-checked. The output of the underlying package manager is displayed as it runs, and `sudo` may ask for your password. If a requirement is still missing after its installation step, the command stops with an error so that you can fix the cause before going further.

Installing an NVIDIA driver takes several minutes, during which the server may seem unresponsive. This is expected — do not interrupt the command.

#### 7. Final steps

Depending on what was installed, the command ends with up to three questions:

1. **Reboot** — if an NVIDIA driver was installed, a reboot is required to load it:

   ```
   NVIDIA drivers were installed and require a reboot to load. Reboot now? THE SERVER WILL BE RESTARTED! [y/N]:
   ```

   Answer `y` to reboot immediately, or `N` to reboot yourself later. **The driver is not usable until the server has rebooted.**
2. **`newgrp docker`** — if your user was added to the `docker` group, the change only applies to new sessions. Accepting opens a new shell with the group applied, so you can continue right away; otherwise, log out and log back in.
3. **Installing the CLI** — if `blurit` is not in your `PATH`, the command offers to copy the binary there:

   ```
   The 'blurit' binary is not in your PATH, do you want to install it somewhere in your PATH?
   Be sure to choose a directory that is listed in your PATH
   Installation directory [/usr/local/sbin]:
   ```

   Accept the proposed directory (or type another one that is in your `PATH`) and every later command can be called as `blurit ...` instead of `./blurit ...`.

{% hint style="info" %}
If you would rather install it yourself, move it to a directory of your `PATH` and drop the `./` prefix from every command below:

```bash
sudo mv blurit /usr/local/sbin
```

And if running `./blurit` reports `Permission denied`, the executable bit was lost while copying the archive around: restore it with `chmod +x blurit`.
{% endhint %}

### Amazon Linux

Amazon Linux images are expected to ship with Docker and, for GPU instances, with the NVIDIA driver, the container toolkit and the Docker NVIDIA runtime already installed and configured. The command therefore only checks them, and installs Docker Compose when it is missing. A missing `docker` binary is a fatal error: install Docker before running `blurit requirements`.

### Verifying the installation

After the run (and after the reboot, if there was one):

{% code lineNumbers="true" %}

```bash
docker version            # Docker is installed and usable without sudo
docker compose version    # Docker Compose plugin
nvidia-smi                # GPU installation only: driver loaded, GPU visible
```

{% endcode %}

For a GPU installation, you can also check that Docker can reach the GPU:

```bash
docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

### Troubleshooting

* **`permission denied` on the Docker socket** — your session does not have the `docker` group yet. Run `newgrp docker`, or log out and log back in.
* **`blurit: command not found`** — the binary is not in your `PATH`. Call it from the directory where you extracted the archive with `./blurit`, or move it to a directory of your `PATH` (`sudo mv blurit /usr/local/sbin`).
* **A requirement fails to install** — the command stops with `<requirement> installation failed`. Fix the cause reported by the package manager above that line (no network access, proxy, repository not reachable, disk full), then run `./blurit requirements` again: the steps already completed are skipped.
* **Unsupported distribution** — the `OS` requirement is red. You can continue at your own risk, or follow the [manual installation](#choice-2-manual-dependencies-installation).

### Running it as part of the installation

The requirements steps can also be run right before the BlurIt configuration, in a single command:

```bash
./blurit install --requirements
```

:rotating\_light: If NVIDIA drivers were installed, please reboot the server to load them, then go to the Configuration page. :rotating\_light:

## Choice 2 : manual dependencies installation

### Nvidia drivers Installation

1. Download the NVIDIA driver >= 470 runfile from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>
2. Open a terminal and navigate to the directory where the downloaded runfile is located.
3. `$ chmod +x <filename>.run`\
   Replace `<filename>` with the actual name of the downloaded runfile.
4. `$ sudo ./<filename>.run`
5. `$ sudo reboot`

### Docker Installation

The Docker installation documentation is [here](https://docs.docker.com/engine/install/).

{% tabs %}
{% tab title="Ubuntu" %}
{% code lineNumbers="true" fullWidth="false" %}

```bash
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Debian" %}
{% code lineNumbers="true" %}

```bash
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Centos" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}

{% tab title="RHEL" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Post-install docker linux (required):

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Nvidia-docker installation

Nvidia-docker installation documentation is [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

{% tabs %}
{% tab title="Ubuntu / Debian" %}
{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}

{% tab title="Centos / RHEL" %}
{% code lineNumbers="true" %}

```bash
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}
{% endtabs %}

Configure the Docker daemon to recognize the NVIDIA Container Runtime:

{% code lineNumbers="true" %}

```bash
sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Restart the Docker daemon to complete the installation after setting the default runtime:

{% code lineNumbers="true" %}

```bash
sudo systemctl restart docker
```

{% endcode %}

Test if Nvidia-docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

{% endcode %}

This should result in a console output shown below:

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.51.06    Driver Version: 470.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

### Configuring daemon.json

Open `/etc/docker/daemon.json` with your favorite text editor.

Add `"default-runtime": "nvidia",` to the json. Exemple:

{% code title="/etc/docker/daemon.json" lineNumbers="true" %}

```json
{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime"
    }
  }
}
```

{% endcode %}


# Windows dependencies (WSL)

*Don't follow this step if you plan to run BlurIt OP on Linux.* [*Go there*](/2.15.0/blurit-on-premise/installation/linux-dependencies) *instead.*

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Custom Configuration File** (if applicable): `blurit_stack.yml`

## Nvidia Driver installation

Download the NVIDIA driver >= 470 exe from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>

You can also update the drivers using [Nvidia Geforce Experience](https://www.nvidia.com/fr-fr/geforce/geforce-experience/).

## Install WSL 2 (Windows Subsystem Linux)

To Check if WSL is installed, open PowerShell as administrator and run:

{% code lineNumbers="true" %}

```powershell
wsl -l –v
```

{% endcode %}

If WSL is not installed:

{% code lineNumbers="true" %}

```
wsl --install -d Ubuntu
```

{% endcode %}

Then reboot your machine.

It is possible to modify the resources allocated to WSL. For more information, you can refer to this link: <https://learn.microsoft.com/fr-fr/windows/wsl/wsl-config#wslconfig>.

## Docker installation

Instruction to install docker CE on windows with WSL 2 backend : <https://docs.docker.com/desktop/install/windows-install/>.

During the install don't forget to tick the Use **WSL 2 instead of Hyper-V** checkbox.

Additionally, if you want the BlurIt app to restart automatically when the machine restarts, check the box labeled 'Start Docker Desktop when you sign, in.'

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/P1OgbovyIqYR0foNPWC2/docker-config.PNG" alt=""><figcaption></figcaption></figure>

## Nvidia-docker installation

To enter WSL, open PowerShell and type `wsl` followed by pressing Enter.

{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Verify that Nvidia-Docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi -a
```

{% endcode %}

### Configuring Docker daemon

Append the following JSON content on the Docker Desktop config like this:

{% code lineNumbers="true" %}

```json
{
	... # current content
	"runtimes": {
		"nvidia": {
			"path": "/usr/bin/nvidia-container-runtime",
			"runtimeArgs": []
		}
	},
	"default-runtime": "nvidia"
}
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/oy5tkAF8voXVnUapRoTF/Windows_daemon-docker.png" alt=""><figcaption></figcaption></figure>

Restart Docker for the change to take effect.

### Post-install docker linux on WSL (required):

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

## Blurit CLI

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

The `blurit` binary is provided in the archive you received: there is nothing to download and nothing to install. Extract the archive **from WSL** (not from the Windows Explorer, so that the file permissions are preserved) and run the CLI straight from that directory:

{% code lineNumbers="true" %}

```bash
tar -xzf filename.tar.gz
cd blurit-op
./blurit version
```

{% endcode %}

Replace "filename" with the actual name of the archive that was provided to you.

If you prefer to call it as `blurit` instead of `./blurit`, move it to a directory of your `PATH`:

```bash
sudo mv blurit /usr/local/sbin
```

{% hint style="info" %}
If running `./blurit` reports `Permission denied`, the executable bit was lost while copying the archive around: restore it with `chmod +x blurit`.
{% endhint %}

{% hint style="warning" %}
The `blurit requirements` command described on the [Linux dependencies](/2.15.0/blurit-on-premise/installation/linux-dependencies) page is meant for native Linux servers: it installs Docker Engine and the NVIDIA driver itself. On WSL, Docker is provided by Docker Desktop and the NVIDIA driver is installed on Windows, so follow the manual steps of this page instead.
{% endhint %}

You can now continue with [Install Blurit OP](/2.15.0/blurit-on-premise/installation/install-blurit-op).


# Install Blurit OP

`blurit install` configures and prepares your BlurIt On-Premise instance: it asks you a series of configuration questions, initialises the Docker Swarm cluster and downloads the images. The stack itself is started afterwards with `blurit start`, described in [Run BlurIt OP](/2.15.0/blurit-on-premise/installation/run-blurit-op).

## Before you start

* The dependencies must be installed — see Linux dependencies or Windows dependencies (WSL).
* Keep the archive you received at hand: it contains your **registry credentials** (`login_registry.txt`), needed to download the images, and your **license file**, which is activated after the first start.
* If the Blurit team sent you a custom compose file (`blurit_stack.yml`), keep its path at hand too.

## Running the installer

{% code lineNumbers="true" %}

```bash
./blurit install
```

{% endcode %}

With no argument, the command downloads the official compose template for your version. Other forms:

| Command                                 | What it does                                                                                |
| --------------------------------------- | ------------------------------------------------------------------------------------------- |
| `./blurit install blurit_stack.yml`     | Uses the custom compose file provided by the Blurit team instead of downloading a template. |
| `./blurit install --requirements`       | Runs the dependency checks first, then the installation.                                    |
| `./blurit install --template-url <url>` | Downloads the template from another URL (given to you by Blurit support).                   |

The command is **safe to re-run**: every question is pre-filled with the value from your previous installation, so you can change a single setting by pressing `Enter` on all the others.

## Configuration

### AI model

```
Choose the AI model version to use:
  - tiny: A model optimized for speed at the expense of very slightly lower precision.
  - standard: A model optimized for dectection.
```

* **tiny** (default) — optimized for speed: images and videos are processed faster, at the cost of a very slight loss of precision.
* **standard** — optimized for detection quality: slightly slower, more accurate, to be preferred when precision matters more than throughput.

Your choice selects the image tag of the blurring workers (`…/worker:<version>` or `…/worker:<version>-tiny`).

### Server name

```
Enter server name (IP or domain name) [127.0.0.1]:
```

The domain name or IP address through which the Manager web app and the API will be reached. If you plan to enable HTTPS, be sure to chose an hostname that matches your SSL certificate.

### SSL configuration

```
Do you want to configure SSL certificates? [y/N]:
```

Answer `y` to serve the Manager and the API over HTTPS. You are then asked for two files, both in `.pem` format:

1. **Path to SSL certificate file (.pem)** — the public certificate used for the HTTPS connections.
2. **Path to SSL private key file (.pem)** — the private key matching that certificate.

If you do not have a certificate, you can obtain a free one from a service such as [Let's Encrypt](https://letsencrypt.org/), or use a self-signed certificate for internal testing. Without SSL, the Manager and the API are served over plain HTTP on port 80.

### Flower credentials

```
Enter username for Flower Manager [flower_user]:
Enter password for Flower Manager:
```

Flower is the monitoring interface of the processing queues, described in Monitoring With Flower. These credentials protect it.

### Local storage

```
Local input directory (where you will put the files to process) [$HOME/blurit-op/input]:
Local output directory (where BlurIt OP will store the processed files) [$HOME/blurit-op/output]:
```

These two directories are the base directories where BlurIt OP reads the media to process and writes the results (blurred images/videos and detection JSON files) on the server running BlurIt OP. They are created if they do not exist.

{% hint style="warning" %}
Both directories are **mandatory**, even if you plan to use S3 storage only.

They are given to **user and group 1200** (`chown -R 1200:1200`, plus the setgid bit so new files inherit the group). This is required for BlurIt to read and write them. The UID/GID 1200 is a dedicated, non system-reserved identity: it avoids conflicts with the accounts of your server and keeps the services isolated.
{% endhint %}

#### Accessing Windows drives on WSL

If you are using the Windows Subsystem for Linux (WSL), the Windows drives are available under `/mnt/`: drive `C:` at `/mnt/c/`, drive `D:` at `/mnt/d/`, and so on. For example `C:\Users\YourName\Documents` is reachable at:

```bash
/mnt/c/Users/YourName/Documents
```

### S3 storage

```
Do you want to be able to use S3 storage in addition to local storage? [y/N]:
```

Answering `y` lets tasks read their input from, and write their output to, an S3 bucket **in addition to** the local directories. You are then asked for:

| Question       | Example                              |
| -------------- | ------------------------------------ |
| S3 Access Key  | `AKIA…`                              |
| S3 Endpoint    | `https://s3.us-west-1.amazonaws.com` |
| S3 Secret Key  | —                                    |
| S3 Region      | `us-west-1`                          |
| S3 Bucket Name | `my-blurit-bucket`                   |

Any S3-compatible storage can be used, as long as it is reachable from the server. Answering `N` leaves the S3 settings empty and BlurIt works with local storage only.

### GPU

```
Do you want Blurit to run on your graphics card? [Y/n]:
Which GPU would you like to use? (must be a number starting from 0)
GPU ID [0]:
```

Answering `y` runs detection, landmark detection and re-encoding on the GPU (`cuda`); answering `n` runs everything on the CPU, which is dramatically slower and only advisable for small volumes or for evaluation.

When you choose the GPU, the available cards are listed with `nvidia-smi -L` and you select the one to use by its number, starting at 0. **If no GPU is detected, the installation stops with an error** — check the dependencies (driver, container toolkit and Docker NVIDIA runtime) before trying again.

### Max threads

```
Max number of threads (best practice: number of CPU cores - 2) [n]:
```

The maximum number of threads the re-encoding step may use on your CPU. The default is the number of cores of the server minus 2. Increasing this value makes re-encoding faster, but keep a few threads free for the rest of the system: using every available thread degrades the performance of the other services and of the server itself.

### Webhook (optional)

```
Do you want Blurit to run a webhook for events? [y/N]:
Enter the URL of the webhook:
```

When a webhook URL is configured, BlurIt sends a `POST` request to it every time a task reaches a final status — `Succeeded` **or** `Failed` — with a JSON payload:

```json
{
  "status": "Succeeded",
  "task_id": "abc-123-456-789"
}
```

The receiving system can then react to the event — fetch the results, retry or report a failure, update its own database, notify a user … Leave the webhook disabled if you poll the task status through the API instead.

### Jobs timeout

```
Choose the timeout for blurit jobs (default is 345600000 milliseconds = 96 hours) [345600000]:
```

How long the application waits for a task before marking it as **failed**. The default is 345 600 000 milliseconds, i.e. 96 hours. Raise it if you process very large batches of long videos; lower it if you prefer to detect stuck tasks faster.

### Docker Swarm address

```
We will initiate a Docker Swarm cluster. Do you want to bind it to a specific IP? [y/N]:
What IP would you like?
```

BlurIt OP runs as a Docker Swarm stack, so the installer initialises a Swarm cluster on the server. Answer `N` in the usual case. Answer `y` when the server has several network interfaces and you need the Swarm to advertise a specific one (`docker swarm init --advertise-addr <ip>`) — typically for a multi-servers installation. If the node is already part of a Swarm, the existing cluster is kept.

## What the installer does with your answers

1. **Writes the configuration** to the Blurit OP configuration file.
2. **Initialises the Docker Swarm** cluster and labels the node with `api=True`, so that the services that must run on this machine (nginx, front, API, Manager API, database, queues) are scheduled here.
3. **Logs in to the private registry** `rg.fr-par.scw.cloud/blurit-on-premise`. The username and password are the ones in `login_registry.txt`.
4. **Downloads the images** (`docker compose pull`). This step can take a long time, depending on your connection.
5. **Prints the next steps**:

```
Configuration is done! 😁
You can start Blurit by using this: blurit start
You can activate your license with this command after starting the solution: blurit license set /path/to/license.txt
You can access the Manager via http://127.0.0.1 or http://<public ip>
```

Continue with [Run BlurIt OP](/2.15.0/blurit-on-premise/installation/run-blurit-op), which starts the stack, creates the first administrator account and activates your license.

## Changing the configuration later

Run `./blurit install` again: every question is pre-filled with your current settings, passwords are kept when you leave them empty. Then apply the new configuration with:

```bash
blurit restart
```

##


# Run Blurit OP

## Start Blurit

Run the following command to start Blurit OP:

```bash
blurit start
```

The application will be available on ports **80** (HTTP) and **443** (HTTPS). The API can be accessed at the URL `/api`, and the Flower interface at `/flower`. The manager remains accessible via the standard URL (DNS or IP).

### Set license

#### CLI

Run the following command to set you license

```bash
blurit license set /path/to/license.txt
```

You can also pass the license directly as a command argument:

```shellscript
blurit license set -c xxxxxxxxxxxx
```

#### Manager

See [License activation](/2.15.0/blurit-on-premise/usage/manager-webapp/license-activation)

#### API

See [License](/2.15.0/blurit-on-premise/usage/api/license)

## Create the first administrator

Access to the Manager is controlled by its own user accounts. Once the stack is running, create the first administrator account on the machine hosting the manager-api service:

```bash
blurit create-superadmin
```

You are prompted for a username, an email address and a password. Use them to log in to the Manager, then create the other users and groups from the web application.


# Multi-servers installation

#### Add a worker node

🚨 This section pertains to clustering Blurit On-Premise. If you would like more information about it, please contact our customer services.🚨&#x20;

Before joining the manager machine, you need to open some ports:

* `TCP` port `2377` for cluster management communications
* `TCP` and `UDP` port `7946` for communication among nodes
* `UDP` port `4789` for overlay network traffic

Get Join-token on manager machine:

{% code lineNumbers="true" %}

```bash
docker swarm join-token worker
```

{% endcode %}

Replace `<worker-token>` with the actual token obtained from the previous command, and `<ip-of-manager-machine>` with the IP address or hostname of the manager machine. This command will join the worker machine to the swarm cluster.

Join the swarm cluster on the worker machine (<https://docs.docker.com/engine/reference/commandline/swarm\\_join/>):

{% code lineNumbers="true" %}

```bash
docker swarm join --token <worker-token> <ip-of-manager-machine>:2377
```

{% endcode %}

#### Add label to node

Add a label allow to chose the machine to deploy the workers. For multiple machine installation, it's mandatory for a smooth deployment.

This command display every node present on the swarm cluster:

{% code lineNumbers="true" %}

```bash
docker node ls
```

{% endcode %}

Add a label to a node:

{% code lineNumbers="true" %}

```bash
docker node update --label-add blurit-worker-<number of the machine> <node-name>
```

{% endcode %}

Replace `<machine-number>` with the appropriate number for the machine, and `<node-name>` with the name of the node. This command adds a label to the specified node, which will be used for deployment purposes.


# Post installation verifications

## Blurit status

Run the following command to check Blurit OP is correctly running.

```bash
blurit status
```


# Usage

As said in the [Configuration](/2.15.0/blurit-on-premise/installation/install-blurit-op) section, BlurIt OP Web Manager or API works within the paths set in `LOCAL_STORAGE_INPUT_PATH` and `LOCAL_STORAGE_OUTPUT_PATH`. Every processed media will be stored in `LOCAL_STORAGE_OUTPUT_PATH`, while the original media will be processed from `LOCAL_STORAGE_INPUT_PATH`.

There are two ways to process files with BlurIt OP:

1. Manager Webapp: The web app manager provides a Graphical User Interface (GUI) accessible at `http://<host> or https://<host>`, where "host" refers to the IP address of the machine where BlurIt OP is deployed or the dns url configured. This interface allows non-developers to process files easily.
2. API: The API is accessible at `http://<host>/api or https://<host>/api`. It allows developers to integrate BlurIt OP file processing capabilities into their own applications or workflows programmatically. This allows for greater flexibility and automation.


# Manager Webapp

## Overview

The Manager is a web application that facilitate usage of Blurit Self-hosted by providing a GUI to non-developer users.&#x20;

It also provide an history of tasks processed by Blurit Self-hosted, wether thoses tasks have been created from the Manager or from the API.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FW1yUCtRJP8x5oGVBT543%2Ftask-anonymize.png?alt=media&amp;token=25b2cfdd-fa80-4035-ad57-8e589b1843dd" alt=""><figcaption><p>Blurit Self-hosted</p></figcaption></figure>

## Access

You can access the Manager by visiting `http://<HOST> or https://<HOST>`, where `HOST` is the IP address of the machine or the dns url configured in the [Configuration](/2.15.0/blurit-on-premise/installation/install-blurit-op) section.

## Table of Contents

{% content-ref url="/pages/RxbyKkC61p4QGCBf6ilT" %}
[Authentication](/2.15.0/blurit-on-premise/usage/manager-webapp/authentication)
{% endcontent-ref %}

{% content-ref url="/pages/asRjkUFTLqwVwgT73an6" %}
[License activation](/2.15.0/blurit-on-premise/usage/manager-webapp/license-activation)
{% endcontent-ref %}

{% content-ref url="/pages/vP0Sv5eh2K3kEgmOwOfC" %}
[Tasks](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks)
{% endcontent-ref %}

{% content-ref url="/pages/WotL8GDWeW4E8zdxmxbM" %}
[My account](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account)
{% endcontent-ref %}

{% content-ref url="/pages/I2jSgqgCwsJKyzLgwh9A" %}
[Groups](/2.15.0/blurit-on-premise/usage/manager-webapp/groups)
{% endcontent-ref %}

{% content-ref url="/pages/VYkrAeZGySNO83iXtbuD" %}
[Users](/2.15.0/blurit-on-premise/usage/manager-webapp/users)
{% endcontent-ref %}

{% content-ref url="/pages/Sgxcf9A6IVbIkKsCbLEF" %}
[Dashboard](/2.15.0/blurit-on-premise/usage/manager-webapp/dashboard)
{% endcontent-ref %}


# Authentication

Blurit Self-hosted uses `username` and `password` authentication.

## Sign in

1. Open the application and go to the Sign In page `/login`.
2. Enter your `username` and `password`.
3. Click **Sign In**, most users are redirected to the [Tasks list](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FPxy7C5HVw2UYaZu5AsCM%2Fsign-in-blurit-op.png?alt=media&amp;token=96aaf0ae-e4fd-4f52-ab79-81ddd5b784a1" alt=""><figcaption><p>Sign in page</p></figcaption></figure>

### Session

Your session is kept active via a secure browser cookie. If you are already signed in and visit the sign-in page, you are redirected to [Tasks list](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks).

### Errors

If your credentials are incorrect, you will see:&#x20;

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FZWWtjZfJeu1iRH9NFN8u%2Finvalid-credentials.png?alt=media&amp;token=8558d5fd-ea3d-4a53-8d14-3d32562f1ae5" alt="Invalid credentials"><figcaption><p>Invalid credentials</p></figcaption></figure>

For other issues, contact your `Admin`.

### Password management

* There is no Forgot password link on the sign-in page. Contact an `Admin` if you cannot sign in.
* A `Admin` can reset a user’s `password` from the [Users](/2.15.0/blurit-on-premise/usage/manager-webapp/users) section.
* Users can change their own `password` from their account settings into [My account section](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account).
* New passwords must be at least `12 characters` and include `uppercase`, `lowercase`, a `digit`, and a `special character`` ``!@#$%&*?`.

### Roles

Sign-in is the same for all users. After authentication:

* `User` — standard access to the application.
* `Admin` — additional access ([Users](/2.15.0/blurit-on-premise/usage/manager-webapp/users) & [Groups](/2.15.0/blurit-on-premise/usage/manager-webapp/groups) management, [license](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#license-and-documentation) and [services](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#my-services)).

### Sign out

Use **Sign out** from the application header to end your session and return to the **Sign In** page.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FHthMVU7W8gTxSx27UwjQ%2Flogout.png?alt=media&amp;token=21ab4283-8fa4-4d48-85a7-961aa1c543f3" alt=""><figcaption><p>Sign out button</p></figcaption></figure>


# License activation

This section explains how to activate or update your Blurit Self-hosted license, check its validity period, and regain full access to the application when a license is missing or expired.

Before using Blurit Self-hosted, you must activate the license.

&#x20;Once you're on the Manager, click on the **Update License** button located at the top right corner of your screen.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FayOXTm7CcldmLOq1A42K%2Flicence-disabled.png?alt=media&amp;token=ce09a733-2c2d-43a1-a691-1cc6d1ee1757" alt=""><figcaption><p>Update licence button</p></figcaption></figure>

After navigating to the Account `/account` page, click on the **Edit license** button. Next, paste the license into the designated `text area` and confirm the changes by clicking on the **Update license** button.

{% embed url="<https://cloud.wassa.io/s/nhQZwaY8uPUs8xP/download>" %}


# Tasks

The Tasks page lists all tasks created in Blurit Self-hosted.&#x20;

You can switch between [List view](#list-view) and [Cards view](#cards-view) using the toggle at the top of the page. In both views, the list can be filtered.

### List view

In List view, tasks are displayed in a table. For each task, the Manager shows:

* `Date`
* `Type` (Picture, Video, Archive or Directory)
* `File name`
* `File size`
* `Task status` (updated in real time)
* Actions to [download the processed file](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/download-processed-files) (and [edit](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/using-the-redact-tool) or [delete](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/delete-a-task) when available)

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FmdjCwii4GHWaj7M8L0pf%2Ftasks-list-list-view.png?alt=media&amp;token=5c472e96-36ef-45b9-9fda-2aef9fc846af" alt="List view"><figcaption><p>List view</p></figcaption></figure>

### Cards view

In Cards view, each task is shown as a visual card with a thumbnail preview when available.&#x20;

For each task, the Manager shows:

* `Status badge` (updated in real time)
* `File type`
* `File name`
* `File size`
* Actions to [download the processed file](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/download-processed-files) (and [edit](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/using-the-redact-tool) or [delete](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/delete-a-task) when available)

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FEJwfQ8usaP7ygQbXMSmQ%2Ftasks-list-card-view.png?alt=media&amp;token=74510be1-d749-4005-9745-3c0f113cc03c" alt="Cards view"><figcaption><p>Cards view</p></figcaption></figure>

From this page, you can [create a task](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/create-a-task) with the button below, [edit a task in the Redact Tool](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/using-the-redact-tool), [download the processed result](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/download-processed-files), and [delete a task](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/delete-a-task).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FtrfOlyXxSDtvCxBHge6V%2Ftask-anonymize-button.png?alt=media&amp;token=6e132390-98c9-4e9f-9264-2a73b0c11f6f" alt=""><figcaption><p>Anonymize button</p></figcaption></figure>


# Create a task

To start a task, go to Tasks page `/tasks` by clicking on side menu **Tasks** and click on the  **Anonymize** button.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FtrfOlyXxSDtvCxBHge6V%2Ftask-anonymize-button.png?alt=media&amp;token=6e132390-98c9-4e9f-9264-2a73b0c11f6f" alt=""><figcaption><p>Anonymize button</p></figcaption></figure>

You can now follow 3 simple steps to create a new task:

1. **Source**: Choose either a file from your PC or a whole folder to process from the local storage or S3.
   * To process a file from your PC, use the file selection option or simply drag and drop the file into the designated area.
   * To process a folder, enter its path in the field. The path you enter represents a subdirectory of the `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage) set in the [Configuration](/2.15.0/blurit-on-premise/installation/install-blurit-op) section. Please ensure that the directory already exists and has some files in it. If you don't enter anything, BurIt OP will process files directly in `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET`)
2. **Blur options**: Select the desired task options from the following choices:
   * `Face anonymisation`
   * `Plates anonymisation`
   * `Coordinates` position
   * Add  `_anonymized` suffix
   * `Keep the audio track` (only for zip/directory/videos)
   * Processing report (zip files only)
     * This option allows you to include in the ZIP file a CSV summary indicating the anonymization success status for all the files that were part of the original ZIP
   * Keep the files that cannot be blured (zip files only)
     * This option allows you to keep, within the anonymized ZIP, the files with unsupported formats that cannot be processed by the software
3. **Output path**: Specify the desired output location, whether it's local storage or S3. You can either change the name of the output file or create a new directory in the output to store your processed media. As for the source, the directory you enter here represents a subdirectory of `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage). If you don't enter anything, BurIt OP will save processed files directly in `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET`)

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FJngoUchf60gh9HpIMHz6%2Ftask-creation.png?alt=media&amp;token=28d631a1-b957-40f9-9000-0cef47c76306" alt=""><figcaption><p>Task creation steps</p></figcaption></figure>

Click on the **Create** button and confirm to initiate the task.

{% embed url="<https://cloud.wassa.io/s/FGCMGv3KbHclSAk/download>" %}

After a task is created successfully, you are redirected to the [Tasks list](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks).


# Using The Redact Tool

The Redact Tool allows you to access all detections within your media (image or video) so you can adjust, add, or remove them as needed — all while staying within your local environment.

### Access&#x20;

Once your file (image or video) has been processed, you can edit the detections by clicking on this icon to access the redact tool.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2Fp67AS3L4ZC8YmIQj2khr%2FCapture%20d%E2%80%99e%CC%81cran%202026-09-17%20a%CC%80%2014.39.36.png?alt=media&amp;token=22c6ba06-8e0d-4bb2-a214-8a37c211f37e" alt=""><figcaption><p>Edit button</p></figcaption></figure>

Once done, your media will appear along with all the detected elements.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/hJIxg6AGVzY6lu6mOLwT/Screenshot%202025-10-16%20at%2015.55.10.png" alt=""><figcaption><p>Redact Tool</p></figcaption></figure>

#### **Optimized preview**

Depending on the file size or its original format, the Redact Tool may display an **optimized version** in the interface for smoother editing and preview. The final processed result always keeps the **original format**; the optimized version is used for preview only.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FWAza7yn8adaGHOVHEtSc%2Foptimized-preview.png?alt=media&amp;token=de51cb0f-4bd7-4947-ad54-7f9fb3a2eb71" alt=""><figcaption><p>Optimized video switch</p></figcaption></figure>

### Detections&#x20;

#### Adjusting a detection

Click on the detection of your choice. You can resize or move it on the frame as needed.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/32z4yFFKmIgNrw6Puc4A/1.png" alt=""><figcaption><p>Adjusting a detection</p></figcaption></figure>

#### Deactivating a detection

Click on the detection to turn it from green to gray. It will **no longer be applied** to the image or video. You can also deactivate it by unchecking the corresponding box in the left panel, just above the detection preview. You can **reactivate it at any time**.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/eKiU9uS6Q6TLAEl1hgC0/2.png" alt=""><figcaption><p>Deactivating a detection</p></figcaption></figure>

#### Deleting a detection &#x20;

If you want to permanently delete this detection with no option to undo, click **Delete Track**.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/urfV3QsDSkWZvL88RPO2/3.png" alt=""><figcaption><p>Deleting a detection</p></figcaption></figure>

#### Add a new detection manually

In the menu bar at the top left of the screen, you can choose the type of detection you want to add:&#x20;

* License plate detection&#x20;
* Face detection&#x20;
* Custom detection, which you can adjust to match your object’s shape&#x20;

➜ When creating a manual detection, make sure to **move it along with your object’s motion in the video**

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/vAMgLcTgS1JmpqBgBEdX/menu%20detections.png" alt=""><figcaption><p>Add a detection manually</p></figcaption></figure>

### Saving & reprocessing your file

You can save the adjustments you’ve made to access them later, or reprocess the media to apply your changes.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/ry4CezeWEORc0yjKPGFX/saving.png" alt=""><figcaption><p>Saving and rerender a task</p></figcaption></figure>


# Download processed files

From the [Tasks list](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks) page, click on the download icon located in the `Download` column.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FZEHudHcwgUEyxIntDwGD%2Ftask-download.png?alt=media&amp;token=6b9e4c0e-f626-4176-a635-eaf82ffd76f5" alt=""><figcaption><p>Download button</p></figcaption></figure>

Clicking the **download icon** starts the download immediately.&#x20;

If you requested a `detection coordinates JSON file` when [creating the task](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks/create-a-task), a dropdown opens instead, with two options: the `anonymized file` and the `detections coordinates file`.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FU5WmiMpGdGOcr8UhPfX8%2Ftask-download-dropdown.png?alt=media&amp;token=a014b7e4-4566-47bc-8d4e-b61cac3c06b5" alt=""><figcaption><p>Download dropdown</p></figcaption></figure>


# Delete a task

To delete a task, use the Delete action from the [list](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks#list-view) or [cards view](/2.15.0/blurit-on-premise/usage/manager-webapp/tasks#cards-view).&#x20;

A confirmation dialog opens and shows the task file name.

What happens next depends on the task type and status:

* For most tasks (pictures and videos), deletion is permanent: the task and its related original and anonymized files are removed.
* For a ZIP task that is not yet completed or failed, or for a Directory task, the task is removed from the interface, but some files may still remain in your output directory and may need to be deleted manually.

Once confirmed, the task disappears from the list and a confirmation message is displayed

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2F8zc5YprapUsW1JfSZzz0%2Ftask-delete-dialog.png?alt=media&amp;token=f118cd2f-0f4f-40aa-a182-8400aa4e56d2" alt="" width="536"><figcaption><p>Delete dialog</p></figcaption></figure>


# My account

This section explains how to manage your account in Blurit Self-hosted.&#x20;

It covers the shared **My account** experience for all users as well as the additional options available to **Admin**:&#x20;

* editing [profile details](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#my-account)
* consulting the [activity log](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#activity-log)
* managing the [license](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#license-and-documentation)
* accessing [documentation and support](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#documentation-and-support)
* monitoring platform usage under [My services](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view#my-services).

{% content-ref url="/pages/oxE82DMcddAoCfe8FcWR" %}
[User view](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/user-view)
{% endcontent-ref %}

{% content-ref url="/pages/kNqOZNftIzMe5EKoAHwD" %}
[Admin view](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/admin-view)
{% endcontent-ref %}


# User view

### My information

On the My account page, every user can view their account information and manage their password.

You will find:

* Your `username` (read-only)
* Your `password`, displayed as a masked value, with a Change password action

Clicking `Change password` opens a dialog where you can set a new password and confirm it. The new password must meet the security rules shown in the dialog (minimum length and character requirements).

Your other profile details (`name`, `email`, `group`) may be displayed depending on your role. If they are managed by an administrator, contact them to request a change.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2Fxiv4J3U8kEJkDch1vhpP%2Fmy-account-user.png?alt=media&amp;token=b0cfbaa9-130d-4f81-bdb4-f0b3f16ba0ee" alt=""><figcaption><p>My account page</p></figcaption></figure>

### My preferences

Below My information, the My preferences section lets you customize how Blurit Self-hosted is displayed for your account.

You can set:

* `Language` — `English` or `French`. After saving, the interface switches to the selected language.
* `Date` — the date format used across the application (for example in task lists, user profiles, and the activity log). Each option shows a live preview with today’s date.
* `Time` — the time format (24-hour or 12-hour with AM/PM). Each option also shows a live preview.

To update your preferences:

1. Change one or more values in the dropdowns.
2. Click **Save**.

These settings apply to your account only. They do not affect other users.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FfxaLyb9tiOSw5jmXxgUD%2Fmy-preference.png?alt=media&amp;token=f30b7a4f-5bb2-4770-92da-a9e0c8fc6d60" alt="" width="563"><figcaption><p>My preferences section</p></figcaption></figure>


# Admin view

As a Super Admin, the Account area gives you access to four tabs: [My account](#my-account), [License & documentation](#license-and-documentation), [My services](#my-services) and [Activity log](#activity-log).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FX74eawPKKuQL5X4DYNJ4%2Fmyaccount-tabs.png?alt=media&amp;token=28bd68a4-908e-407b-907c-2e0a4713b876" alt=""><figcaption></figcaption></figure>

### **My account**

In addition to the common elements described in the [User view](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account#user-view) section, you can:

* Edit your `last name`, `first name`, and `email`, then click **Save** to apply the changes
* View the global Activity log for the last 30 days (logins, task-related events, password resets, user status changes, etc.), filter by event type or user, and export the results as CSV

Your `username` remains read-only.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2Fs8eyYICHB2ah0n1mg3MI%2Fmy-account-admin.png?alt=media&amp;token=892758cb-0079-49a7-b763-2581048b88e2" alt=""><figcaption><p>My account page</p></figcaption></figure>

Below this section you can find [My preferences section](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account/user-view#my-preferences) as described in the [User view](/2.15.0/blurit-on-premise/usage/manager-webapp/my-account#user-view) section.

### **License & documentation**

This tab contains two blocks:

#### Account information

Displays the license starting date, ending date, and license key.\
To update your license, see [Licence activation](/2.15.0/blurit-on-premise/usage/manager-webapp/license-activation) section.

#### Documentation & support

&#x20;Provides a link to the product documentation and the support contact email.

### **My services**

This tab shows overall license usage:

* API calls — number of calls for the current month and in total (with pictures and videos breakdown)
* Consumption — volume consumed for the current month and in total

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FDn6WOPnAMdgGPALxPWM7%2Fmy-services.png?alt=media&amp;token=307f1cfe-e42e-4bc1-80f4-a8f12856e111" alt=""><figcaption><p>My services tab</p></figcaption></figure>

Clicking **Details** button on `API calls` or `Consumption` opens a yearly calendar view of your license usage.

In this dialog, you can:

* Switch between `API calls` and `Consumption`
* Filter by `user` (all users, or a specific account)
* Browse by `year`
* Review totals broken down by `pictures` and `videos`, for the full year and month by month

The view opens on the metric you selected (`API calls` or `Consumption`); you can change it at any time without closing the dialog.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FwzXSHjEdxnHeqaSDAXGc%2Fmy-services-modal.png?alt=media&amp;token=d88858b9-f4aa-43e6-96ba-789ca2526a56" alt=""><figcaption><p>API calls and Consumption dialog</p></figcaption></figure>

### Activity Log

In the Activity log tab, you can consult the global Activity log. It lists platform events from the last 30 days.

You can:

* Filter by event type (`login`, `logout`, `task creation`, `edition`, `deletion`, `share/unshare`, `password reset`, `status change`, `user deletion`, etc.)
* Filter by `user`
* Review each event’s date & time, user, event type, and details
* Open a user’s profile by clicking their row
* Export the filtered results as a `CSV file`

This log helps you monitor account activity and key actions across the platform.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FjcXbDIeOFXvzy8gOfrCd%2Factivity-log.png?alt=media&amp;token=7edcb033-42ac-42ba-a47a-207154bc4194" alt=""><figcaption><p>Activity log table</p></figcaption></figure>


# Groups

Groups let you organize users so they can **see and edit each other’s files**. Managing groups is available to **Admins** only, under **Users & groups**, tab **Groups**.

A user can belong to **only one group** at a time.&#x20;

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FFkoSJXTusZxp3Pm6WjjD%2Fgroups-list.png?alt=media&amp;token=e27d1ab8-bdf3-4f4a-a860-d0deb729a904" alt=""><figcaption><p>Groups list</p></figcaption></figure>

From this page, you can [create](/2.15.0/blurit-on-premise/usage/manager-webapp/groups/create-a-group) a group, [edit](/2.15.0/blurit-on-premise/usage/manager-webapp/groups/edit-a-group) it, or [delete](/2.15.0/blurit-on-premise/usage/manager-webapp/groups/delete-a-group) it.

{% hint style="warning" %}
Admin cannot be added to a group.
{% endhint %}


# Create a group

1. Click **Create a group** button.
2. Enter a `group name` (required, must be unique).
3. Optionally add `Members`.
4. To finish, click **Create group**.

If you select a user who already belongs to another group, they are **moved** to the new one.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FiABvtRzCY3yxwXt9jvoe%2Fgroup-creation.png?alt=media&amp;token=abb74e87-694f-46a4-a61f-35ac43fbc8e0" alt=""><figcaption><p>Create a group</p></figcaption></figure>


# Edit a group

1. Open a group from the list (**View / Edit**).
2. Update the `group name` if needed.
3. **Add a user** or **Remove from group**.
4. Click **Save**.

On edit, only users with **no group** can be added from the picker.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FnNffuCXt6WzoPUTCxv0f%2Fgroup-edition.png?alt=media&amp;token=96cd5199-e691-4cd6-b338-a8d3191e460d" alt=""><figcaption><p>Edit or view a group</p></figcaption></figure>


# Delete a group

1. Choose **Delete** / **Delete group** from the list or the group detail page.
2. Confirm in the dialog.

Deleting a group does **not** delete users or files. Members simply leave the group and lose mutual access to each other’s files.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FK2pxIiPgPc0SW56RKsq5%2Fgroup-deletion.png?alt=media&amp;token=91c70d17-461e-4b77-8eee-41685ef07796" alt="" width="358"><figcaption><p>Delete dialog</p></figcaption></figure>


# Users

User management is available to `Admins` only, under **Users & groups** → **Users**.&#x20;

From the list, you can [create accounts](/2.15.0/blurit-on-premise/usage/manager-webapp/users#create-a-user), open a [user profile](/2.15.0/blurit-on-premise/usage/manager-webapp/users#edit-a-user), [reset a password](/2.15.0/blurit-on-premise/usage/manager-webapp/users#reset-password), [activate or deactivate an account](/2.15.0/blurit-on-premise/usage/manager-webapp/users#activate-deactivate), or [delete a user](/2.15.0/blurit-on-premise/usage/manager-webapp/users#delete-a-user).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FfZXKTNbIRby2wuPWZjTS%2Fusers-list.png?alt=media&amp;token=3f00c7e3-274b-47de-b181-488acad203ec" alt=""><figcaption><p>Users list</p></figcaption></figure>

On the user [user profile/edit page](/2.15.0/blurit-on-premise/usage/manager-webapp/users#edit-a-user), you can also view the user’s [API calls](/2.15.0/blurit-on-premise/usage/manager-webapp/users#api-calls-and-consumption), [Consumption](/2.15.0/blurit-on-premise/usage/manager-webapp/users#api-calls-and-consumption), and [Activity log](/2.15.0/blurit-on-premise/usage/manager-webapp/users#activity-log).


# Create a user

1. Click **Create user** button.
2. Enter a `username` (required — used to sign in).
3. Optionally fill in `last name`, `first name`, `email`, and `group`.
4. Set a `password` and confirm it (it must meet the security rules shown on the form).
5. Click **create** to confirm.

The account is activated as soon as it is created. Communicate the password to the user through your own channel. Without a group, the user can sign in but only sees their own tasks.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FmhwWKo5GRUqVvuFfJY6p%2Fuser-creation.png?alt=media&amp;token=005e70d4-41b7-479f-8b5f-7a71c6f72941" alt=""><figcaption><p>Create a user</p></figcaption></figure>


# Edit a user

Open a user from the [list](/2.15.0/blurit-on-premise/usage/manager-webapp/users) (**View / Edit**) to update their `last name`, `first name`, `email`, and `group`, then click **Save**.

The username is read-only. To change the `password`, use **Reset password**.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FZajYLGcuYTzAJj2yWzTk%2Fuser-edition.png?alt=media&amp;token=fc7ec0d2-9776-4bbe-939a-5fe51f214d0a" alt=""><figcaption><p>Edit or view a user</p></figcaption></figure>

### Reset password

From the list or the user profile, choose Reset password, enter a new password that meets the security rules, and confirm. Share the new password with the user through your own channel.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FXJQtMACTIoDRVQBcD0HO%2Fuser-reset-password.png?alt=media&amp;token=602c53b3-70ee-4682-aa32-bcb25ed93f66" alt="" width="373"><figcaption><p>Reset password dialog</p></figcaption></figure>

### Activate / Deactivate

From the list or the user profile, you can `activate` or `deactivate` an account:

* `Activate` — the user can access the platform again.
* `Deactivate` — the user can no longer access their account or documents.

You cannot deactivate your own account.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2Fef9Pt0fgSbo45mGUhkMs%2Fuser-desactivation.png?alt=media&amp;token=b3307ab3-3cbc-4a00-ac1b-ca02a6430b67" alt="" width="368"><figcaption><p>Deactivate dialog</p></figcaption></figure>

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2F5WNZw33P5KqA8mlOgFim%2Fuser-activation.png?alt=media&amp;token=18f32b31-d850-4158-acf3-a29274337b28" alt="" width="373"><figcaption><p>Activate dialog</p></figcaption></figure>

### API calls & Consumption

On the user profile, two blocks show that user’s usage:

* API calls — number of calls for the current month and in total (with pictures and videos breakdown)
* Consumption — volume consumed for the current month and in total

Click **Details** to open the yearly calendar view and switch between API calls and consumption.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2F4k9AeibG2cSh5cnsBJxT%2Fuser-edition-api-call-consumption.png?alt=media&amp;token=fda96f29-2650-4901-9e23-23d82d15d7c1" alt=""><figcaption><p>API calls &#x26; Consumption blocks</p></figcaption></figure>

### Activity log

At the bottom of the user profile, the Activity log lists that user’s events over the last 30 days (logins, task-related actions, password resets, status changes, etc.).&#x20;

You can filter by event type and export the results as a CSV file.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FoKmqKb5LRQxS1F9JApj2%2Fuser-edition-activity-log.png?alt=media&amp;token=303c8931-f839-4579-84ee-430bb39a0f40" alt="" width="563"><figcaption><p>Activity log table</p></figcaption></figure>


# Delete a user

1. Choose **Delete** from the [list](/2.15.0/blurit-on-premise/usage/manager-webapp/users) or the user profile.
2. Confirm in the dialog.

If the user has associated `documents`, you can choose to keep the documents (they are transferred to admin account) or delete them permanently.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FrKJpAGOklGKh2YcO4eC1%2Fuser-deletion.png?alt=media&amp;token=5d9a831e-91d6-4921-ae28-f2ead8dc9bfb" alt="" width="375"><figcaption><p>Delete dialog</p></figcaption></figure>


# Dashboard

The Dashboard gives you an overview of platform usage: how many API calls were made (Service usage) and how much data was processed (Service consumption), plus charts to explore trends over time.

Data scope

* An `Admin` sees aggregated data for all users.
* A `User` sees only their own data.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FVyV0JOurtW5zrfuxVxhJ%2Fdashboard.png?alt=media&amp;token=98684719-ba2f-4246-a7a3-f653c1866810" alt=""><figcaption><p>Dashboard page</p></figcaption></figure>

***

### **Service usage**

This section shows the number of API calls (pictures and videos combined):

* Total — all API calls since the beginning
* Current month — API calls for the current calendar month
* Current day — API calls for today

Click **Details** to open the [Service usage details modal](#details-modals-service-usage-service-consumption) (calendar view, starting on API calls).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2F7LpjX6AhPUJNKWWSVXvv%2Fdashboard-service-usage.png?alt=media&amp;token=5529a488-777e-4d3b-812b-deda2dbf3e17" alt=""><figcaption><p>Service usage section</p></figcaption></figure>

***

### **Service consumption**

This section shows the volume of data processed (pictures and videos combined), displayed in a readable unit (KB, MB, GB, etc.):

* Total — overall consumption since the beginning
* Current month — consumption for the current calendar month
* Current day — consumption for today

Click Details to open the [Service consumption details modal](#details-modals-service-usage-service-consumption) (calendar view, starting on Consumption).

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FERChn2x1R9tf9vfpBlWX%2Fdashboard-service-consumption.png?alt=media&amp;token=e7df54a6-e2ea-4e5b-bb58-d5fc41470502" alt=""><figcaption><p>Service consumption section</p></figcaption></figure>

***

### **Details modals (Service usage / Service consumption)**

Both **Details buttons** open the same yearly calendar dialog. The view opens on the metric you selected (API calls or Consumption); you can switch between them at any time without closing the dialog.

In this dialog, you can:

* Browse by year
* Review yearly and monthly totals, broken down by pictures and videos
* As a Super Admin, filter by user (all users, or a specific account)

A `User` always sees their own data and does not get the user filter.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FlNiC9hsBL77StgIReHOd%2Fdashboard-modal.png?alt=media&amp;token=f3941788-39c8-4c26-8449-b42804a4d7e4" alt="" width="563"><figcaption><p>API calls or Consumption dialog</p></figcaption></figure>

***

### **Yearly use**

The Yearly use chart shows API calls and consumption month by month for a selected year.

Use the year dropdown to change the year displayed.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2FWyUjFOvf8PGYB5XnlduO%2Fdashboard-chart-yearly.png?alt=media&amp;token=829e297c-3ab3-4c6e-9923-e6a27f411865" alt="" width="563"><figcaption><p>Yearly use chart</p></figcaption></figure>

***

### **Monthly use**

The Monthly use chart shows API calls and consumption day by day for a selected month.

Use the month dropdown to change the month displayed. The year follows the year selected in Yearly use.

<figure><img src="https://1141784043-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcRuVBwKJviaiQQZy6xLi%2Fuploads%2F8BGkYNOAGTGk6egbiNZ8%2Fdashboard-chart-monthly.png?alt=media&amp;token=266808cb-5d92-42ee-a1a4-f19daddb63ea" alt="" width="563"><figcaption><p>Monthly use chart</p></figcaption></figure>


# API

The BlurIt OP API offers several functionalities. It allows you to obtain the current license by using the GET method on the [`/api/license`](/2.15.0/blurit-on-premise/usage/api/license) endpoint. Additionally, you can add a new license by using the POST method on the same endpoint. If a license already exists, it will be replaced by the new license.

Furthermore, the API provides the capability to add a blur task to the queue by using the POST method on the [`/api/blur_it`](/2.15.0/blurit-on-premise/usage/api/tasks) endpoint. You can also add a blur task for a directory by using the POST method on the [`/api/blur_it/directory`](/2.15.0/blurit-on-premise/usage/api/tasks/process-a-directory) endpoint.

Moreover, the API allows you to retrieve the status of a task by using the GET method on the [`/api/task/{task_id}`](/2.15.0/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task) endpoint, where "task\_id" is the task identifier.

\
The API documentation can be found at `http://<HOST>/api/docs`, where `HOST` is the IP address of the machine.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>License</td><td></td><td><a href="/2.15.0/blurit-on-premise/usage/api/license">License</a></td></tr><tr><td></td><td>Blur it</td><td></td><td><a href="/2.15.0/blurit-on-premise/usage/api/tasks">Tasks</a></td></tr><tr><td></td><td>Blur it directory</td><td></td><td><a href="/2.15.0/blurit-on-premise/usage/api/tasks/process-a-directory">Process a directory</a></td></tr><tr><td></td><td>Task</td><td></td><td><a href="/2.15.0/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task">Get the status of a task</a></td></tr></tbody></table>


# License

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="get" %}
[openapi.json](https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/EC8JtnPOikhxSmdJMo3O/openapi.json)
{% endopenapi %}

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="post" %}
[openapi.json](https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/EC8JtnPOikhxSmdJMo3O/openapi.json)
{% endopenapi %}


# Tasks

* [Process a directory](/2.15.0/blurit-on-premise/usage/api/tasks/process-a-directory)
* [Process a file](/2.15.0/blurit-on-premise/usage/api/tasks/process-a-file)
* [Process a zip file](/2.15.0/blurit-on-premise/usage/api/tasks/process-a-zip-file)
* [Get the status of a task](/2.15.0/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task)
* [Revoke a task](/2.15.0/blurit-on-premise/usage/api/tasks/revoke-a-task)


# Process a directory

## Blur It Directory Post

> Add a blurit directory task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/directory":{"post":{"summary":"Blur It Directory Post","description":"Add a blurit directory task in task queue.","operationId":"blur_it_directory_post_api_blur_it_directory_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurDirectoryBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurDirectoryBody":{"title":"DetectAndBlurDirectoryBody","required":["input_directory","output_directory"],"type":"object","properties":{"input_directory":{"$ref":"#/components/schemas/InputDirectory"},"output_directory":{"$ref":"#/components/schemas/OutputDirectory"},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output medias ?","type":"boolean","default":true}},"description":"Detect and blur directory route's body.\nAt least one of output_media or output_json is needed."},"InputDirectory":{"title":"InputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"},"auto_delete":{"title":"If set to True, deletes the input file after processing.","type":"boolean","default":false}},"description":"Input directory structure"},"OutputDirectory":{"title":"OutputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"}},"description":"Output directory structure"},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a file

## Blur It Post

> Add a blurit task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it":{"post":{"summary":"Blur It Post","description":"Add a blurit task in task queue.","operationId":"blur_it_post_api_blur_it_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurBody":{"title":"DetectAndBlurBody","required":["input_media"],"type":"object","properties":{"input_media":{"$ref":"#/components/schemas/InputFile"},"output_media":{"title":"Output video/image informations","allOf":[{"$ref":"#/components/schemas/OutputMedia"}]},"output_json":{"title":"Output JSON informations (contains detections' descriptions)","allOf":[{"$ref":"#/components/schemas/OutputJSON"}]},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}},"description":"Detect and blur route's body.\nAt least one of output_media or output_json is needed."},"InputFile":{"title":"InputFile","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Input File structure."},"OutputMedia":{"title":"OutputMedia","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Media file structure."},"OutputJSON":{"title":"OutputJSON","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output JSON file structure."},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a zip file

## Zip Blur It Post

> Add a zip\_detect\_and\_blur task in task queue.\
> \
> returns a {"task\_id": str}

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/zip":{"post":{"summary":"Zip Blur It Post","description":"Add a zip_detect_and_blur task in task queue.\n\nreturns a {\"task_id\": str}","operationId":"zip_blur_it_post_api_blur_it_zip_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ZipBody":{"title":"ZipBody","required":["input_zip","output_zip"],"type":"object","properties":{"input_zip":{"title":"Input zip storage informations","allOf":[{"$ref":"#/components/schemas/InputZip"}]},"output_zip":{"title":"Output zip storage informations","allOf":[{"$ref":"#/components/schemas/OutputZip"}]},"report_format":{"title":"Fomat of the report file. Set to null if you don't want a report file. Possible values: \"csv\", null","type":"string","default":"csv"},"save_unknown_files":{"title":"If set to True, unprocessable files extensions will be returned with processed files, in the output zip. If set to False, they will be deleted.","type":"boolean","default":false},"add_output_sufix":{"title":"If set to True, output files names will be suffixed (eg: \"file.jpg\" => \"file_anonymized.jpg\")","type":"boolean","default":true},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}}},"InputZip":{"title":"InputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Output JSON file structure."},"OutputZip":{"title":"OutputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Zip file structure."},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Get the status of a task

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/task/{task\_id}" method="get" %}
[openapi.json](https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/EC8JtnPOikhxSmdJMo3O/openapi.json)
{% endopenapi %}


# Revoke a task

## Revoke Task

> Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/task/{task_id}/revoke":{"put":{"summary":"Revoke Task","description":"Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks","operationId":"revoke_task_api_task__task_id__revoke_put","parameters":[{"required":true,"schema":{"title":"Task Id","type":"string"},"name":"task_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"TaskMessageResponse":{"title":"TaskMessageResponse","required":["task_id","message"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"},"message":{"title":"A message related to the route","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Command line interface

## Overview

The Blurit CLI lets you interact with Blurit On-Premise. It covers two distinct jobs:

* **Operating the stack on the server** — `requirements`, `install`, `start`, `stop`, `restart`, `status`, `uninstall`, `create-superadmin`. These commands drive Docker on the local machine and only work on the Linux server hosting Blurit.
* **Talking to a running instance** — `license`, `tasks`, `stats`, `doc`. These commands call the Blurit API over HTTP and can be run from any machine that can reach the instance.

The `blurit` binary is shipped in the archive you received; see [Linux dependencies](/2.15.0/blurit-on-premise/installation/linux-dependencies) for how to run it.

```bash
blurit [OPTIONS] COMMAND [ARGS]...
```

## Operating the stack

These commands must be run on the machine hosting Blurit.

### Start

Start the Blurit stack. The CLI waits until every service is running.

```bash
blurit start
```

### Restart

Restart the Blurit stack.

```bash
blurit restart
```

### Stop

Stop the Blurit stack.

```bash
blurit stop
```

### Status

Display the state of each service of the stack, with its number of running replicas.

```bash
blurit status
```

### Uninstall

Remove the Blurit stack from the machine.

```bash
blurit uninstall
```

## Talking to a running instance

Every command in this section accepts the same two options:

* `-h, --host TEXT` Host to contact. Defaults to `localhost`. Accepts a host and port (`127.0.0.1:80`) or a full URL for a remote instance (`https://blurit.example.com`).
* `-o [json]` Output the raw API response as JSON instead of a table.

When `--host` has no scheme, the CLI reads the local compose file to decide between `http` and `https`.

### License

Manage the Blurit license.

#### **info**

Display all Blurit license information.

```bash
blurit license info
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-07-31T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-12-31T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

#### **set**

Upload or update the Blurit On-Premise license. Pass the license file you received, or its content with `--content`. `blurit license add` is an alias of this command.

```bash
blurit license set [OPTIONS] [LICENSE_FILE]
```

options:

* `-c, --content TEXT` Pass the license content directly instead of reading it from `LICENSE_FILE`.

Example:

```bash
blurit license set license_client_name_20250101_20251231
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-06-27T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-09-30T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

### Tasks

Manage Blurit anonymization tasks.

#### **create**

Create a new Blurit task.

```bash
blurit tasks create [OPTIONS] INPUT [OUTPUT]
```

arguments:

* `INPUT` For the `file` and `zip` input types, the local path of the media. For the `directory` input type, a sub-directory of the input directory configured on the Blurit server.
* `OUTPUT` Optional. Sub-directory of the output directory configured on the Blurit server. It must already exist.

input and output options:

* `--input-type [file|zip|directory]` Local file, local zip archive, or a directory located on the Blurit server. Default: `file`.
* `--input-storage [local|s3]` `local` means on the Blurit server. `s3` requires the S3 configuration to have been done at install time, and only works with the `directory` input type. Default: `local`.
* `--output-storage [local|s3]` Same, for the output. Default: `local`.

anonymization options:

* `--face-blur / --no-face-blur` Activate face blur. Default: enabled.
* `--plate-blur / --no-plate-blur` Activate plate blur. Default: enabled.
* `--anonymization-type [blur|pixelate|opaque]` Anonymization to apply. Default: `blur`.
* `--shape [object|box]` Anonymize the detected object itself, or its wrapping box. Default: `object`.
* `--safe-margin FLOAT` Extension size around the detection area, between 0.1 and 1. Default: `0.5`.
* `--blur-strength FLOAT` Blur strength, between 0.1 and 1. `blur` type only. Default: `0.5`.
* `--edge-smoothing FLOAT` Smooth the edge of the detection area, between 0.1 and 0.2. `blur` type only. Default: `0.15`.
* `--num-pixels INTEGER` Number of pixels, between 1 and 10. `pixelate` type only. Default: `5`.
* `--hex-color TEXT` Color of the overlay, `#` may be omitted. `opaque` type only. Default: `000000`.
* `--keep-audio / --no-keep-audio` Keep the audio track in the output media. Default: enabled.

output options:

* `--output-detection-url / --no-output-detection-url` Generate a JSON file containing all detected areas. `file` and `zip` input types only. Default: enabled.
* `--add-output-suffix / --no-add-output-suffix` Add an `_anonymized` suffix to the output file name. `file` and `zip` input types only. Default: enabled.
* `--add-report / --no-add-report` Add a CSV report of all processed files to the output zip. `zip` input type only. Default: disabled.
* `--save-unknown-files / --no-save-unknown-files` Reintegrate unknown file types (text files, binaries, …) into the output zip. `zip` input type only. Default: disabled.
* `--auto-delete / --no-auto-delete` Delete the input media once processed. `directory` input type only. Default: disabled.

Example: anonymize a local video, blurring only the plates:

```bash
blurit tasks create --no-face-blur my_video.mp4
```

Example: process a directory located on the Blurit server:

```bash
blurit tasks create --input-type directory incoming processed
```

Response:

```
job id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

#### **status**

Get the status of a task from its ID.

```bash
blurit tasks status TASK_ID
```

return:

* Succeeded
* Started
* Sent
* Failed

Example:

```bash
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a
```

Response:

```bash
Succeeded
```

#### **list**

List the task history.

options:

* `--page TEXT` Page number.
* `--count TEXT` Number of results per page. Default: `10`.
* `--from TEXT` First date displayed, format `Y-m-d`.
* `--to TEXT` Last date displayed, format `Y-m-d`.
* `--filetype [picture|video|directory]` Filter on the file type.

```bash
blurit tasks list
```

Response:

```
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+
| Created At               | Processing Time   | File Type   | Job ID                               | File Name     | Output Media URL      | Task Status   |
+==========================+===================+=============+======================================+===============+=======================+===============+
| 2023-08-24T09:18:42.625Z | 05:42:50.70       | directory   | 31bc8405-4a56-4cb2-a67e-689797ad9a1a | 629d57_part_1 | 629d57_part_2_process | Succeeded     |
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+

```

### Stats

Display total and period (month, day) statistics.

options:

* `--from TEXT` First date, format `Y-m-d`.
* `--to TEXT` Last date, format `Y-m-d`.
* `--granularity [day|month]` Display statistics by month or by day.

`--from` is required as soon as you ask for a period.

```bash
blurit stats
```

**Response:**

```
+------------------------------+-----------+
| Metric                       | Value     |
+==============================+===========+
| Total Videos API Calls       | 73        |
+------------------------------+-----------+
| Total Pictures API Calls     | 443       |
+------------------------------+-----------+
| Total Videos Consumption     | 3.33 GB   |
+------------------------------+-----------+
| Total Pictures Consumption   | 806.07 MB |
+------------------------------+-----------+
| Monthly Videos API Calls     | 4         |
+------------------------------+-----------+
| Monthly Pictures API Calls   | 8         |
+------------------------------+-----------+
| Monthly Videos Consumption   | 22.12 MB  |
+------------------------------+-----------+
| Monthly Pictures Consumption | 9.42 MB   |
+------------------------------+-----------+
```

### Doc

Display the links to the documentation.

options:

* `-h, --host TEXT` Specify the host.

```bash
blurit doc
```

response:

```
API Documentation:
Operation: https://doc-op.blurit.io
Local: http://127.0.0.1:8084/api/docs
```

## Miscellaneous

### Version

Display the version of the CLI itself. This is **not** the version of the Blurit application.

```bash
blurit version
```

### Help

Display the list of commands. `blurit --help` does the same, and `blurit COMMAND --help` details a single command.

```bash
blurit help
```

#### **Output Format**

The Blurit CLI supports two output formats: text (default) and JSON. Add `-o json` to any command of the "Talking to a running instance" section to get the raw API response.

Example:

```
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a -o json
```

Response:

```
{'task_id': '31bc8405-4a56-4cb2-a67e-689797ad9a1a', 'status': 'Succeeded', 'result': {'input_directory': {'protocol': 'file', 'path': 'input/629d57_part_2', 'auto_delete': False}, 'output_directory': {'protocol': 'file', 'path': 'output/629d57_part_2_process'}, 'size': {'VIDEO': 4979394177}, 'nb_files': {'VIDEO': 252}}}
```

#### **Support and Contribution**

If you have any questions, issues, or would like to make a return of the Blurit CLI, please contact us at <support@blurit.io>. We hope this guide helps you effectively use the Blurit CLI to manage your media anonymization tasks.


# Monitoring With Flower

**Accessing the Flower Web Interface**

Once the installation of Blurit is complete, Flower's web interface is accessible at:

```arduino
http://<your-server-address>/flower
```

Use the **username** and **password** configured during the installation of Blurit to log in.

**Overview of the Interface**

The Flower interface provides an intuitive way to monitor and manage Celery tasks and workers in real-time. Below is a detailed breakdown of the key sections and columns in the interface.

## **Dashboard: Monitoring Workers Overview**

The **Dashboard** tab in Flower provides an overview of all Celery workers currently running. This page allows you to quickly monitor worker states and performance.

**Column Descriptions**

1. **Worker Name**
   * Displays the unique name of each worker. Typically, the name is prefixed with `celery@` followed by a unique identifier (often based on the hostname).
   * Example: `celery@18e5d5189283`.
2. **Status**
   * Indicates the current status of the worker.
   * **Online**: The worker is active and communicating with the broker.
   * **Offline**: The worker is not responding or has been stopped.
3. **Active**
   * The number of tasks currently being processed by this worker.
   * A high value here relative to the worker’s capacity could indicate overload.
4. **Processed**
   * The total number of tasks processed by the worker since it started.
5. **Failed**
   * The total number of tasks that have failed on this worker.
   * A high number may indicate recurring issues with specific tasks or code.
6. **Succeeded**
   * The total number of tasks successfully executed by the worker.
7. **Retried**
   * The number of tasks that were retried after encountering a temporary error.
8. **Load Average**
   * The system's average load (CPU, memory) for the container or machine running the worker.
   * Format: `1 min, 5 min, 15 min`.
   * Example: `0.19, 0.08, 0.08` indicates a low load across all three timeframes.

**Available Actions**

* **Search Bar**: Use the search bar in the top-right corner to filter workers by name or other attributes. This is helpful when managing many workers.
* **Refresh**: Click the **Refresh** button to update the data displayed on the dashboard.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/FD5K9sIG5HkSoyWriKI4/Screenshot%20from%202024-11-19%2011-00-58.png" alt=""><figcaption></figcaption></figure>

## **Tasks: Monitoring and Managing Individual Tasks**

The **Tasks** tab in Flower allows you to monitor the state and details of individual Celery tasks in real-time. This tab is especially useful for diagnosing specific issues or analyzing task performance.

**Column Descriptions**

1. **Name**
   * The name of the task, as defined in your Celery code.
   * Example: `blurit.image`.
   * This typically corresponds to a function or method in your application.
2. **UUID**
   * A unique identifier for each task, useful for debugging or referencing specific tasks.
   * Example: `c2e583bc-1dc9-4193-9df5-fe412aa0b180`.
3. **State**
   * The current state of the task.
   * Common states include:
     * **PENDING**: The task is waiting to be executed.
     * **STARTED**: The task is currently running.
     * **SUCCESS**: The task has completed successfully.
     * **FAILURE**: The task execution failed.
   * Example in the screenshot: **SUCCESS**.
4. **args**
   * The positional arguments passed to the task when it was executed.
   * Example: `()` (no positional arguments in this case).
5. **kwargs**
   * The keyword arguments (named parameters) passed to the task.
   * Example:

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "lifespan": 3600
     }
     ```
6. **Result**
   * The result returned by the task after execution.
   * Example (summary):

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "chronos": {"total": 2.219586, "childs": {...}}
     }
     ```
7. **Received**
   * The timestamp when the task was received by the worker.
   * Example: `2024-11-19 10:02:30.472`.
8. **Started**
   * The timestamp when the task started execution.
   * Example: `2024-11-19 10:02:30.478`.
9. **Runtime**
   * The total time the task took to execute, in seconds.
   * Example: `2.733`.
10. **Worker**
    * The Celery worker that executed the task.
    * Example: `celery@83b122840b58`.

<figure><img src="https://content.gitbook.com/content/cRuVBwKJviaiQQZy6xLi/blobs/lJOyXRZag1YMv8qL8GCO/Screenshot%20from%202024-11-19%2011-02-45.png" alt=""><figcaption></figcaption></figure>

## **Usage Tips**

1. **Search for Tasks**
   * Use the search bar to filter tasks by **UUID**, **Name**, or **State**. This is especially helpful when dealing with large numbers of tasks.
2. **Diagnose Failures**
   * For tasks in the **FAILURE** state, the `kwargs` and `Result` columns provide valuable details about what went wrong.
3. **Performance Optimization**
   * Use the `Runtime` column to identify tasks that take a long time to execute, which may need optimization.
4. **Input and Output Validation**
   * The `kwargs` and `Result` columns are also useful for verifying the input and output data of specific tasks.


# Release notes

## 2.15.0

### ✨ New Features & Improvements

* **Users & groups** — Admins can now manage users and groups (create, edit, activate/deactivate, reset password, delete), and organize who can see and edit each other’s files.
* **My account** — redesigned account area with profile management, **user preferences** (language, date and time formats), license & documentation, and service usage overview.
* **Activity log** — Admins can consult platform **events** (global or per user), with filters and **CSV export**.
* **Task sharing** — Admins can share a successful task with a group, or revoke a share.
* **Dashboard & consumption** — usage and consumption are scoped by role: users see their own data; Admins see global data and can filter by user in the details views.
* **Algorithm & formats** — updated anonymization algorithm, with support for additional file formats.

## 2.13.0

### ✨ Improvements

* Improve video re-encoding for better performances on browser

## 2.12.4

### ✨ Bug fixing

* Improve backwards compatibility on command line client
* Update command line client documentation

## 2.12.3

### ✨ New Features & Improvements

* Add an option to chose the blur type
* Add an option to anonymize sound (simple pitch)
* Improved model and algorithm

## 2.7.4&#x20;

### ✨ New Features & Improvements&#x20;

* We’ve added the ability to **customize your detections** through the new redact too&#x6C;**.** It allows you to **edit detections** in your images or videos — you can **adjust, add, or remove** them as needed.

## 2.5.4&#x20;

### ✨ New Features & Improvements&#x20;

* An audio removal option is now available for your videos.You can choose to remove the audio track to enhance the protection of any personal data that may have been recorded during video capture.&#x20;

## 2.4.7&#x20;

### ✨ New Features & Improvements&#x20;

* The ZIP format is now supported. You can upload ZIP files containing images and/or videos; their contents will be automatically processed to simplify the anonymization of large data volumes.&#x20;

## 2.2.0

### ✨ New Features & Improvements

* **Improved Detection**: Integration of a **new AI model** that significantly enhances the **accuracy and speed of face and license plate detection**. Reducing false positives.

## 2.1.0

### ✨ New Features & Improvements

* **Updated Torch-CUDA Version**: Upgraded `torch-cuda` to version **2.5.1+cu124** to ensure compatibility with the latest CUDA updates and improve performance.

## 2.0.9

**Permission Updates**: The following processes are now configured to use **UID 1200** and **GID 1200**:

* **Blur Worker**
* **Directory Worker**
* **Manager API**

### Technical Details

* These updates improve permission management and enhance security for service execution.
* **Why UID/GID 1200?** This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

## 2.0.8

### New Features & Improvements

* Added asynchronous CPU and GPU processing to improve performance.
* Introduced a new feature to clear the GPU cache for better resource management.

## 2.0.7

### ✨ New Feature: Intuitive Dashboard for Task & Consumption Tracking

We’ve added a **Dashboard** page to give you a clear overview of service usage and resource consumption.

#### 🔹 Key Features:

📊 **Service Usage** – Total API calls, daily & monthly breakdown\
📉 **Consumption Tracking** – Data usage (MB) per day & month\
📆 **Dynamic Charts** – Yearly & monthly trends for better insights

## 2.0.6

Starting from this version, custom port configuration has been removed. Applications are now accessible exclusively through the standard ports **80** (HTTP) and **443** (HTTPS). Use the dedicated paths `/api` and `/flower` to access the API and the Flower

## 2.0.2

### **New Features:**

* SSL configuration for cloud version

**Hotfixes:**

* **Web App:** Improved input validation to allow spaces in the input path.
* **BlurIt Model:** Resolved an issue with handling videos with low FPS.

## 2.0.1

### ✨ **New Features:**

* Added HTTP Basic Authentication for the web application, enhancing security.

## 2.0

### ✨ **New Features:**

* **High-Performance Algorithm** : This new algorithm delivers enhanced computing power and speed, resulting in better overall performance for your tasks.&#x20;
* **Lightweight Model :** In addition to the high-performance algorithm, we’ve introduced a smaller, more efficient model that uses **less GPU RAM**, making it ideal for environments with limited resources. Despite its compact size, it still provides robust results, ensuring you don't have to compromise on accuracy or efficiency.

## 1.1.0:

* CLI configuration all in one

## 1.0.0:

* installation script
* NEW CLI
* fix: not processing image or video with uppercase extension (e.g. image.PNG)


# Introduction

## AWS Quickstart

**BlurIt On-Premise Cloud Images** are an all-in-one solution designed to run BlurIt On-Premise on your favorite cloud providers. By leveraging our preconfigured cloud images available on the marketplaces, you can deploy the BlurIt On-Premise solution with complete autonomy.

**Important**: while you can autonomously create virtual servers with our images, you still need to contact us to obtain a valid license.&#x20;

## Supported providers

✅ [AWS](https://aws.amazon.com/marketplace/pp/prodview-khnd7pnhybcca?applicationId=AWS-Marketplace-Console\&ref_=beagle\&sr=0-5)

⏳ Azure (late October)

⏳ GCP (November)

## Supported servers

We highly recommend deploying BlurIt OP on virtual server with Nvidia GPU for better performance, although the software can be run on CPU only.

AMD GPU are not supported.

For a complete list of hardware requirements, please [see details here](/2.15.0/blurit-on-premise/requirements#hardware-requirements).


# AWS

This step-by-step guide will walk you through deploying a BlurIt OP instance using our preconfigured AMI on AWS.

## Step 1: Access the AWS Marketplace

1. Log in to your AWS account.
2. Go to the [AWS Marketplace](https://aws.amazon.com/marketplace).
3. In the search bar, type **BlurIt**.
4. Select the **BlurIt** image from the search results.

## Step 2: Launch the Instance

1. On the AMI BlurIt page, click **Continue to Subscribe**.
2. Review and accept the terms of use.
3. Click **Continue to Configuration**.
4. Choose the **AWS region** where you want to deploy the instance.
5. Under **Fulfillment Option**, select **AMI**.
6. Choose the recommended instance type (With Nvidia GPU).
7. Click **Continue to Launch**.

## Step 3: Configure Networking and Options

1. Select or create a **VPC** and a **Security Group** that allows SSH traffic and TCP ports 8080 to 8085 (these values may differ if you later don't use default values during the configuration process).
2. Launch the instance.

## Step 4: Connect to the Instance

1. Go to the **EC2 Console** to see your running instance.
2. Click on the instance to retrieve the public IP address or DNS name of the instance.
3. Use an SSH client to connect to the instance with the following command:

   ```bash
   ssh -i /path/to/your-key.pem ubuntu@your-instance-public-ip
   ```

## Step 5: Configure Blurit

1. Once connected, begin by configuring your BlurIt server and answering the prompts:

   ```bash
   blurit install
   ```
2. Start your BlurIt server:

   ```bash
   blurit start
   ```
3. Activate your BlurIt server by adding your license:

   ```bash
   blurit license add <license>
   ```

Please consult this page for full documentation.

## Step 6: Access the manager

Once connected, open your web browser and navigate to your instance's public IP address (or DNS name):

```
http://<your-instance-public-ip>:8084
```

## Step 7: Using the BlurIt API

The BlurIt API is available at the following endpoint on your instance:

```
http://<your-instance-public-ip>/api
```

Refer to the [API documentation](/2.15.0/blurit-on-premise/usage/api) for details on the available endpoints and how to integrate them into your workflows.


# Getting started

## Overview

The BlurIt On Premise version (aka BlurIt OP) provides a full offline and unlimited self hosted use of BlurIt by deploying the solution directly on your servers.

This guide will go through the installation process of a standard BlurIt OP setup. If you require custom settings related to the number of GPUs and/or the number of workers, please contact us at <contact@blurit.io>.

**If you want to install BlurIt OP on a cloud provider (AWS, Azure, GCP), please** [**follow instructions here**](/cloud-images/introduction)**.**

## Before you start

Before you start, be sure you have received from Wassa the BlurIt OP archive that contains the installation files.

BlurIt OPs runs in a dockerized environment on Linux or Windows, hence the installation of BlurIt OP requires basic knowledge of Linux/Windows and Docker usage.

If you need any help installing BlurIt OP, please contact us at <contact@blurit.io>.


# Requirements

## Hardware requirements

* CPU recommended: 3-4 threads as the base and 1-2 cores per worker on each machine.
* GPU Nvidia (consumer and professional) [computer capability](https://developer.nvidia.com/cuda-gpus) >= sm\_37 for optimal performance
* RAM GPU 4-6 GB for 1 worker depending of the resolution
* RAM > 16 GB
* 60 Go + local storage

## Software dependencies

* Linux Ubuntu >= 20.04 / CentOS >= 8 / Amazon Linux 2 Deep Learning AMI GPU&#x20;
* Windows 10 Pro, 11 Pro and server 2022 with Windows Subsystem for Linux (WSL)
* Install the following dependencies either using the provided script ([Linux](/blurit-on-premise/installation/linux-dependencies) only) or manually ([Linux](/blurit-on-premise/installation/linux-dependencies) or [Windows](/blurit-on-premise/installation/windows-dependencies-wsl)):
  * [nvidia drivers](https://www.nvidia.com/download/index.aspx) (recommended >= 580 for CUDA 13.0)
  * [docker ce](https://docs.docker.com/engine/install/) and [post install linux](https://.docker.com/engine/install/linux-postinstall/)
  * [docker desktop](https://docs.docker.com/desktop/install/windows-install/) for Windows WSL
  * [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)

## Blurit archive

* blurit\_stack.yml
* .env
* Blurit-op.postman\_collection.json
* README.md
* licence.txt
* login-registry.txt
* install\_dependencies.sh

###


# Installation

{% content-ref url="/pages/XGRsi3LnCyZ37pzzDvji" %}
[Linux dependencies](/blurit-on-premise/installation/linux-dependencies)
{% endcontent-ref %}

{% content-ref url="/pages/u0NzVXfbZPsHjuBnJzJp" %}
[Windows dependencies (WSL)](/blurit-on-premise/installation/windows-dependencies-wsl)
{% endcontent-ref %}

{% content-ref url="/pages/33MB6VJhfv9yRtJwhgQf" %}
[Configuration](/blurit-on-premise/installation/configuration)
{% endcontent-ref %}

{% content-ref url="/pages/usinf50sM4HYGmrXTSW3" %}
[Run BlurIt OP](/blurit-on-premise/installation/run-blurit-op)
{% endcontent-ref %}

{% content-ref url="/pages/QyDYTQ2GDnrCXKq64Mpq" %}
[Multi-servers installation](/blurit-on-premise/installation/multi-servers-installation)
{% endcontent-ref %}

{% content-ref url="/pages/1j3QnV6qSF26ovSTpiXI" %}
[Post installation verifications](/blurit-on-premise/installation/post-installation-verifications)
{% endcontent-ref %}


# Linux dependencies

*Note: Don't follow this step if you plan to run BlurIt OP on Windows.* [*Go there*](/blurit-on-premise/installation/windows-dependencies-wsl) *instead.*

## Choice 1 : use our dependencies installation script (recommended)

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Installation Script**: `linux_installation_script`
   * A script compatible only with Linux systems.
4. **Custom Configuration File** (if applicable): `blurit_stack.yml`

This script will install the software requirements to run BlurIt On-Premise on your server. It will install Nvidia drivers, Docker CE, and Nvidia-docker on Ubuntu, Debian, and RHEL/CentOS. If you are installing BlurIt on an old server and want to maintain specific version dependencies, we don't recommend to use this script but rather to [manually install everything](#manual-dependencies-installation).

To begin, extract the BlurIt OP archive using the following command:

{% code lineNumbers="true" %}

```bash
tar -xzf filename.tar.gz
cd blurit-op
```

{% endcode %}

Replace "filename" with the actual name of the archive that was provided to you.

To start the script, execute the following command:

{% code lineNumbers="true" %}

```sh
sudo ./install_dependencies.sh
```

{% endcode %}

:rotating\_light: After execution of the script, please reboot the server to load the Nvidia drivers and go to the [Configuration](/blurit-on-premise/installation/configuration) page. :rotating\_light:

## Choice 2 : manual dependencies installation

### Nvidia drivers Installation

1. Download the NVIDIA driver >= 470 runfile from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>
2. Open a terminal and navigate to the directory where the downloaded runfile is located.
3. `$ chmod +x <filename>.run` \
   Replace `<filename>` with the actual name of the downloaded runfile.
4. `$ sudo ./<filename>.run`&#x20;
5. `$ sudo reboot`&#x20;

### Docker Installation

The Docker installation documentation is [here](https://docs.docker.com/engine/install/).

{% tabs %}
{% tab title="Ubuntu" %}
{% code lineNumbers="true" fullWidth="false" %}

```bash
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Debian" %}
{% code lineNumbers="true" %}

```bash
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Centos" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}

{% tab title="RHEL" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Post-install docker linux (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Nvidia-docker installation

Nvidia-docker installation documentation is [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

{% tabs %}
{% tab title="Ubuntu / Debian" %}
{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}

{% tab title="Centos / RHEL" %}
{% code lineNumbers="true" %}

```bash
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}
{% endtabs %}

Configure the Docker daemon to recognize the NVIDIA Container Runtime:

{% code lineNumbers="true" %}

```bash
sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Restart the Docker daemon to complete the installation after setting the default runtime:

{% code lineNumbers="true" %}

```bash
sudo systemctl restart docker
```

{% endcode %}

Test if Nvidia-docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

{% endcode %}

This should result in a console output shown below:

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.51.06    Driver Version: 470.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

### Configuring daemon.json

Open `/etc/docker/daemon.json` with your favorite text editor.

Add `"default-runtime": "nvidia",`  to the json. Exemple:

{% code title="/etc/docker/daemon.json" lineNumbers="true" %}

```json
{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime
    }
  }
}
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Windows dependencies (WSL)

*Don't follow this step if you plan to run BlurIt OP on Linux.* [*Go there*](/blurit-on-premise/installation/linux-dependencies) *instead.*

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Custom Configuration File** (if applicable): `blurit_stack.yml`

## Nvidia Driver installation

Download the NVIDIA driver >= 470 exe from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>

You can also update the drivers using [Nvidia Geforce Experience](https://www.nvidia.com/fr-fr/geforce/geforce-experience/).

## Install WSL 2 (Windows Subsystem Linux)

To Check if WSL is installed, open PowerShell as administrator and run:

{% code lineNumbers="true" %}

```powershell
wsl -l –v
```

{% endcode %}

If WSL is not installed:

{% code lineNumbers="true" %}

```
wsl --install -d Ubuntu
```

{% endcode %}

Then reboot your machine.

It is possible to modify the resources allocated to WSL. For more information, you can refer to this link: <https://learn.microsoft.com/fr-fr/windows/wsl/wsl-config#wslconfig>.

## Docker installation

Instruction to install docker CE on windows with WSL 2 backend : <https://docs.docker.com/desktop/install/windows-install/>.

During the install don't forget to tick the Use **WSL 2 instead of Hyper-V** checkbox.

Additionally, if you want the BlurIt app to restart automatically when the machine restarts, check the box labeled 'Start Docker Desktop when you sign, in.'

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/6YSKBoNRIGI2TAOwA6Hh/docker-config.PNG" alt=""><figcaption></figcaption></figure>

## Nvidia-docker installation

To enter WSL, open PowerShell and type `wsl` followed by pressing Enter.

{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Verify that Nvidia-Docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi -a
```

{% endcode %}

### Configuring Docker daemon

Append the following JSON content on the Docker Desktop config like this:

{% code lineNumbers="true" %}

```json
{
	... # current content
	"runtimes": {
		"nvidia": {
			"path": "/usr/bin/nvidia-container-runtime",
			"runtimeArgs": []
		}
	},
	"default-runtime": "nvidia"
}
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/BfboXfYku3fj8GoumCzA/Windows_daemon-docker.png" alt=""><figcaption></figcaption></figure>

Restart Docker for the change to take effect.

### Post-install docker linux on WSL (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Configuration

## Blurit CLI

The Blurit CLI is installed during the [Linux](/blurit-on-premise/installation/linux-dependencies) or [Windows](/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation. If Blurit team send you a compose file, it's possible to pass it as argument.

```bash
blurit configure
```

For custom installations, if a `blurit_stack.yml` file is provided, include it as an argument when executing the relevant commands :<br>

```bash
blurit configure blurit_stack.yml
```

## Configuration explanation

The following section provides an explanation of the various questions asked during the configuration process.

### Model

During the configuration process, you'll be prompted to select the AI model version that best fits your performance and precision needs. BlurIt offers two options:

* **tiny**: This model is optimized for speed, processing images and videos faster. It is ideal for scenarios where performance is critical, although it comes with a very slight reduction in precision. This is the default option.
* **standard**: This version provides a balance between speed and precision. While still optimized for fast processing, it offers slightly higher accuracy compared to the tiny model, making it suitable for tasks where precision is more important.

### Web App Authentication

To secure access to the BlurIt web app, you’ll need to set up a username and password during the configuration process. This protects the web interface and ensures that only authorized users can manage files and access data.

1. **Username**: Create a unique username for accessing the web app.
2. **Password**: Set a strong password for added security. Store it securely for future access.

Alternatively, you may choose not to set a username and password for quicker access. However, please note that **disabling authentication** means the web app will be openly accessible, which may expose your data to unauthorized access. This choice comes with the user’s full responsibility for securing access to the application.

### **SSL Configuration**&#x20;

For enhanced security, you can enable SSL to encrypt communication between clients and the server. During the configuration process, you will be prompted to provide the following:

1. **Server Name**: Specify the domain name or IP address used to access your BlurIt web app.
2. **Path to SSL Certificate File (.pem)**: Provide the full path to your SSL certificate file. This file contains the public key and is required for establishing secure HTTPS connections.
3. **Path to SSL Private Key File (.pem)**: Provide the full path to your private key file. This file must correspond to the SSL certificate provided.

If you do not have an SSL certificate, you can use services like [Let's Encrypt](https://letsencrypt.org/) to generate one for free or use self-signed certificates for internal testing.

By enabling SSL and authentication, you ensure that your data and web app are protected against unauthorized access and interception.

### Local storage

These settings define the base directories where BlurIt OP will locate input files (to be processed) and where it will store the output files (blurred videos/images and detection JSONs) on the local server storage, i.e., on the server where BlurIt OP is running.

#### Accessing Windows Drives on WSL

If you are using Windows Subsystem for Linux (WSL), your Windows drives are accessible under the `/mnt/` directory. Each drive is mapped to its respective folder:

* **Drive C:** Located at `/mnt/c/`
* **Drive D:** Located at `/mnt/d/`, and so on.

For example, if you need to access a file located at `C:\Users\YourName\Documents`, you can find it in WSL at:

```bash
/mnt/c/Users/YourName/Documents
```

This mapping makes it easy to navigate between your Windows environment and the Linux subsystem.

The input and output directories will be assigned to the user with ID 1200.

**Why UID/GID 1200?**&#x20;

This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

### S3 storage

These settings allow the use of S3 storage for the input and output directories for media.

### GPU settings

Select the GPU you wish to use with Blurit.

### Max Threads number

This variable represents the maximum number of threads that the reencoding step will utilize on your CPU. Increasing this value can result in faster reencoding.&#x20;

However, it's important to note that you should reserve some threads for other processes.

Avoid using the maximum number of available threads on your server, as it may impact the performance of other applications.

#### Webhook (optional)

This setting is a configuration that defines a route or URL where a POST request can be sent. This endpoint is typically used to send JSON data to another system or service.

In this specific example, when the POST request is made to the "CUSTOM\_WEBHOOK\_ENDPOINT" route, the JSON payload being sent is as follows:

```json
{
  "status": "Succeeded",
  "task_id": "abc-123-456-789"
}
```

The JSON payload contains two key-value pairs:

* "status" with a value of "Succeeded"
* "task\_id" with a value of "abc-123-456-789"

The purpose of this webhook is to notify or provide information to the system or service listening at the specified endpoint about the status of a task or operation. The receiving system can then process this data according to its requirements.

### Jobs timeouts

This parameter represents the amount of time the application waits before changing the status of a task to "failed." By default, it is set to 43200000 milliseconds (equivalent to 12 hours).


# Run BlurIt OP

## Blurit CLI

The Blurit CLI is installed during the [Linux](/blurit-on-premise/installation/linux-dependencies) or [Windows](/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit start
```

The application will be available on ports **80** (HTTP) and **443** (HTTPS). The API can be accessed at the URL `/api`, and the Flower interface at `/flower`. The manager remains accessible via the standard URL (DNS or IP).


# Multi-servers installation

#### Add a worker node

🚨 This section pertains to clustering Blurit On-Premise. If you would like more information about it, please contact our customer services.🚨&#x20;

Before joining the manager machine, you need to open some ports:

* `TCP` port `2377` for cluster management communications
* `TCP` and `UDP` port `7946` for communication among nodes
* `UDP` port `4789` for overlay network traffic

Get Join-token on manager machine:

{% code lineNumbers="true" %}

```bash
docker swarm join-token worker
```

{% endcode %}

Replace `<worker-token>` with the actual token obtained from the previous command, and `<ip-of-manager-machine>` with the IP address or hostname of the manager machine. This command will join the worker machine to the swarm cluster.

Join the swarm cluster on the worker machine (<https://docs.docker.com/engine/reference/commandline/swarm\\_join/>):

{% code lineNumbers="true" %}

```bash
docker swarm join --token <worker-token> <ip-of-manager-machine>:2377
```

{% endcode %}

#### Add label to node

Add a label allow to chose the machine to deploy the workers. For multiple machine installation, it's mandatory for a smooth deployment.

This command display every node present on the swarm cluster:

{% code lineNumbers="true" %}

```bash
docker node ls
```

{% endcode %}

Add a label to a node:

{% code lineNumbers="true" %}

```bash
docker node update --label-add blurit-worker-<number of the machine> <node-name>
```

{% endcode %}

Replace `<machine-number>` with the appropriate number for the machine, and `<node-name>` with the name of the node. This command adds a label to the specified node, which will be used for deployment purposes.


# Post installation verifications

## Blurit CLI

The Blurit CLI is installed during the [Linux](/blurit-on-premise/installation/linux-dependencies) or [Windows](/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit status
```


# Usage

As said in the [Configuration](/blurit-on-premise/installation/configuration) section, BlurIt OP Web Manager or API works within the paths set in `LOCAL_STORAGE_INPUT_PATH` and `LOCAL_STORAGE_OUTPUT_PATH`. Every processed media will be stored in `LOCAL_STORAGE_OUTPUT_PATH`, while the original media will be processed from `LOCAL_STORAGE_INPUT_PATH`.

There are two ways to process files with BlurIt OP:

1. Manager Webapp: The web app manager provides a Graphical User Interface (GUI) accessible at `http://<host> or https://<host>`, where "host" refers to the IP address of the machine where BlurIt OP is deployed or the dns url configured. This interface allows non-developers to process files easily.
2. API: The API is accessible at `http://<host>/api or https://<host>/api`. It allows developers to integrate BlurIt OP file processing capabilities into their own applications or workflows programmatically. This allows for greater flexibility and automation.


# Manager Webapp

## Overview

The Manager is a web application that facilitate usage of BlurIt OP by providing a GUI to non-developer users. It also provide an history of taks processed by BlurIt OP, wether thoses tasks have been created from the Manager or from the API.

## Access

You can access the Manager by visiting `http://<HOST> or https://<HOST>`, where `HOST` is the IP address of the machine or the dns url configured in the [Configuration](/blurit-on-premise/installation/configuration) section.

## License activation

Before using BlurIt OP, you must activate the license.

&#x20;Once you're on the Manager, click on the "Update License" button located at the top right corner of your screen.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/0hMCpM0WYVOw1DJDVKmU/blurit_updatelicense-button.jpg" alt=""><figcaption></figcaption></figure>

After navigating to the Account (`/account`) page, click on the "Edit license" button. Next, paste the license into the designated text area and confirm the changes by clicking on the "Update license" button.

{% embed url="<https://cloud.wassa.io/s/nhQZwaY8uPUs8xP/download>" %}

## Tasks

### Create a task

To start a task, go to Tasks page (`/tasks`) by clicking on side menu "Tasks" and click on the  "Anonymize" button.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/Hht98ppDMEhhYVLRPVK3/blurit_anonymize-button.jpg" alt=""><figcaption></figcaption></figure>

You can now follow 3 simple steps to create a new task:

1. **Source**: Choose either a file from your PC or a whole folder to process from the local storage or S3.
   * To process a file from your PC, use the file selection option or simply drag and drop the file into the designated area.
   * To process a folder, enter its path in the field. The path you enter represents a subdirectory of the `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage) set in the [Configuration](/blurit-on-premise/installation/configuration) section. Please ensure that the directory already exists and has some files in it. If you don't enter anything, BurIt OP will process files directly in `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET`)
2. **Blur options**: Select the desired task options from the following choices:
   * Face anonymisation
   * Plates anonymisation
   * Coordinates position
   * Add  `_anonymized` suffix
   * Keep the audio track (only for zip/directory/videos)
   * Processing report (zip files only)
     * This option allows you to include in the ZIP file a CSV summary indicating the anonymization success status for all the files that were part of the original ZIP
   * Keep the files that cannot be blured (zip files only)
     * This option allows you to keep, within the anonymized ZIP, the files with unsupported formats that cannot be processed by the software
3. **Output path**: Specify the desired output location, whether it's local storage or S3. You can either change the name of the output file or create a new directory in the output to store your processed media. As for the source, the directory you enter here represents a subdirectory of `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage). If you don't enter anything, BurIt OP will save processed files directly in `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET`)

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/SuVz08l7XaXzNeSYVTgh/Capture%20d%E2%80%99%C3%A9cran%20du%202025-09-01%2017-51-14.png" alt=""><figcaption></figcaption></figure>

Click on the "Create" button and confirm to initiate the task.

{% embed url="<https://cloud.wassa.io/s/ryy3aFELs8xb8hT/download>" %}

### List tasks

The Tasks page list all the tasks that have been created in BlurIt OP (using the Manager or the API). For each task, the Manager displays:

* The date
* The type (Picture, Video or Archive)
* The file name
* The file size
* The task status (updated in real time)
* A button to download the processed file

The list can be filtered.

### Download processed files

From the Tasks page, click on the download icon located in the file column.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/zEqujB7YIzAjs417GTCp/blurit_downloadtask-button.jpg" alt=""><figcaption></figcaption></figure>

### Using The Redact Tool

The Redact Tool allows you to access all detections within your media (image or video) so you can adjust, add, or remove them as needed — all while staying within your local environment.

### Access&#x20;

Once your file (image or video) has been processed, you can edit the detections by clicking on this icon to access the redact tool.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/B6yr1YhVtWS67XewED3b/Design%20sans%20titre.png" alt=""><figcaption></figcaption></figure>

Once done, your media will appear along with all the detected elements.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/PgyzHE6BNgCNEuqWOL3X/Screenshot%202025-10-16%20at%2015.55.10.png" alt=""><figcaption></figcaption></figure>

### Adjusting Detections&#x20;

* **Adjusting a detection**\
  Click on the detection of your choice. You can resize or move it on the frame as needed.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/j8nHMG70zl9p80UhYLTI/1.png" alt=""><figcaption></figcaption></figure>

* **Deactivating a detection**\
  Click on the detection to turn it from green to gray. It will **no longer be applied** to the image or video. You can also deactivate it by unchecking the corresponding box in the left panel, just above the detection preview. You can **reactivate it at any time**.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/gMPLJtSa1uR1iYTPylBw/2.png" alt=""><figcaption></figcaption></figure>

* &#x20;**Deleting a detection** &#x20;

  If you want to permanently delete this detection with no option to undo, click “Delete Track.”

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/Z5aSg5FF2MWHS8TUVjbU/3.png" alt=""><figcaption></figcaption></figure>

* **To add a new detection manually:**\
  In the menu bar at the top left of the screen, you can choose the type of detection you want to add:&#x20;

  * License plate detection&#x20;
  * Face detection&#x20;
  * Custom detection, which you can adjust to match your object’s shape&#x20;

  ➜ When creating a manual detection, make sure to **move it along with your object’s motion in the video**

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/3I3vTrNm4BapuGSCT6lN/menu%20detections.png" alt=""><figcaption></figcaption></figure>

* **Saving & reprocessing your file**\
  You can save the adjustments you’ve made to access them later, or reprocess the media to apply your changes.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/aHJchTD3gP9rsSUUaXuW/saving.png" alt=""><figcaption></figcaption></figure>


# API

The BlurIt OP API offers several functionalities. It allows you to obtain the current license by using the GET method on the [`/api/license`](/blurit-on-premise/usage/api/license) endpoint. Additionally, you can add a new license by using the POST method on the same endpoint. If a license already exists, it will be replaced by the new license.

Furthermore, the API provides the capability to add a blur task to the queue by using the POST method on the [`/api/blur_it`](/blurit-on-premise/usage/api/tasks) endpoint. You can also add a blur task for a directory by using the POST method on the [`/api/blur_it/directory`](/blurit-on-premise/usage/api/tasks/process-a-directory) endpoint.

Moreover, the API allows you to retrieve the status of a task by using the GET method on the [`/api/task/{task_id}`](/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task) endpoint, where "task\_id" is the task identifier.

\
The API documentation can be found at `http://<HOST>/api/docs`, where `HOST` is the IP address of the machine.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>License</td><td></td><td><a href="/blurit-on-premise/usage/api/license">License</a></td></tr><tr><td></td><td>Blur it</td><td></td><td><a href="/blurit-on-premise/usage/api/tasks">Tasks</a></td></tr><tr><td></td><td>Blur it directory</td><td></td><td><a href="/blurit-on-premise/usage/api/tasks/process-a-directory">Process a directory</a></td></tr><tr><td></td><td>Task</td><td></td><td><a href="/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task">Get the status of a task</a></td></tr></tbody></table>


# License

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="get" %}
[openapi.json](https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/INjhNJMYbwZatTO7epOv/openapi.json)
{% endopenapi %}

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="post" %}
[openapi.json](https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/INjhNJMYbwZatTO7epOv/openapi.json)
{% endopenapi %}


# Tasks

* [Process a directory](/blurit-on-premise/usage/api/tasks/process-a-directory)
* [Process a file](/blurit-on-premise/usage/api/tasks/process-a-file)
* [Process a zip file](/blurit-on-premise/usage/api/tasks/process-a-zip-file)
* [Get the status of a task](/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task)
* [Revoke a task](/blurit-on-premise/usage/api/tasks/revoke-a-task)


# Process a directory

## Blur It Directory Post

> Add a blurit directory task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/directory":{"post":{"summary":"Blur It Directory Post","description":"Add a blurit directory task in task queue.","operationId":"blur_it_directory_post_api_blur_it_directory_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurDirectoryBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurDirectoryBody":{"title":"DetectAndBlurDirectoryBody","required":["input_directory","output_directory"],"type":"object","properties":{"input_directory":{"$ref":"#/components/schemas/InputDirectory"},"output_directory":{"$ref":"#/components/schemas/OutputDirectory"},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output medias ?","type":"boolean","default":true}},"description":"Detect and blur directory route's body.\nAt least one of output_media or output_json is needed."},"InputDirectory":{"title":"InputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"},"auto_delete":{"title":"If set to True, deletes the input file after processing.","type":"boolean","default":false}},"description":"Input directory structure"},"OutputDirectory":{"title":"OutputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"}},"description":"Output directory structure"},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a file

## Blur It Post

> Add a blurit task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it":{"post":{"summary":"Blur It Post","description":"Add a blurit task in task queue.","operationId":"blur_it_post_api_blur_it_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurBody":{"title":"DetectAndBlurBody","required":["input_media"],"type":"object","properties":{"input_media":{"$ref":"#/components/schemas/InputFile"},"output_media":{"title":"Output video/image informations","allOf":[{"$ref":"#/components/schemas/OutputMedia"}]},"output_json":{"title":"Output JSON informations (contains detections' descriptions)","allOf":[{"$ref":"#/components/schemas/OutputJSON"}]},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}},"description":"Detect and blur route's body.\nAt least one of output_media or output_json is needed."},"InputFile":{"title":"InputFile","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Input File structure."},"OutputMedia":{"title":"OutputMedia","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Media file structure."},"OutputJSON":{"title":"OutputJSON","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output JSON file structure."},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a zip file

## Zip Blur It Post

> Add a zip\_detect\_and\_blur task in task queue.\
> \
> returns a {"task\_id": str}

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/zip":{"post":{"summary":"Zip Blur It Post","description":"Add a zip_detect_and_blur task in task queue.\n\nreturns a {\"task_id\": str}","operationId":"zip_blur_it_post_api_blur_it_zip_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ZipBody":{"title":"ZipBody","required":["input_zip","output_zip"],"type":"object","properties":{"input_zip":{"title":"Input zip storage informations","allOf":[{"$ref":"#/components/schemas/InputZip"}]},"output_zip":{"title":"Output zip storage informations","allOf":[{"$ref":"#/components/schemas/OutputZip"}]},"report_format":{"title":"Fomat of the report file. Set to null if you don't want a report file. Possible values: \"csv\", null","type":"string","default":"csv"},"save_unknown_files":{"title":"If set to True, unprocessable files extensions will be returned with processed files, in the output zip. If set to False, they will be deleted.","type":"boolean","default":false},"add_output_sufix":{"title":"If set to True, output files names will be suffixed (eg: \"file.jpg\" => \"file_anonymized.jpg\")","type":"boolean","default":true},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}}},"InputZip":{"title":"InputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Output JSON file structure."},"OutputZip":{"title":"OutputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Zip file structure."},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Get the status of a task

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/task/{task\_id}" method="get" %}
[openapi.json](https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/INjhNJMYbwZatTO7epOv/openapi.json)
{% endopenapi %}


# Revoke a task

## Revoke Task

> Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/task/{task_id}/revoke":{"put":{"summary":"Revoke Task","description":"Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks","operationId":"revoke_task_api_task__task_id__revoke_put","parameters":[{"required":true,"schema":{"title":"Task Id","type":"string"},"name":"task_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"TaskMessageResponse":{"title":"TaskMessageResponse","required":["task_id","message"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"},"message":{"title":"A message related to the route","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Command line interface

## Overview

The Blurit command line interface, this CLI lets you interact with Blurit On-Premise to perform various tasks related to media anonymization.

## CLI

The main Blurit CLI command.

```bash
blurit [OPTIONS] COMMAND [ARGS]...
```

### License

Manage Blurit licenses.

#### **info**

Displays all Blurit license information.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```shell
blurit license info
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-07-31T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-12-31T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

#### **add**

Upload or update a Blurit On-Premise license.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```shell
blurit license add LICENSE
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-06-27T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-09-30T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

### Tasks

Manage Blurit tasks.

#### **create**

Create a new Blurit task. Options vary depending on the input type (file, directory, zip). File processing only needs input argument but output can be specified to store the exit media to a precise location.

options:

* \--input-file \[file|directory|zip] REQUIRED
* \--input-storage-type \[local|s3] REQUIRED
* \--output-storage-type \[local|s3] REQUIRED
* \--no-face-blur Disable face blur.&#x20;
* \--no-plate-blur Disable plate blur.&#x20;
* \--json-coord Use JSON coordinates.
* \--add-report Zip only: Adds a CSV report of all processed files in the zip
* \--save-unprocessable-files Zip only: Should unknown files types (eg: text files, binaries ..) be reintegrated in the output zip ?
* \--auto-delete Auto deletion of input media&#x20;
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json] Output format in JSON

```shell
blurit tasks create [OPTIONS] INPUT OUTPUT
```

Example: Create a task by specifying input and output directories:

```bash
blurit tasks create --input-type directory --input-storage-type local --output-storage-type local input output
```

Response:

```
job id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

#### **status**

Get the status of a specific task using its ID.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

return:

* Succeeded
* Started
* Sent
* Failed
* Couldn't contact the Blurit server

```shell
blurit tasks status TASK_ID
```

Example:

```bash
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a
```

Response:

```bash
Succeeded
```

#### **list**

List history call tasks.

options:

* \--page TEXT Specify the page number&#x20;
* \--count TEXT Specify the number of results per page&#x20;
* \--starting-date TEXT Specify the starting date&#x20;
* \--ending-date TEXT Specify the ending date&#x20;
* \--filetype \[picture|video|directory] Specify the file type
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```bash
blurit list
```

Response:

```
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+
| Created At               | Processing Time   | File Type   | Job ID                               | File Name     | Output Media URL      | Task Status   |
+==========================+===================+=============+======================================+===============+=======================+===============+
| 2023-08-24T09:18:42.625Z | 05:42:50.70       | directory   | 31bc8405-4a56-4cb2-a67e-689797ad9a1a | 629d57_part_1 | 629d57_part_2_process | Succeeded     |
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+

```

### Configure

Configure the Blurit application, need to be done at least once before first deployment ('blurit start').

```
blurit configure
```

### Start

Start the Blurit server, CLI must be on the host machine.

```
blurit start
```

### Restart

Restart the Blurit server, CLI must be on the host machine.

```
blurit restart
```

### Stop

Stop the Blurit server, CLI must be on the host machine.

```
blurit stop
```

### Stats

Display total and period (month, day) statistics.

options:

* \--date-start TEXT Starting date with format: %Y-%m-%d&#x20;
* \--date-end TEXT Ending date with format: %Y-%m-%d&#x20;
* \--granularity \[day|month] Display statistics by month or days&#x20;
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json] Output format in JSON&#x20;
* \--help Show this message and exit.

```
blurit stats
```

**Response:**

```
+------------------------------+-----------+
| Metric                       | Value     |
+==============================+===========+
| Total Videos API Calls       | 73        |
+------------------------------+-----------+
| Total Pictures API Calls     | 443       |
+------------------------------+-----------+
| Total Videos Consumption     | 3.33 GB   |
+------------------------------+-----------+
| Total Pictures Consumption   | 806.07 MB |
+------------------------------+-----------+
| Monthly Videos API Calls     | 4         |
+------------------------------+-----------+
| Monthly Pictures API Calls   | 8         |
+------------------------------+-----------+
| Monthly Videos Consumption   | 22.12 MB  |
+------------------------------+-----------+
| Monthly Pictures Consumption | 9.42 MB   |
+------------------------------+-----------+
```

### Doc

Display link to documentation.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```
blurit doc
```

response:

```
API Documentation:
Operation: https://doc-op.blurit.io
Local: http://127.0.0.1:8084/api/docs
```

### Uninstall

Uninstall the Blurit server, CLI must be on the host machine.

```
blurit uninstall
```

#### **Output Format**&#x20;

The Blurit CLI supports two output formats: text (default) and JSON. You can specify the output format using the -o or --output-format option. For example, to get JSON output, use -o json.

Example:

```
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a -o json
```

Response:

```
{'task_id': '31bc8405-4a56-4cb2-a67e-689797ad9a1a', 'status': 'Succeeded', 'result': {'input_directory': {'protocol': 'file', 'path': 'input/629d57_part_2', 'auto_delete': False}, 'output_directory': {'protocol': 'file', 'path': 'output/629d57_part_2_process'}, 'size': {'VIDEO': 4979394177}, 'nb_files': {'VIDEO': 252}}}
```

#### **Support and Contribution**&#x20;

If you have any questions, issues, or would like to make a return of the Blurit CLI, please contact us at <support@blurit.io>. We hope this guide helps you effectively use the Blurit CLI to manage your media anonymization tasks.


# Monitoring With Flower

**Accessing the Flower Web Interface**

Once the installation of Blurit is complete, Flower's web interface is accessible at:

```arduino
http://<your-server-address>/flower
```

Use the **username** and **password** configured during the installation of Blurit to log in.

**Overview of the Interface**

The Flower interface provides an intuitive way to monitor and manage Celery tasks and workers in real-time. Below is a detailed breakdown of the key sections and columns in the interface.

## **Dashboard: Monitoring Workers Overview**

The **Dashboard** tab in Flower provides an overview of all Celery workers currently running. This page allows you to quickly monitor worker states and performance.

**Column Descriptions**

1. **Worker Name**
   * Displays the unique name of each worker. Typically, the name is prefixed with `celery@` followed by a unique identifier (often based on the hostname).
   * Example: `celery@18e5d5189283`.
2. **Status**
   * Indicates the current status of the worker.
   * **Online**: The worker is active and communicating with the broker.
   * **Offline**: The worker is not responding or has been stopped.
3. **Active**
   * The number of tasks currently being processed by this worker.
   * A high value here relative to the worker’s capacity could indicate overload.
4. **Processed**
   * The total number of tasks processed by the worker since it started.
5. **Failed**
   * The total number of tasks that have failed on this worker.
   * A high number may indicate recurring issues with specific tasks or code.
6. **Succeeded**
   * The total number of tasks successfully executed by the worker.
7. **Retried**
   * The number of tasks that were retried after encountering a temporary error.
8. **Load Average**
   * The system's average load (CPU, memory) for the container or machine running the worker.
   * Format: `1 min, 5 min, 15 min`.
   * Example: `0.19, 0.08, 0.08` indicates a low load across all three timeframes.

**Available Actions**

* **Search Bar**: Use the search bar in the top-right corner to filter workers by name or other attributes. This is helpful when managing many workers.
* **Refresh**: Click the **Refresh** button to update the data displayed on the dashboard.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/i16TYU580Rf06U0EXVmj/Screenshot%20from%202024-11-19%2011-00-58.png" alt=""><figcaption></figcaption></figure>

## **Tasks: Monitoring and Managing Individual Tasks**

The **Tasks** tab in Flower allows you to monitor the state and details of individual Celery tasks in real-time. This tab is especially useful for diagnosing specific issues or analyzing task performance.

**Column Descriptions**

1. **Name**
   * The name of the task, as defined in your Celery code.
   * Example: `blurit.image`.
   * This typically corresponds to a function or method in your application.
2. **UUID**
   * A unique identifier for each task, useful for debugging or referencing specific tasks.
   * Example: `c2e583bc-1dc9-4193-9df5-fe412aa0b180`.
3. **State**
   * The current state of the task.
   * Common states include:
     * **PENDING**: The task is waiting to be executed.
     * **STARTED**: The task is currently running.
     * **SUCCESS**: The task has completed successfully.
     * **FAILURE**: The task execution failed.
   * Example in the screenshot: **SUCCESS**.
4. **args**
   * The positional arguments passed to the task when it was executed.
   * Example: `()` (no positional arguments in this case).
5. **kwargs**
   * The keyword arguments (named parameters) passed to the task.
   * Example:

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "lifespan": 3600
     }
     ```
6. **Result**
   * The result returned by the task after execution.
   * Example (summary):

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "chronos": {"total": 2.219586, "childs": {...}}
     }
     ```
7. **Received**
   * The timestamp when the task was received by the worker.
   * Example: `2024-11-19 10:02:30.472`.
8. **Started**
   * The timestamp when the task started execution.
   * Example: `2024-11-19 10:02:30.478`.
9. **Runtime**
   * The total time the task took to execute, in seconds.
   * Example: `2.733`.
10. **Worker**
    * The Celery worker that executed the task.
    * Example: `celery@83b122840b58`.

<figure><img src="https://content.gitbook.com/content/W56IlwrTVhlwQs1JjECe/blobs/lomHJ9aavec8mbfAcYT4/Screenshot%20from%202024-11-19%2011-02-45.png" alt=""><figcaption></figcaption></figure>

## **Usage Tips**

1. **Search for Tasks**
   * Use the search bar to filter tasks by **UUID**, **Name**, or **State**. This is especially helpful when dealing with large numbers of tasks.
2. **Diagnose Failures**
   * For tasks in the **FAILURE** state, the `kwargs` and `Result` columns provide valuable details about what went wrong.
3. **Performance Optimization**
   * Use the `Runtime` column to identify tasks that take a long time to execute, which may need optimization.
4. **Input and Output Validation**
   * The `kwargs` and `Result` columns are also useful for verifying the input and output data of specific tasks.


# Release notes

## 2.13.0

### ✨ Improvements

* Improve video re-encoding for better performances on browser

## 2.12.4

### ✨ Bug fixing

* Improve backwards compatibility on command line client
* Update command line client documentation

## 2.12.3

### ✨ New Features & Improvements

* Add an option to chose the blur type
* Add an option to anonymize sound (simple pitch)
* Improved model and algorithm

## 2.7.4&#x20;

### ✨ New Features & Improvements&#x20;

* We’ve added the ability to **customize your detections** through the new redact too&#x6C;**.** It allows you to **edit detections** in your images or videos — you can **adjust, add, or remove** them as needed.

## 2.5.4&#x20;

### ✨ New Features & Improvements&#x20;

* An audio removal option is now available for your videos.You can choose to remove the audio track to enhance the protection of any personal data that may have been recorded during video capture.&#x20;

## 2.4.7&#x20;

### ✨ New Features & Improvements&#x20;

* The ZIP format is now supported. You can upload ZIP files containing images and/or videos; their contents will be automatically processed to simplify the anonymization of large data volumes.&#x20;

## 2.2.0

### ✨ New Features & Improvements

* **Improved Detection**: Integration of a **new AI model** that significantly enhances the **accuracy and speed of face and license plate detection**. Reducing false positives.

## 2.1.0

### ✨ New Features & Improvements

* **Updated Torch-CUDA Version**: Upgraded `torch-cuda` to version **2.5.1+cu124** to ensure compatibility with the latest CUDA updates and improve performance.

## 2.0.9

**Permission Updates**: The following processes are now configured to use **UID 1200** and **GID 1200**:

* **Blur Worker**
* **Directory Worker**
* **Manager API**

### Technical Details

* These updates improve permission management and enhance security for service execution.
* **Why UID/GID 1200?** This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

## 2.0.8

### New Features & Improvements

* Added asynchronous CPU and GPU processing to improve performance.
* Introduced a new feature to clear the GPU cache for better resource management.

## 2.0.7

### ✨ New Feature: Intuitive Dashboard for Task & Consumption Tracking

We’ve added a **Dashboard** page to give you a clear overview of service usage and resource consumption.

#### 🔹 Key Features:

📊 **Service Usage** – Total API calls, daily & monthly breakdown\
📉 **Consumption Tracking** – Data usage (MB) per day & month\
📆 **Dynamic Charts** – Yearly & monthly trends for better insights

## 2.0.6

Starting from this version, custom port configuration has been removed. Applications are now accessible exclusively through the standard ports **80** (HTTP) and **443** (HTTPS). Use the dedicated paths `/api` and `/flower` to access the API and the Flower

## 2.0.2

### **New Features:**

* SSL configuration for cloud version

**Hotfixes:**

* **Web App:** Improved input validation to allow spaces in the input path.
* **BlurIt Model:** Resolved an issue with handling videos with low FPS.

## 2.0.1

### ✨ **New Features:**

* Added HTTP Basic Authentication for the web application, enhancing security.

## 2.0

### ✨ **New Features:**

* **High-Performance Algorithm** : This new algorithm delivers enhanced computing power and speed, resulting in better overall performance for your tasks.&#x20;
* **Lightweight Model :** In addition to the high-performance algorithm, we’ve introduced a smaller, more efficient model that uses **less GPU RAM**, making it ideal for environments with limited resources. Despite its compact size, it still provides robust results, ensuring you don't have to compromise on accuracy or efficiency.

## 1.1.0:

* CLI configuration all in one

## 1.0.0:

* installation script
* NEW CLI
* fix: not processing image or video with uppercase extension (e.g. image.PNG)


# Introduction

## AWS Quickstart

**BlurIt On-Premise Cloud Images** are an all-in-one solution designed to run BlurIt On-Premise on your favorite cloud providers. By leveraging our preconfigured cloud images available on the marketplaces, you can deploy the BlurIt On-Premise solution with complete autonomy.

**Important**: while you can autonomously create virtual servers with our images, you still need to contact us to obtain a valid license.&#x20;

## Supported providers

✅ [AWS](https://aws.amazon.com/marketplace/pp/prodview-khnd7pnhybcca?applicationId=AWS-Marketplace-Console\&ref_=beagle\&sr=0-5)

⏳ Azure (late October)

⏳ GCP (November)

## Supported servers

We highly recommend deploying BlurIt OP on virtual server with Nvidia GPU for better performance, although the software can be run on CPU only.

AMD GPU are not supported.

For a complete list of hardware requirements, please [see details here](/blurit-on-premise/requirements#hardware-requirements).


# AWS

This step-by-step guide will walk you through deploying a BlurIt OP instance using our preconfigured AMI on AWS.

## Step 1: Access the AWS Marketplace

1. Log in to your AWS account.
2. Go to the [AWS Marketplace](https://aws.amazon.com/marketplace).
3. In the search bar, type **BlurIt**.
4. Select the **BlurIt** image from the search results.

## Step 2: Launch the Instance

1. On the AMI BlurIt page, click **Continue to Subscribe**.
2. Review and accept the terms of use.
3. Click **Continue to Configuration**.
4. Choose the **AWS region** where you want to deploy the instance.
5. Under **Fulfillment Option**, select **AMI**.
6. Choose the recommended instance type (With Nvidia GPU).
7. Click **Continue to Launch**.

## Step 3: Configure Networking and Options

1. Select or create a **VPC** and a **Security Group** that allows SSH traffic and TCP ports 8080 to 8085 (these values may differ if you later don't use default values during the configuration process).
2. Launch the instance.

## Step 4: Connect to the Instance

1. Go to the **EC2 Console** to see your running instance.
2. Click on the instance to retrieve the public IP address or DNS name of the instance.
3. Use an SSH client to connect to the instance with the following command:

   ```bash
   ssh -i /path/to/your-key.pem ubuntu@your-instance-public-ip
   ```

## Step 5: Configure Blurit

1. Once connected, begin by configuring your BlurIt server and answering the prompts:

   ```bash
   blurit configure
   ```
2. Start your BlurIt server:

   ```bash
   blurit start
   ```
3. Activate your BlurIt server by adding your license:

   ```bash
   blurit license add <license>
   ```

Please consult [this page](/blurit-on-premise/installation/configuration) for full documentation.

## Step 6: Access the manager

Once connected, open your web browser and navigate to your instance's public IP address (or DNS name):

```
http://<your-instance-public-ip>:8084
```

## Step 7: Using the BlurIt API

The BlurIt API is available at the following endpoint on your instance:

```
http://<your-instance-public-ip>/api
```

Refer to the [API documentation](/blurit-on-premise/usage/api) for details on the available endpoints and how to integrate them into your workflows.


# Getting started

## Overview

The BlurIt On Premise version (aka BlurIt OP) provides a full offline and unlimited self hosted use of BlurIt by deploying the solution directly on your servers.

This guide will go through the installation process of a standard BlurIt OP setup. If you require custom settings related to the number of GPUs and/or the number of workers, please contact us at <contact@blurit.io>.

**If you want to install BlurIt OP on a cloud provider (AWS, Azure, GCP), please** [**follow instructions here**](/2.12.4/cloud-images/introduction)**.**

## Before you start

Before you start, be sure you have received from Wassa the BlurIt OP archive that contains the installation files.

BlurIt OPs runs in a dockerized environment on Linux or Windows, hence the installation of BlurIt OP requires basic knowledge of Linux/Windows and Docker usage.

If you need any help installing BlurIt OP, please contact us at <contact@blurit.io>.


# Requirements

## Hardware requirements

* CPU recommended: 3-4 threads as the base and 1-2 cores per worker on each machine.
* GPU Nvidia (consumer and professional) [computer capability](https://developer.nvidia.com/cuda-gpus) >= sm\_37 for optimal performance
* RAM GPU 4-6 GB for 1 worker depending of the resolution
* RAM > 16 GB
* 60 Go + local storage

## Software dependencies

* Linux Ubuntu >= 20.04 / CentOS >= 8 / Amazon Linux 2 Deep Learning AMI GPU&#x20;
* Windows 10 Pro, 11 Pro and server 2022 with Windows Subsystem for Linux (WSL)
* Install the following dependencies either using the provided script ([Linux](/2.12.4/blurit-on-premise/installation/linux-dependencies) only) or manually ([Linux](/2.12.4/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl)):
  * [nvidia drivers](https://www.nvidia.com/download/index.aspx) recommended >= 470
  * [docker ce](https://docs.docker.com/engine/install/) and [post install linux](https://.docker.com/engine/install/linux-postinstall/)
  * [docker desktop](https://docs.docker.com/desktop/install/windows-install/) for Windows WSL
  * docker-compose <= 1.29
  * [nvidia-docker2](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#setting-up-nvidia-container-toolkit) (set as default docker runtime)

## Blurit archive

* blurit\_stack.yml
* .env
* Blurit-op.postman\_collection.json
* README.md
* licence.txt
* login-registry.txt
* install\_dependencies.sh

###


# Installation

{% content-ref url="/pages/XGRsi3LnCyZ37pzzDvji" %}
[Linux dependencies](/2.12.4/blurit-on-premise/installation/linux-dependencies)
{% endcontent-ref %}

{% content-ref url="/pages/u0NzVXfbZPsHjuBnJzJp" %}
[Windows dependencies (WSL)](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl)
{% endcontent-ref %}

{% content-ref url="/pages/33MB6VJhfv9yRtJwhgQf" %}
[Configuration](/2.12.4/blurit-on-premise/installation/configuration)
{% endcontent-ref %}

{% content-ref url="/pages/usinf50sM4HYGmrXTSW3" %}
[Run BlurIt OP](/2.12.4/blurit-on-premise/installation/run-blurit-op)
{% endcontent-ref %}

{% content-ref url="/pages/QyDYTQ2GDnrCXKq64Mpq" %}
[Multi-servers installation](/2.12.4/blurit-on-premise/installation/multi-servers-installation)
{% endcontent-ref %}

{% content-ref url="/pages/1j3QnV6qSF26ovSTpiXI" %}
[Post installation verifications](/2.12.4/blurit-on-premise/installation/post-installation-verifications)
{% endcontent-ref %}


# Linux dependencies

*Note: Don't follow this step if you plan to run BlurIt OP on Windows.* [*Go there*](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl) *instead.*

## Choice 1 : use our dependencies installation script (recommended)

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Installation Script**: `linux_installation_script`
   * A script compatible only with Linux systems.
4. **Custom Configuration File** (if applicable): `blurit_stack.yml`

This script will install the software requirements to run BlurIt On-Premise on your server. It will install Nvidia drivers, Docker CE, and Nvidia-docker on Ubuntu, Debian, and RHEL/CentOS. If you are installing BlurIt on an old server and want to maintain specific version dependencies, we don't recommend to use this script but rather to [manually install everything](#manual-dependencies-installation).

To begin, extract the BlurIt OP archive using the following command:

{% code lineNumbers="true" %}

```bash
tar -xzf filename.tar.gz
cd blurit-op
```

{% endcode %}

Replace "filename" with the actual name of the archive that was provided to you.

To start the script, execute the following command:

{% code lineNumbers="true" %}

```sh
sudo ./install_dependencies.sh
```

{% endcode %}

:rotating\_light: After execution of the script, please reboot the server to load the Nvidia drivers and go to the [Configuration](/2.12.4/blurit-on-premise/installation/configuration) page. :rotating\_light:

## Choice 2 : manual dependencies installation

### Nvidia drivers Installation

1. Download the NVIDIA driver >= 470 runfile from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>
2. Open a terminal and navigate to the directory where the downloaded runfile is located.
3. `$ chmod +x <filename>.run` \
   Replace `<filename>` with the actual name of the downloaded runfile.
4. `$ sudo ./<filename>.run`&#x20;
5. `$ sudo reboot`&#x20;

### Docker Installation

The Docker installation documentation is [here](https://docs.docker.com/engine/install/).

{% tabs %}
{% tab title="Ubuntu" %}
{% code lineNumbers="true" fullWidth="false" %}

```bash
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Debian" %}
{% code lineNumbers="true" %}

```bash
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Centos" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}

{% tab title="RHEL" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Post-install docker linux (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Nvidia-docker installation

Nvidia-docker installation documentation is [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

{% tabs %}
{% tab title="Ubuntu / Debian" %}
{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}

{% tab title="Centos / RHEL" %}
{% code lineNumbers="true" %}

```bash
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}
{% endtabs %}

Configure the Docker daemon to recognize the NVIDIA Container Runtime:

{% code lineNumbers="true" %}

```bash
sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Restart the Docker daemon to complete the installation after setting the default runtime:

{% code lineNumbers="true" %}

```bash
sudo systemctl restart docker
```

{% endcode %}

Test if Nvidia-docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

{% endcode %}

This should result in a console output shown below:

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.51.06    Driver Version: 470.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

### Configuring daemon.json

Open `/etc/docker/daemon.json` with your favorite text editor.

Add `"default-runtime": "nvidia",`  to the json. Exemple:

{% code title="/etc/docker/daemon.json" lineNumbers="true" %}

```json
{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime
    }
  }
}
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Windows dependencies (WSL)

*Don't follow this step if you plan to run BlurIt OP on Linux.* [*Go there*](/2.12.4/blurit-on-premise/installation/linux-dependencies) *instead.*

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Custom Configuration File** (if applicable): `blurit_stack.yml`

## Nvidia Driver installation

Download the NVIDIA driver >= 470 exe from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>

You can also update the drivers using [Nvidia Geforce Experience](https://www.nvidia.com/fr-fr/geforce/geforce-experience/).

## Install WSL 2 (Windows Subsystem Linux)

To Check if WSL is installed, open PowerShell as administrator and run:

{% code lineNumbers="true" %}

```powershell
wsl -l –v
```

{% endcode %}

If WSL is not installed:

{% code lineNumbers="true" %}

```
wsl --install -d Ubuntu
```

{% endcode %}

Then reboot your machine.

It is possible to modify the resources allocated to WSL. For more information, you can refer to this link: <https://learn.microsoft.com/fr-fr/windows/wsl/wsl-config#wslconfig>.

## Docker installation

Instruction to install docker CE on windows with WSL 2 backend : <https://docs.docker.com/desktop/install/windows-install/>.

During the install don't forget to tick the Use **WSL 2 instead of Hyper-V** checkbox.

Additionally, if you want the BlurIt app to restart automatically when the machine restarts, check the box labeled 'Start Docker Desktop when you sign, in.'

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/BxfhEWWOb08RSrCmmjBR/docker-config.PNG" alt=""><figcaption></figcaption></figure>

## Nvidia-docker installation

To enter WSL, open PowerShell and type `wsl` followed by pressing Enter.

{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Verify that Nvidia-Docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi -a
```

{% endcode %}

### Configuring Docker daemon

Append the following JSON content on the Docker Desktop config like this:

{% code lineNumbers="true" %}

```json
{
	... # current content
	"runtimes": {
		"nvidia": {
			"path": "/usr/bin/nvidia-container-runtime",
			"runtimeArgs": []
		}
	},
	"default-runtime": "nvidia"
}
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/nqaewOITW6iarwCJg63n/Windows_daemon-docker.png" alt=""><figcaption></figcaption></figure>

Restart Docker for the change to take effect.

### Post-install docker linux on WSL (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Configuration

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.4/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation. If Blurit team send you a compose file, it's possible to pass it as argument.

```bash
blurit configure
```

For custom installations, if a `blurit_stack.yml` file is provided, include it as an argument when executing the relevant commands :<br>

```bash
blurit configure blurit_stack.yml
```

## Configuration explanation

The following section provides an explanation of the various questions asked during the configuration process.

### Model

During the configuration process, you'll be prompted to select the AI model version that best fits your performance and precision needs. BlurIt offers two options:

* **tiny**: This model is optimized for speed, processing images and videos faster. It is ideal for scenarios where performance is critical, although it comes with a very slight reduction in precision. This is the default option.
* **standard**: This version provides a balance between speed and precision. While still optimized for fast processing, it offers slightly higher accuracy compared to the tiny model, making it suitable for tasks where precision is more important.

### Web App Authentication

To secure access to the BlurIt web app, you’ll need to set up a username and password during the configuration process. This protects the web interface and ensures that only authorized users can manage files and access data.

1. **Username**: Create a unique username for accessing the web app.
2. **Password**: Set a strong password for added security. Store it securely for future access.

Alternatively, you may choose not to set a username and password for quicker access. However, please note that **disabling authentication** means the web app will be openly accessible, which may expose your data to unauthorized access. This choice comes with the user’s full responsibility for securing access to the application.

### **SSL Configuration**&#x20;

For enhanced security, you can enable SSL to encrypt communication between clients and the server. During the configuration process, you will be prompted to provide the following:

1. **Server Name**: Specify the domain name or IP address used to access your BlurIt web app.
2. **Path to SSL Certificate File (.pem)**: Provide the full path to your SSL certificate file. This file contains the public key and is required for establishing secure HTTPS connections.
3. **Path to SSL Private Key File (.pem)**: Provide the full path to your private key file. This file must correspond to the SSL certificate provided.

If you do not have an SSL certificate, you can use services like [Let's Encrypt](https://letsencrypt.org/) to generate one for free or use self-signed certificates for internal testing.

By enabling SSL and authentication, you ensure that your data and web app are protected against unauthorized access and interception.

### Local storage

These settings define the base directories where BlurIt OP will locate input files (to be processed) and where it will store the output files (blurred videos/images and detection JSONs) on the local server storage, i.e., on the server where BlurIt OP is running.

#### Accessing Windows Drives on WSL

If you are using Windows Subsystem for Linux (WSL), your Windows drives are accessible under the `/mnt/` directory. Each drive is mapped to its respective folder:

* **Drive C:** Located at `/mnt/c/`
* **Drive D:** Located at `/mnt/d/`, and so on.

For example, if you need to access a file located at `C:\Users\YourName\Documents`, you can find it in WSL at:

```bash
/mnt/c/Users/YourName/Documents
```

This mapping makes it easy to navigate between your Windows environment and the Linux subsystem.

The input and output directories will be assigned to the user with ID 1200.

**Why UID/GID 1200?**&#x20;

This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

### S3 storage

These settings allow the use of S3 storage for the input and output directories for media.

### GPU settings

Select the GPU you wish to use with Blurit.

### Max Threads number

This variable represents the maximum number of threads that the reencoding step will utilize on your CPU. Increasing this value can result in faster reencoding.&#x20;

However, it's important to note that you should reserve some threads for other processes.

Avoid using the maximum number of available threads on your server, as it may impact the performance of other applications.

#### Webhook (optional)

This setting is a configuration that defines a route or URL where a POST request can be sent. This endpoint is typically used to send JSON data to another system or service.

In this specific example, when the POST request is made to the "CUSTOM\_WEBHOOK\_ENDPOINT" route, the JSON payload being sent is as follows:

```json
{
  "status": "Succeeded",
  "task_id": "abc-123-456-789"
}
```

The JSON payload contains two key-value pairs:

* "status" with a value of "Succeeded"
* "task\_id" with a value of "abc-123-456-789"

The purpose of this webhook is to notify or provide information to the system or service listening at the specified endpoint about the status of a task or operation. The receiving system can then process this data according to its requirements.

### Jobs timeouts

This parameter represents the amount of time the application waits before changing the status of a task to "failed." By default, it is set to 43200000 milliseconds (equivalent to 12 hours).


# Run BlurIt OP

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.4/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit start
```

The application will be available on ports **80** (HTTP) and **443** (HTTPS). The API can be accessed at the URL `/api`, and the Flower interface at `/flower`. The manager remains accessible via the standard URL (DNS or IP).


# Multi-servers installation

#### Add a worker node

🚨 This section pertains to clustering Blurit On-Premise. If you would like more information about it, please contact our customer services.🚨&#x20;

Before joining the manager machine, you need to open some ports:

* `TCP` port `2377` for cluster management communications
* `TCP` and `UDP` port `7946` for communication among nodes
* `UDP` port `4789` for overlay network traffic

Get Join-token on manager machine:

{% code lineNumbers="true" %}

```bash
docker swarm join-token worker
```

{% endcode %}

Replace `<worker-token>` with the actual token obtained from the previous command, and `<ip-of-manager-machine>` with the IP address or hostname of the manager machine. This command will join the worker machine to the swarm cluster.

Join the swarm cluster on the worker machine (<https://docs.docker.com/engine/reference/commandline/swarm\\_join/>):

{% code lineNumbers="true" %}

```bash
docker swarm join --token <worker-token> <ip-of-manager-machine>:2377
```

{% endcode %}

#### Add label to node

Add a label allow to chose the machine to deploy the workers. For multiple machine installation, it's mandatory for a smooth deployment.

This command display every node present on the swarm cluster:

{% code lineNumbers="true" %}

```bash
docker node ls
```

{% endcode %}

Add a label to a node:

{% code lineNumbers="true" %}

```bash
docker node update --label-add blurit-worker-<number of the machine> <node-name>
```

{% endcode %}

Replace `<machine-number>` with the appropriate number for the machine, and `<node-name>` with the name of the node. This command adds a label to the specified node, which will be used for deployment purposes.


# Post installation verifications

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.4/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.4/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit status
```


# Usage

As said in the [Configuration](/2.12.4/blurit-on-premise/installation/configuration) section, BlurIt OP Web Manager or API works within the paths set in `LOCAL_STORAGE_INPUT_PATH` and `LOCAL_STORAGE_OUTPUT_PATH`. Every processed media will be stored in `LOCAL_STORAGE_OUTPUT_PATH`, while the original media will be processed from `LOCAL_STORAGE_INPUT_PATH`.

There are two ways to process files with BlurIt OP:

1. Manager Webapp: The web app manager provides a Graphical User Interface (GUI) accessible at `http://<host> or https://<host>`, where "host" refers to the IP address of the machine where BlurIt OP is deployed or the dns url configured. This interface allows non-developers to process files easily.
2. API: The API is accessible at `http://<host>/api or https://<host>/api`. It allows developers to integrate BlurIt OP file processing capabilities into their own applications or workflows programmatically. This allows for greater flexibility and automation.


# Manager Webapp

## Overview

The Manager is a web application that facilitate usage of BlurIt OP by providing a GUI to non-developer users. It also provide an history of taks processed by BlurIt OP, wether thoses tasks have been created from the Manager or from the API.

## Access

You can access the Manager by visiting `http://<HOST> or https://<HOST>`, where `HOST` is the IP address of the machine or the dns url configured in the [Configuration](/2.12.4/blurit-on-premise/installation/configuration) section.

## License activation

Before using BlurIt OP, you must activate the license.

&#x20;Once you're on the Manager, click on the "Update License" button located at the top right corner of your screen.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/Usf6kKmr84WMSEyinQmr/blurit_updatelicense-button.jpg" alt=""><figcaption></figcaption></figure>

After navigating to the Account (`/account`) page, click on the "Edit license" button. Next, paste the license into the designated text area and confirm the changes by clicking on the "Update license" button.

{% embed url="<https://cloud.wassa.io/s/nhQZwaY8uPUs8xP/download>" %}

## Tasks

### Create a task

To start a task, go to Tasks page (`/tasks`) by clicking on side menu "Tasks" and click on the  "Anonymize" button.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/ORxNTqIezyyiFPaDf6yF/blurit_anonymize-button.jpg" alt=""><figcaption></figcaption></figure>

You can now follow 3 simple steps to create a new task:

1. **Source**: Choose either a file from your PC or a whole folder to process from the local storage or S3.
   * To process a file from your PC, use the file selection option or simply drag and drop the file into the designated area.
   * To process a folder, enter its path in the field. The path you enter represents a subdirectory of the `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage) set in the [Configuration](/2.12.4/blurit-on-premise/installation/configuration) section. Please ensure that the directory already exists and has some files in it. If you don't enter anything, BurIt OP will process files directly in `LOCAL_STORAGE_INPUT_PATH` (or `STORAGE_S3_BUCKET`)
2. **Blur options**: Select the desired task options from the following choices:
   * Face anonymisation
   * Plates anonymisation
   * Coordinates position
   * Add  `_anonymized` suffix
   * Keep the audio track (only for zip/directory/videos)
   * Processing report (zip files only)
     * This option allows you to include in the ZIP file a CSV summary indicating the anonymization success status for all the files that were part of the original ZIP
   * Keep the files that cannot be blured (zip files only)
     * This option allows you to keep, within the anonymized ZIP, the files with unsupported formats that cannot be processed by the software
3. **Output path**: Specify the desired output location, whether it's local storage or S3. You can either change the name of the output file or create a new directory in the output to store your processed media. As for the source, the directory you enter here represents a subdirectory of `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET` if you use S3 storage). If you don't enter anything, BurIt OP will save processed files directly in `LOCAL_STORAGE_OUTPUT_PATH` (or `STORAGE_S3_BUCKET`)

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/gyfnMkbqoINUacMFJ17h/Capture%20d%E2%80%99%C3%A9cran%20du%202025-09-01%2017-51-14.png" alt=""><figcaption></figcaption></figure>

Click on the "Create" button and confirm to initiate the task.

{% embed url="<https://cloud.wassa.io/s/ryy3aFELs8xb8hT/download>" %}

### List tasks

The Tasks page list all the tasks that have been created in BlurIt OP (using the Manager or the API). For each task, the Manager displays:

* The date
* The type (Picture, Video or Archive)
* The file name
* The file size
* The task status (updated in real time)
* A button to download the processed file

The list can be filtered.

### Download processed files

From the Tasks page, click on the download icon located in the file column.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/1y7B1G8md8Q3S4tEtVxe/blurit_downloadtask-button.jpg" alt=""><figcaption></figcaption></figure>

### Using The Redact Tool

The Redact Tool allows you to access all detections within your media (image or video) so you can adjust, add, or remove them as needed — all while staying within your local environment.

### Access&#x20;

Once your file (image or video) has been processed, you can edit the detections by clicking on this icon to access the redact tool.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/x32B1LIS6FedL7iZqccW/Design%20sans%20titre.png" alt=""><figcaption></figcaption></figure>

Once done, your media will appear along with all the detected elements.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/NyqsYArT2CcTkCTuBTN2/Screenshot%202025-10-16%20at%2015.55.10.png" alt=""><figcaption></figcaption></figure>

### Adjusting Detections&#x20;

* **Adjusting a detection**\
  Click on the detection of your choice. You can resize or move it on the frame as needed.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/GPrKQWO7JtN1dk4jdlSl/1.png" alt=""><figcaption></figcaption></figure>

* **Deactivating a detection**\
  Click on the detection to turn it from green to gray. It will **no longer be applied** to the image or video. You can also deactivate it by unchecking the corresponding box in the left panel, just above the detection preview. You can **reactivate it at any time**.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/3yECyriJxXq5ghIFFyRO/2.png" alt=""><figcaption></figcaption></figure>

* &#x20;**Deleting a detection** &#x20;

  If you want to permanently delete this detection with no option to undo, click “Delete Track.”

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/NxlQNF0G9m8lF7wemT31/3.png" alt=""><figcaption></figcaption></figure>

* **To add a new detection manually:**\
  In the menu bar at the top left of the screen, you can choose the type of detection you want to add:&#x20;

  * License plate detection&#x20;
  * Face detection&#x20;
  * Custom detection, which you can adjust to match your object’s shape&#x20;

  ➜ When creating a manual detection, make sure to **move it along with your object’s motion in the video**

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/7EYF8KHO3u6v5MGXFwAP/menu%20detections.png" alt=""><figcaption></figcaption></figure>

* **Saving & reprocessing your file**\
  You can save the adjustments you’ve made to access them later, or reprocess the media to apply your changes.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/IYt6nlEvW1mb8Ok9VqSp/saving.png" alt=""><figcaption></figcaption></figure>


# API

The BlurIt OP API offers several functionalities. It allows you to obtain the current license by using the GET method on the [`/api/license`](/2.12.4/blurit-on-premise/usage/api/license) endpoint. Additionally, you can add a new license by using the POST method on the same endpoint. If a license already exists, it will be replaced by the new license.

Furthermore, the API provides the capability to add a blur task to the queue by using the POST method on the [`/api/blur_it`](/2.12.4/blurit-on-premise/usage/api/tasks) endpoint. You can also add a blur task for a directory by using the POST method on the [`/api/blur_it/directory`](/2.12.4/blurit-on-premise/usage/api/tasks/process-a-directory) endpoint.

Moreover, the API allows you to retrieve the status of a task by using the GET method on the [`/api/task/{task_id}`](/2.12.4/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task) endpoint, where "task\_id" is the task identifier.

\
The API documentation can be found at `http://<HOST>/api/docs`, where `HOST` is the IP address of the machine.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td>License</td><td></td><td><a href="/2.12.4/blurit-on-premise/usage/api/license">License</a></td></tr><tr><td></td><td>Blur it</td><td></td><td><a href="/2.12.4/blurit-on-premise/usage/api/tasks">Tasks</a></td></tr><tr><td></td><td>Blur it directory</td><td></td><td><a href="/2.12.4/blurit-on-premise/usage/api/tasks/process-a-directory">Process a directory</a></td></tr><tr><td></td><td>Task</td><td></td><td><a href="/2.12.4/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task">Get the status of a task</a></td></tr></tbody></table>


# License

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="get" %}
[openapi.json](https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/iO9jOgyXcwujpyhhFKD5/openapi.json)
{% endopenapi %}

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/license" method="post" %}
[openapi.json](https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/iO9jOgyXcwujpyhhFKD5/openapi.json)
{% endopenapi %}


# Tasks

* [Process a directory](/2.12.4/blurit-on-premise/usage/api/tasks/process-a-directory)
* [Process a file](/2.12.4/blurit-on-premise/usage/api/tasks/process-a-file)
* [Process a zip file](/2.12.4/blurit-on-premise/usage/api/tasks/process-a-zip-file)
* [Get the status of a task](/2.12.4/blurit-on-premise/usage/api/tasks/get-the-status-of-a-task)
* [Revoke a task](/2.12.4/blurit-on-premise/usage/api/tasks/revoke-a-task)


# Process a directory

## Blur It Directory Post

> Add a blurit directory task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/directory":{"post":{"summary":"Blur It Directory Post","description":"Add a blurit directory task in task queue.","operationId":"blur_it_directory_post_api_blur_it_directory_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurDirectoryBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurDirectoryBody":{"title":"DetectAndBlurDirectoryBody","required":["input_directory","output_directory"],"type":"object","properties":{"input_directory":{"$ref":"#/components/schemas/InputDirectory"},"output_directory":{"$ref":"#/components/schemas/OutputDirectory"},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output medias ?","type":"boolean","default":true}},"description":"Detect and blur directory route's body.\nAt least one of output_media or output_json is needed."},"InputDirectory":{"title":"InputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"},"auto_delete":{"title":"If set to True, deletes the input file after processing.","type":"boolean","default":false}},"description":"Input directory structure"},"OutputDirectory":{"title":"OutputDirectory","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"Directory's relative path","type":"string"}},"description":"Output directory structure"},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a file

## Blur It Post

> Add a blurit task in task queue.

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it":{"post":{"summary":"Blur It Post","description":"Add a blurit task in task queue.","operationId":"blur_it_post_api_blur_it_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetectAndBlurBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRespsonse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"DetectAndBlurBody":{"title":"DetectAndBlurBody","required":["input_media"],"type":"object","properties":{"input_media":{"$ref":"#/components/schemas/InputFile"},"output_media":{"title":"Output video/image informations","allOf":[{"$ref":"#/components/schemas/OutputMedia"}]},"output_json":{"title":"Output JSON informations (contains detections' descriptions)","allOf":[{"$ref":"#/components/schemas/OutputJSON"}]},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}},"description":"Detect and blur route's body.\nAt least one of output_media or output_json is needed."},"InputFile":{"title":"InputFile","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Input File structure."},"OutputMedia":{"title":"OutputMedia","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Media file structure."},"OutputJSON":{"title":"OutputJSON","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output JSON file structure."},"TaskRespsonse":{"title":"TaskRespsonse","required":["task_id"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Process a zip file

## Zip Blur It Post

> Add a zip\_detect\_and\_blur task in task queue.\
> \
> returns a {"task\_id": str}

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/blur_it/zip":{"post":{"summary":"Zip Blur It Post","description":"Add a zip_detect_and_blur task in task queue.\n\nreturns a {\"task_id\": str}","operationId":"zip_blur_it_post_api_blur_it_zip_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ZipBody":{"title":"ZipBody","required":["input_zip","output_zip"],"type":"object","properties":{"input_zip":{"title":"Input zip storage informations","allOf":[{"$ref":"#/components/schemas/InputZip"}]},"output_zip":{"title":"Output zip storage informations","allOf":[{"$ref":"#/components/schemas/OutputZip"}]},"report_format":{"title":"Fomat of the report file. Set to null if you don't want a report file. Possible values: \"csv\", null","type":"string","default":"csv"},"save_unknown_files":{"title":"If set to True, unprocessable files extensions will be returned with processed files, in the output zip. If set to False, they will be deleted.","type":"boolean","default":false},"add_output_sufix":{"title":"If set to True, output files names will be suffixed (eg: \"file.jpg\" => \"file_anonymized.jpg\")","type":"boolean","default":true},"export_media":{"title":"Should we export the blured media ?","type":"boolean","default":true},"export_json":{"title":"Should we export the detections list ?","type":"boolean","default":true},"blur_plates":{"title":"Should we blur plates ?","type":"boolean","default":true},"blur_heads":{"title":"Should we blur heads ?","type":"boolean","default":true},"keep_audio":{"title":"Should we keep audio in the output media ?","type":"boolean","default":true}}},"InputZip":{"title":"InputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"expires_at":{"title":"Input file's expiration date. Works only with S3 storage.","type":"string"},"auto_delete":{"title":"If set to True (or not set), deletes the input file after processing.","type":"boolean","default":true}},"description":"Output JSON file structure."},"OutputZip":{"title":"OutputZip","required":["protocol","path"],"type":"object","properties":{"protocol":{"title":"Must be 'file' (for local storage) or 's3' (for S3 storage)","type":"string"},"path":{"title":"File's relative path","type":"string"},"lifespan":{"title":"Number of seconds the output will be stored. Works only with S3 storage.","type":"integer"}},"description":"Output Zip file structure."},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Get the status of a task

{% openapi src="/files/Xv4fZHf4yUvciw3wHbGb" path="/api/task/{task\_id}" method="get" %}
[openapi.json](https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/iO9jOgyXcwujpyhhFKD5/openapi.json)
{% endopenapi %}


# Revoke a task

## Revoke Task

> Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks

```json
{"openapi":"3.0.2","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/task/{task_id}/revoke":{"put":{"summary":"Revoke Task","description":"Revokes a posted task. For zip/directories, it doesn't stop the sent sub-tasks","operationId":"revoke_task_api_task__task_id__revoke_put","parameters":[{"required":true,"schema":{"title":"Task Id","type":"string"},"name":"task_id","in":"path"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"TaskMessageResponse":{"title":"TaskMessageResponse","required":["task_id","message"],"type":"object","properties":{"task_id":{"title":"Unique task hash","type":"string"},"message":{"title":"A message related to the route","type":"string"}},"description":"Task POST result structure"},"HTTPValidationError":{"title":"HTTPValidationError","type":"object","properties":{"detail":{"title":"Detail","type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"ValidationError":{"title":"ValidationError","required":["loc","msg","type"],"type":"object","properties":{"loc":{"title":"Location","type":"array","items":{"type":"string"}},"msg":{"title":"Message","type":"string"},"type":{"title":"Error Type","type":"string"}}}}}}
```


# Command line interface

## Overview

The Blurit command line interface, this CLI lets you interact with Blurit On-Premise to perform various tasks related to media anonymization.

## CLI

The main Blurit CLI command.

```bash
blurit [OPTIONS] COMMAND [ARGS]...
```

### License

Manage Blurit licenses.

#### **info**

Displays all Blurit license information.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```shell
blurit license info
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-07-31T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-12-31T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

#### **add**

Upload or update a Blurit On-Premise license.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```shell
blurit license add LICENSE
```

Response:

```
+------------+--------------------------+
| Property   | Value                    |
+============+==========================+
| Start Date | 2023-06-27T22:00:00.000Z |
+------------+--------------------------+
| End Date   | 2023-09-30T21:59:59.000Z |
+------------+--------------------------+
| License    | LICENSE                  |
+------------+--------------------------+
```

### Tasks

Manage Blurit tasks.

#### **create**

Create a new Blurit task. Options vary depending on the input type (file, directory, zip). File processing only needs input argument but output can be specified to store the exit media to a precise location.

options:

* \--input-file \[file|directory|zip] REQUIRED
* \--input-storage-type \[local|s3] REQUIRED
* \--output-storage-type \[local|s3] REQUIRED
* \--no-face-blur Disable face blur.&#x20;
* \--no-plate-blur Disable plate blur.&#x20;
* \--json-coord Use JSON coordinates.
* \--add-report Zip only: Adds a CSV report of all processed files in the zip
* \--save-unprocessable-files Zip only: Should unknown files types (eg: text files, binaries ..) be reintegrated in the output zip ?
* \--auto-delete Auto deletion of input media&#x20;
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json] Output format in JSON

```shell
blurit tasks create [OPTIONS] INPUT OUTPUT
```

Example: Create a task by specifying input and output directories:

```bash
blurit tasks create --input-type directory --input-storage-type local --output-storage-type local input output
```

Response:

```
job id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

#### **status**

Get the status of a specific task using its ID.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

return:

* Succeeded
* Started
* Sent
* Failed
* Couldn't contact the Blurit server

```shell
blurit tasks status TASK_ID
```

Example:

```bash
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a
```

Response:

```bash
Succeeded
```

#### **list**

List history call tasks.

options:

* \--page TEXT Specify the page number&#x20;
* \--count TEXT Specify the number of results per page&#x20;
* \--starting-date TEXT Specify the starting date&#x20;
* \--ending-date TEXT Specify the ending date&#x20;
* \--filetype \[picture|video|directory] Specify the file type
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```bash
blurit list
```

Response:

```
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+
| Created At               | Processing Time   | File Type   | Job ID                               | File Name     | Output Media URL      | Task Status   |
+==========================+===================+=============+======================================+===============+=======================+===============+
| 2023-08-24T09:18:42.625Z | 05:42:50.70       | directory   | 31bc8405-4a56-4cb2-a67e-689797ad9a1a | 629d57_part_1 | 629d57_part_2_process | Succeeded     |
+--------------------------+-------------------+-------------+--------------------------------------+---------------+-----------------------+---------------+

```

### Configure

Configure the Blurit application, need to be done at least once before first deployment ('blurit start').

```
blurit configure
```

### Start

Start the Blurit server, CLI must be on the host machine.

```
blurit start
```

### Restart

Restart the Blurit server, CLI must be on the host machine.

```
blurit restart
```

### Stop

Stop the Blurit server, CLI must be on the host machine.

```
blurit stop
```

### Stats

Display total and period (month, day) statistics.

options:

* \--date-start TEXT Starting date with format: %Y-%m-%d&#x20;
* \--date-end TEXT Ending date with format: %Y-%m-%d&#x20;
* \--granularity \[day|month] Display statistics by month or days&#x20;
* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json] Output format in JSON&#x20;
* \--help Show this message and exit.

```
blurit stats
```

**Response:**

```
+------------------------------+-----------+
| Metric                       | Value     |
+==============================+===========+
| Total Videos API Calls       | 73        |
+------------------------------+-----------+
| Total Pictures API Calls     | 443       |
+------------------------------+-----------+
| Total Videos Consumption     | 3.33 GB   |
+------------------------------+-----------+
| Total Pictures Consumption   | 806.07 MB |
+------------------------------+-----------+
| Monthly Videos API Calls     | 4         |
+------------------------------+-----------+
| Monthly Pictures API Calls   | 8         |
+------------------------------+-----------+
| Monthly Videos Consumption   | 22.12 MB  |
+------------------------------+-----------+
| Monthly Pictures Consumption | 9.42 MB   |
+------------------------------+-----------+
```

### Doc

Display link to documentation.

options:

* -h, --host TEXT Specify the host&#x20;
* -p, --port INTEGER Specify the port&#x20;
* -o \[json]   Output format in JSON

```
blurit doc
```

response:

```
API Documentation:
Operation: https://doc-op.blurit.io
Local: http://127.0.0.1:8084/api/docs
```

### Uninstall

Uninstall the Blurit server, CLI must be on the host machine.

```
blurit uninstall
```

#### **Output Format**&#x20;

The Blurit CLI supports two output formats: text (default) and JSON. You can specify the output format using the -o or --output-format option. For example, to get JSON output, use -o json.

Example:

```
blurit tasks status 31bc8405-4a56-4cb2-a67e-689797ad9a1a -o json
```

Response:

```
{'task_id': '31bc8405-4a56-4cb2-a67e-689797ad9a1a', 'status': 'Succeeded', 'result': {'input_directory': {'protocol': 'file', 'path': 'input/629d57_part_2', 'auto_delete': False}, 'output_directory': {'protocol': 'file', 'path': 'output/629d57_part_2_process'}, 'size': {'VIDEO': 4979394177}, 'nb_files': {'VIDEO': 252}}}
```

#### **Support and Contribution**&#x20;

If you have any questions, issues, or would like to make a return of the Blurit CLI, please contact us at <support@blurit.io>. We hope this guide helps you effectively use the Blurit CLI to manage your media anonymization tasks.


# Monitoring With Flower

**Accessing the Flower Web Interface**

Once the installation of Blurit is complete, Flower's web interface is accessible at:

```arduino
http://<your-server-address>/flower
```

Use the **username** and **password** configured during the installation of Blurit to log in.

**Overview of the Interface**

The Flower interface provides an intuitive way to monitor and manage Celery tasks and workers in real-time. Below is a detailed breakdown of the key sections and columns in the interface.

## **Dashboard: Monitoring Workers Overview**

The **Dashboard** tab in Flower provides an overview of all Celery workers currently running. This page allows you to quickly monitor worker states and performance.

**Column Descriptions**

1. **Worker Name**
   * Displays the unique name of each worker. Typically, the name is prefixed with `celery@` followed by a unique identifier (often based on the hostname).
   * Example: `celery@18e5d5189283`.
2. **Status**
   * Indicates the current status of the worker.
   * **Online**: The worker is active and communicating with the broker.
   * **Offline**: The worker is not responding or has been stopped.
3. **Active**
   * The number of tasks currently being processed by this worker.
   * A high value here relative to the worker’s capacity could indicate overload.
4. **Processed**
   * The total number of tasks processed by the worker since it started.
5. **Failed**
   * The total number of tasks that have failed on this worker.
   * A high number may indicate recurring issues with specific tasks or code.
6. **Succeeded**
   * The total number of tasks successfully executed by the worker.
7. **Retried**
   * The number of tasks that were retried after encountering a temporary error.
8. **Load Average**
   * The system's average load (CPU, memory) for the container or machine running the worker.
   * Format: `1 min, 5 min, 15 min`.
   * Example: `0.19, 0.08, 0.08` indicates a low load across all three timeframes.

**Available Actions**

* **Search Bar**: Use the search bar in the top-right corner to filter workers by name or other attributes. This is helpful when managing many workers.
* **Refresh**: Click the **Refresh** button to update the data displayed on the dashboard.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/CwSx48xmLERLffyiCkyf/Screenshot%20from%202024-11-19%2011-00-58.png" alt=""><figcaption></figcaption></figure>

## **Tasks: Monitoring and Managing Individual Tasks**

The **Tasks** tab in Flower allows you to monitor the state and details of individual Celery tasks in real-time. This tab is especially useful for diagnosing specific issues or analyzing task performance.

**Column Descriptions**

1. **Name**
   * The name of the task, as defined in your Celery code.
   * Example: `blurit.image`.
   * This typically corresponds to a function or method in your application.
2. **UUID**
   * A unique identifier for each task, useful for debugging or referencing specific tasks.
   * Example: `c2e583bc-1dc9-4193-9df5-fe412aa0b180`.
3. **State**
   * The current state of the task.
   * Common states include:
     * **PENDING**: The task is waiting to be executed.
     * **STARTED**: The task is currently running.
     * **SUCCESS**: The task has completed successfully.
     * **FAILURE**: The task execution failed.
   * Example in the screenshot: **SUCCESS**.
4. **args**
   * The positional arguments passed to the task when it was executed.
   * Example: `()` (no positional arguments in this case).
5. **kwargs**
   * The keyword arguments (named parameters) passed to the task.
   * Example:

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "lifespan": 3600
     }
     ```
6. **Result**
   * The result returned by the task after execution.
   * Example (summary):

     ```json
     jsonCopier le code{
         "input_image": {"protocol": "file", "path": "input/1732010550292-480.jpg"},
         "output_image": {"protocol": "file", "path": "output/878ac326-2b6c-482e-9888-e4346d285ad0.jpg"},
         "chronos": {"total": 2.219586, "childs": {...}}
     }
     ```
7. **Received**
   * The timestamp when the task was received by the worker.
   * Example: `2024-11-19 10:02:30.472`.
8. **Started**
   * The timestamp when the task started execution.
   * Example: `2024-11-19 10:02:30.478`.
9. **Runtime**
   * The total time the task took to execute, in seconds.
   * Example: `2.733`.
10. **Worker**
    * The Celery worker that executed the task.
    * Example: `celery@83b122840b58`.

<figure><img src="https://content.gitbook.com/content/4LYHIGgdhZNKXKAzGRCW/blobs/bDTMQvJZpv4ZBqt5ep42/Screenshot%20from%202024-11-19%2011-02-45.png" alt=""><figcaption></figcaption></figure>

## **Usage Tips**

1. **Search for Tasks**
   * Use the search bar to filter tasks by **UUID**, **Name**, or **State**. This is especially helpful when dealing with large numbers of tasks.
2. **Diagnose Failures**
   * For tasks in the **FAILURE** state, the `kwargs` and `Result` columns provide valuable details about what went wrong.
3. **Performance Optimization**
   * Use the `Runtime` column to identify tasks that take a long time to execute, which may need optimization.
4. **Input and Output Validation**
   * The `kwargs` and `Result` columns are also useful for verifying the input and output data of specific tasks.


# Release notes

## 2.12.4

### ✨ Bug fixing

* Improve backwards compatibility on command line client
* Update command line client documentation

## 2.12.3

### ✨ New Features & Improvements

* Add an option to chose the blur type
* Add an option to anonymize sound (simple pitch)
* Improved model and algorithm

## 2.7.4&#x20;

### ✨ New Features & Improvements&#x20;

* We’ve added the ability to **customize your detections** through the new redact too&#x6C;**.** It allows you to **edit detections** in your images or videos — you can **adjust, add, or remove** them as needed.

## 2.5.4&#x20;

### ✨ New Features & Improvements&#x20;

* An audio removal option is now available for your videos.You can choose to remove the audio track to enhance the protection of any personal data that may have been recorded during video capture.&#x20;

## 2.4.7&#x20;

### ✨ New Features & Improvements&#x20;

* The ZIP format is now supported. You can upload ZIP files containing images and/or videos; their contents will be automatically processed to simplify the anonymization of large data volumes.&#x20;

## 2.2.0

### ✨ New Features & Improvements

* **Improved Detection**: Integration of a **new AI model** that significantly enhances the **accuracy and speed of face and license plate detection**. Reducing false positives.

## 2.1.0

### ✨ New Features & Improvements

* **Updated Torch-CUDA Version**: Upgraded `torch-cuda` to version **2.5.1+cu124** to ensure compatibility with the latest CUDA updates and improve performance.

## 2.0.9

**Permission Updates**: The following processes are now configured to use **UID 1200** and **GID 1200**:

* **Blur Worker**
* **Directory Worker**
* **Manager API**

### Technical Details

* These updates improve permission management and enhance security for service execution.
* **Why UID/GID 1200?** This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

## 2.0.8

### New Features & Improvements

* Added asynchronous CPU and GPU processing to improve performance.
* Introduced a new feature to clear the GPU cache for better resource management.

## 2.0.7

### ✨ New Feature: Intuitive Dashboard for Task & Consumption Tracking

We’ve added a **Dashboard** page to give you a clear overview of service usage and resource consumption.

#### 🔹 Key Features:

📊 **Service Usage** – Total API calls, daily & monthly breakdown\
📉 **Consumption Tracking** – Data usage (MB) per day & month\
📆 **Dynamic Charts** – Yearly & monthly trends for better insights

## 2.0.6

Starting from this version, custom port configuration has been removed. Applications are now accessible exclusively through the standard ports **80** (HTTP) and **443** (HTTPS). Use the dedicated paths `/api` and `/flower` to access the API and the Flower

## 2.0.2

### **New Features:**

* SSL configuration for cloud version

**Hotfixes:**

* **Web App:** Improved input validation to allow spaces in the input path.
* **BlurIt Model:** Resolved an issue with handling videos with low FPS.

## 2.0.1

### ✨ **New Features:**

* Added HTTP Basic Authentication for the web application, enhancing security.

## 2.0

### ✨ **New Features:**

* **High-Performance Algorithm** : This new algorithm delivers enhanced computing power and speed, resulting in better overall performance for your tasks.&#x20;
* **Lightweight Model :** In addition to the high-performance algorithm, we’ve introduced a smaller, more efficient model that uses **less GPU RAM**, making it ideal for environments with limited resources. Despite its compact size, it still provides robust results, ensuring you don't have to compromise on accuracy or efficiency.

## 1.1.0:

* CLI configuration all in one

## 1.0.0:

* installation script
* NEW CLI
* fix: not processing image or video with uppercase extension (e.g. image.PNG)


# Introduction

## AWS Quickstart

**BlurIt On-Premise Cloud Images** are an all-in-one solution designed to run BlurIt On-Premise on your favorite cloud providers. By leveraging our preconfigured cloud images available on the marketplaces, you can deploy the BlurIt On-Premise solution with complete autonomy.

**Important**: while you can autonomously create virtual servers with our images, you still need to contact us to obtain a valid license.&#x20;

## Supported providers

✅ [AWS](https://aws.amazon.com/marketplace/pp/prodview-khnd7pnhybcca?applicationId=AWS-Marketplace-Console\&ref_=beagle\&sr=0-5)

⏳ Azure (late October)

⏳ GCP (November)

## Supported servers

We highly recommend deploying BlurIt OP on virtual server with Nvidia GPU for better performance, although the software can be run on CPU only.

AMD GPU are not supported.

For a complete list of hardware requirements, please [see details here](/2.12.4/blurit-on-premise/requirements#hardware-requirements).


# AWS

This step-by-step guide will walk you through deploying a BlurIt OP instance using our preconfigured AMI on AWS.

## Step 1: Access the AWS Marketplace

1. Log in to your AWS account.
2. Go to the [AWS Marketplace](https://aws.amazon.com/marketplace).
3. In the search bar, type **BlurIt**.
4. Select the **BlurIt** image from the search results.

## Step 2: Launch the Instance

1. On the AMI BlurIt page, click **Continue to Subscribe**.
2. Review and accept the terms of use.
3. Click **Continue to Configuration**.
4. Choose the **AWS region** where you want to deploy the instance.
5. Under **Fulfillment Option**, select **AMI**.
6. Choose the recommended instance type (With Nvidia GPU).
7. Click **Continue to Launch**.

## Step 3: Configure Networking and Options

1. Select or create a **VPC** and a **Security Group** that allows SSH traffic and TCP ports 8080 to 8085 (these values may differ if you later don't use default values during the configuration process).
2. Launch the instance.

## Step 4: Connect to the Instance

1. Go to the **EC2 Console** to see your running instance.
2. Click on the instance to retrieve the public IP address or DNS name of the instance.
3. Use an SSH client to connect to the instance with the following command:

   ```bash
   ssh -i /path/to/your-key.pem ubuntu@your-instance-public-ip
   ```

## Step 5: Configure Blurit

1. Once connected, begin by configuring your BlurIt server and answering the prompts:

   ```bash
   blurit configure
   ```
2. Start your BlurIt server:

   ```bash
   blurit start
   ```
3. Activate your BlurIt server by adding your license:

   ```bash
   blurit license add <license>
   ```

Please consult [this page](/2.12.4/blurit-on-premise/installation/configuration) for full documentation.

## Step 6: Access the manager

Once connected, open your web browser and navigate to your instance's public IP address (or DNS name):

```
http://<your-instance-public-ip>:8084
```

## Step 7: Using the BlurIt API

The BlurIt API is available at the following endpoint on your instance:

```
http://<your-instance-public-ip>/api
```

Refer to the [API documentation](/2.12.4/blurit-on-premise/usage/api) for details on the available endpoints and how to integrate them into your workflows.


# Getting started

## Overview

The BlurIt On Premise version (aka BlurIt OP) provides a full offline and unlimited self hosted use of BlurIt by deploying the solution directly on your servers.

This guide will go through the installation process of a standard BlurIt OP setup. If you require custom settings related to the number of GPUs and/or the number of workers, please contact us at <contact@blurit.io>.

**If you want to install BlurIt OP on a cloud provider (AWS, Azure, GCP), please** [**follow instructions here**](/2.12.3/cloud-images/introduction)**.**

## Before you start

Before you start, be sure you have received from Wassa the BlurIt OP archive that contains the installation files.

BlurIt OPs runs in a dockerized environment on Linux or Windows, hence the installation of BlurIt OP requires basic knowledge of Linux/Windows and Docker usage.

If you need any help installing BlurIt OP, please contact us at <contact@blurit.io>.


# Requirements

## Hardware requirements

* CPU recommended: 3-4 threads as the base and 1-2 cores per worker on each machine.
* GPU Nvidia (consumer and professional) [computer capability](https://developer.nvidia.com/cuda-gpus) >= sm\_37 for optimal performance
* RAM GPU 4-6 GB for 1 worker depending of the resolution
* RAM > 16 GB
* 60 Go + local storage

## Software dependencies

* Linux Ubuntu >= 20.04 / CentOS >= 8 / Amazon Linux 2 Deep Learning AMI GPU&#x20;
* Windows 10 Pro, 11 Pro and server 2022 with Windows Subsystem for Linux (WSL)
* Install the following dependencies either using the provided script ([Linux](/2.12.3/blurit-on-premise/installation/linux-dependencies) only) or manually ([Linux](/2.12.3/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl)):
  * [nvidia drivers](https://www.nvidia.com/download/index.aspx) recommended >= 470
  * [docker ce](https://docs.docker.com/engine/install/) and [post install linux](https://.docker.com/engine/install/linux-postinstall/)
  * [docker desktop](https://docs.docker.com/desktop/install/windows-install/) for Windows WSL
  * docker-compose <= 1.29
  * [nvidia-docker2](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#setting-up-nvidia-container-toolkit) (set as default docker runtime)

## Blurit archive

* blurit\_stack.yml
* .env
* Blurit-op.postman\_collection.json
* README.md
* licence.txt
* login-registry.txt
* install\_dependencies.sh

###


# Installation

{% content-ref url="/pages/XGRsi3LnCyZ37pzzDvji" %}
[Linux dependencies](/2.12.3/blurit-on-premise/installation/linux-dependencies)
{% endcontent-ref %}

{% content-ref url="/pages/u0NzVXfbZPsHjuBnJzJp" %}
[Windows dependencies (WSL)](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl)
{% endcontent-ref %}

{% content-ref url="/pages/33MB6VJhfv9yRtJwhgQf" %}
[Configuration](/2.12.3/blurit-on-premise/installation/configuration)
{% endcontent-ref %}

{% content-ref url="/pages/usinf50sM4HYGmrXTSW3" %}
[Run BlurIt OP](/2.12.3/blurit-on-premise/installation/run-blurit-op)
{% endcontent-ref %}

{% content-ref url="/pages/QyDYTQ2GDnrCXKq64Mpq" %}
[Multi-servers installation](/2.12.3/blurit-on-premise/installation/multi-servers-installation)
{% endcontent-ref %}

{% content-ref url="/pages/1j3QnV6qSF26ovSTpiXI" %}
[Post installation verifications](/2.12.3/blurit-on-premise/installation/post-installation-verifications)
{% endcontent-ref %}


# Linux dependencies

*Note: Don't follow this step if you plan to run BlurIt OP on Windows.* [*Go there*](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl) *instead.*

## Choice 1 : use our dependencies installation script (recommended)

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Installation Script**: `linux_installation_script`
   * A script compatible only with Linux systems.
4. **Custom Configuration File** (if applicable): `blurit_stack.yml`

This script will install the software requirements to run BlurIt On-Premise on your server. It will install Nvidia drivers, Docker CE, and Nvidia-docker on Ubuntu, Debian, and RHEL/CentOS. If you are installing BlurIt on an old server and want to maintain specific version dependencies, we don't recommend to use this script but rather to [manually install everything](#manual-dependencies-installation).

To begin, extract the BlurIt OP archive using the following command:

{% code lineNumbers="true" %}

```bash
tar -xzf filename.tar.gz
cd blurit-op
```

{% endcode %}

Replace "filename" with the actual name of the archive that was provided to you.

To start the script, execute the following command:

{% code lineNumbers="true" %}

```sh
sudo ./install_dependencies.sh
```

{% endcode %}

:rotating\_light: After execution of the script, please reboot the server to load the Nvidia drivers and go to the [Configuration](/2.12.3/blurit-on-premise/installation/configuration) page. :rotating\_light:

## Choice 2 : manual dependencies installation

### Nvidia drivers Installation

1. Download the NVIDIA driver >= 470 runfile from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>
2. Open a terminal and navigate to the directory where the downloaded runfile is located.
3. `$ chmod +x <filename>.run` \
   Replace `<filename>` with the actual name of the downloaded runfile.
4. `$ sudo ./<filename>.run`&#x20;
5. `$ sudo reboot`&#x20;

### Docker Installation

The Docker installation documentation is [here](https://docs.docker.com/engine/install/).

{% tabs %}
{% tab title="Ubuntu" %}
{% code lineNumbers="true" fullWidth="false" %}

```bash
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Debian" %}
{% code lineNumbers="true" %}

```bash
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
```

{% endcode %}
{% endtab %}

{% tab title="Centos" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}

{% tab title="RHEL" %}
{% code lineNumbers="true" %}

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Post-install docker linux (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Nvidia-docker installation

Nvidia-docker installation documentation is [here](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html).

{% tabs %}
{% tab title="Ubuntu / Debian" %}
{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}

{% tab title="Centos / RHEL" %}
{% code lineNumbers="true" %}

```bash
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

sudo yum clean expire-cache
sudo yum install -y nvidia-container-toolkit
```

{% endcode %}
{% endtab %}
{% endtabs %}

Configure the Docker daemon to recognize the NVIDIA Container Runtime:

{% code lineNumbers="true" %}

```bash
sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Restart the Docker daemon to complete the installation after setting the default runtime:

{% code lineNumbers="true" %}

```bash
sudo systemctl restart docker
```

{% endcode %}

Test if Nvidia-docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

{% endcode %}

This should result in a console output shown below:

```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.51.06    Driver Version: 470.51.06    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:00:1E.0 Off |                    0 |
| N/A   34C    P8     9W /  70W |      0MiB / 15109MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

### Configuring daemon.json

Open `/etc/docker/daemon.json` with your favorite text editor.

Add `"default-runtime": "nvidia",`  to the json. Exemple:

{% code title="/etc/docker/daemon.json" lineNumbers="true" %}

```json
{
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime
    }
  }
}
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Windows dependencies (WSL)

*Don't follow this step if you plan to run BlurIt OP on Linux.* [*Go there*](/2.12.3/blurit-on-premise/installation/linux-dependencies) *instead.*

#### Prerequisites Before Installation

Before starting the installation, ensure you have received the archive containing all necessary documents. This archive will be shared via a secured link protected by a password.

**Contents of the Archive**

**Main Archive**: `client_name_YYYYMMDD.tar.gz`

The archive will include the following files:

1. **License File**: `license_client_name_YYYYMMDD_YYYYMMDD`
   * The license file specifies the validity period (start and end dates).
2. **Registry Login**: `login_registry.txt`
   * Contains the credentials to access the registry.
3. **Custom Configuration File** (if applicable): `blurit_stack.yml`

## Nvidia Driver installation

Download the NVIDIA driver >= 470 exe from: <https://www.nvidia.com/Download/index.aspx?lang=en-us>

You can also update the drivers using [Nvidia Geforce Experience](https://www.nvidia.com/fr-fr/geforce/geforce-experience/).

## Install WSL 2 (Windows Subsystem Linux)

To Check if WSL is installed, open PowerShell as administrator and run:

{% code lineNumbers="true" %}

```powershell
wsl -l –v
```

{% endcode %}

If WSL is not installed:

{% code lineNumbers="true" %}

```
wsl --install -d Ubuntu
```

{% endcode %}

Then reboot your machine.

It is possible to modify the resources allocated to WSL. For more information, you can refer to this link: <https://learn.microsoft.com/fr-fr/windows/wsl/wsl-config#wslconfig>.

## Docker installation

Instruction to install docker CE on windows with WSL 2 backend : <https://docs.docker.com/desktop/install/windows-install/>.

During the install don't forget to tick the Use **WSL 2 instead of Hyper-V** checkbox.

Additionally, if you want the BlurIt app to restart automatically when the machine restarts, check the box labeled 'Start Docker Desktop when you sign, in.'

<figure><img src="https://content.gitbook.com/content/6p6PuBdP8pjyuL1DKXoy/blobs/18HxcRwnqUCE5ATqQ6Hp/docker-config.PNG" alt=""><figcaption></figcaption></figure>

## Nvidia-docker installation

To enter WSL, open PowerShell and type `wsl` followed by pressing Enter.

{% code lineNumbers="true" %}

```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
```

{% endcode %}

Verify that Nvidia-Docker is installed:

{% code lineNumbers="true" %}

```bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi -a
```

{% endcode %}

### Configuring Docker daemon

Append the following JSON content on the Docker Desktop config like this:

{% code lineNumbers="true" %}

```json
{
	... # current content
	"runtimes": {
		"nvidia": {
			"path": "/usr/bin/nvidia-container-runtime",
			"runtimeArgs": []
		}
	},
	"default-runtime": "nvidia"
}
```

{% endcode %}

<figure><img src="https://content.gitbook.com/content/6p6PuBdP8pjyuL1DKXoy/blobs/NFEiWqOGGnmgoH2eKLKv/Windows_daemon-docker.png" alt=""><figcaption></figcaption></figure>

Restart Docker for the change to take effect.

### Post-install docker linux on WSL (required):&#x20;

{% code lineNumbers="true" %}

```bash
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
```

{% endcode %}

### Blurit CLI Installation

The **Blurit CLI** enables you to easily **configure**, **start**, and **interact** with Blurit. It provides a command-line interface to manage features and streamline platform usage.

Start these commands from WSL:

```bash
wget https://cloud.wassa.io/s/Kuj5MDgqkMCdjRv/download --output-document=blurit
chmod +x blurit
sudo mv blurit /usr/bin
```


# Configuration

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.3/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation. If Blurit team send you a compose file, it's possible to pass it as argument.

```bash
blurit configure
```

For custom installations, if a `blurit_stack.yml` file is provided, include it as an argument when executing the relevant commands :<br>

```bash
blurit configure blurit_stack.yml
```

## Configuration explanation

The following section provides an explanation of the various questions asked during the configuration process.

### Model

During the configuration process, you'll be prompted to select the AI model version that best fits your performance and precision needs. BlurIt offers two options:

* **tiny**: This model is optimized for speed, processing images and videos faster. It is ideal for scenarios where performance is critical, although it comes with a very slight reduction in precision. This is the default option.
* **standard**: This version provides a balance between speed and precision. While still optimized for fast processing, it offers slightly higher accuracy compared to the tiny model, making it suitable for tasks where precision is more important.

### Web App Authentication

To secure access to the BlurIt web app, you’ll need to set up a username and password during the configuration process. This protects the web interface and ensures that only authorized users can manage files and access data.

1. **Username**: Create a unique username for accessing the web app.
2. **Password**: Set a strong password for added security. Store it securely for future access.

Alternatively, you may choose not to set a username and password for quicker access. However, please note that **disabling authentication** means the web app will be openly accessible, which may expose your data to unauthorized access. This choice comes with the user’s full responsibility for securing access to the application.

### **SSL Configuration**&#x20;

For enhanced security, you can enable SSL to encrypt communication between clients and the server. During the configuration process, you will be prompted to provide the following:

1. **Server Name**: Specify the domain name or IP address used to access your BlurIt web app.
2. **Path to SSL Certificate File (.pem)**: Provide the full path to your SSL certificate file. This file contains the public key and is required for establishing secure HTTPS connections.
3. **Path to SSL Private Key File (.pem)**: Provide the full path to your private key file. This file must correspond to the SSL certificate provided.

If you do not have an SSL certificate, you can use services like [Let's Encrypt](https://letsencrypt.org/) to generate one for free or use self-signed certificates for internal testing.

By enabling SSL and authentication, you ensure that your data and web app are protected against unauthorized access and interception.

### Local storage

These settings define the base directories where BlurIt OP will locate input files (to be processed) and where it will store the output files (blurred videos/images and detection JSONs) on the local server storage, i.e., on the server where BlurIt OP is running.

#### Accessing Windows Drives on WSL

If you are using Windows Subsystem for Linux (WSL), your Windows drives are accessible under the `/mnt/` directory. Each drive is mapped to its respective folder:

* **Drive C:** Located at `/mnt/c/`
* **Drive D:** Located at `/mnt/d/`, and so on.

For example, if you need to access a file located at `C:\Users\YourName\Documents`, you can find it in WSL at:

```bash
/mnt/c/Users/YourName/Documents
```

This mapping makes it easy to navigate between your Windows environment and the Linux subsystem.

The input and output directories will be assigned to the user with ID 1200.

**Why UID/GID 1200?**&#x20;

This choice ensures compatibility across different systems and avoids conflicts with system-reserved or commonly used IDs. It provides a dedicated user/group for these services, improving security and isolation.

### S3 storage

These settings allow the use of S3 storage for the input and output directories for media.

### GPU settings

Select the GPU you wish to use with Blurit.

### Max Threads number

This variable represents the maximum number of threads that the reencoding step will utilize on your CPU. Increasing this value can result in faster reencoding.&#x20;

However, it's important to note that you should reserve some threads for other processes.

Avoid using the maximum number of available threads on your server, as it may impact the performance of other applications.

#### Webhook (optional)

This setting is a configuration that defines a route or URL where a POST request can be sent. This endpoint is typically used to send JSON data to another system or service.

In this specific example, when the POST request is made to the "CUSTOM\_WEBHOOK\_ENDPOINT" route, the JSON payload being sent is as follows:

```json
{
  "status": "Succeeded",
  "task_id": "abc-123-456-789"
}
```

The JSON payload contains two key-value pairs:

* "status" with a value of "Succeeded"
* "task\_id" with a value of "abc-123-456-789"

The purpose of this webhook is to notify or provide information to the system or service listening at the specified endpoint about the status of a task or operation. The receiving system can then process this data according to its requirements.

### Jobs timeouts

This parameter represents the amount of time the application waits before changing the status of a task to "failed." By default, it is set to 43200000 milliseconds (equivalent to 12 hours).


# Run BlurIt OP

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.3/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit start
```

The application will be available on ports **80** (HTTP) and **443** (HTTPS). The API can be accessed at the URL `/api`, and the Flower interface at `/flower`. The manager remains accessible via the standard URL (DNS or IP).


# Multi-servers installation

#### Add a worker node

🚨 This section pertains to clustering Blurit On-Premise. If you would like more information about it, please contact our customer services.🚨&#x20;

Before joining the manager machine, you need to open some ports:

* `TCP` port `2377` for cluster management communications
* `TCP` and `UDP` port `7946` for communication among nodes
* `UDP` port `4789` for overlay network traffic

Get Join-token on manager machine:

{% code lineNumbers="true" %}

```bash
docker swarm join-token worker
```

{% endcode %}

Replace `<worker-token>` with the actual token obtained from the previous command, and `<ip-of-manager-machine>` with the IP address or hostname of the manager machine. This command will join the worker machine to the swarm cluster.

Join the swarm cluster on the worker machine (<https://docs.docker.com/engine/reference/commandline/swarm\\_join/>):

{% code lineNumbers="true" %}

```bash
docker swarm join --token <worker-token> <ip-of-manager-machine>:2377
```

{% endcode %}

#### Add label to node

Add a label allow to chose the machine to deploy the workers. For multiple machine installation, it's mandatory for a smooth deployment.

This command display every node present on the swarm cluster:

{% code lineNumbers="true" %}

```bash
docker node ls
```

{% endcode %}

Add a label to a node:

{% code lineNumbers="true" %}

```bash
docker node update --label-add blurit-worker-<number of the machine> <node-name>
```

{% endcode %}

Replace `<machine-number>` with the appropriate number for the machine, and `<node-name>` with the name of the node. This command adds a label to the specified node, which will be used for deployment purposes.


# Post installation verifications

## Blurit CLI

The Blurit CLI is installed during the [Linux](/2.12.3/blurit-on-premise/installation/linux-dependencies) or [Windows](/2.12.3/blurit-on-premise/installation/windows-dependencies-wsl) dependencies installation process. This command will prompt you with several questions to assist in setting up your Blurit installation.

```bash
blurit status
```




---

[Next Page](/llms-full.txt/1)

