Lingbot-map: A 3D foundation model for reconstructing scenes from streaming data LingBot-Map, a feed-forward 3D foundation model for streaming scene reconstruction, achieves state-of-the-art performance at ~20 FPS on long sequences exceeding 10,000 frames. The model uses a Geometric Context Transformer with paged KV cache attention and has been released with evaluation benchmarks and demo scripts for multiple datasets. teaser.mp4 πŸ—ΊοΈ Meet LingBot-Map We've built a feed-forward 3D foundation model for streaming 3D reconstruction πŸ—οΈπŸŒ LingBot-Map has focused on: Geometric Context Transformer : Architecturally unifies coordinate grounding, dense geometric cues, and long-range drift correction within a single streaming framework through anchor context, pose-reference window, and trajectory memory. High-Efficiency Streaming Inference : A feed-forward architecture with paged KV cache attention, enabling stable inference at ~20 FPS on 518Γ—378 resolution over long sequences exceeding 10,000 frames. State-of-the-Art Reconstruction : Superior performance on diverse benchmarks compared to both existing streaming and iterative optimization-based approaches. Click to expand 2026-06-28 β€” Fixed an SDPA KV cache bug. The SDPA backend now performs better on long sequences . We still recommend the FlashInfer backend for the best performance. 2026-05-25 β€” πŸ“Š Evaluation benchmark released . We released the evaluation scripts for KITTI and Oxford Spires β€” see benchmark/ /Robbyant/lingbot-map/blob/main/benchmark for the pipeline, and runto prepare Oxford Spires data before evaluation. preprocess/oxford.py 2026-04-29 β€” πŸ“Ή Long-video demo released . We released a very-long-video example ~25 000 frames, 13-minute indoor walkthrough rendered with the offline pipeline β€” see Worked Example worked-example--long-indoor-walkthrough-25-000-frames-13-minutes for the command, flag rationale, and rendered output. 2026-04-27 β€” πŸš€ LingBot-Map accelerated . Pull the latest main and run python demo.py --compile ... or python gct profile.py --backend flashinfer --dtype bf16 --compile to verify on your hardware. 2026-04-24 β€” Fixed a FlashInfer KV cache bug where --keyframe interval 1 silently cached non-keyframes. You should now see better pose and reconstruction quality when running with more than 320 frames . - βœ… Release evaluation benchmark - βœ… Oxford Spires dataset - βœ… KITTI dataset - βœ… VBR dataset - βœ… Droid-W dataset - βœ… TUM-D dataset - βœ… 7-scenes dataset - βœ… ETH3D dataset - βœ… Tanks and Temples dataset - βœ… NRGBD dataset - βœ… Release demo scripts - βœ… Indoor long-video demo Featured indoor walkthrough -featured-indoor-walkthrough-25-000-frames-13-minutes - βœ… Outdoor long-video demo - βœ… LingBot-World demo Worked example worked-example--lingbot-world-scenes - βœ… Aerial long-video demo - βœ… Indoor long-video demo 1. Create conda environment conda create -n lingbot-map python=3.10 -y conda activate lingbot-map 2. Install PyTorch CUDA 12.8 pip install torch==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128 PyTorch 2.8.0 is the recommended version because NVIDIA Kaolin required by the batch rendering pipeline has prebuilt wheels for torch-2.8.0 cu128 . If you only need demo.py you may use a newer PyTorch, but the batch renderer then requires building Kaolin from source. For other CUDA versions, see PyTorch Get Started . 3. Install lingbot-map pip install -e . 4. Install FlashInfer recommended FlashInfer provides paged KV cache attention for efficient streaming inference. It is a pure-Python package that JIT-compiles CUDA kernels on first use, so a single wheel works across CUDA/PyTorch versions: pip install --index-url https://pypi.org/simple flashinfer-python --index-url https://pypi.org/simple is only needed if your default pip index is an internal mirror that doesn't have flashinfer-python . Optional For faster first-use, you can additionally install a CUDA-specific JIT cache: pip install flashinfer-jit-cache -f https://flashinfer.ai/whl/cu128/flashinfer-jit-cache/ . See FlashInfer installation for details. If FlashInfer is not installed, the model falls back to SDPA PyTorch native attention via --use sdpa . 5. Visualization dependencies optional pip install -e ". vis " | Model Name | Huggingface Repository | ModelScope Repository | Description | |---|---|---|---| | lingbot-map-long | | Robbyant/lingbot-map https://www.modelscope.cn/models/Robbyant/lingbot-map robbyant/lingbot-map https://huggingface.co/robbyant/lingbot-map Robbyant/lingbot-map https://www.modelscope.cn/models/Robbyant/lingbot-map robbyant/lingbot-map https://huggingface.co/robbyant/lingbot-map Robbyant/lingbot-map https://www.modelscope.cn/models/Robbyant/lingbot-map 🚧 Coming soon:we're training an stronger model that supports longer sequences β€” stay tuned. After installation, run your first scene with one command: python demo.py --model path /path/to/lingbot-map-long.pt \ --image folder example/courthouse --mask sky This launches an interactive viser https://github.com/nerfstudio-project/viser viewer at http://localhost:8080 . See Interactive Demo -interactive-demo-demopy below for the full set of scenes and flags, or jump to Offline Rendering Pipeline -offline-rendering-pipeline-demo renderbatch demopy for long-sequence batch rendering. Run demo.py for interactive 3D visualization via a browser-based viser https://github.com/nerfstudio-project/viser viewer default http://localhost:8080 . We provide four example scenes in example/ that you can run out of the box: courthouse scene python demo.py --model path /path/to/lingbot-map-long.pt \ --image folder example/courthouse --mask sky output pointcloud side by side.mp4 University scene python demo.py --model path /path/to/lingbot-map-long.pt \ --image folder example/university --mask sky output pointcloud side by side.mp4 Loop scene loop closure trajectory python demo.py --model path /path/to/lingbot-map-long.pt \ --image folder example/loop output pointcloud side by side.mp4 Oxford scene with sky masking outdoor, large scale scene python demo.py --model path /path/to/lingbot-map-long.pt \ --image folder example/oxford --mask sky output pointcloud side by side.mp4 Sequence is too long for the interactive viser viewer β€” this clip was rendered with the Offline Rendering Pipeline. See that section for the full command. We will provide more examples in the follow-up. Use --keyframe interval to reduce KV cache memory by only keeping every N-th frame as a keyframe. Non-keyframe frames still produce predictions but are not stored in the cache. This is useful for long sequences which exceed 320 frames We train with video RoPE on 320 views, so performance degrades when the KV cache stores more than 320 views. Using a keyframe strategy allows inference over longer sequences. . Dataset: Download the demo sequences from robbyant/lingbot-map-demo https://huggingface.co/datasets/robbyant/lingbot-map-demo/tree/main on Hugging Face. Example run on the travel sequence from the dataset above sky masking on, 4 camera optimization iterations, keyframe every 2 frames : python demo.py \ --image folder /path/to/lingbot-map-demo/travel/ \ --model path /path/to/lingbot-map-long.pt \ --mask sky \ --camera num iterations 4 \ --keyframe interval 2 output pointcloud side by side.mp4 Note on inference range.Our method does not perform state resetting by default, so the maximum inference range is bounded by the longest distance seen during training on the dataset. Beyond that distance, state resetting becomes necessary. If you observe pose collapse, switch to windowed mode --mode windowed β€” in most cases tuning --keyframe interval alone is enough and the rest of the windowed parameters can stay at their defaults. python demo.py --model path /path/to/lingbot-map-long.pt \ --video path video.mp4 --fps 10 \ --mode windowed --window size 128 --overlap keyframes 16 --keyframe interval 2 Sky masking uses an ONNX sky segmentation model to filter out sky points from the reconstructed point cloud, which improves visualization quality for outdoor scenes. Setup: Install onnxruntime required pip install onnxruntime CPU or pip install onnxruntime-gpu GPU faster for large image sets The sky segmentation model skyseg.onnx will be automatically downloaded from HuggingFace https://huggingface.co/JianyuanWang/skyseg/resolve/main/skyseg.onnx on first use. Usage: python demo.py --model path /path/to/checkpoint.pt \ --image folder /path/to/images/ --mask sky Sky masks are cached in