Self-hosted media asset management — your originals stay yours.
Photo and video professionals are stuck between two unappealing options. Cloud platforms (Lightroom Cloud, Pixieset, SmugMug) are convenient, but you don’t own the infrastructure, you pay forever, and migration is painful. Local catalogs (Lightroom Classic, Photo Mechanic) are fast and offline, but built for a single user — anything collaborative ends in Dropbox, FTP, or a tangle of shared drives.
Ingest Studio sits between the two: a self-hosted server that gives a small team the convenience of a shared cloud, with the ownership and longevity of local storage. Your originals stay yours. No subscription. No upload limits. The server runs on a Mac mini, a NAS, or a Linux box in the studio — anyone connects over LAN or VPN.
Pro is gated by an MSBuild property (IncludePro=true) and discovered through an IIngestModule interface. Solo must remain functional standalone — no Pro reference can leak into the open-source build.
Server, sync daemon, CLI, desktop app. They communicate only through the server’s REST API — nothing else talks to Postgres, nothing shares filesystem state. Originals are content-addressed by SHA-256 and immutable after import. ML inference (CLIP via ONNX Runtime) runs in the .NET server process; no separate Python worker. Embeddings live in pgvector.
.NET 10 / ASP.NET Core. REST API, Postgres, content-addressed storage. Background work (scan, thumbs, ML embeddings) runs in-process.
.NET Worker Service per editor machine. Watches XMP sidecars and translates Lightroom ↔ server. REST only.
.NET global tool `ingest`. Shares core libraries with the daemon. Power-user surface.
Tauri v2 shell + React/Vite UI. The primary interface. REST only — never touches Postgres directly.