From a481375783b75dac0e216acddaae09c778a678c4 Mon Sep 17 00:00:00 2001 From: Iu Date: Fri, 23 Oct 2026 22:59:09 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=B0=20Galo=20?= =?UTF-8?q?=D0=B7=D0=B0=2023=20=D0=BE=D0=BA=D1=82=D1=8F=D0=B1=D1=80=D1=8F?= =?UTF-8?q?=202026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Версия 0.2-alpha: инструмент «Цвет», пресеты тоновой кривой, мерж настроек профиля и исправления переключения фото. --- .../2026-10-23-описание-релиза.md | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Отчёты об изменениях/2026-10-23-описание-релиза.md diff --git a/Отчёты об изменениях/2026-10-23-описание-релиза.md b/Отчёты об изменениях/2026-10-23-описание-релиза.md new file mode 100644 index 0000000..b1af1aa --- /dev/null +++ b/Отчёты об изменениях/2026-10-23-описание-релиза.md @@ -0,0 +1,145 @@ +# Описание релиза Galo — 23 октября 2026 + +**Версия:** `0.2-alpha` +**База релиза:** `0.1-alpha` (`723b19b`, 21 октября 2026) → `develop` (`9e39e3d`, 23 октября 2026) +**Объём:** 6 коммитов, 3 спецификации обновлены, 2 изменения реализованы + +--- + +## Коротко о главном + +1. **Инструмент «Цвет».** Баланс белого, вибрация и насыщенность, цветовой + микшер по восьми диапазонам оттенков, цветокоррекция по зонам яркости и + общая поканальная коррекция. Предпросмотр считает WebGL2, есть WASM/JS-фолбэк. +2. **Пресеты тоновой кривой.** Плавная монотонная кривая (PCHIP), подвижные + крайние точки и плоские полки. Встроенные и пользовательские пресеты всех + четырёх каналов хранятся в профиле, импортируются и экспортируются JSON-файлом. +3. **Настройки профиля больше не затирают друг друга.** Сохранение сведений о фото + и пресетов кривой мержится на сервере по разделам. +4. **Исправлено переключение фото в редакторе.** Вкладка правой панели сохраняется, + а несохранённые правки уходят тому фото, для которого сделаны. + +--- + +## Новые возможности + +### Инструмент «Цвет» + +- **Баланс белого:** температура и оттенок, пипетка по нейтральной точке на фото. +- **Вибрация и насыщенность** с раздельными ползунками. +- **Цветовой микшер** по восьми диапазонам (красный, оранжевый, жёлтый, зелёный, + бирюзовый, синий, фиолетовый, пурпурный): тон, насыщенность и яркость каждого + диапазона. +- **Цветокоррекция по зонам:** колёса теней, средних тонов и светов, наложение и + баланс зон. +- **Поканальная коррекция** красного, зелёного и синего каналов. +- **Живой предпросмотр на WebGL2:** кадр считает GPU, поэтому изменения видны сразу. + Если WebGL2 недоступен, используется WASM/JS-фолбэк с тем же результатом. +- Ползунки с градиентами, цветовые колёса и сброс значения двойным кликом. +- Порядок операций совпадает в Go-рендере, WASM и JS-предпросмотре; паритет + закреплён тестами. + +### Тоновая кривая и пресеты + +- **Плавная кривая:** монотонная кубическая интерполяция (PCHIP) вместо прямых + отрезков — и в SVG-графике, и в LUT для предпросмотра и серверного рендера. +- **Крайние точки** `(0,0)` и `(1,1)` существуют сразу, двигаются по обеим осям; + вне крайних точек кривая остаётся плоской. Первый клик по полю вставляет точку + между крайними. +- **Встроенные пресеты:** «Линейный», «Средний контраст», «Сильный контраст». + Контраст задаётся в RGB, каналы R/G/B остаются линейными. +- **Пользовательские пресеты** описывают кривые всех четырёх каналов: + - сохранение, применение, переименование и удаление; + - хранение в `users.preferences.curve_presets` в профиле пользователя; + - приватность: чужие пресеты не видны; + - импорт и экспорт JSON `{ "version": 1, "presets": [...] }`, upsert по имени; + - старый формат одного канала конвертируется при чтении. +- Подпись показывает активный пресет; при ручной правке любого канала — + «Пользовательский». Сброс возвращает линейную кривую. + +### Настройки профиля + +- `PATCH /api/auth/me/preferences` теперь **мержит** разделы, а не заменяет весь + JSON-объект. +- Сохранение `photo_info` не стирает `curve_presets`, и наоборот. +- Валидация: не больше 100 пресетов, имя 1..64 символа, 2..16 точек на каждый из + четырёх каналов, `x/y` в диапазоне 0..1. +- Неизвестные разделы настроек сохраняются без изменений. + +--- + +## Исправления + +- **Переключение фото в редакторе.** Вкладка правой панели больше не сбрасывается + на «Сведения». Накопленные правки отправляются фото, для которого сделаны, даже + если пользователь уже перешёл к следующему. +- **Фоновые сохранения не подменяют текущее фото.** Устаревшие ответы сохранения и + загрузки игнорируются; панель показывает только фото текущего маршрута. +- **Копия фото не наследует отредактированную версию.** Копия показывает исходник, + правка принадлежит своему фото (архивная синхронизация спецификации + `media-objects`). +- Устранены ошибки доступа к `photo = null` при кратковременной смене фото. + +--- + +## Технические изменения + +### API + +- `PATCH /api/auth/me/preferences` — мерж известных разделов; в ответе возвращается + полный объединённый объект. +- `PATCH /api/photos/:id/edit` — параметры правок теперь включают блок `color` и + тоновую кривую; серверный рендер использует те же LUT, что и предпросмотр. +- `DELETE /api/photos/:id/edit` — сброс правок без изменений. + +### Данные и миграции + +- Схема БД не менялась: новые настройки лежат в JSON-блобе + `users.preferences`; параметры правок — в `photos.edit_params`. +- Новые роли объектов и миграции не добавлялись. +- Старые сохранённые кривые начнут интерполироваться плавно — визуальный результат + может немного измениться без миграции данных. + +### Сборка + +- Обновлён WASM-модуль фильтров (`frontend/static/light.wasm`). +- `make build-release` собирает статический бинарник с вшитой версией и сжимает + его UPX, если UPX доступен. +- Версия берётся из `git describe --tags`; релизный тег — `0.2-alpha`. + +### Проверка + +- `npm run check` — 0 ошибок и предупреждений. +- `npm run test` — 54 теста. +- `go test ./...` — все пакеты зелёные. +- E2E: сохранение/сброс цветовых правок, приватность и хранение пресетов кривой. +- Проверено в браузере: WebGL2-предпросмотр, пипетка, меню пресетов, сохранение + всех каналов, сохранение вкладки и правок при переключении фото. + +--- + +## Как обновиться + +1. Собрать релизный бинарник: `make build-release` (или взять готовый + `bin/galo-0.2-alpha`). +2. Остановить сервис и заменить бинарник. Фронтенд вшит в бинарник. +3. Запустить сервис: миграции применяются автоматически при старте для выбранного + бэкенда. Для этого релиза отдельных миграций нет. +4. Для видео по-прежнему нужны `ffmpeg`/`ffprobe` на хосте. +5. Android-клиент обновляется отдельно через `make install-android-app`. + +Откат: вернуть предыдущий бинарник. Схема не менялась, данные правок и профиля +остаются совместимыми; новые ключи настроек старый бинарник просто игнорирует. + +--- + +## Ограничения + +- Редактирование цвета и кривой доступно только для изображений; видео не + редактируется. +- WebGL2-предпросмотр ускоряет отрисовку, но при его отсутствии используется + WASM/JS-фолбэк. +- Пресеты не синхронизируются между пользователями: перенос возможен только через + экспорт/импорт JSON. +- Правки не создают отдельной записи в истории: параметры хранятся в метаданных + фото, отредактированная версия — отдельный объект.