
SnapOtter is a fully self-hosted image manipulation platform that runs 100% locally in a single Docker container. It combines 47 image processing tools, powerful local AI models for background removal, upscaling, photo restoration, and more, plus flexible pipelines for building reusable batch workflows. Everything stays completely private on your hardware with zero cloud dependency, so your images never leave your NAS. It features a clean web UI for quick edits and a full REST API for automation and integration. In this step by step guide I will show you how to install SnapOtterĀ on your UGREEN NAS using Docker and Dockhand.
STEP 1
Please Support My work by Making a Donation.
STEP 2
InstallĀ Dockhand using my step by step guide. If you already have Dockhand installed on your UGREEN NAS, skip this STEP. Attention: Make sure you have installed the latest Dockhand version.
STEP 3
ā ļøMandatory: Add Read & Write Permissions to the Docker Folder.
STEP 4
Go toĀ Files and open the docker folder. Inside the docker folder, create one new folder and name it snapotter. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 5
Now create three new folders inside the snapotter folder that you have previously created at STEP 4 and name them data, db, storage.Ā Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 6
Open your browser and type in http://ugreen-ip-address:3866 to connect to your Dockhand container. On the left sidebar, click Stacks then + Create. Follow the instructions in the image below.

STEP 7
In the Stack name field, type in snapotter. ā ļøWarning: Type in the name in lowercase letters. The installation process can take up to a few seconds/minutes. It will depend on your Internet speed connection. Follow the instructions in the image below.
services:
snapotter-init:
image: alpine:latest
container_name: Snapotter-INIT #It will be marked as exited after the first deploy. This is a normal behavior.
user: 0:0 #Do NOT change.
volumes:
- /volume1/docker/snapotter/data:/data:rw
command: sh -c "chown -R 999:10 /data && chmod -R 777 /data && rm -rf /data/postgres.bootstrapping"
restart: no #Do NOT change.
snapotter:
image: snapotter/snapotter:latest
container_name: Snapotter
ports:
- 1349:1349
environment:
DATABASE_URL: postgres://snapotteruser:snapotterpass@postgres:5432/snapotter
REDIS_URL: redis://redis:6379
AUTH_ENABLED: true
DEFAULT_USERNAME: marius
DEFAULT_PASSWORD: mariushosting
volumes:
- /volume1/docker/snapotter/data:/data:rw
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
snapotter-init:
condition: service_completed_successfully
restart: on-failure:5
postgres:
image: postgres:18-alpine
container_name: Snapotter-DB
user: 999:10
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "snapotter", "-U", "snapotteruser"]
interval: 10s
timeout: 5s
retries: 5
environment:
POSTGRES_USER: snapotteruser
POSTGRES_PASSWORD: snapotterpass
POSTGRES_DB: snapotter
volumes:
- /volume1/docker/snapotter/db:/var/lib/postgresql:rw
restart: on-failure:5
redis:
image: redis:latest
container_name: Snapotter-REDIS
volumes:
- /volume1/docker/snapotter/redis:/data:rw
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: on-failure:5
Note: Before you paste the code above in the Stack editor area below, change the value numbers for user in the command: with your own UID and GID values. (Follow my step by step guide on how to do this.) 999 is my personal UID value and 10 is my personal GID value. You have to type in your own values.
Note: Before you paste the code above in the Stack editor area below, change the value for DEFAULT_USERNAME. Type in your own username. marius is an example for a username.
Note: Before you paste the code above in the Stack editor area below, change the value for DEFAULT_PASSWORD. Type in your own password. mariushosting is an example for a password.
Note: Before you paste the code above in the Stack editor area below, change the value numbers for user with your own UID and GID values. (Follow my step by step guide on how to do this.) 999 is my personal UID value and 10 is my personal GID value. You have to type in your own values.

STEP 8
If everything goes right, you will see the following message at the bottom right of your screen: āCreated stack “snapotter”ā.

STEP 9
On the left sidebar, click Containers. Identify your SnapOtterĀ container then click on ports 1349:1349. Follow the instructions in the image below. ā ļøNote: The Snapotter-INT container will be marked as exited. This is a normal behavior. This container is only needed to correctly set up the permissions to the data folder. Go straight to the next STEP.

STEP 10
š¢Please Support My work by Making a Donation. Almost 99,9% of the people that install something using my guidesĀ forget to support my work, or justĀ ignoreĀ STEP 1. Iāve been very honest about this aspect of my work since the beginning: I donāt run any ADS, I donāt require subscriptions, paid or otherwise, I donāt collect IPs, emails, and I donāt have any referral links from Amazon or other merchants. I also donāt have any POP-UPs or COOKIES. I have repeatedly been told over the years how much I have contributed to the community. Itās something I love doing and have been honest about my passion since the beginning. But I also Need The Community to Support me Back to be able to continue doing this work.
STEP 11
Type in your own Username (DEFAULT_USERNAME) and Password (DEFAULT_PASSWORD) that you have previously added at STEP 7. Click Login. Follow the instructions in the image below.

STEP 12
Change your password. Type in your current Password then a new Password. Click Change password. Follow the instructions in the image below.

STEP 13
Click Don’t ask again. Follow the instructions in the image below.

STEP 14
At the top right of the page, click on the user icon then Settings. Follow the instructions in the image below.

STEP 15
On the left sidebar, click System Settings. Disable Anonymous Product Analytics. Follow the instructions in the image below.

STEP 16
Select your favorite Image tool. For example, I’m testing the Compress tool. Click Compress. Follow the instructions in the image below.

STEP 17
Upload your image. Follow the instructions in the image below.

STEP 18
Click Compress to compress your image. Follow the instructions in the image below.

STEP 19
Download your processed image! Click Download. Follow the instructions in the image below.

Enjoy SnapOtter on your UGREEN NAS!
Note: If you want to run the SnapOtter container over HTTPS, check out How to Run Docker Containers Over HTTPS on Your UGREEN NAS.
šNote/Update/Container: How to Update Your Docker Containers on UGREEN NAS Using Dockhand.
š³Note: How to Create Docker Shortcuts on Desktop.
šNote: How to Update Dockhand to the latest version.
šNote: How to Clean Docker.
This post was updated on Tuesday / September 29th, 2026 at 8:20 AM