Skip to content

donalleniii/lingbot-desktop-mac

Repository files navigation

Lingbot-Desktop (Mac)

Also published at the Asteria Research and Technology (A.R.T.) home: https://github.com/Asteria-Research-and-Technology/lingbot-desktop-mac.

A minimal, Mac-native desktop front end and custom 3D viewer for Lingbot-Map's streaming 3D reconstruction. Drag a video into the window and, a few minutes later, explore a 3D point cloud and the solved camera trajectory in a customized viser viewer. Everything runs locally on Apple Silicon (MPS). No cloud, no remote GPU, by design.

What it is, precisely: the output is a point cloud in a customized viser viewer. It is not Gaussian splatting. The reconstruction model is Lingbot-Map's work. My contribution is the Mac wrapper: the drag-in workflow, the FastAPI/desktop shell, the installer, and the viewer UX (upright auto-alignment, hero framing, a playback strip, and point-cloud/splat-format save buttons).

Built on Lingbot-Map by the Robbyant Team. Paper: "Geometric Context Transformer for Streaming 3D Reconstruction," Chen et al., arXiv:2604.14141. This project is an independent wrapper and is not endorsed by or affiliated with the Robbyant Team.

Developed with Asteria Research and Technology (A.R.T.).


License

Released as open source under the Apache License 2.0, which permits commercial and non-commercial use. It is intended as a community/research release. Note that the model weights are downloaded separately and may carry their own, possibly more restrictive, terms, so review them before use. All I ask in return is attribution.

See LICENSE for the full text and NOTICE for attribution and the licenses of the upstream projects (one of which, VGGT, is non-commercial).


Quick start

One line, on an Apple Silicon Mac:

curl -fsSL https://raw.githubusercontent.com/donalleniii/lingbot-desktop-mac/main/install.sh | bash

The installer is conservative: it detects Homebrew, ffmpeg/ffprobe, and a Python 3.10 toolchain, and asks before installing anything. It then creates a virtual environment, installs Apple-Silicon PyTorch and pinned dependencies, clones Lingbot-Map at a pinned commit and applies the Mac/MPS patches, and downloads the checkpoint (after showing you its license note). It never installs FlashInfer or kaolin and never builds CUDA extensions.

Prefer to read before you run? You should. Open install.sh, or follow the manual steps below.

Manual install (the trust-conscious path)

# 1. Clone this repo
git clone https://github.com/donalleniii/lingbot-desktop-mac.git ~/Projects/lingbot-desktop
cd ~/Projects/lingbot-desktop

# 2. Python 3.10 venv + pinned deps (uv recommended; provisions Python 3.10 for you)
uv venv --python 3.10 .venv
uv pip install --python .venv/bin/python -r requirements-lock.txt

# 3. Clone upstream Lingbot-Map at the pinned commit and apply the Mac/MPS patches
git clone https://github.com/Robbyant/lingbot-map.git app
git -C app checkout 7ae07810ddac6f449f856ca0f6260ab3e1dcaa84
git -C app apply "$(pwd)/patch/lingbot-map-mps-and-viewer.patch"   # run from the repo root
cp patch/presentation.py app/lingbot_map/vis/presentation.py
uv pip install --python .venv/bin/python --no-deps -e app

# 4. Download the checkpoint (~4.63 GB) and verify it (see "Model weights" below)
mkdir -p checkpoints
curl -fL -o checkpoints/lingbot-map-long.pt \
  https://huggingface.co/robbyant/lingbot-map/resolve/main/lingbot-map-long.pt
shasum -a 256 checkpoints/lingbot-map-long.pt
# expect: 832bc82cbae0bc9bbe946ef5ee1f7226abd8c0e183ccf8beddbb3d133576f409

(ffmpeg is used to read a clip's duration for frame estimates: brew install ffmpeg.)


Launch and use

cd ~/Projects/lingbot-desktop
./launch.command      # starts the server, opens http://localhost:8000

launch.command is also double-clickable in Finder.

  1. Drop a video anywhere in the window (or click Choose Video). It previews immediately and never leaves your Mac.
  2. Check the estimated time (the sampling rate is chosen automatically; override it under Options) and click Create 3D Scene.
  3. While it runs, a live progress bar shows the stage, frame count, and time remaining.
  4. When the scene is ready, the 3D viewer fills the window: orbit, use the bird's-eye view, the ground plane, and the rotation gizmo. Save the point cloud (PLY) from the viewer; a splat-format PLY is also written for import into splat viewers (it is converted from the point cloud, not trained Gaussian splatting).

Capture tip (this matters a lot)

Reconstruction quality depends on parallax. Translate the camera through the scene, walk it around and past objects, and avoid pure rotations (panning in place gives the model almost nothing to triangulate). Steady, deliberate motion beats fast, shaky motion.


Performance and hardware caveat

Developed and measured on the dev machine: an Apple Silicon M5 Max MacBook Pro with 128 GB unified memory. Performance and reconstruction time will vary on other hardware, likely significantly on machines with less unified memory or weaker GPUs. Treat the numbers below as "measured on the dev machine; your mileage may vary."

Verdict: CLEAN_MPS_SLOW, roughly 0.3 to 1.0 frames/sec. It runs on clean Apple-Silicon MPS (no CUDA, no FlashInfer, no CPU-fallback crutch needed) and reconstructs real handheld footage into a coherent point cloud, but it is usable-but-slow: "drop a clip in, wait a few minutes, then explore," not interactive.

Measured on the dev machine:

Input Mode Result
Bundled loop scene, 16 frames streaming, clean MPS ~1.9 fps
Bundled loop scene, 237 frames (294x518) windowed 242 s to viewer, ~1.0 fps
Real handheld clip, 100 frames (portrait cropped to 518x518) windowed, clean MPS ~236 s total (~3.9 min), ~0.45 fps, coherent

Notes:

  • Portrait phone footage is the slow case: the model crops it to a 518x518 square, which is more tokens per frame than a landscape crop.
  • Plain streaming mode does not scale on MPS (per-frame cost balloons and long runs get killed), so the app auto-switches to windowed mode with small windows above roughly 48 sampled frames.
  • It is not real-time and is not meant to be.

Full build log, the three MPS code patches, and how these numbers were obtained are documented in the developer's local notes.


Model weights

The reconstruction checkpoint is downloaded separately from Hugging Face and is not part of this repository.

The checkpoint carries its own license terms, which may be more restrictive than this project's Apache-2.0 code. Its model lineage includes VGGT, which is released under a non-commercial research license. Review the checkpoint's license on Hugging Face before use.


What is (and isn't) in this repo

This repo contains only original wrapper code plus a patch set. It does not re-host Lingbot-Map's source or the model weights; the installer fetches those.

lingbot-desktop/
├── server.py                # FastAPI backend (port 8000)          [original]
├── desktop_app.py           # pywebview macOS shell                [original]
├── launch.command           # double-click launcher                [original]
├── web/index.html           # single-page UI                       [original]
├── assets/                  # app icon + glass.css                  [original]
├── patch/
│   ├── lingbot-map-mps-and-viewer.patch  # my changes to upstream demo.py, rope.py, viewer
│   └── presentation.py                   # new module, mine, copied into lingbot_map/vis/
├── install.sh               # conservative installer
├── requirements-lock.txt    # fully pinned dependencies
├── LICENSE                  # Apache 2.0
└── NOTICE                   # attribution + upstream licenses

# created by the installer, not committed:
#   app/          cloned Robbyant/lingbot-map at the pinned commit, patched
#   checkpoints/  lingbot-map-long.pt (downloaded from Hugging Face)
#   .venv/        Python 3.10 environment

Per Section 4(b) of the Apache License 2.0, the files modified relative to upstream are listed in NOTICE and expressed as a patch in patch/.


Acknowledgments

  • Lingbot-Map by the Robbyant Team (Apache 2.0), the streaming 3D reconstruction model this wraps.
  • The upstream stack Lingbot-Map credits: VGGT (non-commercial research license), DINOv2 (Apache 2.0), and FlashInfer (Apache 2.0, CUDA-only and not used by this Mac build).
  • viser for the 3D viewer.

About

Minimal Mac-native desktop front end and 3D point-cloud viewer for Lingbot-Map streaming 3D reconstruction. Open source, Apache-2.0.

Resources

License

Stars

79 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors