Files
iu cb9433666a chore(openspec): архивировать photo-effects-editing и обновить photos
Изменение применено к основной спеке photos: эффекты, виньетка, зерно,
живой предпросмотр, свёрнутые секции панели и редактирование из просмотрщика.
Change перемещён в archive.
2026-10-24 22:58:07 +03:00

5.6 KiB

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-клиент не затрагиваются.