RustFS storage
Pindeck stores durable media in RustFS. Uploads may land in Convex temporarily, but originals, previews, and derivatives are persisted through the RustFS media API.Required environment
Set these in the Convex backend environment:Object layout
Pindeck writes to thepindeck bucket with object keys rooted at media-uploads/:
Color sampling contract
Every image entering the upload review flow must have five sampled colors before tags are rendered or the item is finalized.- Local uploads sample colors in the browser before metadata is applied.
- RustFS
/process-imagereturnscolorswith the original, preview, and derivative URLs. - Convex server-side palette jobs first try
sharp; ifsharpis unavailable on the runtime, they call RustFS/palette. - VLM-provided colors are metadata only and must not replace sampled image colors.
Discord ingest
Discord imports use the same pipeline. Reacting with the configured pin emoji queues the source image, Convex persists the image through the RustFS media API, then moderation/generation continues from the RustFS-backed URLs. After a Discord import is approved, it enters the sameReview & Finalize draft lane as a local upload. At that point the draft row should already have:
- RustFS original, preview, and derivative URLs
- five sampled colors
- AI title, description, tags, category, group, style, shot, and project fields
- the same
Generate Variationscontrol used by local uploads