This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== SnapOtter ====== [[https://github.com/snapotter-hq/SnapOtter|SnapOtter]] provides: * 51 image tools - Resize, crop, compress, convert, watermark, color adjust, beautify screenshots, generate memes, vectorize, create GIFs, find duplicates, generate passport photos, and more. Supports 55+ input formats (including 23 camera RAW formats) and 14 output formats, * Local AI - Remove backgrounds, upscale images, restore and colorize old photos, erase objects, blur faces, enhance faces, extract text (OCR). All on your hardware - no internet required * Pipelines - Chain tools into reusable workflows with unlimited steps. Batch process unlimited images at once * REST API - Every tool available via API with API key auth. Interactive docs at /api/docs * Single container - One docker run, no Redis, no Postgres, no external services * Multi-arch - Runs on AMD64 and ARM64 (Intel, Apple Silicon, Raspberry Pi) * Privacy first - Your images never leave your machine. SnapOtter asks once whether you'd like to share anonymous product analytics (which tools are used, errors encountered — never file data). Change anytime in Settings, or set ANALYTICS_ENABLED=false to disable completely ===== Installation ===== As usual, you need to create the **snapotter** user: <code bash> useradd -d /data/daemons/snapotter -m snapotter mkdir /data/snapotter chown snapotter:snapotter /data/snapotter </code> Then, as user **snapotter**, create the following docker compose yaml (see [[https://docs.snapotter.com/guide/getting-started.html#docker-compose|this compose file here]]): <file - docker-compose.yml> services: SnapOtter: image: snapotter/snapotter:latest ports: - "1349:1349" devices: - nvidia.com/gpu=all annotations: run.oci.keep_original_groups: "true" # required for GPU acceleration volumes: - /data/snapotter:/data environment: - AUTH_ENABLED=true - DEFAULT_USERNAME=admin - DEFAULT_PASSWORD=password networks: - snapotter-network networks: snapotter-network: {} </file> The **devices** section is to enable GPU passtrough, see [[services:open-webui|Open WebUI and Ollama]] for more details. After the first run, you can (and should) remove DEFAULT_USERNAME and DEFAULT_PASSWORD from the compose file. Set a proper port for your needs, one that is free from all your other services. And then pull the images: <code bash> su - snapotter podman compose pull </code> ===== Reverse Proxy ===== I am running SnapOtter on https://otter.mydomain.com. This is my recomended one for NGINX: <file - otter.conf> server { server_name otter.mydomain.com; listen 8443 ssl; listen 443 ssl; access_log /var/log/nginx/otter.mydomain.com_access_log main; error_log /var/log/nginx/otter.mydomain.com_error_log info; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; proxy_pass http://127.0.0.1:1349; proxy_redirect http:// https://; } include com.mydomain/certbot.conf; } </file> ===== Autostart ===== To start it, and set it up on boot, as usual follow my indications [[gentoo:containers|Using Containers on Gentoo]], so link the **user-containers** init script: <code> ln -s /etc/init.d/user-containers /etc/init.d/user-containers.snapotter </code> and create the following config file: <file - /etc/conf.d/user-containers.snapotter> USER=snapotter DESCRIPTION="The snapotter server" </file> Add the service to the default runlevel and start it now: <code bash> rc-update add user-containers.snapotter default rc-service user-containers.snapotter start </code>