Analyse and view your UAV mapping flights in a structured webapp
13
stars
134
commits
TypeScript
primary language
Sep 3, 2026
updated
ARGUS is a web application for structured documentation and analysis of drone images in rescue operations. It creates orthophotos from UAV mapping flights (RGB and thermal/IR), presents flight data in a structured manner, evaluates infrared imagery, and offers object detection using custom-trained neural networks. An integrated local LLM (Ollama) can automatically generate scene descriptions.
ARGUS runs as a multi-container Docker application and is accessible from any device on the same network. It is recommended to use a Chromium-based browser.
Note: ARGUS is developed at Westphalian University of Applied Sciences as part of the E-DRZ research project. It is intended for scientific use and does not offer the reliability of commercial software.
360 Video Support: ARGUS now again supports 360° video reconstruction via Stella VSLAM. Upload an equirectangular video; the
argus_stella_workerextracts keyframes and 6-DOF camera poses, and produces a sparse and/or dense point cloud. The result opens in a dedicated reconstruction report with a panoramic keyframe tour, an equirectangular video player, and an interactive 3D point-cloud viewer.
Supported platforms: Linux (primary), Windows (via start-win-argus.cmd / PowerShell wrapper)
Clone the repository with submodules:
git clone --recursive https://github.com/RoblabWh/argus.git
cd argus
If you already cloned without --recursive:
git submodule update --init --recursive
Start ARGUS:
./argus.sh up --build
The first build takes several minutes. On the first launch a .env file is created automatically from .env.example.
Open in browser: http://<your-ip>:5173
The startup script (argus.sh) automatically detects your local IP, checks for NVIDIA GPU support, and selects the appropriate Docker Compose configuration.
The .env file in the project root controls all settings. It is created automatically on first launch. Key variables:
| Variable | Default | Description |
|---|---|---|
PORT_API | 8008 | API backend port |
PORT_FRONTEND | 5173 | Frontend port (open this in your browser) |
PORT_DB | 5433 | PostgreSQL port on host |
OPEN_WEATHER_API_KEY | (empty) | OpenWeatherMap API key for weather data |
ENABLE_WEBODM | false | Enable WebODM integration (see below) |
VITE_API_URL | (auto-set on first run) | Backend URL. Preserved on subsequent runs unless --update-api-url / --update-all-urls is used. |
WEBODM_URL | (auto-set on first run) | WebODM URL. Same auto-detect/preserve behavior as VITE_API_URL. |
ARGUS_DEFAULT_FLAGS | (empty) | Flags always prepended to ./argus.sh / windows-argus.ps1 on launch. Example: --update-all-urls to always rewrite URLs to the current local IP. |
By default, URLs are written once (on first launch) and then preserved. To rebuild them, pass a flag:
| Flag | Effect |
|---|---|
--update-api-url | Rewrite VITE_API_URL to the current local IP |
--update-webodm-url | Rewrite WEBODM_URL to the current local IP |
--update-all-urls | Both of the above |
--keep-api-url | Override ARGUS_DEFAULT_FLAGS — keep VITE_API_URL as-is |
--keep-webodm-url | Override ARGUS_DEFAULT_FLAGS — keep WEBODM_URL as-is |
--keep-urls | Override ARGUS_DEFAULT_FLAGS — keep both |
To rewrite URLs every launch without typing flags, set ARGUS_DEFAULT_FLAGS=--update-all-urls in .env. On Windows, the equivalent PowerShell switches are -UpdateApiUrl, -UpdateWebodmUrl, -UpdateAllUrls, -KeepApiUrl, -KeepWebodmUrl, -KeepUrls; ARGUS_DEFAULT_FLAGS uses the same --update-* / --keep-* strings on both platforms.
Auto-sync from .env.example: On every launch, any key present in .env.example but missing from .env is appended with the example value, and the script prints which keys were added. This keeps existing .env files compatible with new releases without you having to copy them in manually.
After editing .env manually, restart the containers for changes to take effect.
# Start all services (builds if needed)
./argus.sh up --build
# Start without rebuilding
./argus.sh up
# Stop all services
./argus.sh down
# or simply in the running terminal
crtl + c
# Windows
start-win-argus.cmd up --build
Workflow:
For high-quality orthophoto generation via OpenDroneMap:
.env:
ENABLE_WEBODM=true
WEBODM_PATH=/path/to/WebODM
WEBODM_USERNAME=your_username
WEBODM_PASSWORD=your_password
argus.sh will start WebODM automatically alongside ARGUS.ARGUS consists of the following Docker services:
| Service | Description |
|---|---|
api | FastAPI backend (Python 3.12) with documentation under http://<your-ip>:8008/docs |
frontend | React frontend (Vite) |
db | PostgreSQL 16 |
redis | Task queue broker & progress tracking |
argus_mapping_worker | Celery worker for orthophoto generation |
argus_detection_worker | Celery worker for Transformer-based detection |
argus_yolo_worker | Celery worker for experimental YOLO detection |
argus_ollama_worker | Celery worker for LLM image descriptions |
argus_stella_worker | Celery worker for 360° video reconstruction (Stella VSLAM) |
ollama | Local LLM server (LLaVA, Llama 3.2) |
Database migrations are handled automatically via Alembic on startup.
api/app/cameramodels.json.docker-compose (hyphenated) instead of docker compose. ARGUS requires the modern docker compose plugin syntax.ARGUS can display images from various cameras/drones. For orthophoto generation, the following EXIF metadata is used:
| Required | Field | Notes |
|---|---|---|
| Yes | GPS latitude & longitude | |
| Yes | Image width & height | Extracted automatically |
| Yes | Creation date/time | |
| Recommended | Relative altitude (AGL) | If missing, a default can be set on upload |
| Recommended | Field of view (FOV) | |
| Recommended | Gimbal yaw, pitch, roll | Camera/gimbal orientation |
| Recommended | UAV yaw, pitch, roll | Drone body orientation |
| Optional | Camera model name | Used to look up per-model EXIF key mappings in api/app/cameramodels.json |
| Optional | Projection type | Used to filter out panoramic images |
Thermal/IR images are identified by:
ImageSource EXIF tag containing "thermal" or "infrared" (preferred)Currently tested with DJI drones (M30T, Mavic Enterprise, Mavic 2, Mavic 3). Other drones may work if they provide the required metadata.
Developed at Westphalian University of Applied Sciences — RobLab | Funded by the German Feederal Ministry of Research, Technology and Space (BMFTR)
TypeScript
52.2%
Python
44.0%
HTML
1.7%
Analyse and view your UAV mapping flights in a structured webapp
13
stars
134
commits
TypeScript
primary language
Sep 3, 2026
updated
ARGUS is a web application for structured documentation and analysis of drone images in rescue operations. It creates orthophotos from UAV mapping flights (RGB and thermal/IR), presents flight data in a structured manner, evaluates infrared imagery, and offers object detection using custom-trained neural networks. An integrated local LLM (Ollama) can automatically generate scene descriptions.
ARGUS runs as a multi-container Docker application and is accessible from any device on the same network. It is recommended to use a Chromium-based browser.
Note: ARGUS is developed at Westphalian University of Applied Sciences as part of the E-DRZ research project. It is intended for scientific use and does not offer the reliability of commercial software.
360 Video Support: ARGUS now again supports 360° video reconstruction via Stella VSLAM. Upload an equirectangular video; the
argus_stella_workerextracts keyframes and 6-DOF camera poses, and produces a sparse and/or dense point cloud. The result opens in a dedicated reconstruction report with a panoramic keyframe tour, an equirectangular video player, and an interactive 3D point-cloud viewer.
Supported platforms: Linux (primary), Windows (via start-win-argus.cmd / PowerShell wrapper)
Clone the repository with submodules:
git clone --recursive https://github.com/RoblabWh/argus.git
cd argus
If you already cloned without --recursive:
git submodule update --init --recursive
Start ARGUS:
./argus.sh up --build
The first build takes several minutes. On the first launch a .env file is created automatically from .env.example.
Open in browser: http://<your-ip>:5173
The startup script (argus.sh) automatically detects your local IP, checks for NVIDIA GPU support, and selects the appropriate Docker Compose configuration.
The .env file in the project root controls all settings. It is created automatically on first launch. Key variables:
| Variable | Default | Description |
|---|---|---|
PORT_API | 8008 | API backend port |
PORT_FRONTEND | 5173 | Frontend port (open this in your browser) |
PORT_DB | 5433 | PostgreSQL port on host |
OPEN_WEATHER_API_KEY | (empty) | OpenWeatherMap API key for weather data |
ENABLE_WEBODM | false | Enable WebODM integration (see below) |
VITE_API_URL | (auto-set on first run) | Backend URL. Preserved on subsequent runs unless --update-api-url / --update-all-urls is used. |
WEBODM_URL | (auto-set on first run) | WebODM URL. Same auto-detect/preserve behavior as VITE_API_URL. |
ARGUS_DEFAULT_FLAGS | (empty) | Flags always prepended to ./argus.sh / windows-argus.ps1 on launch. Example: --update-all-urls to always rewrite URLs to the current local IP. |
By default, URLs are written once (on first launch) and then preserved. To rebuild them, pass a flag:
| Flag | Effect |
|---|---|
--update-api-url | Rewrite VITE_API_URL to the current local IP |
--update-webodm-url | Rewrite WEBODM_URL to the current local IP |
--update-all-urls | Both of the above |
--keep-api-url | Override ARGUS_DEFAULT_FLAGS — keep VITE_API_URL as-is |
--keep-webodm-url | Override ARGUS_DEFAULT_FLAGS — keep WEBODM_URL as-is |
--keep-urls | Override ARGUS_DEFAULT_FLAGS — keep both |
To rewrite URLs every launch without typing flags, set ARGUS_DEFAULT_FLAGS=--update-all-urls in .env. On Windows, the equivalent PowerShell switches are -UpdateApiUrl, -UpdateWebodmUrl, -UpdateAllUrls, -KeepApiUrl, -KeepWebodmUrl, -KeepUrls; ARGUS_DEFAULT_FLAGS uses the same --update-* / --keep-* strings on both platforms.
Auto-sync from .env.example: On every launch, any key present in .env.example but missing from .env is appended with the example value, and the script prints which keys were added. This keeps existing .env files compatible with new releases without you having to copy them in manually.
After editing .env manually, restart the containers for changes to take effect.
# Start all services (builds if needed)
./argus.sh up --build
# Start without rebuilding
./argus.sh up
# Stop all services
./argus.sh down
# or simply in the running terminal
crtl + c
# Windows
start-win-argus.cmd up --build
Workflow:
For high-quality orthophoto generation via OpenDroneMap:
.env:
ENABLE_WEBODM=true
WEBODM_PATH=/path/to/WebODM
WEBODM_USERNAME=your_username
WEBODM_PASSWORD=your_password
argus.sh will start WebODM automatically alongside ARGUS.ARGUS consists of the following Docker services:
| Service | Description |
|---|---|
api | FastAPI backend (Python 3.12) with documentation under http://<your-ip>:8008/docs |
frontend | React frontend (Vite) |
db | PostgreSQL 16 |
redis | Task queue broker & progress tracking |
argus_mapping_worker | Celery worker for orthophoto generation |
argus_detection_worker | Celery worker for Transformer-based detection |
argus_yolo_worker | Celery worker for experimental YOLO detection |
argus_ollama_worker | Celery worker for LLM image descriptions |
argus_stella_worker | Celery worker for 360° video reconstruction (Stella VSLAM) |
ollama | Local LLM server (LLaVA, Llama 3.2) |
Database migrations are handled automatically via Alembic on startup.
api/app/cameramodels.json.docker-compose (hyphenated) instead of docker compose. ARGUS requires the modern docker compose plugin syntax.ARGUS can display images from various cameras/drones. For orthophoto generation, the following EXIF metadata is used:
| Required | Field | Notes |
|---|---|---|
| Yes | GPS latitude & longitude | |
| Yes | Image width & height | Extracted automatically |
| Yes | Creation date/time | |
| Recommended | Relative altitude (AGL) | If missing, a default can be set on upload |
| Recommended | Field of view (FOV) | |
| Recommended | Gimbal yaw, pitch, roll | Camera/gimbal orientation |
| Recommended | UAV yaw, pitch, roll | Drone body orientation |
| Optional | Camera model name | Used to look up per-model EXIF key mappings in api/app/cameramodels.json |
| Optional | Projection type | Used to filter out panoramic images |
Thermal/IR images are identified by:
ImageSource EXIF tag containing "thermal" or "infrared" (preferred)Currently tested with DJI drones (M30T, Mavic Enterprise, Mavic 2, Mavic 3). Other drones may work if they provide the required metadata.
Developed at Westphalian University of Applied Sciences — RobLab | Funded by the German Feederal Ministry of Research, Technology and Space (BMFTR)
TypeScript
52.2%
Python
44.0%
HTML
1.7%