# Кадр — локальный AI-фоторедактор (v2) Веб-приложение редактирует фотографии по текстовому промпту (через локальный Codex CLI) и увеличивает разрешение через домашний сервер ComfyUI. Поддерживаются фотографии JPEG, PNG, WebP и HEIC/HEIF. Файлы HEIC/HEIF преобразуются на сервере в JPEG с помощью `heic-convert` до передачи в ComfyUI или Codex. --- ## Архитектура v2 В версии v2 сервис переработан в **модульный монолит** (`src/`): 1. **Устойчивость к перезапуску**: - Персистентный append-only JSONL-журнал заданий (`data/jobs.jsonl`). При рестарте сервера незавершённые задания Codex получают статус `interrupted` с возможностью повтора в один клик, а задания ComfyUI автоматически возвращаются в очередь. - Персистентное хранилище сессий (`data/sessions.json`, хранятся sha256-хеши токенов). Владелец остаётся авторизован после обновления или перезапуска контейнера. - Атомарная запись манифеста истории (`history.json.tmp` + `fsync` + `rename`) защищает от повреждения данных при внезапном выключении. 2. **Очередь заданий (FIFO) и группы конкурентности**: - Вместо блокировки single-flight (429) запросы на редактирование и апскейл ставятся в очередь. - Лимит параллельности: Codex (edit, suggest) = 1 поток; ComfyUI (upscale) = 2 потока. - Лимит очереди: до 5 заданий на группу (защита от накликивания). 3. **Безопасность**: - Пароль защищён scrypt-хешированием (`crypto.scrypt`) с постоянным временем сверки (`timingSafeEqual`). - Ограничение попыток входа (Rate Limiting): 5 попыток за 15 минут на IP. - Проверка Origin на state-changing запросах (CSRF). - Проверка сигнатур файлов (magic bytes) для защиты от поддельных MIME-типов. 4. **Ускорение редактирования (Downscale)**: - Автоматический даунскейл `sharp` до `EDIT_MAX_DIMENSION` (по умолчанию 1024 px) перед передачей в Codex с пропорциональным масштабированием области референса (`scaleRegion`). Сокращает время обработки больших фото в 1.5–2 раза. 5. **Мгновенные обновления статуса (SSE)**: - Server-Sent Events (`GET /api/events`) передают смену статуса очереди и прогресс мгновенно. - Автоматический фолбэк на опрос (`/api/jobs`) при сбоях сети или неподдерживаемых прокси. 6. **Клиентская часть на Vanilla ES-модулях**: - Модули в `public/js/` загружаются напрямую браузером (`