Skip to content
Foveio

KaritKarma / Storage

Foveio

CORE · Rust 2024ENGINE · WASM/WebGPUSITE · foveio.com
Digital asset management

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

engine to picker

7
Sidecars

6 ONNX models + CRDT collab

38
SQL migrations

one Postgres 18 schema

443
Rust tests

#[test] + #[tokio::test]

develop · DSC_0481.NEFnon-destructive
Exposure+0.35 EV
White balance5600 K
Highlights-24
Shadows+18
Clarity+8
Denoise (NAFNet)ISO 6400
rawler decodewgpu 29 · WebGPUedits as recipes

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

Live

Marketing 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.

ServiceModelJob
embed-sidecarCLIP + BGESemantic embeddings for natural-language search
face-sidecarInsightFaceFace detection and recognition
mask-sidecarSegmentationSubject masks for selective edits
denoise-sidecarNAFNetHigh-ISO denoising
transcription-sidecarWhisperSpeech-to-text for audio and video
clip-video-sidecarCLIPFrame-level video search
collabHocuspocus Y.jsReal-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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. Step 05

    Publish anywhere

    The picker Web Component hands governed asset references to any CMS. Delivery rides S3-compatible storage behind a configurable provider.

PostgreSQL 18 + VectorChordNATS JetStreamblake3 addressingMetadata governanceBengali i18n shipped

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-sidecar

CLIP 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-sidecar

The 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-sidecar

Whisper transcription turns interviews and pressers into searchable text tied back to the timeline position where it was said.

People, once

face-sidecar

InsightFace 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.

FOV_WENME_*

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.

FOV_DARWAN_*

Darwan

Fail-closed authorization on the API and inside the collaboration sidecar. No Darwan decision, no access.

FOV_BITSPATH_*

BitsPath

Email and SMS notifications for review requests, clearances, and editorial events ride the KaritKarma communications layer.

StorageProvider

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.

Rust test functions443
SQL migrations38
Docker services in one compose18
CI gatesno-stubs · clippy · tests · WASM size

007 · Questions

Frequently asked.

Mirrored in JSON-LD so search engines and answer engines can lift them verbatim.

What is Foveio?
Foveio is KaritKarma's professional digital asset management platform, built as a pure-Rust core (Axum API, WASM/WebGPU edit engine) with Next.js surfaces and ONNX machine-learning sidecars. It replaces the Adobe Bridge plus Camera RAW plus Lightroom workflow and adds what those tools never had: a newsroom editorial workflow with rights clearance, frame-level video search, speech transcription search, and an embeddable asset picker for any CMS. It is the ground-up successor to KaritKarma's internal newsroom DAM.
Can Foveio really edit RAW files in the browser?
Yes. The foveio-engine crate decodes RAW formats with rawler and runs a non-destructive parametric develop pipeline on wgpu. Compiled to WebAssembly with the WebGPU backend, the same engine runs inside the browser tab, so there is no upload-to-edit round trip and no second engine to keep in sync. Native builds use Metal and Vulkan; CI enforces a WASM size budget.
How does search work across photos, video, and speech?
Three self-hosted sidecar services cover the three media types. CLIP and BGE embeddings make stills searchable by natural-language description, the CLIP video sidecar indexes video at frame level, and Whisper transcription makes spoken words inside audio and video searchable text. Face recognition through InsightFace adds a person dimension on top. All of it runs as ONNX sidecars on your own infrastructure, with AI providers tenant-configurable.
Can we migrate from Lightroom?
Foveio ships a Lightroom catalog import path: the workspace bundles SQLite specifically to read Lightroom catalogs, so an existing library arrives with its structure rather than as a flat dump of files.
What makes Foveio a newsroom tool and not just a photo library?
The editorial workflow is built in, not bolted on: submission, review, rights clearance, kill notices, and wire service integration run as first-class states. Metadata is a governed model with real fields, the collaboration sidecar gives editors real-time annotations over a CRDT, and Bengali internationalization shipped as its own milestone. Sign-in is Wenme OAuth 2.1, authorization is fail-closed Darwan, and notifications ride BitsPath.
Is Foveio available today?
Foveio is launching now. The platform is built and CI-gated end to end: 5 Rust crates, 5 Next.js apps, 7 sidecars, 38 SQL migrations, and 443 Rust test functions behind no-stub, clippy, and full-workspace test gates. The marketing site at foveio.com is live; tenant onboarding opens through early access. Contact KaritKarma to get in the first wave.

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.

RAW develop in the tab
Wenme + Darwan, fail-closed
Storage providers, your pick
Picker embeds in any CMS