Prerequisites
Before you begin, make sure you have:- Bun (
[email protected]or later) — Pindeck uses Bun as its package manager and runtime - A Convex account and a production deployment at convex.dev
- An OpenRouter API key for VLM-powered image analysis
- A fal.ai API key for cinematic image variation generation
Pindeck is production-first —
dev, build, serve, and deploy:convex all verify your Convex URL targets the production deployment before running. Commands fail immediately if .env.local points to a non-production deployment.Set up the project
Set your Convex deployment URL
Open This value is validated before every
.env.local and set VITE_CONVEX_URL to your production Convex deployment URL. Use the .convex.cloud URL — not the .convex.site URL.build, serve, and deploy:convex run. If it is missing or points to a non-production deployment, the command exits immediately.Deploy Convex functions
Push your backend functions to your production Convex deployment:This verifies your production target first, then runs
convex deploy.Build and serve the app
Build the production bundle and start the preview server:The app is available at http://localhost:4173.
bun run serve automatically kills any existing process on port 4173 before starting.Sign in
Pindeck supports two authentication methods:- Password — register with an email address and password
- Anonymous — sign in instantly without credentials
Upload your first image
- After signing in, open the Upload tab.
- Drag and drop image files onto the upload area, or click to open the file picker.
- Fill in any metadata (title, category, group) — or leave fields blank and let AI fill them in. Click Upload to submit. Images start in
draftstate.
Watch AI analysis run
After upload, Pindeck automatically triggers analysis via OpenRouter:- A Vision Language Model (default:
qwen/qwen3-vl-8b-instruct) generates a title, description, tags, a 5-color palette, visual style, category, and mood board suggestions. - Image status moves from
draft→processing(AI analysis) → review queue →activeonce you finalize the upload. - Once active, the image appears in the Gallery with all generated metadata visible in the detail modal.