# Application NODE_ENV=development API_HOST=127.0.0.1 API_PORT=8787 API_PUBLIC_ORIGIN=http://127.0.0.1:8787 WEB_ORIGIN=http://127.0.0.1:4173 LOG_LEVEL=info METRICS_HOST=127.0.0.1 WORKER_METRICS_PORT=9092 WORKER_HEARTBEAT_KEY=frameflow:worker:heartbeat WORKER_HEARTBEAT_INTERVAL_MS=5000 WORKER_HEARTBEAT_TTL_SECONDS=20 METRICS_TOKEN= # Security - replace every secret outside local development JWT_ACCESS_SECRET=replace-with-at-least-32-characters JWT_REFRESH_SECRET=replace-with-another-32-character-secret CREDENTIAL_ENCRYPTION_KEY=replace-with-an-independent-32-character-secret ACCESS_TOKEN_TTL=15m REFRESH_TOKEN_TTL_DAYS=30 EMAIL_VERIFICATION_REQUIRED=false EMAIL_VERIFICATION_TTL_HOURS=24 PASSWORD_RESET_TTL_MINUTES=30 # Verification, password-reset, and workspace-invitation email delivery. RESEND_API_KEY= EMAIL_FROM=FrameFlow # PostgreSQL / Redis DATABASE_URL=postgresql://frameflow:frameflow@127.0.0.1:54329/frameflow REDIS_URL=redis://127.0.0.1:63799 # S3-compatible object storage S3_ENDPOINT=http://127.0.0.1:9000 # Optional browser/provider-facing endpoint. Defaults to S3_ENDPOINT locally. S3_PUBLIC_ENDPOINT=http://127.0.0.1:9000 S3_REGION=us-east-1 S3_BUCKET=frameflow S3_ACCESS_KEY=frameflow S3_SECRET_KEY=frameflow-local-secret S3_FORCE_PATH_STYLE=true # AI providers (optional until configured) OPENAI_API_KEY= OPENAI_TEXT_MODEL=gpt-5.6-sol OPENAI_IMAGE_MODEL=gpt-image-2 OPENAI_TTS_MODEL=gpt-4o-mini-tts OPENAI_TTS_VOICE=alloy # Agnes OpenAI-compatible gateway (text, image and video) AGNES_API_KEY= AGNES_TEXT_MODEL=agnes-2.5-flash AGNES_IMAGE_MODEL=agnes-image-2.1-flash AGNES_VIDEO_MODEL=agnes-video-v2.0 AGNES_VIDEO_PREDICTION_DEADLINE_SECONDS=900 AGNES_VIDEO_POLL_INTERVAL_MS=4000 # Generic OpenAI-compatible providers. Each capability is configured independently. # BASE_URL is the API root including its version path, for example https://api.vendor.com/v1. GENERIC_TEXT_API_KEY= GENERIC_TEXT_BASE_URL= GENERIC_TEXT_MODEL= GENERIC_IMAGE_API_KEY= GENERIC_IMAGE_BASE_URL= GENERIC_IMAGE_MODEL= GENERIC_VIDEO_API_KEY= GENERIC_VIDEO_BASE_URL= GENERIC_VIDEO_MODEL= GENERIC_VIDEO_PREDICTION_DEADLINE_SECONDS=900 GENERIC_VIDEO_POLL_INTERVAL_MS=4000 REPLICATE_API_TOKEN= REPLICATE_IMAGE_VERSION= REPLICATE_VIDEO_VERSION= REPLICATE_LIPSYNC_VERSION= # Replicate cancels predictions that have not finished within this deadline. REPLICATE_PREDICTION_DEADLINE_SECONDS=900 # Stripe subscriptions (optional; the UI reports missing configuration) STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= STRIPE_PRO_PRICE_ID= STRIPE_STUDIO_PRICE_ID= STRIPE_PORTAL_CONFIGURATION_ID= BILLING_SUCCESS_URL= BILLING_CANCEL_URL= # External publishing connector. Leave both empty until a connector is deployed. PUBLISHING_CONNECTOR_URL= PUBLISHING_CONNECTOR_SECRET= PUBLISHING_CONNECTOR_TIMEOUT_MS=30000 # Media worker FFMPEG_PATH=ffmpeg FFPROBE_PATH=ffprobe WORKER_CONCURRENCY=2 MAX_UPLOAD_BYTES=104857600 PROVIDER_DOWNLOAD_TIMEOUT_MS=180000 PROVIDER_DOWNLOAD_MAX_REDIRECTS=3