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.
12 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 |
|---|---|---|---|---|
| Установите SnapOtter с помощью Docker одной командой. Включает настройку Docker Compose, сборку из исходников и полный обзор функций. | 8040133a6982 | machine | 5c6651b86c55 | 2 |
Начало работы
::: tip Попробуйте перед установкой Изучите весь интерфейс на demo.snapotter.com, без регистрации и установки. :::
Быстрый старт
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data snapotter/snapotter:latest
Этот единственный контейнер выполняет все, что ему нужно: без установленного DATABASE_URL он запускает свои собственные PostgreSQL и Redis на интерфейсе обратной связи (встроенный режим) и сохраняет все данные в томе SnapOtter-data. Это самый быстрый способ опробовать SnapOtter или самостоятельно разместить его в домашней лаборатории. Для производства используйте канонический стек Docker Compose, который хранит PostgreSQL и Redis в отдельных контейнерах. Встроенный режим запускается от имени пользователя root (по умолчанию) и автоматически отключается, как только вы устанавливаете DATABASE_URL.
Устанавливаете SnapOtter на Raspberry Pi, старый ноутбук или небольшой VPS? В разделе Установка на маломощном оборудовании есть пошаговое руководство с подобранными лимитами и описание того, чего ожидать от ограниченного оборудования.
При первом входе вам будет предложено сменить пароль.
::: tip Анонимная продуктовая аналитика SnapOtter по умолчанию включает анонимную продуктовую аналитику. Чтобы отключить её, откройте Settings → System → Privacy и выключите Anonymous Product Analytics. Она останавливается немедленно для всего экземпляра.
Вы также можете установить переменную окружения SNAPOTTER_TELEMETRY=0 (false и off тоже работают), чтобы отключить всю телеметрию для экземпляра без пересборки.
Мониторинг ошибок работает на базе Sentry, который спонсирует SnapOtter через свою программу для открытого исходного кода.
Подробнее о том, что собирается, см. Что собирает SnapOtter. :::
::: tip Ускорение NVIDIA CUDA
Добавьте --gpus all для NVIDIA CUDA-ускоренного удаления фона, масштабирования, улучшения лица и восстановления. OCR остается на базе ЦП и работает в том же образе с доступом к GPU или без него:
docker run -d --name SnapOtter -p 1349:1349 --gpus all -v SnapOtter-data:/data snapotter/snapotter:latest
Требуется NVIDIA Container Toolkit. Автоматически переключается на процессор, когда CUDA недоступна. Ускорение Intel/AMD iGPU через VA-API, Quick Sync или OpenCL сегодня не поддерживается для вывода AI. См. Docker Tags для ознакомления с тестами. Если инструменты ИИ работают на ЦП, несмотря на --gpus all, см. Проверка ускорения графического процессора.
:::
::: details Также на GHCR
docker run -d --name SnapOtter -p 1349:1349 -v SnapOtter-data:/data ghcr.io/snapotter-hq/snapotter:latest
Оба реестра публикуют один и тот же образ при каждом релизе. :::
Docker Создать
Используйте рабочий файл, поддерживаемый и тестируемый с каждым выпуском, вместо копирования сокращенного примера Compose с этой страницы:
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
Канонический docker/docker-compose.yml включает все четыре тома среды выполнения, проверки работоспособности, ограничения ресурсов, устойчивую конфигурацию Redis, закрепленные образы базы данных/кэша и текущее усиление защиты контейнера. Измените пароль администратора по умолчанию сразу после первого входа в систему. Для воспроизводимого развертывания прикрепите образ приложения SnapOtter к проверенному вами тегу выпуска или дайджесту вместо того, чтобы следовать latest.
См. Конфигурация для всех переменных среды и Безопасность и усиление для секретов, сетевой политики и инструкций по резервному копированию.
Сборка из исходников
Предварительные требования: Node.js 22.22+, pnpm 9+, Docker (для Postgres + Redis), Python 3.11+ (для функций ИИ), 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
- Фронтенд: http://localhost:1351
- Бэкенд: http://localhost:13490
Что вы можете делать
Обработка файлов (200+ инструментов)
| Модальность | Количество | Примеры инструментов |
|---|---|---|
| Изображения | 107 | Изменение размера, Обрезка, Сжатие, Конвертация, Удаление фона, Апскейл, OCR, Водяной знак, Коллаж, Раскрашивание, Инструменты GIF, пресеты форматов |
| Видео | 57 | Обрезка, Кадрирование, Сжатие, Конвертация, Объединение, Извлечение аудио, Авто-субтитры, Видео в GIF, Изменение размера, Стабилизация, пресеты форматов |
| Аудио | 27 | Обрезка, Объединение, Конвертация, Нормализация, Шумоподавление, Транскрипция, Сдвиг высоты тона, Затухание, Создание рингтона, пресеты форматов |
| PDF / Документы | 29 | Объединение, Разделение, Сжатие, OCR, Водяной знак, Редактирование, Word в PDF, Excel в PDF, Поворот, Защита, Восстановление |
| Файлы | 23 | CSV в JSON, JSON в XML, Объединение CSV, Разделение CSV, Создание ZIP, Извлечение ZIP, Создание диаграмм, YAML/JSON |
Конвейеры
Объединяйте инструменты в многошаговые рабочие процессы и применяйте их к одному изображению или целому пакету:
- Откройте Pipelines в боковой панели.
- Добавьте шаги (любой инструмент, любые настройки).
- Запустите на одном файле или на целом пакете сразу.
- Сохраните конвейер для повторного использования.
Конвейеры допускают 20 шагов по умолчанию. Установите MAX_PIPELINE_STEPS=0, чтобы сделать лимит неограниченным.
Библиотека файлов
Каждый обработанный вами файл может быть сохранён в вашу библиотеку Files. SnapOtter отслеживает полную историю версий, поэтому вы можете проследить каждый шаг обработки от исходной загрузки до финального результата.
Сохранение явное: результаты, которые вы сохраняете в библиотеку, хранятся, пока вы их не удалите, а результаты, которые вы обрабатываете и оставляете несохранёнными, автоматически очищаются через 72 часа (настраивается через FILE_MAX_AGE_HOURS).
REST API и API-ключи
Каждый инструмент доступен по 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"}'
Создавайте API-ключи в разделе Settings → API Keys. См. справочник REST API для всех эндпоинтов или откройте http://localhost:1349/api/docs для интерактивного справочника.
Мультипользовательский режим и команды
Включите несколько пользователей с управлением доступом на основе ролей:
- Admin: полный доступ, управление пользователями, командами, настройками, всеми файлами/конвейерами/API-ключами
- User: использование инструментов, управление своими файлами/конвейерами/API-ключами
Создавайте команды в разделе Settings → Teams для группировки пользователей.
Установите AUTH_ENABLED=true (или false для однопользовательского/личного использования без входа).