# Server PORT=1349 AUTH_ENABLED=true DEFAULT_USERNAME=admin DEFAULT_PASSWORD=admin STORAGE_MODE=local # Cleanup FILE_MAX_AGE_HOURS=72 CLEANUP_INTERVAL_MINUTES=60 # Upload & Batch (0 = unlimited) MAX_UPLOAD_SIZE_MB=0 MAX_BATCH_SIZE=0 CONCURRENT_JOBS=0 MAX_MEGAPIXELS=0 # Rate limiting (0 = disabled) RATE_LIMIT_PER_MIN=0 # Users (0 = unlimited) MAX_USERS=0 # Processing (0 = auto/unlimited) MAX_WORKER_THREADS=0 PROCESSING_TIMEOUT_S=0 MAX_PIPELINE_STEPS=0 MAX_CANVAS_PIXELS=0 MAX_SVG_SIZE_MB=0 MAX_LOGO_SIZE_KB=2048 MAX_SPLIT_GRID=100 MAX_PDF_PAGES=0 MAX_VIDEO_DURATION_S=0 MAX_AUDIO_DURATION_S=0 MAX_VIDEO_BITRATE_KBPS=0 LIBREOFFICE_TIMEOUT_S=120 # Engine binary overrides (default: $PATH lookup) # FFMPEG_PATH= # FFPROBE_PATH= # QPDF_PATH= # SOFFICE_PATH= # PDFCPU_PATH= # SNAPOTTER_HW_ACCEL= # nvenc|vaapi: hardware encoder family (default software) SESSION_DURATION_HOURS=168 LOGIN_ATTEMPT_LIMIT=10 # Set to true in CI/dev to skip the forced password-change on the default admin # SKIP_MUST_CHANGE_PASSWORD=false # DB_PATH removed in 2.0 -- see DATABASE_URL below WORKSPACE_PATH=./tmp/workspace FILES_STORAGE_PATH=./data/files DEFAULT_THEME=light DEFAULT_LOCALE=en APP_NAME=snapotter # --- 2.0 foundation --- # Postgres connection (required; this default matches docker-compose.dev.yml) # Start the dev stack first: docker compose -f docker-compose.dev.yml up -d DATABASE_URL=postgres://snapotter:snapotter@localhost:5432/snapotter # Redis connection (required; this default matches docker-compose.dev.yml) REDIS_URL=redis://localhost:6379 # Job spine tuning SYNC_WAIT_MS=8000 # sync-response window (ms) before returning 202 JOBS_RETENTION_DAYS=30 # completed-job metadata TTL (days) AUDIT_RETENTION_DAYS=0 # audit-log TTL (0 = keep forever) LOG_DIR=./data/logs # rotating log ring for support bundles # JOB_TIMEOUT_FAST_S=120 # timeout for fast pools (image), seconds # JOB_TIMEOUT_LONG_S=7200 # timeout for long pools (ai, media), seconds # SCRATCH_PATH= # worker scratch dir (default: OS tmpdir/snapotter-scratch) # Prometheus metrics: GET /api/v1/metrics requires an authenticated admin # (scrapers need a session cookie or API key with system:health permission). # Analytics: defaults OFF. Enable only with your own PostHog/Sentry keys. # ANALYTICS_ENABLED=false # POSTHOG_API_KEY= # SENTRY_DSN= # One-time SQLite import on first boot (1.x upgrade path). Leave unset normally. # SQLITE_MIGRATE_PATH=/data/snapotter.db