You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(reconstruct/train): default to direct COLMAP + cap undistort size for GPU-bound training
Two defects that blocked the first LichtFeld-native E2E on real raw capture:
1. reconstruct(): the bundled SplatReady plugin derives its status-file path via
str.replace("_run_config.json","_progress.txt"). stages.py named the config
"splatready_config.json" (no such substring) so the status path COLLIDED with
the config and the runner clobbered its own config mid-run (JSONDecodeError on
reuse); the runner also exits 0 on failure, so errors were swallowed. Now
defaults to the transparent _run_colmap_direct path; SplatReady stays opt-in
behind config.reconstruct.use_splatready with the naming bug fixed and stdout
captured in the error.
2. _run_colmap_direct(): image_undistorter omitted --max_image_size, so undistorted
training images were full 36MP. LichtFeld CPU-downscales anything wider than its
--max-width (3840px) on EVERY load (that path is not disk-cached), ~5s/image,
starving the GPU — 30k iters projected to hours at 0% GPU util. Now undistorts at
config.ingest.max_image_size (2000px), correct intrinsics baked in; training runs
GPU-bound at 99% util (30k igs+ in minutes).
Validated on rawsForDev (55 DNG): decode 55/55 -> select 50 -> COLMAP 50/50 (100%),
10.4k pts -> LichtFeld igs+ training GPU-bound.
Co-Authored-By: claude-flow <ruv@ruv.net>
0 commit comments