5.4 KiB
Кадр — локальный 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)
Запуск
npm install
npm start
Docker
Образ собирается на базе node:22-bookworm-slim (Debian, glibc) — Codex CLI
распространяется как бинарник под glibc и не работает на Alpine/musl.
# сборка и запуск
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:
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
Требования для работы кнопки:
-
Actions включены на инстансе (уже включены).
-
Зарегистрирован runner (
act_runner). Сейчас раннеров нет — без него задания будут висеть в очереди. Регистрация на машине с Docker:# токен регистрации: Администрирование → 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 -
После регистрации нажмите «Run workflow» — образ соберётся Buildx'ом и уедет в registry.