chore(openspec): архивировать photo-effects-editing и обновить photos

Изменение применено к основной спеке photos: эффекты, виньетка, зерно,
живой предпросмотр, свёрнутые секции панели и редактирование из просмотрщика.
Change перемещён в archive.
This commit is contained in:
iu
2026-10-24 22:58:07 +03:00
parent c953008a86
commit cb9433666a
6 changed files with 707 additions and 3 deletions
@@ -0,0 +1,72 @@
# 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-клиент не затрагиваются.