Technologies & stack¶
Replaces an outdated description
The previous version of this page described an AngularJS + Bootstrap 3 + jQuery-widget frontend from TRAPPER v1. None of that is current — the stack below was verified directly against each module's dependency manifests.
TRAPPER is four independently deployable services (see Ecosystem) sharing a small set of architectural choices.
Trapper Expert (this module)¶
| Layer | Technology |
|---|---|
| Web framework | Django 5.1, Django REST Framework |
| Admin UI | Unfold — a modern Tailwind-based theme for the Django admin, replacing the stock admin |
| Database | PostgreSQL with PostGIS (spatial) and TimescaleDB (required — backs the ObjectFrameObservation hypertable, see Frame timeseries) |
| Async tasks | Celery workers + beat, RabbitMQ as broker |
| Caching | Memcached |
| Chunked uploads | A dedicated FastAPI service (trapper_uploader), used by both trapper-tools and the Citizen Science frontend |
| Bulk file transfer | Pure-FTPd (FTPS), bridged to Trapper accounts |
| Static/media serving | Nginx, fronted by Traefik in production deployments |
| API docs | drf-yasg — Swagger UI at /docs/api/, ReDoc at /docs/api/redoc/ |
| Cloud storage | django-storages (Azure / Amazon S3 / S3-compatible) |
| Data export | polars + camtrap-package + frictionless[parquet] for Camtrap DP packages |
Trapper AI Manager¶
Also Django 5.1 + DRF — a separate Django project (separate database, separate admin) dedicated to orchestrating prediction jobs: registering PredictionModel/AIRuntime rows from the trapper-schemas manifest, batching resources, and dispatching to the AI Worker over Celery.
Trapper AI Worker¶
A host-level Coordinator + Runtimes architecture, not a single monolithic service:
- The coordinator (
trapperai-coordinator) is a host process — not a container — so it can autodetect and access GPU/Hailo hardware directly. Installed via auv-managed tool venv (packagetrapperai-core) and run as a systemd user unit. Exposes a small FastAPI + Uvicorn API and consumes jobs via Celery. - Runtimes are the actual model-execution packages (e.g.
trapperai-trackers,trapperai-trackers-ultralytics,trapperai-predictors-torch-depth,trapperai-predictors-hailo-depth) — installed and selected based on detected hardware.
See AI pipeline architecture for how the three services interact end to end.
Citizen Science frontend¶
Angular 17 in an Nx monorepo (trapper-frontend) — libraries for classification, annotation (resource-annotator), hotkeys, and the upload/dashboard UI are split into separately buildable Nx packages rather than one flat Angular app.
Trapper Tools¶
A Python CLI (separate repository) for converting, packaging, and uploading camera-trap data — see Convert, package & upload with Trapper-Tools.
Deployment¶
The whole ecosystem is orchestrated by trapper-setup — Docker Compose for the containerized services, Traefik for SSL/routing in production, and the host-level AI Worker coordinator installed alongside. See Architecture for the full service/port table and Deploy with trapper-setup for the procedure.