feat(web): правки применяются на фронте, фильтры в WASM

Новый алгоритм редактирования: обработка идёт только на клиенте.

- Фильтры «Свет» считает WASM-модуль на Rust (frontend/wasm/light, 1.5 КБ):
  он строит тональные кривые и обрабатывает пиксели. При недоступности модуля
  используется JS-реализация с тем же результатом — расхождение проверяется
  тестом.
- Просмотр рисует видимую область фото с правками на canvas поверх
  исходной версии, поэтому изменения видны сразу, без ожидания рендера.
- Правки уходят на сервер не сразу: через десять секунд без изменений или при
  переключении фото. Сервер сохраняет параметры и готовит варианты сетки и
  полноразмерную версию в фоне, о готовности сообщает через SSE — клиент
  подтягивает готовую версию.
This commit is contained in:
iu
2026-10-21 00:06:46 +03:00
parent 4d2069d079
commit 520886a11d
21 changed files with 788 additions and 312 deletions
+4 -10
View File
@@ -294,6 +294,10 @@ SHALL храниться в метаданных фото, а отредакти
- **WHEN** пользователь сохраняет правки фото
- **THEN** параметры сохраняются в метаданных, отредактированная версия рендерится в фоне, а после рендера фото получает URL отредактированных вариантов
#### Scenario: Фоновая подготовка версий
- **WHEN** правки фото сохранены
- **THEN** система готовит варианты сетки и полноразмерную версию в фоне и сообщает о готовности
#### Scenario: Неразрушачность
- **WHEN** фото отредактировано
- **THEN** исходный объект и его варианты остаются неизменными
@@ -309,13 +313,3 @@ SHALL храниться в метаданных фото, а отредакти
#### Scenario: Редактирование видео
- **WHEN** пользователь пытается отредактировать видео
- **THEN** система отклоняет запрос
### Requirement: Рендер видимой области правки
Для фото с правками просмотр SHALL получать изображение по запросу отдельной области:
система SHALL рендерить только видимую часть кадра с применёнными правками, а не готовить
полноразмерную отредактированную версию. Область SHALL задаваться относительными
координатами, чтобы запрос не зависел от размера оригинала.
#### Scenario: Зум отредактированного фото
- **WHEN** пользователь увеличивает фото с правками
- **THEN** система отдаёт отрендеренную видимую область, не готовя полную версию