Версия 0.2-alpha: инструмент «Цвет», пресеты тоновой кривой, мерж настроек профиля и исправления переключения фото.
10 KiB
10 KiB
Описание релиза Galo — 23 октября 2026
Версия: 0.2-alpha
База релиза: 0.1-alpha (723b19b, 21 октября 2026) → develop (9e39e3d, 23 октября 2026)
Объём: 6 коммитов, 3 спецификации обновлены, 2 изменения реализованы
Коротко о главном
- Инструмент «Цвет». Баланс белого, вибрация и насыщенность, цветовой микшер по восьми диапазонам оттенков, цветокоррекция по зонам яркости и общая поканальная коррекция. Предпросмотр считает WebGL2, есть WASM/JS-фолбэк.
- Пресеты тоновой кривой. Плавная монотонная кривая (PCHIP), подвижные крайние точки и плоские полки. Встроенные и пользовательские пресеты всех четырёх каналов хранятся в профиле, импортируются и экспортируются JSON-файлом.
- Настройки профиля больше не затирают друг друга. Сохранение сведений о фото и пресетов кривой мержится на сервере по разделам.
- Исправлено переключение фото в редакторе. Вкладка правой панели сохраняется, а несохранённые правки уходят тому фото, для которого сделаны.
Новые возможности
Инструмент «Цвет»
- Баланс белого: температура и оттенок, пипетка по нейтральной точке на фото.
- Вибрация и насыщенность с раздельными ползунками.
- Цветовой микшер по восьми диапазонам (красный, оранжевый, жёлтый, зелёный, бирюзовый, синий, фиолетовый, пурпурный): тон, насыщенность и яркость каждого диапазона.
- Цветокоррекция по зонам: колёса теней, средних тонов и светов, наложение и баланс зон.
- Поканальная коррекция красного, зелёного и синего каналов.
- Живой предпросмотр на 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-предпросмотр, пипетка, меню пресетов, сохранение всех каналов, сохранение вкладки и правок при переключении фото.
Как обновиться
- Собрать релизный бинарник:
make build-release(или взять готовыйbin/galo-0.2-alpha). - Остановить сервис и заменить бинарник. Фронтенд вшит в бинарник.
- Запустить сервис: миграции применяются автоматически при старте для выбранного бэкенда. Для этого релиза отдельных миграций нет.
- Для видео по-прежнему нужны
ffmpeg/ffprobeна хосте. - Android-клиент обновляется отдельно через
make install-android-app.
Откат: вернуть предыдущий бинарник. Схема не менялась, данные правок и профиля остаются совместимыми; новые ключи настроек старый бинарник просто игнорирует.
Ограничения
- Редактирование цвета и кривой доступно только для изображений; видео не редактируется.
- WebGL2-предпросмотр ускоряет отрисовку, но при его отсутствии используется WASM/JS-фолбэк.
- Пресеты не синхронизируются между пользователями: перенос возможен только через экспорт/импорт JSON.
- Правки не создают отдельной записи в истории: параметры хранятся в метаданных фото, отредактированная версия — отдельный объект.