config.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. """Runtime configuration (all overridable via env). Defaults target the
  2. `genrecon` LXC produced by issue i-opavuyaq; the MOCK path lets the whole
  3. app run/test on any machine without a GPU or the GenRecon install."""
  4. import os
  5. from pathlib import Path
  6. BASE = Path(__file__).resolve().parent
  7. ROOT = BASE.parent
  8. def _flag(name: str, default: str = "0") -> bool:
  9. return str(os.environ.get(name, default)).lower() in ("1", "true", "yes", "on")
  10. # --- mode ---
  11. MOCK = _flag("GENRECON_MOCK") # skip GPU pipeline, emit the sample scene
  12. # --- paths ---
  13. JOBS_DIR = Path(os.environ.get("GENRECON_JOBS_DIR", "/srv/jobs"))
  14. FRONTEND_DIR = Path(os.environ.get("GENRECON_FRONTEND_DIR", str(ROOT / "frontend")))
  15. SAMPLE_GLB = Path(os.environ.get("GENRECON_SAMPLE_GLB", str(ROOT / "sample" / "scene.glb")))
  16. # --- GenRecon install (on the genrecon machine) ---
  17. GENRECON_SRC = Path(os.environ.get("GENRECON_SRC", "/opt/genrecon/src"))
  18. GENRECON_CKPTS = Path(os.environ.get("GENRECON_CKPTS", "/opt/genrecon/ckpts"))
  19. CONDA_ENV = os.environ.get("GENRECON_CONDA_ENV", "genrecon")
  20. CUDA_DEVICE = os.environ.get("GENRECON_CUDA_DEVICE", "5") # pin to a free GPU on hypervisor a
  21. # --- pipeline knobs ---
  22. FFMPEG_BIN = os.environ.get("GENRECON_FFMPEG_BIN", "ffmpeg")
  23. COLMAP_BIN = os.environ.get("GENRECON_COLMAP_BIN", "colmap")
  24. FRAMES_FPS = float(os.environ.get("GENRECON_FRAMES_FPS", "2"))
  25. FRAMES_MAX = int(os.environ.get("GENRECON_FRAMES_MAX", "300"))
  26. NUM_IMGS_PER_SCENE = int(os.environ.get("GENRECON_NUM_IMGS", "999"))
  27. PIPELINE_CONFIG = os.environ.get("GENRECON_PIPELINE_CONFIG", "configs/pipelines/texture.json")
  28. MAX_UPLOAD_MB = int(os.environ.get("GENRECON_MAX_UPLOAD_MB", "2048"))
  29. # reconstruct_scene.py Iphone-mode knobs. pipeline.py MUST pass these — when
  30. # omitted, the chunker falls back to more aggressive internal defaults
  31. # (stat_std_ratio 2.0) that can strip a sparse COLMAP cloud to 0 points and
  32. # crash the PLY export. These are the README-validated values; radius_m is a
  33. # metric radius, so on arbitrary-scale COLMAP clouds (plain video, no ARKit)
  34. # loosen it (raise radius_m / lower radius_nb_points) if cleaning wipes points.
  35. CHUNK_SIZE_FACTOR = os.environ.get("GENRECON_CHUNK_SIZE_FACTOR", "1.08")
  36. STAT_STD_RATIO = os.environ.get("GENRECON_STAT_STD_RATIO", "3.0")
  37. RADIUS_NB_POINTS = os.environ.get("GENRECON_RADIUS_NB_POINTS", "7")
  38. RADIUS_M = os.environ.get("GENRECON_RADIUS_M", "0.2")
  39. PROJ_BATCH_VOXELS = os.environ.get("GENRECON_PROJ_BATCH_VOXELS", "2048")
  40. JOBS_DIR.mkdir(parents=True, exist_ok=True)
  41. # Stage order + the progress band each stage fills (start, end).
  42. STAGES = [
  43. ("frames", 5, 25),
  44. ("colmap", 25, 55),
  45. ("reconstruct", 55, 90),
  46. ("glb", 90, 100),
  47. ]