Skip to content

Docker Image ​

SnapOtter ships as a single Docker image. Run it on its own and it starts an embedded PostgreSQL 17 and Redis on the loopback interface (embedded mode); for production, run it alongside separate PostgreSQL 17 and Redis 8 containers with Compose. The app image works on all platforms.

Quick start ​

bash
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest

With no DATABASE_URL set, this runs in embedded mode: PostgreSQL and Redis start inside the container on loopback, with all data under the SnapOtter-data volume. Set DATABASE_URL and REDIS_URL (as the Compose stack does) to use external services instead. See Configuration.

NVIDIA CUDA acceleration ​

The image includes NVIDIA CUDA support on amd64. If you have an NVIDIA GPU with the NVIDIA Container Toolkit installed, add --gpus all:

bash
docker run -d --name SnapOtter --gpus all -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest

The image auto-detects CUDA at runtime. Without --gpus all, or when CUDA is unavailable, AI tools run on CPU. Same image either way.

Intel/AMD iGPU acceleration through VA-API, Quick Sync, or OpenCL is not supported for SnapOtter AI inference today. Mapping /dev/dri into the container can expose the render device, but the AI runtime will still use CPU unless CUDA is available.

Benchmarks ​

Tested on an NVIDIA RTX 4070 (12 GB VRAM) with a 572x1024 JPEG portrait.

Warm performance ​

ToolCPUGPUSpeedup
Background removal (u2net)2,415ms879ms2.7x
Background removal (isnet)2,457ms1,137ms2.2x
Upscale 2x350ms309ms1.1x
Upscale 4x910ms310ms2.9x
Face blur139ms122ms1.1x

Cold start (first request after container start) ​

ToolCPUGPUSpeedup
Background removal22,286ms4,792ms4.7x
Upscale 2x3,957ms2,318ms1.7x

OCR is not included in the CUDA comparison. Both the built-in Tesseract tier and the optional RapidOCR/ONNX tiers use CPU, including when the container has NVIDIA GPU access.

CUDA health check ​

After the first AI request, the admin health endpoint reports CUDA GPU status:

GET /api/v1/admin/health
{"ai": {"gpu": true}}

Docker Compose ​

The full Compose stack includes the app, PostgreSQL 17, and Redis 8. See Deployment for the complete docker-compose.yml. A minimal example:

yaml
services:
  SnapOtter:
    image: snapotter/snapotter:latest
    ports:
      - "1349:1349"
    volumes:
      - SnapOtter-data:/data
      - SnapOtter-workspace:/tmp/workspace
    environment:
      - DATABASE_URL=postgres://snapotter:snapotter@postgres:5432/snapotter
      - REDIS_URL=redis://redis:6379
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_USER: snapotter
      POSTGRES_PASSWORD: snapotter     # Change this for non-local deployments
      POSTGRES_DB: snapotter
    volumes:
      - SnapOtter-pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U snapotter -d snapotter"]
      interval: 10s
      timeout: 5s
      retries: 12

  redis:
    image: redis:8-alpine
    command: ["redis-server", "--maxmemory-policy", "noeviction", "--appendonly", "yes"]
    volumes:
      - SnapOtter-redisdata:/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 12

volumes:
  SnapOtter-data:
  SnapOtter-workspace:
  SnapOtter-pgdata:
  SnapOtter-redisdata:

For NVIDIA CUDA acceleration via Docker Compose, add the deploy section to the SnapOtter service:

yaml
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Version pinning ​

TagDescription
latestLatest release
2.2.0Exact version
2.2Latest patch in 2.2.x
2Latest minor in 2.x

Platforms ​

ArchitectureGPU supportNotes
linux/amd64NVIDIA CUDAFull CUDA acceleration for AI tools
linux/arm64CPU onlyRaspberry Pi 4/5, Apple Silicon via Docker Desktop

Migration from previous tags ​

If you were using the :cuda tag, switch to :latest and keep --gpus all. Same GPU support, unified image.

Your data and settings are preserved in the volumes.