This webapp provides a frontend interface for annotating AI generated output.
Project description
LX-Annotate
LX-Annotate is a Django + Vue application for annotating AI-generated outputs, with a media ingestion pipeline for videos and PDFs. This project was created by a team at Universitätsklinikum Würzburg, Bavaria.
Highlights
- Django backend with REST APIs and optional OIDC authentication
- Vue 3 SPA frontend integrated with Django via
django-vite - File watcher for automated video and PDF processing
- Reproducible environments via
devenv/Nix and Docker
Repository Layout
lx_annotate/Django app and settingsfrontend/Vue 3 applicationscripts/operational tooling and file watcher scriptsdata/runtime data (raw videos, PDFs, model cache)conf_template/sample configuration templatescontainer/Dockerfiles and container docs
Requirements
- Python 3.12
- Node.js 18+ (frontend)
- PostgreSQL (main app)
- Optional:
uv,direnv,devenv, Nix, Docker
Quick Start (Development)
direnv allow(if you usedevenv)uv sync(or install dependencies withpip)cp conf_template/default.env .envand update valuesexport DJANGO_SETTINGS_MODULE=lx_annotate.settings.settings_devpython manage.py load_base_db_datapython manage.py runserver
Open http://127.0.0.1:8000/.
Environment Variables and Secrets
Production secrets are typically injected by the host system.
For local development, use either secretspec.toml defaults or a local .env file.
Do not commit secrets. secretspec.toml is tracked in git.
Example:
direnv allow
secretspec --provider dotenv --profile development python manage.py runserver
See https://secretspec.dev/ for details.
Frontend
cd frontend
npm install
npm run build
Hot-reload development:
cd frontend
npm run dev
In another terminal:
export DJANGO_SETTINGS_MODULE=lx_annotate.settings.settings_dev
python manage.py runserver
File Watcher
The file watcher ingests media placed in:
data/import/video_import/data/import/report_import/
./scripts/start_filewatcher.sh dev
# or
python scripts/file_watcher.py
Configuration
- Development
.envis read from the repository root or~/.local/share/lx-annotate/.env. - Settings are driven by environment variables (see
secretspec.tomldefaults). - Sample configs live in
conf_template/.
Nix Builds
Nix build targets are available, but deployment paths may still need project-specific adjustments.
nix build .#prod-server
./result/bin/run-prod-server
nix build .#file-watcher
./result/bin/run-file-watcher
Wheel Deployment
The CI pipeline can now build a production wheel with frontend staticfiles
included via hatchling. Production runtime no longer needs Node.js or the
full devenv shell.
Deployment assets live in deploy/:
deploy/bootstrap-host.shdeploy/deploy.shdeploy/lx-annotate.servicedeploy/.env.systemd.example
See docs/guides/wheel-deployment.md for the full host bootstrap and systemd
flow.
Containers
Docker images now install Python packages into /app/.devenv/state/venv so the
container path matches the repository's preferred virtualenv layout.
This does not mean Docker runs the full Nix/devenv shell. Inside the
container, uv creates and manages the environment at that path, and the image
PATH is configured to use /app/.devenv/state/venv/bin.
See container/README.md for development and production Docker usage.
Tests
pytest
cd frontend
npm run test:unit
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lx_annotate-0.0.1.tar.gz.
File metadata
- Download URL: lx_annotate-0.0.1.tar.gz
- Upload date:
- Size: 35.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67fb0492727a4d2c7cae878ea8cedfece2b84d6ee626c521182c786daa671536
|
|
| MD5 |
a3e69f7150da8a75e0517111ebe9f68b
|
|
| BLAKE2b-256 |
2dc87b775a15d53f8d934d7c32e0685056b090b76f4a6eb7fc7b532618da2d97
|
File details
Details for the file lx_annotate-0.0.1-py3-none-any.whl.
File metadata
- Download URL: lx_annotate-0.0.1-py3-none-any.whl
- Upload date:
- Size: 35.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c02b1860af6c9f46315663d49781c4ec067cce5dc575e6565ae7ca4904949201
|
|
| MD5 |
0fcda3a2275762df3d533b7dd59147cc
|
|
| BLAKE2b-256 |
7ed627cf3d957efccfae0284c104f28a47e5c64d2e2ef9d695a9f14d5059322e
|