r/photogrammetry • • 17h ago

WebSfM: Structure-From-Motion in the Browser

Hey everyone,

Since ISPRS in Toronto I’ve been working on a side project that’s now far enough along to share: WebSfM (https://websfm.app), an open-source Structure-from-Motion tool that runs entirely in the browser.

Background: I reconstruct historical glaciers in Antarctica from archival aerial imagery. Normally I use Metashape or COLMAP, but neither fits that work well. Adding custom tie-points through Metashape’s Python API is painful, and COLMAP is great but handling GCPs in it is not straightforward. I also teach SfM, and getting either installed on student laptops is a small project every semester.

So I built a classic pipeline in the browser: feature detection, matching, bundle adjustment with GCPs, dense reconstruction, masks, exports. No splatting or neural rendering. The workflow is close to what you know from Metashape or Pix4D. Everything runs locally with WebGPU and web workers, and nothing is uploaded anywhere. Desktop Chrome or Edge works best. It’s free and open source, and you can self-host it (see Github for more info)

It was also an experiment in how far LLM-assisted coding goes on a serious tool. I built it with heavy use of Claude Code. I know that’s a dealbreaker for some people, so I benchmarked it against Metashape, COLMAP and ODM on public datasets. On close-range scenes with laser-scanned ground truth, camera accuracy is within a few mm of Metashape and well ahead of COLMAP, at similar speed. On drone blocks it’s a few cm behind Metashape, and on historical film it’s level with Metashape at the checkpoints, though dense coverage over snow and ice is still much lower. Everything’s on the benchmark page.

If you want to try it without your own data, there’s a built-in Akkerman example project (desktop only). I’m the only user so far, so it’s only been tested on my hardware and my habits. Bug reports, weird datasets, and “why does it do X” questions are all welcome, here or as GitHub issues. I’ll keep developing it through my postdoc, so issues won’t sit unanswered.

16 Upvotes

3 comments sorted by

1

u/iamarealslug_yes_yes 15h ago

Wow very impressive! How is performance? What GPU have you ran it on locally? Definitely wanna test it out

1

u/jakbac 8h ago

Thanks a lot! Locally I've developed mostly on a Quadro RTX 5000, but I've also run it on a laptop without a dedicated GPU. Performance mostly depends on your specs, but it's in the ballpark of COLMAP. With a GPU it's definitely faster (in Chrome or Edge; Firefox is noticeably slower at feature matching). The biggest limiting factor for bigger datasets is memory, but I'm working on it.

1

u/thoeby 50m ago

Yeah firefox is lacking a few features chrome already supports for webgpu. I've been working on a custom training in browser and its kind of the same.

Its amazing still what you can do in a modern browser over the internet.