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¶
Run a local server with SQLite, filesystem blobs, and an in-process worker.
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 generated Python/TypeScript surfaces plus the header-only C++17 client, all checked against the same wire fixtures.
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.
Look up the normative contract and project-level release history.
More entry points¶
Authentication and error handling for production callers.
Storage and jobs and progress for backend and operator context.
Plugin hub checklist for the multi-provider registry, CLI, admin API, and backend app contract.
Configuration, multi-tenancy, and CLI/scripts for deployments.
Changelog for release history and project updates.
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.