Skip to content

Configuration

All configuration is done through environment variables. Every variable has a sensible default, so SnapOtter works out of the box without setting any of them.

Environment variables

Server

VariableDefaultDescription
PORT1349Port the server listens on.
RATE_LIMIT_PER_MIN0 (disabled)Maximum requests per minute per IP. Set to 0 to disable rate limiting.
CORS_ORIGIN(empty)Comma-separated allowed origins for CORS, or empty for same-origin only.
LOG_LEVELinfoLog verbosity. One of: fatal, error, warn, info, debug, trace.
TRUST_PROXYtrueTrust X-Forwarded-For headers from a reverse proxy. Set to false if not behind a proxy.

Authentication

VariableDefaultDescription
AUTH_ENABLEDfalseSet to true to require login. The Docker image defaults to true.
DEFAULT_USERNAMEadminUsername for the initial admin account. Only used on first run.
DEFAULT_PASSWORDadminPassword for the initial admin account. Change this after first login.
MAX_USERS0 (unlimited)Maximum number of registered user accounts. Set to 0 for unlimited.
SESSION_DURATION_HOURS168Login session lifetime in hours (default is 7 days).
SKIP_MUST_CHANGE_PASSWORD-Set to any non-empty value to bypass the forced password-change prompt on first login

Storage

VariableDefaultDescription
STORAGE_MODElocallocal or s3. Only local storage is currently implemented.
DB_PATH./data/snapotter.dbPath to the SQLite database file.
WORKSPACE_PATH./tmp/workspaceDirectory for temporary files during processing. Cleaned up automatically.
FILES_STORAGE_PATH./data/filesDirectory for persistent user files (uploaded images, saved results).

Processing limits

VariableDefaultDescription
MAX_UPLOAD_SIZE_MB0 (unlimited)Maximum file size per upload in megabytes. Set to 0 for unlimited.
MAX_BATCH_SIZE0 (unlimited)Maximum number of files in a single batch request. Set to 0 for unlimited.
CONCURRENT_JOBS0 (auto)Number of batch jobs that run in parallel. Set to 0 to auto-detect based on available CPU cores.
MAX_MEGAPIXELS0 (unlimited)Maximum image resolution allowed in megapixels. Set to 0 for unlimited.
MAX_WORKER_THREADS0 (auto)Maximum worker threads for image processing. Set to 0 to auto-detect based on available CPU cores.
PROCESSING_TIMEOUT_S0 (no limit)Maximum processing time per request in seconds. Set to 0 for no timeout.
MAX_PIPELINE_STEPS0 (no limit)Maximum number of steps in a pipeline. Set to 0 for no limit.
MAX_CANVAS_PIXELS0 (no limit)Maximum canvas size in pixels for output images. Set to 0 for no limit.
MAX_SVG_SIZE_MB0 (unlimited)Maximum SVG file size in megabytes. Set to 0 for unlimited.
MAX_LOGO_SIZE_KB500Maximum custom branding logo size in kilobytes.
MAX_SPLIT_GRID100Maximum grid dimension for the image split tool.
MAX_PDF_PAGES0 (unlimited)Maximum number of PDF pages for PDF-to-image conversion. Set to 0 for unlimited.

Cleanup

VariableDefaultDescription
FILE_MAX_AGE_HOURS72How long temporary files are kept before automatic deletion.
CLEANUP_INTERVAL_MINUTES60How often the cleanup job runs.

Appearance

VariableDefaultDescription
APP_NAMESnapOtterDisplay name shown in the UI.
DEFAULT_THEMElightDefault theme for new sessions. light or dark.
DEFAULT_LOCALEenDefault interface language.

Docker permissions

VariableDefaultDescription
PUID999Run the container process as this UID. Set to match your host user for bind mounts (id -u).
PGID999Run the container process as this GID. Set to match your host group for bind mounts (id -g).

Docker example

yaml
services:
  SnapOtter:
    image: snapotterhq/snapotter:latest
    ports:
      - "1349:1349"
    volumes:
      - SnapOtter-data:/data
      - SnapOtter-workspace:/tmp/workspace
    environment:
      - AUTH_ENABLED=true
      - DEFAULT_USERNAME=admin
      - DEFAULT_PASSWORD=changeme
      - MAX_UPLOAD_SIZE_MB=200
      - CONCURRENT_JOBS=4
      - FILE_MAX_AGE_HOURS=12
    restart: unless-stopped

Volumes

The Docker container uses two volumes:

  • /data -- Persistent storage for the SQLite database and user files. Mount this to keep users, API keys, saved pipelines, and uploaded images across container restarts.
  • /tmp/workspace -- Temporary storage for images being processed. This can be ephemeral, but mounting it avoids filling up the container's writable layer.