96 lines
2.9 KiB
Plaintext
96 lines
2.9 KiB
Plaintext
# 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 <noreply@frameflow.local>
|
|
|
|
# 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
|