Files
photo-editor/README.md

107 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Кадр — локальный AI-фоторедактор
Веб-приложение редактирует фотографии по текстовому промпту (через локальный
Codex CLI) и увеличивает разрешение через домашний сервер ComfyUI.
Поддерживаются фотографии JPEG, PNG, WebP и HEIC/HEIF. Файлы HEIC/HEIF
преобразуются на сервере в JPEG с помощью `heic-convert` до передачи в ComfyUI
или Codex.
## Как это работает
- **История версий**: каждая загрузка и каждый результат (редактирование или
апскейл) сохраняется в папке `history/` как отдельная версия. Можно вернуться
к любой версии кликом по ней в ленте «История версий» и продолжить правки
именно с неё — например, отредактировать фото, а затем увеличить разрешение
уже отредактированного варианта. История переживает перезапуск сервера и
обновление страницы; хранится последние 50 версий.
- **Редактирование**: сервер передаёт выбранную версию и промпт агенту Codex
CLI (`codex exec`). Агент редактирует изображение и сохраняет результат.
Обработка обычно занимает 1–3 минуты.
- **Увеличение разрешения**: 4× upscale через ComfyUI моделью
`RealESRGAN_x4plus.safetensors` — применяется к выбранной (в том числе
отредактированной) версии.
## Требования
- Node.js 20 или новее
- Локальный Codex CLI (`codex`) с выполненным входом в аккаунт OpenAI
- Доступ к ComfyUI: `http://192.168.31.240:8188`
- Checkpoint: `sdxl_turbo.safetensors`
- Upscale-модель: `RealESRGAN_x4plus.safetensors`
- Установленные зависимости проекта, включая `heic-convert` (ставится
командой `npm install`)
## Запуск
```powershell
npm install
npm start
```
## Docker
Образ собирается на базе `node:22-bookworm-slim` (Debian, glibc) — Codex CLI
распространяется как бинарник под glibc и не работает на Alpine/musl.
```powershell
# сборка и запуск
docker compose up -d --build
# или вручную:
docker build -t kadr-photo-editor .
docker run -d --name kadr-photo-editor -p 3000:3000 ^
-v "$env:USERPROFILE\.codex:/root/.codex" ^
-v "${PWD}\history:/app/history" ^
-e COMFY_URL=http://192.168.31.240:8188 ^
kadr-photo-editor
```
Что важно знать:
- **Авторизация Codex**: контейнер монтирует `~/.codex` хоста в `/root/.codex`
(auth + config + навыки). Альтернатива — переменная окружения
`OPENAI_API_KEY`.
- **История версий**: каталог `history/` смонтирован томом, версии переживают
пересоздание контейнера.
- **ComfyUI**: задаётся через `COMFY_URL` (по умолчанию
`http://192.168.31.240:8188`); из контейнера адрес доступен как исходящий
адрес локальной сети.
- **Порт**: по умолчанию 3000, меняется через `PORT`.
## Сборка образа в Gitea (Actions)
Репозиторий: `https://git.byte-mate.ru/Coder/photo-editor` (ветка `main`).
Workflow лежит в `.gitea/workflows/build.yml` и запускается **вручную**:
вкладка **Actions** → **Run workflow** → выбрать ветку → нажать кнопку.
После успешного прогона образ публикуется во встроенный registry Gitea:
```powershell
docker pull git.byte-mate.ru/coder/photo-editor:latest
docker run -d --name kadr-photo-editor -p 3000:3000 ^
-v "$env:USERPROFILE\.codex:/root/.codex" ^
-v "${PWD}\history:/app/history" ^
-e COMFY_URL=http://192.168.31.240:8188 ^
git.byte-mate.ru/coder/photo-editor:latest
```
Требования для работы кнопки:
1. **Actions включены** на инстансе (уже включены).
2. **Зарегистрирован runner** (`act_runner`). Сейчас раннеров нет — без него
задания будут висеть в очереди. Регистрация на машине с Docker:
```bash
# токен регистрации: Администрирование → Actions → Runners → Create new runner
docker run -d --name gitea-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitea-runner:/data \
-e GITEA_INSTANCE_URL=https://git.byte-mate.ru \
-e GITEA_RUNNER_REGISTRATION_TOKEN=<token> \
gitea/act_runner:latest
```
3. После регистрации нажмите «Run workflow» — образ соберётся Buildx'ом и
уедет в registry.