KaritKarma / Storage
Foveio
The archive, the darkroom, and the news desk. One Rust core.
Foveio replaces the Adobe Bridge, Camera RAW, and Lightroom workflow with one platform you actually own: non-destructive RAW develop in the browser on WASM and WebGPU, CLIP search across stills and video, face recognition, a real newsroom editorial workflow, and an asset picker any CMS can embed. Pure Rust at the core, ONNX sidecars at the edge, your infrastructure underneath.
- 5
- Rust crates
- 7
- Sidecars
- 38
- SQL migrations
- 443
- Rust tests
engine to picker
6 ONNX models + CRDT collab
one Postgres 18 schema
#[test] + #[tokio::test]
The browser develop module. Same engine native (Metal/Vulkan) and in WASM.
001 · Definition
What is Foveio?
Foveio is KaritKarma's professional digital asset management platform: a pure-Rust core (Axum API, WASM/WebGPU edit engine in the browser) with Next.js surfaces and ONNX machine-learning sidecars. It covers the full arc from camera card to published page: ingest, RAW develop, semantic search, faces, editorial review with rights clearance, and an embeddable picker that makes it the media layer for any CMS. It is the ground-up successor to KaritKarma's internal newsroom DAM, rebuilt from zero in Rust.
Status, stated plainly: Foveio is launching. The platform is built and CI-gated end to end, and the product site at foveio.com is live. Tenant onboarding opens through early access; we do not claim production deployments we do not have.
002 · The engine
Edit RAW in the browser. Ruin nothing.
One Rust engine decodes RAW with rawler and develops it parametrically on wgpu. Natively it runs Metal and Vulkan; compiled to WASM it runs WebGPU in the tab. Edits are recipes, originals are immutable, and a Lightroom catalog import path brings an existing library in with its structure intact.
Source · crates/ in the Foveio workspace
foveio-engine
RAW decode + parametric develop
rawler 0.7 RAW decoding and the non-destructive edit pipeline on wgpu 29. Native builds run Metal and Vulkan; the same engine compiles to the browser.
foveio-wasm
Browser bindings
wasm-bindgen bindings that put the engine on WebGPU inside the browser tab. CI enforces a WASM size budget on every commit.
foveio-server
Axum API
The Axum 0.8 API surface over PostgreSQL 18 with VectorChord embeddings, Redis, and NATS JetStream. Owns all 38 SQL migrations.
foveio-worker
Ingest + processing
Background ingest, blake3 content addressing, rendition generation, and the dispatch loop that feeds the enrichment sidecars over NATS.
foveio-picker
Embeddable Web Component
The asset picker any CMS editor can embed: search the library, pick an asset, get a governed reference back. The media layer as a component.
003 · The constellation
Five apps. Seven sidecars. One library.
Every surface is a Next.js app over the same Axum API; every intelligence feature is a self-hosted sidecar over NATS. Nothing phones a third-party SaaS to think.
app.foveio.com
The DAM workspace
Library, semantic search, faces, timeline, map, culling, and the in-browser RAW develop module. Where photographers and editors live.
console.foveio.com
Operator control plane
Cross-tenant provisioning, configuration, and monitoring.
dash.foveio.com
Tenant administration
Members, storage and AI provider settings, library policy.
foveio.com
LiveMarketing site, live now
The public product site. The first Foveio surface on the open internet.
picker
CMS embed surface
The host app for the embeddable picker Web Component.
The sidecar fleet
Python FastAPI and Node services, each owning one model and one job. Swap or disable any of them per tenant; the library keeps working.
| Service | Model | Job |
|---|---|---|
| embed-sidecar | CLIP + BGE | Semantic embeddings for natural-language search |
| face-sidecar | InsightFace | Face detection and recognition |
| mask-sidecar | Segmentation | Subject masks for selective edits |
| denoise-sidecar | NAFNet | High-ISO denoising |
| transcription-sidecar | Whisper | Speech-to-text for audio and video |
| clip-video-sidecar | CLIP | Frame-level video search |
| collab | Hocuspocus Y.js | Real-time annotation CRDT over WebSocket |
Scroll for full table
004 · Ingest to publish
From camera card to published page.
Every asset crosses the same five stages whether it arrives from a field photographer, a Lightroom migration, or a wire feed. The pipeline is owned end to end inside the workspace, with editorial judgment as a built-in stage, not an email thread.
- Step 01
Ingest and decode
Camera cards, drops, and Lightroom catalog imports land in the worker. blake3 content addressing deduplicates; rawler decodes RAW formats at the gate.
- Step 02
Metadata governance
Metadata is a governed, first-class model, not a JSON afterthought. Byline, rights, and captions survive every step of the pipeline.
- Step 03
ML enrichment
The sidecar fleet writes back CLIP and BGE embeddings, recognized faces, segmentation masks, and Whisper transcripts. All self-hosted; no third-party AI APIs.
- Step 04
Editorial review
Submission, review, and rights clearance run as a real workflow, with kill notices and wire service integration for the newsroom desk.
- Step 05
Publish anywhere
The picker Web Component hands governed asset references to any CMS. Delivery rides S3-compatible storage behind a configurable provider.
005 · Search
Search what you remember, across stills, video, and speech.
Embeddings live in the same Postgres as the assets, halfvec columns under VectorChord. No second search cluster to babysit.
Stills, by description
embed-sidecarCLIP and BGE embeddings index every image for natural-language search: query what is in the picture, not what someone remembered to tag.
Video, by frame
clip-video-sidecarThe CLIP video sidecar indexes footage at frame level, so the one usable second inside an hour of b-roll is findable by describing it.
Speech, as text
transcription-sidecarWhisper transcription turns interviews and pressers into searchable text tied back to the timeline position where it was said.
People, once
face-sidecarInsightFace recognition keeps one person entity across the archive: name a subject once, find every appearance across years.
006 · Platform
Identity, authorization, comms: inherited, not rebuilt.
Foveio ships on the KaritKarma shared core. Every integration is environment-configured under the FOV_ prefix and tenant-tunable from the dash; nothing is hardcoded to one vendor.
Wenme
OAuth 2.1 + PKCE sign-in with EdDSA validation against identity.wenme.net JWKS, with redirect URIs for the app, console, and dash surfaces.
Darwan
Fail-closed authorization on the API and inside the collaboration sidecar. No Darwan decision, no access.
BitsPath
Email and SMS notifications for review requests, clearances, and editorial events ride the KaritKarma communications layer.
Storage providers
SeaweedFS in development, Cloudflare R2 for delivery, any S3-compatible store in between. Tenant-configurable behind one trait, never hardcoded.
Launch status
Built, gated, launching.
Every milestone in the build plan is complete and held behind CI gates: a no-stub check, clippy, the full cargo workspace test suite, frontend tests, and a WASM size budget. The marketing site at foveio.com is live; the platform opens to tenants through early access. No production-tenant claims until there are production tenants.
007 · Questions
Frequently asked.
Mirrored in JSON-LD so search engines and answer engines can lift them verbatim.
What is Foveio?
Can Foveio really edit RAW files in the browser?
How does search work across photos, video, and speech?
Can we migrate from Lightroom?
What makes Foveio a newsroom tool and not just a photo library?
Is Foveio available today?
Early access
Bring your archive home.
A 30-minute technical walkthrough of the browser develop engine, the search triad, and the editorial workflow, on a seeded library. First-wave tenants shape the onboarding.