# Proposal ## Why В неразрушающем редакторе Galo сейчас есть только блоки «Свет» и «Цвет»: экспозиция, тональная кривая, баланс белого, микшер и цветокоррекция. Не хватает эффектов, которые в Lightroom собраны в панели «Эффекты»: текстура, чёткость, удаление дымки, виньетка и зерно. Это последний крупный блок базовой обработки, после которого веб-редактор покрывает привычный набор Lightroom. ## What Changes - Добавить в `EditParams` блок `Effects`: - **Текстура** — локальный контраст высоких частот (unsharp mask по яркости). - **Чёткость** — локальный контраст средних частот с защитой от ореолов. - **Убрать дымку** — оценка дымки (dark channel prior) и возврат контраста и насыщенности. - **Виньетка** — три режима, как в макете: «Свет», «Цвет», «Закарасить» (заливка). Параметры: сила, средняя точка, растушёвка, округлость, света; для цветных режимов — цвет виньетки. - **Зерно** — сила, размер, шероховатость; шум детерминирован для повторных рендеров. - Сервер (Go): применять эффекты после света и цвета при рендере редактированной версии; результат по-прежнему пишется в роли `edit`, `edit_thumb`, `edit_medium`, `edit_preview`, оригинал не меняется. - Клиент (Svelte/TS): раздел «Эффекты» в панели правок с вкладками виньетки; живой предпросмотр эффектов в просмотрщике до готовности серверного рендера. - Панель правок: все секции инструментов по умолчанию свёрнуты, состояние каждой секции сохраняется в браузере (`localStorage`). - Вкладка «Редактирование» доступна только в просмотрщике: в режиме сетки правая панель показывает только «Сведения». - WebGL2-превью: перейти с одного прохода на много­проходную схему (FBO, разделимое размытие, карта дымки) для пространственных эффектов. - Обратная совместимость: `edit_params` остаётся JSON-блобом, фото без ключа `effects` рендерятся как раньше; миграции схемы БД не требуется. - Android-клиент не меняется: он показывает уже отрендеренные версии. ## Capabilities ### New Capabilities Нет — эффекты входят в существующую способность `photos`. ### Modified Capabilities - `photos`: требование «Неразрушающее редактирование фотографии» расширяется параметрами эффектов; добавляются требования к виньетке, зерну, пространственным эффектам и их живому предпросмотру. ## Impact - `backend/internal/photos/edit.go` — модель `EffectsParams`, нормализация, `IsEmpty`, сериализация. - `backend/internal/photos/handlers.go` — приём блока `effects` в `PATCH /photos/:id/edit` (у обработчика собственный request-структ). - `backend/internal/photos/edit_render.go` — порядок проходов рендера и новые эффекты; вероятно отдельный файл с пространственными операциями (blur, dark channel, виньетка, зерно). - `frontend/src/lib/edit.ts` — типы, дефолты, нормализация, CPU-реализация попиксельных эффектов (виньетка, зерно) для фолбэка. - `frontend/src/lib/webgl-preview.ts`, `Viewer.svelte` — много­проходный предпросмотр эффектов. - `frontend/src/lib/components/PhotoEditPanel.svelte` — раздел «Эффекты», вкладки виньетки, цвет виньетки; свёрнутые по умолчанию секции; `EditSlider.svelte` переиспользуется. - `frontend/src/lib/editor-sections.ts` — состояние сворачивания секций в `localStorage` и его нормализация. - `frontend/src/lib/components/PhotoPanel.svelte` — вкладка «Редактирование» только при открытом просмотрщике. - Тесты: `edit_test.go`, `edit.test.ts`, новый e2e-сценарий правки с эффектами, бенчмарк пространственных проходов; проверка компиляции GL-шейдеров. - Миграции БД и Android-клиент не затрагиваются.