Skip to main content
Pindeck uses two separate configuration surfaces: the Convex Project Settings dashboard for backend secrets, and a local .env.local file (or Vercel environment settings) for frontend variables.
Convex backend variables must be set in the Convex Project Settings dashboard under Environment Variables. Do not put these values in .env.local — Convex functions running server-side cannot read your local env file.

Convex backend

Set the following variables in your Convex project’s Settings → Environment Variables dashboard.

Required

JWT_PRIVATE_KEY
string
required
RSA private key used by Convex Auth to sign JWTs. Generate an RSA key pair and paste the private key here. The value should begin with -----BEGIN PRIVATE KEY-----.
OPEN_ROUTER_KEY
string
required
OpenRouter API key used by Convex actions to call the Vision Language Model for automatic image analysis. This is the primary variable name checked by the backend. OPENROUTER_API_KEY is also accepted as a fallback — set either one.
FAL_KEY
string
required
fal.ai API key used by Convex actions to generate cinematic image variations via fal.ai Nano Banana Pro.
INGEST_API_KEY
string
required
Bearer token that protects the Discord ingest HTTP endpoints (/ingestExternal, /discordQueue, /discordModerate). Set the same value in your Discord bot’s environment.
NEXTCLOUD_WEBDAV_BASE_URL
string
required
Base URL of your NextCloud WebDAV endpoint, including the user path. Example: https://cloud.example.com/remote.php/dav/files/username
NEXTCLOUD_WEBDAV_USER
string
required
NextCloud username used for WebDAV authentication.
NEXTCLOUD_WEBDAV_APP_PASSWORD
string
required
NextCloud app password for WebDAV authentication. Generate this in NextCloud under Settings → Security → App passwords.
AUTH_GOOGLE_ID
string
required
Google OAuth client ID. Create credentials at console.cloud.google.com. Required if Google sign-in is enabled.
AUTH_GOOGLE_SECRET
string
required
Google OAuth client secret corresponding to AUTH_GOOGLE_ID.
AUTH_GITHUB_ID
string
required
GitHub OAuth App client ID. Create an OAuth App at github.com/settings/developers. Required if GitHub sign-in is enabled.
AUTH_GITHUB_SECRET
string
required
GitHub OAuth App client secret corresponding to AUTH_GITHUB_ID.
SITE_URL
string
required
Public URL of your deployed Pindeck app, without a trailing slash. Used by Convex Auth to construct OAuth redirect/callback URLs. Example: https://pindeck.app

Optional

OPENROUTER_VLM_MODEL
string
default:"qwen/qwen3-vl-8b-instruct"
The OpenRouter model ID to use for Vision Language Model image analysis. Defaults to qwen/qwen3-vl-8b-instruct if not set.
OPENROUTER_PROVIDER_SORT
string
Controls provider selection order when calling OpenRouter. Accepted values: price, throughput, or latency.
DISCORD_STATUS_WEBHOOK_URL
string
Discord webhook URL for posting status notifications when images are queued, approved, rejected, or generated. Create a webhook in your Discord channel under Integrations → Webhooks.
NEXTCLOUD_UPLOAD_PREFIX
string
default:"pindeck/media-uploads"
Storage path prefix inside your NextCloud instance where uploaded files are written. Defaults to pindeck/media-uploads. Uploaded files are organized as <prefix>/YYYY/MM_DD/original/<file>.
NEXTCLOUD_PUBLIC_SHARE_TOKEN
string
Public share token for the upload root folder in NextCloud. When set, Pindeck derives browser-safe image URLs from this token using public.php/dav/files/<token>/... paths, avoiding per-file share creation.
NEXTCLOUD_UPLOAD_SHARE_TOKEN
string
A separate write-enabled share token used by the backend for uploading files. Recommended when you want to keep the public read token separate from the write token.
NEXTCLOUD_PUBLIC_SHARE_PATH
string
Optional override for the shared root path. Defaults to the value of NEXTCLOUD_UPLOAD_PREFIX when not set.
NEXTCLOUD_PUBLIC_BASE_URL
string
Optional override for the NextCloud base URL used when constructing public image URLs. Set this when NextCloud is served behind a reverse proxy with a different hostname.

Other optional backend variables

GOOGLE_API_KEY
string
Google AI (Gemini) API key. Reserved for potential future use with Google’s generative AI models. Not required for current image analysis or generation features.

Frontend

Set the following variables in your .env.local file for local development, or in your Vercel project’s environment variable settings for deployed builds.
VITE_CONVEX_URL
string
required
Your Convex production deployment URL. Must be the .convex.cloud URL — not the .convex.site URL. This value is read by the Vite frontend at build time and validated before every build, serve, and deploy:convex command.
VITE_CONVEX_URL=https://your-deployment-name.convex.cloud
VITE_CONVEX_SITE_URL
string
Optional Convex site URL (the .convex.site domain). Used when frontend tooling or integrations need to reference Convex HTTP action endpoints directly.
VITE_CONVEX_SITE_URL=https://your-deployment-name.convex.site
CONVEX_DEPLOYMENT
string
The short deployment name (e.g. tremendous-jaguar-953). Used by CI systems and Vercel to identify the target deployment during convex deploy runs. Set this alongside CONVEX_DEPLOY_KEY when automating deployments.
CONVEX_DEPLOY_KEY
string
Convex deploy key for CI-based deployments. Generate this in the Convex dashboard under Settings → Deploy Key. Not required for local development with the Convex CLI.

Build docs developers (and LLMs) love