Кадр — локальный 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.
Description
No description provided
Readme 476 KiB
Languages
JavaScript 85.9%
CSS 9.3%
HTML 4.2%
Dockerfile 0.6%