sfmapi

An HTTP API for running Structure-from-Motion workflows without tying clients to one SfM engine.

sfmapi defines the server contract, long-running job model, progress streaming, chunked uploads that finalize into content-addressed blobs, sealed reconstruction snapshots, and SDK-facing endpoints. Concrete SfM engines live in backend packages and register with the server at startup.

Core idea

Client applications call the sfmapi REST API. The server records long-running work as jobs and tasks, workers drive a registered backend engine, and task runners seal readable reconstruction outputs into durable snapshots.

Choose your path

Try it quickly

Run a local server with SQLite, filesystem blobs, and an in-process worker.

Call the API

Create resources, submit long-running jobs, watch progress, and read sealed reconstruction snapshot files. Inspect backend-native action catalogs and backend option schemas when a deployment exposes engine-specific tools or provider-specific stage options.

Use a client library

Use generated Python/TypeScript surfaces plus the header-only C++17 client, all checked against the same wire fixtures.

Build or operate

Implement the smallest backend protocol that fits, advertise portable capabilities only for supported stages, expose backend-native actions and config schemas, deploy web/worker tiers, and configure storage and auth.

Specification and releases

Look up the normative contract and project-level release history.

More entry points

Status

Pre-release. API shapes may change before 1.0. The current tree ships the REST server, Python/TypeScript/C++ clients, SQLite and Postgres support, and CI coverage for the wire contract.

This repository ships no concrete SfM backend on purpose; it is the contract. Backend implementations such as pycolmap, OpenSfM, hloc, or custom forks live in their own packages.