# Backend Environment Setup Use Python 3.12. The `.venv/` directory is disposable and ignored by git. ## macOS CPU setup ```bash cd backend/floor-visualizer python3.12 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements-mac.txt VISUALIZER_CONFIG=visualizer.local.toml uvicorn app:app --host 0.0.0.0 --port 8002 ``` ## NVIDIA GPU setup Use this on the GPU machine. This installs the CUDA 12.6 PyTorch wheels. ```bash cd backend/floor-visualizer python3.12 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements-gpu-cu126.txt VISUALIZER_CONFIG=visualizer.gpu.toml uvicorn app:app --host 0.0.0.0 --port 8002 ``` The first GPU run downloads `shi-labs/oneformer_ade20k_swin_large` and the depth model into the Hugging Face cache. It also downloads `Ruicheng/moge-2-vitl-normal`, the primary GPU geometry model. ## Notes - Environment variables override TOML values, for example `SEGMENTATION_MODEL=segformer`. - `requirements.txt` is a full freeze from an existing environment. Prefer the smaller platform files above when recreating `.venv`. ## Optional DigitalOcean Spaces upload archive The `/viz2d/convert` endpoint can copy each uploaded room image to a private DigitalOcean Spaces bucket in the background without changing the frontend flow. Add these values to `backend/floor-visualizer/.env`: ```bash SPACES_BUCKET="your-space-name" SPACES_REGION="nyc3" SPACES_ACCESS_KEY_ID="your-spaces-access-key" SPACES_SECRET_ACCESS_KEY="your-spaces-secret-key" SPACES_UPLOAD_PREFIX="room-uploads" ``` `SPACES_ENDPOINT_URL` is optional and defaults to `https://$SPACES_REGION.digitaloceanspaces.com`. `SPACES_ACL` defaults to `private`. ## Optional visual QA runner The backend can also power the debug visualizer QA page without adding a database. It lists images directly from DigitalOcean Spaces and writes each QA run under `data/qa-runs/{run_id}/`. Backend env: ```bash QA_FRONTEND_URL="https://your-vercel-frontend.example" QA_BACKEND_URL="https://your-backend.example" QA_FRONTEND_DIR="/mnt/room-editor/frontend/viz2d-demo" QA_MAX_IMAGES="50" QA_MAX_TESTS="200" ``` For Hugging Face, `QA_FRONTEND_DIR` defaults to `/app/frontend/viz2d-demo` in the Dockerfile. The backend server needs Node and Playwright because the test runner opens the hosted frontend in Chromium. On Hugging Face, the deploy workflow copies only the text-based `frontend/viz2d-demo` QA runner files into the Space and the Dockerfile installs these during rebuild. Real QA images are downloaded from DigitalOcean during each run. On non-Hugging Face servers, install them manually: ```bash cd /mnt/room-editor/frontend/viz2d-demo npm install npx playwright install --with-deps chromium ``` The QA endpoints are: ```text GET /qa/images POST /qa/runs GET /qa/runs/{run_id} GET /qa/runs/{run_id}/events GET /qa/runs/{run_id}/report GET /qa/runs/{run_id}/report.md ```