# 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, docs), 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 --- # Product analytics (PostHog) and error monitoring (Sentry) are baked into # the published Docker image and cannot be disabled at runtime. # To build without analytics: docker compose build --build-arg SNAPOTTER_ANALYTICS=off # One-time SQLite import on first boot (1.x upgrade path). Leave unset normally. # SQLITE_MIGRATE_PATH=/data/snapotter.db # --- OpenTelemetry Distributed Tracing (enterprise only) --- # Requires a valid enterprise license with distributed_tracing feature. # Set OTEL_EXPORTER_OTLP_ENDPOINT to enable. All other vars are optional. # Docs: https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/ # OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # OTEL_EXPORTER_OTLP_HEADERS= # OTEL_SERVICE_NAME=snapotter-api # OTEL_TRACES_SAMPLER=parentbased_always_on # OTEL_TRACES_EXPORTER=otlp