Skip to main content

Uploading images

Images enter Pindeck through Upload in the app (sidebar U or top bar). Every source converges on the same library record and storage path.

Ingest paths

For step order in the product, see Product workflow. For the full backend diagram, see Architecture overview.

What happens after upload

  1. Convex stores the upload handle and creates an images row.
  2. Trigger (when enabled) runs finalize upload: persist to RustFS, generate preview/webp derivatives.
  3. Palette extraction fills images.colors.
  4. VLM analysis (OpenRouter) fills group, genre, shot, style, and tags when configured.
  5. Status becomes active — the image appears in Gallery and Table.

RustFS object path format

Objects are written through the RustFS media API under the pindeck bucket. See RustFS storage.

Image metadata

Every image record includes:

Persistence tracking

Each image tracks its durable storage status:

Backfill failed uploads

Reschedule persistence for uploads stuck in Convex storage:
This targets images where sourceType = "upload", storageProvider = "convex", and storageId is still present.

Sources

  • Direct upload — Upload → Local Upload tab
  • Discord — Bot emoji / commands → review queue (Discord bot)
  • Pinterest — Import tab or RSS sidecar
  • AI — Variations from the image drawer (AI generation)

Next steps in the app