Initial commit - BraceIQMed platform with frontend, API, and brace generator

This commit is contained in:
2026-01-29 14:34:05 -08:00
commit 745f9f827f
187 changed files with 534688 additions and 0 deletions

58
brace-generator/config.py Normal file
View File

@@ -0,0 +1,58 @@
"""
Server configuration for Brace Generator API.
"""
import os
from pathlib import Path
class Config:
"""Server configuration loaded from environment variables."""
# Server settings (DEV uses port 8001)
HOST: str = os.getenv("HOST", "0.0.0.0")
PORT: int = int(os.getenv("PORT", "8001"))
DEBUG: bool = os.getenv("DEBUG", "true").lower() == "true"
# Model settings
DEVICE: str = os.getenv("DEVICE", "cuda") # 'cuda' or 'cpu'
MODEL: str = os.getenv("MODEL", "scoliovis") # 'scoliovis' or 'vertebra-landmark'
# Paths
BASE_DIR: Path = Path(__file__).parent.parent
TEMPLATES_DIR: Path = BASE_DIR / "rigoBrace(2)"
WEIGHTS_DIR: Path = BASE_DIR.parent / "scoliovis-api" / "models"
# TEMP_DIR: Use system temp on Windows, /tmp on Linux
@staticmethod
def _get_temp_dir() -> Path:
env_temp = os.getenv("TEMP_DIR")
if env_temp:
return Path(env_temp)
# Use system temp directory (works on both Windows and Linux)
import tempfile
return Path(tempfile.gettempdir()) / "brace_generator"
TEMP_DIR: Path = _get_temp_dir()
# CORS
CORS_ORIGINS: list = os.getenv("CORS_ORIGINS", "*").split(",")
# Request limits
MAX_IMAGE_SIZE_MB: int = int(os.getenv("MAX_IMAGE_SIZE_MB", "50"))
REQUEST_TIMEOUT_SECONDS: int = int(os.getenv("REQUEST_TIMEOUT_SECONDS", "120"))
@classmethod
def ensure_dirs(cls):
"""Create necessary directories."""
cls.TEMP_DIR.mkdir(parents=True, exist_ok=True)
@classmethod
def get_device(cls) -> str:
"""Get device, falling back to CPU if CUDA unavailable."""
import torch
if cls.DEVICE == "cuda" and torch.cuda.is_available():
return "cuda"
return "cpu"
config = Config()