Skip to content
Thrivbe
← All experiments
In progressStarted October 26, 2026Updated October 26, 2026

Can a 58 second phone video of a white-walled office become a usable 3D Gaussian splat on our own GPU box, without a paid scanning service?

Scanning My Office into a 3D Splat on the DGX Spark (and Why COLMAP Failed)

In progress. COLMAP, the usual camera-pose step, failed on a white-walled room: it used only 68 of 292 frames and split the scene into fragments. LingBot-Map placed all 175 frames in about 5 minutes on a 20 GB GPU and gave a coherent closed room. Splat training from both pose sets is still running, so the final quality comparison is not done yet.

  • NVIDIA DGX Spark
  • COLMAP
  • 3D Gaussian Splatting
  • LingBot-Map
  • Docker

Relevant services: Thrivbe AI

Hypothesis

A phone video of a room should be enough to build a 3D splat we can walk around and redecorate. Hosted tools exist, but the one we looked at needs a sign-in and paid credits and another is waitlist-only. Our DGX Spark can train a splat for free, so the question is whether it can do the whole job, from a 58 second portrait video of an almost empty office to a splat.

What we built

  • Run 1: the existing pipeline. COLMAP for camera poses and the original Inria 3D Gaussian Splatting trainer, in a container on the Spark. Exhaustive matching on frames at 3 fps. We stopped it.
  • Run 2: sequential matching. Frames at 5 fps, sequential matching, largest model kept. It registered only 68 of 292 frames. Training on that partial room is running and was at 47% at last check. We left it running on purpose, as the baseline for comparison.
  • Run 3: LingBot-Map for poses. A feed-forward model that estimates camera poses and a point cloud directly from the frames. It placed all 175 frames in about 5 minutes on a 20 GB GPU. The previews show a closed room, straight walls, the door and an angled wall.
  • A converter. A small script turns the LingBot poses into a COLMAP-format model, so the same splat trainer can use them. Training on 518x518 frames was at 40% at last check, with about 2 hours left.
  • Getting LingBot-Map to run on the Spark. It needed scaled dot-product attention (--use_sdpa), cuDNN disabled, a custom export script, and a resumed download of the model weights.

Learnings

  • White walls starve feature matching. COLMAP finds poses by matching visual features between frames. A plain white room has few, so the video fell apart into fragments, and sequential matching kept only 68 of 292 frames.
  • A learned pose model does not need texture the same way. LingBot-Map placed every frame it was given, and the result looks like the real room. Whether it also trains into a better splat is still open.
  • Check model weights after downloading. The weights needed a resumed download before the model would load.
  • Keep the weak run going. Letting the 68-frame run finish gives a real side-by-side instead of a claim.

Log

  • 2026-10-26: Researched hosted options (they need paid credits or a waitlist) and chose the free Spark route. COLMAP runs 1 and 2 failed to cover the room. LingBot-Map placed all 175 frames in about 5 minutes. Both splat trainings were running at the end of the session. Next: clean the finished splat, compare it with the COLMAP one, and if the shape is good but blurry, retrain at full resolution. The comparison render is pending, so this entry has no quality result yet.

Talk to Thrivbe AI