SnapOtter: A Self-Hosted File-Processing Stack That Covers Five Modalities
Project brief: Open-source, self-hosted file-processing tool. Convert, compress, OCR, transcribe & run local AI across image, video, audio, PDF & documents, via UI, REST API & pipelines. Your files never leave your network.
At a glance
- What is it?
- SnapOtter is an open-source, self-hosted tool that converts, compresses, OCRs, transcribes, and runs local AI across images, video, audio, PDFs, and documents. It offers a UI, REST API, and pipelines, with a single Docker command for quick start.
- Who is it for?
- Adopt SnapOtter if you need a single self-hosted stack that handles images, video, audio, PDFs, and documents without sending files to external SaaS. It suits privacy-conscious teams, homelab users, and organizations with strict data residency needs.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What SnapOtter Actually Replaces
SnapOtter positions itself as a replacement for a whole shelf of commercial tools: CloudConvert, Smallpdf, TinyPNG, TinyWow, and Otter.ai. The pitch is that one self-hosted stack covers conversions, compression, OCR, transcription, and local AI across five modalities. The README lists 107 image tools, 57 video tools, 27 audio tools, 29 PDF tools, and 23 file tools, for a total over 200. That breadth is the core value proposition. The intended user is someone who currently juggles multiple web services or separate self-hosted apps and wants a single Docker stack that keeps files on their own network. The privacy angle is explicit: your files never leave your server. That matters for legal, compliance, or confidentiality reasons, and it is the main reason to consider SnapOtter over a SaaS alternative.
How the Processing Pipeline Is Structured
SnapOtter is built as a single container for quick start, embedding Postgres 17 and Redis 8. For production, the same components run as separate services in a Compose stack. The application layer exposes three interfaces: a web UI, a REST API, and pipelines. Pipelines chain tools into reusable workflows, with a default limit of 20 steps per pipeline, configurable via MAX_PIPELINE_STEPS. Batch size is unlimited in the published image but capped at 100 from a source build, controlled by MAX_BATCH_SIZE. The REST API makes every tool available through an API key, with interactive docs at /api/docs. The data flow is straightforward: files go in, tools process them, results come out, all within your network. The embedded database and Redis handle job state and queueing, though the README does not detail the internal job scheduling mechanism. The architecture appears designed for both single-node simplicity and multi-container scalability, but the documentation does not describe horizontal scaling or worker separation.
Getting It Running: From One Command to a Compose Stack
The quick start is a single Docker command: docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest. After that, you open http://localhost:1349 and log in with admin / admin. The README notes you will be prompted to change the password on first login. For production, the Compose stack uses three containers: app, Postgres 17, and Redis 8. The compose.yaml example sets two environment variables: DATABASE_URL for the app role and DATABASE_MIGRATION_URL for the owner role. The comment explains that the app role can only read and write rows, while the owner connects only during boot to migrate and grant. That is a sensible least-privilege design. You also set REDIS_URL. The stack starts with docker compose up -d. For NVIDIA GPU acceleration, there is a separate GPU Compose file, but the README does not include its contents, only a link to the Docker Tags documentation. The default image includes Fast OCR, which adds about 25 MiB, and an optional accuracy pack installs on demand.
Local AI: What Is Actually Included and What Is Not
SnapOtter bundles a set of local AI features: background removal, upscaling, photo restoration and colorization, object erasing, face blurring, face enhancement, OCR from images and PDFs, audio transcription, and automatic video subtitle generation. These run on your hardware without an internet connection. The README claims no internet is required, which is a strong privacy statement, but it also mentions basic analytics that help catch bugs and improve tools. You can disable analytics at build time with SNAPOTTER_ANALYTICS=off or at runtime via an in-app admin opt-out. That is a nuance worth noting: the default image may send some telemetry unless you disable it. On the hardware side, NVIDIA CUDA acceleration is supported for background removal, upscaling, and transcription, but OCR deliberately uses the same portable CPU runtime on both CPU-only and NVIDIA hosts. Intel and AMD iGPU acceleration through VA-API, Quick Sync, or OpenCL is not supported for AI inference, so those systems run AI tools on CPU. That is a real limitation if you have a modern Intel or AMD machine with a capable iGPU and expected acceleration.
A Genuine Limitation: The Wrong Tool for PDF-Only Needs
SnapOtter is a heavyweight option. If your only requirement is PDF manipulation, like merging, splitting, or OCR, then a dedicated tool like Stirling-PDF is likely a better fit. Stirling-PDF stops at PDFs, but it is smaller, more focused, and likely easier to audit. SnapOtter's advantage is breadth, but that breadth comes with a larger attack surface, more dependencies, and a bigger resource footprint. The README itself contrasts with Stirling-PDF: 'Stirling-PDF stops at PDFs. ConvertX stops at conversions. SnapOtter runs all five.' That is a fair positioning, but it also means that for a narrow use case, you are pulling in a lot of unrelated functionality. The default admin/admin credentials are a security risk if you forget to change them, and the analytics telemetry may be a dealbreaker for some privacy purists, even with the opt-out. The lack of Intel/AMD iGPU acceleration is another concrete gap. So, the wrong tool scenario is clear: a team that only needs PDF tools, or a user who wants minimal resource usage and maximum control over every dependency.
Comparing with Stirling-PDF and ConvertX
The README explicitly names Stirling-PDF and ConvertX as competitors that SnapOtter surpasses in scope. Stirling-PDF is a self-hosted PDF toolkit that handles merge, split, convert, OCR, and similar operations. Its approach is single-purpose: it does not touch images, video, or audio. ConvertX is another conversion tool, but the README does not specify its exact feature set, only that it stops at conversions. The key difference in approach is architectural: SnapOtter is a multi-modal platform with a unified UI, API, and pipeline system, while Stirling-PDF is a focused utility with its own interface. If you need a Swiss-army knife, SnapOtter is the choice. If you want to minimize dependencies and have a well-understood tool for a specific job, Stirling-PDF is simpler. There is also a difference in licensing: SnapOtter is AGPL-3.0, which has strong copyleft implications for anyone who modifies and distributes it, while Stirling-PDF is also open source but under a different license (check its specific terms). That licensing factor is a real consideration for commercial use.
Upgrade and Maintenance Considerations
The project is actively maintained, with recent releases v2.2.0, v2.1.0, and v2.0.0 pushed in July 2026. The README links to an upgrading guide from 1.x to 2.0, which suggests that major version changes require attention. The Compose stack uses Postgres 17 and Redis 8, which are recent and well-supported. The embedded quick-start container runs the same database and cache, so the single-container mode is not a toy; it is the same engine. However, the README does not document backup procedures, migration paths, or rollback strategies. You will need to handle those yourself, likely with standard Postgres and Redis backup tools. The analytics opt-out is a build-time or runtime setting, so you need to decide early whether to disable it. The license is AGPL-3.0, which means if you modify the code and run it as a network service, you must offer the source to users. That is a significant obligation for companies that might want to embed SnapOtter in a commercial product. Before adopting, read the license and the upgrading guide to understand the cost of staying current.
Editorial conclusion
Adopt SnapOtter if you need a single self-hosted stack that handles images, video, audio, PDFs, and documents without sending files to external SaaS. It suits privacy-conscious teams, homelab users, and organizations with strict data residency needs. Avoid it if you require only PDF operations and want a lighter footprint, or if you rely on Intel/AMD iGPU acceleration for AI, which is not supported. Before deploying, verify the default admin credentials are changed, review the analytics opt-out (either at build with SNAPOTTER_ANALYTICS=off or at runtime), and check the upgrading guide if you are coming from 1.x. Confirm the AGPL-3.0 license fits your distribution model, especially if you plan to offer the software as a service.
Community notes