Run the server

July 2, 2026 · View on GitHub

Geti™ - Build and deploy computer vision AI models with minimal effort and data

Full-stack web application to build and deploy computer vision AI models, powered by the getitune library.

python pytorch openvino

Quick startDocsLicense

Geti Application

Geti is an end-to-end application for building and deploying computer vision AI models. It provides an intuitive graphical interface to upload image or video data, annotate datasets, train and optimize models, and run real-time inference through configurable pipelines.

Application demo

Main capabilities:

  • No-code model lifecycle: move from data upload and annotation to training, evaluation, and deployment in one UI.
  • Built-in data and annotation workflows: manage datasets, labels, and revisions with manual and AI-assisted annotation tools.
  • Pipeline-based deployment: connect sources (cameras or files) to trained models and route predictions to sinks such as storage, MQTT, or webhooks.
  • Edge-oriented optimization: export OpenVINO-optimized models for efficient inference on Intel hardware, with support for other accelerators.

Install as Windows app

Installing Geti as a Windows app is the simplest way to run it on Windows:

  1. Download the .msix package from the official Geti release.
  1. Double-click the package and click Install in the Windows installer dialog.
  2. Launch Geti from the Start menu.

If Windows shows a security prompt, verify that the package is from the official Geti release before continuing.

Run with Docker

The easiest and most straightforward way to run Geti is through Docker. We provide pre-built images for Intel® XPU and NVIDIA® CUDA platforms, or you can build your own image from source.

Prerequisites

On the host system:

  • Docker v29+ [docs]
  • (Optional, recommended) Just v1.46+ [docs]
  • (Only for Intel® XPU) the latest driver suitable with your HW [docs]
  • (Only for NVIDIA GPU) NVIDIA driver and the NVIDIA Container Toolkit [docs]

Install the pre-built image of your choice:

# Recommended choice if you have a modern Intel® CPU or GPU
docker pull ghcr.io/open-edge-platform/geti-xpu

# Alternative: support for NVIDIA CUDA-enabled platforms
docker pull ghcr.io/open-edge-platform/geti-cuda

# Alternative: lightweight CPU-only image
docker pull ghcr.io/open-edge-platform/geti-cpu

# Retag the pulled image as `geti-{cpu,xpu,cuda}:latest` for using with `just run-image`
docker tag ghcr.io/open-edge-platform/geti-cpu:latest geti-cpu:latest
Advanced: Build the image

Geti Docker images can be built from source using the Dockerfile in the application directory. This can be useful if you want to customize the application or optimize it for a specific use case that is not covered by the pre-built images.

The instructions below use just to simplify the build process, but you can also build the image manually with docker build if you prefer.

From the application directory:

# Choice of accelerator: 'xpu', 'cuda', or 'cpu'
just build-image --accelerator xpu

Run just --usage build-image to see all available build options.

Once you have downloaded or built the Geti image, use the run-image command to launch the application.

# Run the image build with support for a specific accelerator ('xpu', 'cuda', or 'cpu')
just run-image --accelerator xpu --port 8080

Run just --usage run-image to see all available runtime options.

After the container starts, you can access the Geti web application at http://localhost:8080 (assuming default settings).

TLS certificates

By default, the container generates a self-signed certificate at startup and serves over HTTPS on the configured port. For production deployments, mount your certificate and private key into the container using --volumes, then point --certfile and --keyfile to the in-container paths:

just run-image --accelerator xpu \
    --volumes "/path/to/certs:/certs:ro" \
    --certfile /certs/server.pem \
    --keyfile  /certs/server-key.pem

The cert directory is mounted read-only and is separate from the data volume - it is never modified by the container.

Note

The self-signed certificate triggers a browser security warning. For a trusted local setup, generate a locally-trusted cert with mkcert and pass it the same way.

Advanced: Run with a TURN server

Geti uses WebRTC for the real-time inference streaming visualization in the UI. WebRTC requires the browser to establish a direct connection to the backend's media server: when the application is deployed in a restricted network environment, such as behind a corporate firewall or NAT, the connection may fail due to the inability to traverse the network boundaries. To address this issue, you can set up a TURN server that acts as a relay between the browser and the backend, allowing the WebRTC traffic to pass through the restricted network.

First, set up a TURN server by running just run-coturn from the application directory. This command will launch a Coturn TURN server in a Docker container with default credentials.

Next, pass the --coturn option when launching the Geti container via just run-image. That's it, now you should be able to view the predictions in the 'Inference' page of the UI.

Later, when you no longer need the TURN server, stop it with just stop-coturn.

Advanced: Browse the app storage

The Geti application uses a Docker volume named geti-data to persistently store all datasets, models, and other objects. You can browse the contents of this volume by running a temporary container that mounts the volume and lists the files.

# List the contents of the root directory in the `geti-data` volume
docker run --rm -v geti-data:/data alpine ls -l /data

# List the model files of a specific project (replace <PROJECT_ID> with the actual ID)
docker run --rm -v geti-data:/data alpine ls -l /data/projects/<PROJECT_ID>/models

# List the media files of a specific project (replace <PROJECT_ID> with the actual ID)
docker run --rm -v geti-data:/data alpine ls -l /data/projects/<PROJECT_ID>/dataset
Troubleshooting: View the logs

When running Geti with Docker, all logs are stored in the geti-logs Docker volume. You can view these logs by running a temporary container that mounts the volume and prints the log files to the console.

These examples use jq to format the JSON logs; install jq on the host or omit the | jq -r '.text' part to see the raw JSON output. Application logs:

# Print the logs of the application container to the console
docker run --rm -v geti-logs:/logs alpine cat /logs/app.log | jq -r '.text'

# Or save the logs to a file for easier browsing
docker run --rm -v geti-logs:/logs alpine cat /logs/app.log | jq -r '.text' > geti-logs.txt

Job logs:

# List the available job logs
docker run --rm -v geti-logs:/logs alpine ls -l /logs/jobs

# Print the logs of a specific job to the console
docker run --rm -v geti-logs:/logs alpine cat /logs/jobs/<job_type>-<job_id>.log | jq -r '.text'

Logs of other worker processes:

# Print the logs of the inference pipeline stream loader
docker run --rm -v geti-logs:/logs alpine cat /logs/workers/streamloader.log | jq -r '.text'

# Print the logs of the inference worker
docker run --rm -v geti-logs:/logs alpine cat /logs/workers/inference.log | jq -r '.text'

Run from source (for development)

For development purposes, you can run the Geti server and UI as standalone components without Docker.

Prerequisites
  • Just v1.46+ [docs]
  • (Only for Intel® XPU) the latest driver suitable with your HW [docs]
  • (Only for NVIDIA GPU) NVIDIA driver and the NVIDIA Container Toolkit [docs]
  • Node.js v24.2+ [docs]
Run the server

To run the server, use the run-server command after initializing the environment with venv:

# From the repo root
cd application/backend

# Initialize the environment with the appropriate accelerator support (cpu, xpu, or cuda)
just venv --accelerator xpu

# Run the server
just run-server

Run just --usage run-server for a full list of options for running the server. Notably, by passing the option --setup-demo, the application will be pre-populated with demo data, including sample datasets and pre-trained models.

Run the UI

After running the server, build and launch the UI in a separate terminal:

# From the repo root
cd application/ui

# Install dependencies and build
npm install
npm run build

# Start the UI
npm run start

After the UI starts, you can access the Geti web application at http://localhost:3000 (assuming default settings).

Documentation

Please check the documentation website for detailed guides, API reference, and other resources to help you get the most out of Geti.

Advanced: generate the API spec from source

The OpenAPI specification for the Geti REST API can be generated with the generate-api-spec command:

# From the repo root
cd application/backend

# Generate the OpenAPI spec and save it to a custom location
just gen-api-spec --output-path="openapi.json"

License

The Geti source code is licensed under the Apache 2.0 License. The Windows MSIX App is licensed under the Intel Simplified Software License. For more information, refer to the LICENSE page.