"""Runtime configuration (all overridable via env). Defaults target the `genrecon` LXC produced by issue i-opavuyaq; the MOCK path lets the whole app run/test on any machine without a GPU or the GenRecon install.""" import os from pathlib import Path BASE = Path(__file__).resolve().parent ROOT = BASE.parent def _flag(name: str, default: str = "0") -> bool: return str(os.environ.get(name, default)).lower() in ("1", "true", "yes", "on") # --- mode --- MOCK = _flag("GENRECON_MOCK") # skip GPU pipeline, emit the sample scene # --- paths --- JOBS_DIR = Path(os.environ.get("GENRECON_JOBS_DIR", "/srv/jobs")) FRONTEND_DIR = Path(os.environ.get("GENRECON_FRONTEND_DIR", str(ROOT / "frontend"))) SAMPLE_GLB = Path(os.environ.get("GENRECON_SAMPLE_GLB", str(ROOT / "sample" / "scene.glb"))) # --- GenRecon install (on the genrecon machine) --- GENRECON_SRC = Path(os.environ.get("GENRECON_SRC", "/opt/genrecon/src")) GENRECON_CKPTS = Path(os.environ.get("GENRECON_CKPTS", "/opt/genrecon/ckpts")) CONDA_ENV = os.environ.get("GENRECON_CONDA_ENV", "genrecon") CUDA_DEVICE = os.environ.get("GENRECON_CUDA_DEVICE", "5") # pin to a free GPU on hypervisor a # --- pipeline knobs --- FFMPEG_BIN = os.environ.get("GENRECON_FFMPEG_BIN", "ffmpeg") COLMAP_BIN = os.environ.get("GENRECON_COLMAP_BIN", "colmap") FRAMES_FPS = float(os.environ.get("GENRECON_FRAMES_FPS", "2")) FRAMES_MAX = int(os.environ.get("GENRECON_FRAMES_MAX", "300")) NUM_IMGS_PER_SCENE = int(os.environ.get("GENRECON_NUM_IMGS", "999")) PIPELINE_CONFIG = os.environ.get("GENRECON_PIPELINE_CONFIG", "configs/pipelines/texture.json") MAX_UPLOAD_MB = int(os.environ.get("GENRECON_MAX_UPLOAD_MB", "2048")) JOBS_DIR.mkdir(parents=True, exist_ok=True) # Stage order + the progress band each stage fills (start, end). STAGES = [ ("frames", 5, 25), ("colmap", 25, 55), ("reconstruct", 55, 90), ("glb", 90, 100), ]