SnapOtter

snapotter-hqAGPL-3.0活跃维护

自托管的开源文件处理工具,支持图片、视频、音频、PDF 和文档的格式转换、压缩、OCR、转写及本地 AI 处理,文件不出内网。

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.

v2.3.0发布于 2026-11-03 12:30 UTC2,970star +19 / 7 天182fork同步于 2026-11-10 23:43 UTC

怎么上手

由 README 提炼,执行前请确认
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest
硬件要求按 README 说明

多架构支持 AMD64 与 ARM64(Intel、Apple Silicon、树莓派)。NVIDIA GPU 可加速抠图、超分与转写;Intel/AMD 核显的 VA-API、Quick Sync、OpenCL 目前不支持 AI 推理,这类机器 AI 工具走 CPU。README 未给出具体显存要求。

纯 CPU 可运行支持 Apple Silicon需要 CUDA有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管文件处理套件,一个 Docker 栈搞定图片视频音频 PDF 转换与本地 AI

自托管的开源文件处理工具,支持图片、视频、音频、PDF 和文档的格式转换、压缩、OCR、转写及本地 AI 处理,文件不出内网。

核心能力

  • 200+ 工具覆盖图片、视频、音频、PDF、文件五种模态
  • 用 Pipelines 把工具串成可复用工作流并支持 JSON 导入导出
  • 每个工具都提供带 API Key 认证的 REST API,文档在 /api/docs
  • 本地 AI 支持抠图、超分、老照片修复上色、OCR 与音频转写
  • 单容器内置 Postgres 17 与 Redis 8,文件不出内网

容易踩的坑

默认账号密码是 admin/admin,首次登录会被要求改密码;默认端口 1349,生产环境建议改用 Compose 三容器栈并修改 Postgres 密码;OCR 精度增强包需按需单独安装,官方镜像只内置约 25 MiB 的 Fast OCR。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v2.3.0
  1. v2.3.0最新正式版2026-11-03 · 2026-11-03 12:30 UTC

    SnapOtter v2.3.0

    SnapOtter just passed one million image pulls across Docker Hub and GHCR, and 3,000 stars on GitHub. That's a lot of self-hosted servers, so this release is our thank-you to everyone running them.

    Upgrade soon. 2.3.0 closes six security advisories, one of them high severity. Details are in the Security section below.

    Beyond the fixes, there are new tools: a PDF Multi-Tool page editor, one-click compress-to-size presets for images and PDFs, and drag-and-drop page ordering in Organize PDF. OCR now reads Arabic, and pdf-to-text offers OCR when it hits a scanned PDF. SnapOtter can run under a subpath like /snapotter behind a reverse proxy. The app no longer needs a Postgres superuser to run. Admins who get locked out can recover from the command line. The rest is about 1,400 fixes, most of them for problems you reported.

    [!IMPORTANT] All six advisories below affect 2.2.0, and some reach back to 2.0.0. If you share an instance with other users or expose it beyond your own network, upgrade.

    Security

    • SVG uploads could skip sanitization (GHSA-9c7h-xjrp-8gh3, high). An SVG that the image decoder rejected was stored and served as-is instead of being sanitized. Affected: 2.2.0 and earlier. Reported by @xaferima. (#1211)
    • The job progress stream didn't check who was asking (GHSA-ff22-w6x2-fm98, medium). It now requires sign-in and job ownership. Affected: 2.0.0 through 2.2.0. (#1750)
    • Result download links also served the original upload (GHSA-jgv3-2jc6-f628, medium). Affected: 2.2.0 and earlier. Reported by @emirhancatkin. (#3623)
    • Passport photo and background effects trusted a client-supplied job id (GHSA-3c8g-8v4x-qq9j, medium). Affected: 2.2.0 and earlier. Reported by @shaoyuuuuu. (#3623)
    • URL import, upload, and preview skipped role and API-key permission checks (GHSA-8xxr-g2w8-7f9r, medium). Affected: 2.2.0 and earlier. Reported by @nguyenvantiennani. (#3780, #707)
    • SSO enforcement revealed the break-glass username (GHSA-q6fg-vvw9-cr8r, low). A refused local login now gets the same 401 as any other failed login. Affected: 2.0.0 through 2.2.0. (#2148)
    • Postgres no longer runs as superuser. The app now connects with a role that can only read and write data. Migrations use a separate, optional connection. See Upgrade Notes. (#918)
    • Patched dependencies: dompurify and handlebars override floors raised to the fixed versions. (#4247)

    New Features

    • PDF Multi-Tool: a page editor that reorders, duplicates, rotates, and deletes pages, and pulls pages in from other PDFs. The server assembles the final file. (#1338)
    • Compress to a target size in one click: five image presets (20, 50, 100, 200, 500 KB) and five PDF presets (100, 200, 500 KB, 1 MB, 2 MB). (#1250, #1377)
    • Run SnapOtter under a subpath: set BASE_PATH=/snapotter and the same image serves from there. Result links, cookies, SSO redirects, and the API docs all follow it. (#1252, #1324)
    • Arabic OCR: choose Arabic explicitly, or let auto mode detect it. Works for image and PDF OCR. (#4130, #4183)
    • pdf-to-text offers OCR when a PDF, or a whole batch, has no text layer, instead of returning an empty file. (#4142, #4198)
    • Drag-and-drop page ordering in Organize PDF, mouse and touch. (#1249, #2601)
    • Reorder files before a multi-file run: merge, stitch, collage, and the other multi-file tools keep the order you set. (#756, #757)
    • Cancel batch and pipeline runs, and the work actually stops on the server. (#807)
    • snapotter-admin recovery commands: reset-password, create-admin, unlock-user, and MFA reset, for admins locked out of the web UI. (#4016)
    • MFA enrollment at login: when MFA is required, users without it set it up on the spot instead of being blocked.
    • Camera capture and an installable app: take a photo straight into a tool on mobile, and install SnapOtter as a PWA. (#773)
    • Transparent padding in the editor's Canvas Size dialog. (#4111)
  2. v2.2.02026-07-29 · 2026-07-29 14:05 UTC
    查看更新说明

    SnapOtter v2.2.0

    Most of 2.2 is hardening. A non-admin holding a delegated users:manage role could take over an instance, and every tool endpoint turned out to be missing its permission check. Upgrade if you run more than one user.

    The rest is the long tail of self-hosting: downloads that started and never finished, presets that broke the moment you added a second file, containers that crash-looped while Postgres was still coming up. Two new tools landed too. Docs and the website are now translated into 21 languages, and the interface finally clears WCAG AA contrast.

    [!IMPORTANT] If you granted users:manage to a non-admin through a custom role, that role could take over administrator accounts on 2.0.0 through 2.1.0. Details in Security.

    Security

    • Privilege escalation through a delegated users:manage role (GHSA-9xgh-95qh-2x7h). A non-admin holding users:manage through a custom role could reset the password of, or delete, a higher-privileged account, a built-in administrator included, and take over the instance. Password reset and account deletion now verify the caller's authority over the target, so a delegated role cannot reach above its own level. Affected: 2.0.0 through 2.1.0. Reported by 李春来 (Chunlai Li). (#616)
    • Every tool endpoint is now gated. Tool access was enforced route by route, so all 45 hand-written routes had to remember the same call and none of them did. A role without tools:use could still run image-to-pdf, erase-object, upscale, sign-pdf and the rest. The check now lives in one preHandler keyed off the matched route, so it covers sub-paths and any route added later. (#646)
    • Rate limiting was bypassable on Docker installs. The image shipped TRUST_PROXY=true, so the client IP came from a request header and a forged X-Forwarded-For walked past the login limiter. The default is now a private-network trust list. (#649)
    • Settings writes are checked per setting, not once at the door, and config import is now transactional so a rejected key cannot leave half a config applied. (#618)
    • Library filenames cannot escape their storage root. A crafted stored name, which a malicious 1.x SQLite import copies verbatim, could read or delete files outside the files directory. Only reachable after an operator imports an attacker-supplied 1.x SQLite database, which is the one path that lets a stored name be chosen. Reported by @Alpastx. (GHSA-55w2-8cqf-w969, #600)
    • Job cancellation enforces ownership, so an authenticated user can no longer cancel another user's job by its id. Reported by @Alpastx. (GHSA-wqxf-gj2p-689x, #599)
    • A re-audit of the whole 2.0 tree caught what was still open: a captured SAML assertion could be replayed, an MFA challenge survived any number of wrong codes, the per-request API-key lookup was a full table scan, MAX_WORKSPACE_SIZE_GB was dead config, and the SVG sanitizer let through unquoted javascript: hrefs. (#620)
    • Nine disclosed CVEs patched: fast-uri, svgo, sharp and tar transitively (#619), plus Pillow 12.3.0 (#517). RAW decoding on arm64 now builds LibRaw 0.22.2 from source instead of linking an unpatched system copy. (#649)

    New Features

    • Rounded Crop: rounded-square and iOS-style squircle masks, with a corner-radius control. Built for favicons and app icons. (#602)
    • Remove GIF Background: strip the background from an animated GIF, WebP or APNG frame by frame and get a transparent animation back. (#502)
    • Object Eraser lasso and High Quality mode: drag a freeform loop instead of painting every pixel, and optionally install a diffusion inpainting bundle for cleaner large-area fills. (#503, #566)
    • Save as new, or overwrite. Editing a library file used to silently supersede the original. You now choose per edit, and the default keeps it. (#564, #577)
    • Aspect-ratio presets in Resize. Pick 1:1, 4:3 or 16:9 and the two dimensions stay locked, without upscaling. (#530)
    • Two-tier OCR: a fast tier is ba
  3. v2.1.02026-07-10 · 2026-07-10 13:55 UTC
    查看更新说明

    2.1.0 (2026-07-10)

    Hot fix

    Bug Fixes

    • demo: boot to dashboard, sample-data notice, robust mobile editor icon (#464) (a94b69b)
    • demo: point banner "Self-host SnapOtter" link at the docs guide (#466) (463ccff)
    • demo: populate admin data, fix settings crash and mobile editor icon (#463) (7329bc6)
    • error-only Sentry telemetry, storm-proof capture, and crash fixes (#476) (ae6a4c8)
    • landing: clarify OIDC is free, SAML is enterprise on pricing (#461) (c2c9a9e)
    • landing: fix top nav overflow and text overlap (#473) (ffeacd4)
    • landing: green the landing e2e suite (#470) (10ae6d1)
    • landing: highlight Open Source as Most Popular tier (#462) (e468cef)
    • landing: reposition residual meta framing and demote homepage tool count (#471) (958c3e8)
    • reliable, self-healing AI feature-bundle installs (#472) (a731c3d)
    • restyle sponsor button (37a3cfc)
    • reword sponsor button to "Support us" (#468) (331e3bf)
    • update python protobuf dependency (780624e)

    Features

    • demo: populate the Files library with sample files (#465) (a6e8f75)
    • landing: add dismissible 2.0 launch banner (ea7a671)
    • landing: add Product dropdown to nav (#475) (3d1744a)
    • landing: restore Developers nav link, swap out Features anchor (#474) (a08afbc)
    • reposition to self-hosted file-processing infrastructure (#469) (af011d5)
  4. v2.0.02026-07-07 · 2026-07-07 07:36 UTC
    查看更新说明

    SnapOtter 2.0 turns the image toolkit into a full file-manipulation suite: 200+ tools across five modalities (Image, Video, Audio, PDF, and Files) plus a layer-based image editor, all still self-hosted with no external SaaS. Under the hood the whole platform was rebuilt on Postgres 17 and a Redis-backed job queue, so long-running work (video transcodes, AI upscales, OCR) now runs as durable background jobs with live progress instead of blocking a request. And you can start the entire stack with a single docker run.

    [!TIP] New here? Start in one command. An embedded Postgres 17 and Redis 8 boot inside the container, so there's nothing else to wire up.

    docker run -d -p 1349:1349 -v snapotter-data:/data snapotter/snapotter:2.0.0
    

    Open http://localhost:1349 and sign in with admin / admin.

    This is a major release. If you're on 1.x, read the Breaking Changes section below before upgrading: your data migrates automatically, but the container stack changed.

    New Features

    • Four new tool modalities: Video, Audio, PDF, and Files join Image, taking the catalog from a focused image toolkit to 200+ tools. Trim and transcode video, convert and normalize audio, split/merge/compress/sign PDFs, and run file utilities, all in the same self-hosted app.
    • Durable background jobs: A Redis-backed queue (BullMQ) runs every tool as a tracked job. Fast tools still return instantly; long ones stream live progress over SSE and survive a page reload or a brief network drop.
    • All-in-one single-container mode: docker run -p 1349:1349 -v snapotter-data:/data snapotter/snapotter:2.0.0 now boots a complete instance with an embedded Postgres and Redis. No Compose file required for a quick start. Compose remains the recommended production path.
    • On-demand AI bundles: Background removal, OCR, transcription, upscaling, face detection/enhancement, object eraser and colorize, and photo restoration install on demand from the UI into your data volume, so the base image stays lean and installed models survive container recreation. GPU acceleration is detected per framework.
    • Sign PDF: Draw, type, or upload a signature and place it anywhere on a PDF, right in the browser.
    • Automate (visual pipeline builder): Chain tools into reusable pipelines where each step's output feeds the next, across all modalities, with nine prebuilt templates to start from.
    • 83 one-click conversion presets: Dedicated JPG-to-PNG, MP4-to-GIF, and similar converters with fuzzy search, so common conversions are a single click.
    • Layer-based image editor: A Konva-powered editor at /editor with brushes, shapes, adjustments, filters, and curves.
    • Files library: Save any result to a persistent library and reuse it as input to another tool without downloading and re-uploading.
    • Pinned tools: Pin the tools you use most to the top of the dashboard.
    • In-canvas zoom and pan: Zoom and pan directly inside the object eraser and split tools instead of relying on browser zoom.
    • Enterprise capabilities: OIDC/SSO, SAML, SCIM provisioning, S3-compatible storage, per-tool permissions, audit export, and OpenTelemetry distributed tracing, all offline-validated and gated behind a license.
    • 21 languages: Full UI translations across 21 locales.
    • Analytics with a real opt-out: Product analytics and error reporting are on by default with an instance-wide admin toggle in Settings that genuinely stops all egress.

    Improvements

    • Cancel a running process: You can now cancel work in progress instead of waiting for it to finish. (#137)
    • Full-resolution RAW decoding: RAW files (including DNG) dec
  5. v1.17.22026-06-08 · 2026-06-08 07:58 UTC
    查看更新说明

    Highlights

    This release adds a new HTML to Image tool (tool #53), full WCAG 2.2 AA accessibility compliance, and a comprehensive security hardening pass based on external penetration testing. The Docker image also received 5 critical fixes that resolve container startup failures, broken HEIC decoding on ARM, and missing AI tool dependencies.

    New Features

    • HTML to Image: Capture screenshots of URLs or raw HTML as PNG/JPEG/WebP. Supports full-page captures, custom viewports, and dark mode. Built on Playwright Chromium with SSRF protection.
    • Docker _FILE secret convention: Mount sensitive environment variables (passwords, API keys, OIDC secrets) as files instead of plain-text env vars. Supported for DEFAULT_PASSWORD_FILE, S3_ACCESS_KEY_ID_FILE, S3_SECRET_ACCESS_KEY_FILE, OIDC_CLIENT_SECRET_FILE, COOKIE_SECRET_FILE, and SNAPOTTER_LICENSE_KEY_FILE. (#205)
    • Enterprise licensing and S3 storage: Optional commercial license key and S3-compatible object storage backend for enterprise deployments.
    • Shape editor improvements: Fill/stroke transparency, RGBA color picker, and dash line styles in the image editor.
    • Pre-built release archives: Download snapotter-vX.Y.Z-linux-amd64.tar.gz and snapotter-vX.Y.Z-linux-arm64.tar.gz from GitHub Releases for non-Docker installs (Proxmox, bare metal, LXC). (#202)
    • Community roadmap: Feature requests and prioritization now tracked via GitHub Discussions with now/next/later labels.

    Improvements

    • WCAG 2.2 AA accessibility: Skip navigation, route announcer, focus trapping on all modals, aria-live regions for processing status, prefers-reduced-motion support, correct contrast ratios, and 44px minimum touch targets. All 49 hardcoded aria-label strings replaced with i18n keys across 25 components. (#209)
    • Mobile responsiveness: Responsive settings dialog, homepage, navigation, and toast notifications. SSE connections now automatically reconnect when returning from a backgrounded mobile tab. (#203, #204)
    • Background removal quality: Edge smoothing, color decontamination, and output format selection added to the remove-background tool.
    • Italian translation: ~145 newly translated strings contributed by @albanobattistella. (#206)
    • Per-tool API documentation: 53 individual VitePress doc pages with accurate parameters, example requests, and response formats. Root llms.txt added for LLM-friendly repo browsing.
    • AI model downloads: Retry logic with exponential backoff for HuggingFace model downloads, preventing transient failures from blocking bundle installation. (#201)

    Bug Fixes

    • Docker: fresh containers were completely unusable: RATE_LIMIT_PER_MIN=0 in the Dockerfile caused @fastify/rate-limit to block all API requests (including health checks) with HTTP 429. Fixed by treating 0 as unlimited (50,000/min).
    • Docker: face detection AI tools failed on all platforms: blur-faces, red-eye-removal, enhance-faces, and passport-photo failed with "libGLESv2.so.2 not found". Fixed by adding libgles2 to the Docker image.
    • Docker: HEIC files broken on ARM: heif-convert crashed with "undefined symbol: heif_get_plugin_directories" on arm64 due to library version mismatch. Fixed with LD_LIBRARY_PATH=/usr/local/lib to prioritize the custom libheif 1.21.2 build.
    • Docker: upscale and restore-photo AI bundles failed on ARM: basicsr could not build from source on arm64 because wheel and setuptools were missing from the Python venv. Fixed by pre-installing both packages.
    • Docker: OCR used wrong CUDA version on GPU: PaddlePaddle resolved from PyPI (CUDA 11) instead of the CUDA 12.6 index, causing symbol errors on GPU containers. Fixed by changing --extra-index-url to --index-url for the cu126 package source.
    • SSRF guard bypass via hex IPv4-mapped IPv6: The URL-fetch SSRF guard only handled the dotted form of ::ffff: addresses. Hex-compressed forms like `[::ffff:7f00

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    SnapOtter - Dashboard

    Stirling-PDF stops at PDFs. ConvertX stops at conversions. SnapOtter runs all five, and your files never leave your server. Edit images, convert video, transcribe audio, repair PDFs, batch your files: one Docker stack, on hardware you own.

    Quick Start

    One command, that's it.

    docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest
    

    Open http://localhost:1349 and log in with admin / admin. That's the whole install.

    For the production Compose stack, NVIDIA GPU acceleration, and configuration, see Deployment below.

    Key Features

    • 200+ tools across 5 modalities:
      • Image (112): resize, crop, compress, convert, watermark, color adjust, beautify screenshots, generate memes, vectorize, GIF tools, find duplicates, passport photos, plus dedicated format converters (JPG to PNG, HEIC to JPG, WebP to PNG, image to PDF, and more). Supports 55+ input formats (including 23 camera RAW formats) and 17 output formats
      • Video (57): convert, compress, trim, resize, crop, merge, video-to-GIF, extract audio, stabilize, change FPS, burn/extract subtitles, plus dedicated converters (MOV to MP4, MKV to MP4, MP4 to MP3, and more)
      • Audio (27): convert, trim, normalize, volume, fade, pitch shift, silence removal, noise reduction, merge/split, waveform, plus dedicated converters (M4A to MP3, AAC to MP3, OGG to WAV, and more)
      • PDF (35): merge, split, compress, convert, protect/unlock, redact, sign, watermark, page numbers, multi-tool page editor, OCR, plus PDF to JPG/PNG/TIFF
      • Files (23): CSV/JSON/XML/YAML conversion, CSV merge/split, Excel to CSV, chart maker, ZIP create/extract
    • Image editor: Free layer-based editor with brushes, shapes, adjustments, filters, curves, and keyboard shortcuts. Runs in your browser and processes on your hardware
    • Local AI: Remove backgrounds, upscale images, restore and colorize old photos, erase objects, blur faces, enhance faces, extract text (OCR from images and PDFs), transcribe audio, auto-generate video subtitles, expand canvas, and fix transparency. All on your hardware, no internet required. Built-in Fast OCR adds about 25 MiB to the official image; the optional accuracy pack installs on demand
    • OIDC / SSO: Login with Google, GitHub, Okta, or any OpenID Connect provider
    • 21 languages: English, Arabic, Chinese (Simplified & Traditional), Dutch, French, German, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Swedish, Thai, Turkish, Ukrainian, Vietnamese. RTL support for Arabic
    • Pipelines: Chain tools into reusable workflows, 20 steps by default (MAX_PIPELINE_STEPS). Import/export as JSON. Batch size is unlimited in the published image and 100 from a source build (MAX_BATCH_SIZE)
    • REST API: Every tool available via API with API key auth. Interactive docs at /api/docs
    • Self-hosted: one docker run for a single-container quick start (embedded Postgres 17 + Redis 8), or the same Postgres 17 + Redis 8 as a Compose stack for production. No external SaaS dependencies
    • Multi-arch: Runs on AMD64 and ARM64 (Intel, Apple Silicon, Raspberry Pi)
    • Privacy first: Your files never leave your network. Basic analytics help us catch bugs and improve tools. Disable them at build time with SNAPOTTER_ANALYTICS=off or at runtime with the in-app admin opt-out (Here's how to do it)

    Deployment

    The Quick Start one-liner above is all most people need. For production, run the 3-container Compose stack (app + Postgres 17 + Redis 8). Save this as compose.yaml:

    services:
      snapotter:
        image: snapotter/snapotter:latest
        ports: ["1349:1349"]
        environment:
          # Requests are served by a role that can only read and write rows. The
          # owner connects only during boot, to migrate and to grant.
          DATABASE_URL: postgres://${POSTGRES_APP_USER:-snapotter_app}:${POSTGRES_APP_PASSWORD:-snapotter_app}@postgres:5432/${POSTGRES_DB:-snapotter}
          DATABASE_MIGRATION_URL: postgres://${POSTGRES_USER:-snapotter}:${POSTGRES_PASSWORD:-snapotter}@postgres:5432/${POSTGRES_DB:-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: ${POSTGRES_USER:-snapotter}
          # Change this and POSTGRES_APP_PASSWORD for any non-local deployment.
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-snapotter}
          POSTGRES_DB: ${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:
    

    Then start the stack:

    docker compose up -d
    

    Use the GPU Compose file for NVIDIA CUDA-accelerated background removal, upscaling, and transcription. OCR deliberately uses the same portable CPU runtime on CPU-only and NVIDIA hosts. Intel/AMD iGPU acceleration through VA-API, Quick Sync, or OpenCL is not supported for AI inference today; those systems run AI tools on CPU. See Docker Tags for the GPU Compose example and benchmarks.

    Default credentials:

    FieldValue
    Usernameadmin
    Passwordadmin

    You will be asked to change your password on first login.

    For Docker Compose, persistent storage, and other setup options, see the Getting Started Guide. For NVIDIA CUDA acceleration and tag details, see Docker Tags.

    Documentation

    Contributing

    We welcome bug reports, feature ideas, and pull requests. See CONTRIBUTING.md for the full guide, or jump in:

    Support SnapOtter

    SnapOtter is built and maintained independently with no venture capital or corporate backing. Sponsorships fund infrastructure, keep releases flowing, and ensure the project stays free and open for everyone.

    If SnapOtter has replaced a paid subscription or two in your workflow, a small sponsorship helps keep it that way:

    License

    This project is dual-licensed under the AGPLv3 and a commercial license.

    • AGPLv3 (free): You may use, modify, and distribute this software under the AGPLv3. If you run a modified version as a network service, you must make your source code available under the AGPLv3.
    • Commercial license (paid): For use in proprietary software or SaaS products where AGPLv3 source-disclosure is not suitable, a commercial license is available. Contact us for pricing and terms.

    See LICENSING.md for full details on the open-core boundary between AGPLv3 and commercial code.