
SnapOtter
自托管文件处理,转换压缩OCR转写,文件不出内网
SnapOtter 是一个开源、可自托管的文件处理工具,旨在解决个人和企业处理图片、视频、音频、PDF 及文档时依赖云端服务导致的数据隐私和合规问题。它集成了格式转换、压缩、OCR 文字识别、语音转写以及本地 AI 推理等能力,所有处理都在你自己的网络内完成,文件无需上传到第三方服务器。用户可以通过图形界面、REST API 或流水线(pipelines)三种方式调用这些功能,适合批量处理或自动化集成。项目使用 TypeScript 编写,支持 Docker 部署,面向注重数据安全、需要离线处理媒体文件的场景,如医疗、法律、金融等对隐私要求高的行业,以及家庭实验室(homelab)用户。
项目数据
使用教程
环境要求
- 已安装并可运行 Docker 的机器(README 未给出 Docker 安装方式)
- 默认 Web 端口 1349 未被占用
- 生产部署建议准备 Postgres 17 与 Redis 8(可用 Compose 一并拉起)
- 如需 CUDA 加速,需 NVIDIA GPU 并使用官方 GPU Compose 文件
安装与启动步骤
-
1准备 Docker 环境
确认本机 Docker 可正常运行容器。README 未提供 Docker 安装步骤,请先自行安装好 Docker 再继续。
-
2一键启动容器
用官方镜像后台启动 SnapOtter,映射 1349 端口,并把 /data 挂到命名卷做数据持久化。
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest -
3访问并登录
浏览器打开 http://localhost:1349,用默认账号 admin / admin 登录,首次登录会被要求修改密码。
-
4编写生产 Compose 文件
生产环境用 3 容器栈(app + Postgres 17 + Redis 8)。把示例内容保存为 compose.yaml。
services: snapotter: image: snapotter/snapotter:latest ports: ["1349:1349"] environment: DATABASE_URL: postgres://snapotter:snapotter@postgres:5432/snapotter REDIS_URL: redis://redis:6379 volumes: - SnapOtter-data:/data depends_on: [postgres, redis] restart: unless-stopped postgres: image: postgres:17-alpine environment: POSTGRES_USER: snapotter POSTGRES_PASSWORD: snapotter POSTGRES_DB: snapotter volumes: ["SnapOtter-pgdata:/var/lib/postgresql/data"] restart: unless-stopped redis: image: redis:8-alpine volumes: ["SnapOtter-redisdata:/data"] restart: unless-stopped volumes: SnapOtter-data: SnapOtter-pgdata: SnapOtter-redisdata: -
5启动 Compose 栈
在 compose.yaml 所在目录执行,后台拉起 snapotter、postgres、redis 三个容器。
docker compose up -d -
6启用 NVIDIA GPU(可选)
有 NVIDIA GPU 时可改用官方 GPU Compose 文件获得 CUDA 加速,标签细节见官方文档。
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
DATABASE_URL | 否 | 应用连接 Postgres 的数据库连接串,仅 Compose 生产栈使用 | postgres://snapotter:snapotter@postgres:5432/snapotter |
REDIS_URL | 否 | 应用连接 Redis 的地址,仅 Compose 生产栈使用 | redis://redis:6379 |
POSTGRES_USER | 否 | Postgres 用户名 | snapotter |
POSTGRES_PASSWORD | 否 | Postgres 密码,非本地部署务必修改 | snapotter |
POSTGRES_DB | 否 | Postgres 数据库名 | snapotter |
ports | 是 | Web 界面端口映射,容器内监听 1349 | 1349:1349 |
如何确认成功
浏览器打开 http://localhost:1349,出现登录页并能用 admin / admin 登录,即部署成功。
常见问题
Q:默认用户名和密码是什么?
A:用户名 admin,密码 admin。登录后会要求你修改密码。
Q:单容器和 Compose 该怎么选?
A:个人试用或家庭环境用一条 docker run 即可;生产环境用 3 容器 Compose 栈(app + Postgres 17 + Redis 8)。
Q:支持 GPU 加速吗?
A:NVIDIA GPU 可用官方 GPU Compose 文件实现 CUDA 加速;Intel/AMD 核显的 VA-API、Quick Sync、OpenCL 目前不支持 AI 推理加速。
Q:数据会随容器删除而丢失吗?
A:不会。Compose 中挂载了 SnapOtter-data、SnapOtter-pgdata、SnapOtter-redisdata 三个持久卷。
Q:非本地部署要注意什么?
A:README 明确指出:任何非本地部署都必须修改 POSTGRES_PASSWORD,不要沿用示例值 snapotter。
注意事项
- 默认密码 admin/admin 仅适合本地试用,首次登录后请立即修改。
- 对外部署前必须更换 POSTGRES_PASSWORD 等示例凭据。
- Intel/AMD 核显不支持 AI 推理加速,这类机器上 AI 工具会跑在 CPU 上。
- OCR 在纯 CPU 与 NVIDIA 主机上都使用同一套便携 CPU 运行时;更多部署选项与 Docker 标签见 docs.snapotter.com。
核心亮点
- 支持图片、视频、音频、PDF、文档等多种格式,功能覆盖转换、压缩、OCR、转写和本地AI推理
- 提供UI、REST API和流水线三种使用方式,方便手动操作和自动化集成
- 完全自托管,文件不离开本地网络,满足数据隐私和合规要求
不足之处
- 项目仍在成长中,部分高级功能(如本地AI模型)可能需要额外配置和硬件资源
- 文档和社区生态相对较新,遇到问题时可参考的案例和解决方案有限
适用场景
- 医疗或法律机构需要处理敏感文件,要求数据不出内网,使用SnapOtter进行OCR和格式转换
- 家庭实验室用户搭建个人媒体处理中心,批量压缩视频、转写音频
- 开发者在应用中集成文件处理能力,通过REST API或流水线自动完成图片压缩和PDF转换
替代项目
Stirling PDF、Pandoc
项目介绍
下一篇:uxie
同类项目推荐
sunshine-control-panel
开源
一站式管理游戏库、监控内存,AI 助手加持,让大屏启动更高效。
Sunshine Foundation 大屏桌面管理器 | Tauri + Vue 3,游戏库管理、米塔AI助手、内存监控···
Stirling PDF
开源
本地部署 PDF 工具箱
#1 PDF Application on GitHub that lets you edit PDFs on any device anywhere
pdf2md
开源
浏览器里直接把 PDF 变成 Markdown,不用上传,隐私安全。
Browser based tool to convert PDFs to Markdown
SuperTextToolBox
开源
一个工具箱搞定 Windows 上的文字识别、朗读和 AI 处理
一个免费的文字处理工具箱