Bumps every version surface to 2.2.0, fixes a latent version-coupling bug in the OCR runtime tests, and stops an absent GPU runner from silently stalling a release. Version surfaces: scripts/sync-version.sh covers the 11 workspaces, APP_VERSION, and the docs release commands across all locales. Root package.json plus the three surfaces the script never reaches are done by hand: the DOCKERHUB.md banner and tag table, the docker-tags.md pinning table in 21 locales, and the example runtimeVersion in tools/image/ocr.md in 21 locales. The release-notes archive step is deliberately not pre-run, so the notes text stays editable until the release. Latent bug: runtime-state rejects any runtime whose compatibility.snapotterVersion is not exactly APP_VERSION, and five fixtures pinned the literal 2.1.0. Since semantic-release rewrites APP_VERSION on every release, the first PR after any bump would have gone red for a reason nobody would trace to the release. The fixtures now derive from APP_VERSION. GPU runner: sign-ocr-index needs verify-ocr-nvidia on self-hosted hardware, and the gated manifest job needs ai-bundles, so a missing runner queued instead of failing and produced no image tags. preflight-gpu-runner claims the same labels with no dependencies, so it is scheduled first and validates the GPU before the 90-minute build. An API preflight is impossible because listing self-hosted runners needs Administration:read, which GITHUB_TOKEN cannot hold, so RELEASE.md carries the maintainer-side check.
8.2 KiB
description, i18n_source_hash, i18n_provenance, i18n_output_hash, i18n_hash_version
| description | i18n_source_hash | i18n_provenance | i18n_output_hash | i18n_hash_version |
|---|---|---|---|---|
| Instale o SnapOtter com Docker em um único comando. Inclui configuração de Docker Compose, build a partir do código-fonte e uma visão geral completa das features. | 8040133a6982 | machine | c4412ce7358f | 2 |
Primeiros Passos
::: tip Experimente antes de instalar Explore a interface completa em demo.snapotter.com - sem cadastro ou instalação necessários. :::
Início Rápido
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest
Este contêiner único executa tudo o que precisa: sem nenhum conjunto DATABASE_URL, ele inicia seu próprio PostgreSQL e Redis na interface de loopback (modo incorporado) e mantém todos os dados no volume SnapOtter-data. É a maneira mais rápida de experimentar o SnapOtter ou auto-hospedar em um homelab. Para produção, use a pilha canônica do Docker Compose, que mantém PostgreSQL e Redis em seus próprios contêineres. O modo incorporado é executado como root (o padrão) e é desativado automaticamente assim que você define DATABASE_URL.
Vai instalar em um Raspberry Pi, um notebook antigo ou um VPS pequeno? Veja Ambientes com Poucos Recursos para um passo a passo ajustado e o que esperar de hardware limitado.
Você será solicitado a trocar sua senha no primeiro login.
::: tip Analytics Anônimos de Produto O SnapOtter inclui analytics de produto anônimos por padrão. Para desativá-los, abra Configurações → Sistema → Privacidade e desligue Analytics Anônimos de Produto. Eles param imediatamente para toda a instância.
Você também pode definir a variável de ambiente SNAPOTTER_TELEMETRY=0 (false e off também funcionam) para desabilitar toda a telemetria da instância sem um rebuild.
O monitoramento de erros é fornecido pelo Sentry, que patrocina o SnapOtter através do seu programa open-source.
Para detalhes sobre o que é coletado, veja O que o SnapOtter coleta. :::
::: tip Aceleração NVIDIA CUDA
Adicione --gpus all para remoção de fundo, aumento de escala, aprimoramento de rosto e restauração acelerados por NVIDIA CUDA. OCR permanece baseado em CPU e funciona na mesma imagem com ou sem acesso GPU:
docker run -d --name SnapOtter -p 1349:1349 --gpus all -v SnapOtter-data:/data snapotter/snapotter:latest
Requer o kit de ferramentas NVIDIA Container. Volta para a CPU automaticamente quando CUDA não está disponível. A aceleração Intel/AMD iGPU por meio de VA-API, Quick Sync ou OpenCL não é suportada atualmente para inferência de IA. Consulte Tags Docker para benchmarks. Se as ferramentas de IA forem executadas na CPU apesar de --gpus all, consulte Verificar aceleração de GPU.
:::
::: details Também no GHCR
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data ghcr.io/snapotter-hq/snapotter:latest
Ambos os registries publicam a mesma imagem a cada release. :::
Docker Compose
Use o arquivo de produção mantido e testado com cada versão em vez de copiar um exemplo abreviado do Compose desta página:
install -d -m 700 snapotter && cd snapotter
curl --proto '=https' --tlsv1.2 -fsSLo docker-compose.yml \
https://raw.githubusercontent.com/snapotter-hq/SnapOtter/v2.2.0/docker/docker-compose.yml
# Keep generated service credentials out of shell history and world-readable files.
umask 077
POSTGRES_PASSWORD="$(openssl rand -hex 32)"
REDIS_PASSWORD="$(openssl rand -hex 32)"
printf 'POSTGRES_PASSWORD=%s\nREDIS_PASSWORD=%s\n' \
"$POSTGRES_PASSWORD" "$REDIS_PASSWORD" > .env
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d --no-build
O docker/docker-compose.yml canônico inclui todos os quatro volumes de tempo de execução, verificações de integridade, limites de recursos, configuração durável do Redis, imagens de banco de dados/cache fixadas e a proteção atual do contêiner. Altere a senha de administrador padrão imediatamente após o primeiro login. Para uma implantação reproduzível, fixe a imagem do aplicativo SnapOtter na tag de lançamento ou resumo que você verificou em vez de seguir latest.
Consulte Configuração para todas as variáveis de ambiente e Segurança e proteção para segredos, política de rede e orientação de backup.
Build a partir do Código-Fonte
Pré-requisitos: Node.js 22.22+, pnpm 9+, Docker (para Postgres + Redis), Python 3.11+ (para features de IA), Git.
git clone https://github.com/snapotter-hq/SnapOtter.git
cd SnapOtter
docker compose -f docker-compose.dev.yml up -d # start Postgres + Redis
pnpm install
pnpm dev
- Frontend: http://localhost:1351
- Backend: http://localhost:13490
O Que Você Pode Fazer
Processamento de Arquivos (200+ Ferramentas)
| Modalidade | Contagem | Ferramentas de Exemplo |
|---|---|---|
| Imagem | 107 | Redimensionar, Recortar, Comprimir, Converter, Remover Fundo, Upscale, OCR, Marca d'água, Colagem, Colorizar, Ferramentas de GIF, presets de formato |
| Vídeo | 57 | Cortar, Recortar, Comprimir, Converter, Mesclar, Extrair Áudio, Legendas Automáticas, Vídeo para GIF, Redimensionar, Estabilizar, presets de formato |
| Áudio | 27 | Cortar, Mesclar, Converter, Normalizar, Redução de Ruído, Transcrever, Alteração de Pitch, Fade, Criador de Toques, presets de formato |
| PDF / Documento | 29 | Mesclar, Dividir, Comprimir, OCR, Marca d'água, Ocultar, Word para PDF, Excel para PDF, Girar, Proteger, Reparar |
| Arquivos | 23 | CSV para JSON, JSON para XML, Mesclar CSVs, Dividir CSV, Criar ZIP, Extrair ZIP, Criador de Gráficos, YAML/JSON |
Pipelines
Encadeie ferramentas em fluxos de trabalho de múltiplas etapas e aplique-os a uma imagem ou a um lote inteiro:
- Abra Pipelines na barra lateral.
- Adicione etapas (qualquer ferramenta, quaisquer configurações).
- Rode em um único arquivo - ou em um lote inteiro de uma vez.
- Salve o pipeline para reutilização posterior.
Os pipelines permitem 20 etapas por padrão. Defina MAX_PIPELINE_STEPS=0 para tornar o limite ilimitado.
Biblioteca de Arquivos
Cada arquivo que você processa pode ser salvo na sua biblioteca de Arquivos. O SnapOtter rastreia todo o histórico de versões para que você possa acompanhar cada etapa de processamento do upload original até a saída final.
Salvar é explícito: resultados que você salva na biblioteca são mantidos até você excluí-los, enquanto resultados que você processa e deixa sem salvar são limpos automaticamente após 72 horas (configurável via FILE_MAX_AGE_HOURS).
API REST e Chaves de API
Toda ferramenta é acessível via HTTP:
curl -X POST http://localhost:1349/api/v1/tools/image/resize \
-H "Authorization: Bearer si_<your-api-key>" \
-F "file=@photo.jpg" \
-F 'settings={"width":800,"height":600,"fit":"cover"}'
Gere chaves de API em Configurações → Chaves de API. Veja a referência da API REST para todos os endpoints, ou acesse http://localhost:1349/api/docs para a referência interativa.
Multiusuário e Equipes
Habilite múltiplos usuários com controle de acesso baseado em papéis:
- Admin: acesso completo - gerenciar usuários, equipes, configurações, todos os arquivos/pipelines/chaves de API
- Usuário: usar ferramentas, gerenciar os próprios arquivos/pipelines/chaves de API
Crie equipes em Configurações → Equipes para agrupar usuários.
Defina AUTH_ENABLED=true (ou false para usuário único/uso próprio sem login).