简介
什么是 SnapOtter ?
SnapOtter是一个开源的自托管图像处理工具,在单个Docker容器中提供45+图像处理工具和本地AI功能。它可以帮助用户在本地完成各种图像操作,包括调整大小、裁剪、压缩、转换、添加水印、颜色调整、矢量化、制作GIF、查找重复照片、生成证件照等,所有图像都保存在本地,永不离开你的设备。它拥有简洁的网页界面,方便快速编辑,并配备了完整的REST API以实现自动化和集成。
主要特点
45+ 图像工具:调整大小、裁剪、压缩、转换、水印、颜色调整、矢量化、创建 GIF、查找重复、生成证件照等 本地 AI:背景去除、图像放大、老照片修复和上色、物体消除、面部模糊、面部增强、 OCR文字提取,全部在本地硬件运行,无需互联网工作流 Pipeline:将多个工具链接成可重用的工作流,支持无限步骤,无限批量处理 REST API:每个工具都可通过 API访问,支持API密钥认证,交互式文档位于/api/docs单容器部署:一个 docker run命令即可运行,无需Redis、Postgres等外部服务多架构支持:支持 AMD64和ARM64(Intel、Apple Silicon、Raspberry Pi)隐私优先:图像永远不会离开你的机器,只收集匿名产品分析数据,可在设置中随时关闭 开源免费:基于 AGPLv3协议开源,可免费使用和修改
应用场景
摄影师/设计师:批量处理作品集,统一调整尺寸、水印、格式 内容创作者:批量处理视频封面、社交媒体配图 企业用户:本地处理敏感图片(合同、证件、产品),满足合规要求 AI 开发者:需要 API接口为AI Agent提供图片处理能力NAS 用户:将 NAS变成图片工作站,在家中任何设备上访问

SnapOtter 是一个功能强大的本地图像处理中心,特别适合需要在私有环境中处理大量图像的用户。
安装
在群晖上以 Docker 方式安装。
在注册表中搜索 snapotter,选择第一个 snapotter/snapotter,版本选择 latest。
本文写作时,
latest版本对应为1.16.0;

卷
在 docker 文件夹中,创建一个新文件夹 snapotter,并在其中建一个子文件夹 data
docker/snapotter/data | /data |

可选:如果需要临时处理文件,也可以添加
/tmp/workspace
端口
本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用netstat -tunlp | grep 端口号1349 | 1349 |

环境
AUTH_ENABLED | true |
DEFAULT_USERNAME | admin |
DEFAULT_PASSWORD | admin |
SKIP_MUST_CHANGE_PASSWORD | false |
环境变量说明:
AUTH_ENABLED- 是否启用登录认证,设为false可禁用登录DEFAULT_USERNAME- 首次运行的管理员用户名DEFAULT_PASSWORD- 首次运行的管理员密码(首次登录后会被强制要求修改)SKIP_MUST_CHANGE_PASSWORD- 跳过强制修改密码

命令行安装
docker cli 安装
如果你熟悉命令行,可能用 docker cli 更快捷
docker run -d \ --name snapotter \ --restart unless-stopped \ -p 1349:1349 \ -v $(pwd)/data:/data \ -v $(pwd)/workspace:/tmp/workspace \ -e AUTH_ENABLED=true \ -e DEFAULT_USERNAME=admin \ -e DEFAULT_PASSWORD=admin \ -e STORAGE_MODE=local \ -e SKIP_MUST_CHANGE_PASSWORD=false \ snapotter/snapotter:latestdocker-compose 安装
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
services:SnapOtter:image: snapotter/snapotter:latestcontainer_name: snapotterrestart: unless-stoppedports:- "1349:1349"volumes:- ./data:/data# Database, AI models, user files- ./workspace:/tmp/workspace# Temp processing (auto-cleaned)environment:- AUTH_ENABLED=true- DEFAULT_USERNAME=admin- DEFAULT_PASSWORD=admin- STORAGE_MODE=local- SKIP_MUST_CHANGE_PASSWORD=falsehealthcheck:test: ["CMD","curl","-f","http://localhost:1349/api/v1/health"]interval: 30stimeout: 5sstart_period: 60sretries: 3shm_size: '2gb'logging:driver: json-fileoptions:max-size: "50m"max-file: "5"然后通过 SSH 登录到您的群晖,执行下面的命令:
# 新建文件夹 snapotter 和 子目录mkdir -p /volume1/docker/snapotter/{data,workspace}# 进入 snapotter 目录cd /volume1/docker/snapotter# 将 docker-compose.yml 放入当前目录# 一键启动docker-compose up -d
运行
在浏览器中访问 http://<群晖IP>:1349 即可进入登录界面

因为设置了 SKIP_MUST_CHANGE_PASSWORD=false ,所以系统会强制要求修改默认密码

弹出提示,帮助改进 SnapOtter,选择 Not right now 关闭匿名产品分析

登录之后的主界面

可以切换到 Grid 模式,功能看起来更清晰

选择你需要的工具,然后处理你的图片,老苏试了一下 Text Watermark,不能用中文,估计是容器内缺字体

访问 /api/docs 可以查看完整的 REST API 文档

注意事项
共享内存:容器默认设置 shm_size: 2gb,这是Python ML模型共享内存的必需配置,不建议更改端口占用:默认端口为 1349,如遇冲突可修改为本机未被占用的端口隐私保护:所有图像处理在本地完成,不会外传,但在设置中可关闭匿名产品分析 GPU 加速:如需 GPU加速,可以参照 https://github.com/snapotter-hq/SnapOtter/blob/main/docker/docker-compose-gpu.yml
参考文档
SnapOtter - A Self Hosted Image Manipulator地址:https://github.com/snapotter-hq/SnapOtter
SnapOtter Docker 镜像地址:https://hub.docker.com/r/snapotter/snapotter
SnapOtter 官方文档地址:https://docs.snapotter.com
SnapOtter 官方网站地址:https://snapotter.com
@所有人:写文不易,如果你都看到了这里,请点个赞和在看,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。
夜雨聆风