docs: описание релиза Galo за 23 октября 2026
Версия 0.2-alpha: инструмент «Цвет», пресеты тоновой кривой, мерж настроек профиля и исправления переключения фото.
This commit is contained in:
@@ -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.
|
||||||
|
- Правки не создают отдельной записи в истории: параметры хранятся в метаданных
|
||||||
|
фото, отредактированная версия — отдельный объект.
|
||||||
Reference in New Issue
Block a user