Files
ds-galo/Отчёты об изменениях/2026-10-23-описание-релиза.md
iu 4cc5c0f340 docs(release): версия 0.2.0
Релиз Galo 0.2.0: инструмент «Цвет», пресеты тоновой кривой, мерж настроек профиля и исправления переключения фото.
2026-10-23 23:09:06 +03:00

10 KiB
Raw Permalink Blame History

Описание релиза Galo — 23 октября 2026

Версия: 0.2.0 База релиза: 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.0.

Проверка

  • npm run check — 0 ошибок и предупреждений.
  • npm run test — 54 теста.
  • go test ./... — все пакеты зелёные.
  • E2E: сохранение/сброс цветовых правок, приватность и хранение пресетов кривой.
  • Проверено в браузере: WebGL2-предпросмотр, пипетка, меню пресетов, сохранение всех каналов, сохранение вкладки и правок при переключении фото.

Как обновиться

  1. Собрать релизный бинарник: make build-release (или взять готовый bin/galo-0.2.0).
  2. Остановить сервис и заменить бинарник. Фронтенд вшит в бинарник.
  3. Запустить сервис: миграции применяются автоматически при старте для выбранного бэкенда. Для этого релиза отдельных миграций нет.
  4. Для видео по-прежнему нужны ffmpeg/ffprobe на хосте.
  5. Android-клиент обновляется отдельно через make install-android-app.

Откат: вернуть предыдущий бинарник. Схема не менялась, данные правок и профиля остаются совместимыми; новые ключи настроек старый бинарник просто игнорирует.


Ограничения

  • Редактирование цвета и кривой доступно только для изображений; видео не редактируется.
  • WebGL2-предпросмотр ускоряет отрисовку, но при его отсутствии используется WASM/JS-фолбэк.
  • Пресеты не синхронизируются между пользователями: перенос возможен только через экспорт/импорт JSON.
  • Правки не создают отдельной записи в истории: параметры хранятся в метаданных фото, отредактированная версия — отдельный объект.