Files

48 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Proposal
## Why
Сетка миниатюр часто отображает изображение крупнее, чем единственный вариант `thumb` (200px),
потому что между миниатюрой 200px и превью 1200px нет промежуточного размера. При увеличении
плиток (малое число колонок) и на экранах с высокой плотностью пикселей фото расплывается;
обложки альбомов в обзоре и вовсе отдают только 200px.
## What Changes
- Добавить четвёртый вариант `medium` — квадратный кроп 800×800, WebP — и роль `medium` в
журнале объектов. `thumb` перевести на квадратный кроп 200×200; `preview` остаётся вписанным
1200×1200 для просмотрщика.
- API фото SHALL отдавать `medium_url` рядом с `thumb_url`/`preview_url`; данные обложки
альбома SHALL отдавать URL более крупного варианта обложки.
- Сетка фото и обзор альбомов SHALL выбирать вариант под фактический размер плитки через
`srcset` (200/800/1200) и `sizes`, а не всегда тянуть 200px.
- Миграция расширяет ограничение роли `photo_objects` значением `medium` (Postgres и SQLite) и
ставит в очередь перегенерацию вариантов для уже загруженных фото.
- Из-за смены кропа у `thumb` существующие миниатюры перегенерируются (квадратными) вместе с
добавлением `medium`.
## Capabilities
### New Capabilities
Нет.
### Modified Capabilities
- `photos`: требование «Варианты изображений» — четыре варианта, квадратный кроп grid-вариантов.
- `media-objects`: требование «Журнал объектов» — роль `medium` в наборе ролей.
- `albums`: требование «Отображение обложки альбома» — URL обложки крупнее миниатюры.
- `ui-workspace`: новое требование — сетка и обзор альбомов подбирают вариант изображения под
размер плитки.
## Impact
- Backend: `photos/{pipeline,worker,objects,models,service,store,sqlite_store}.go`,
`albums/{models,store,sqlite_store,service}.go`, миграции Postgres и SQLite, бэкфилл
`variant_jobs`, контрактные тесты `repo/contract`.
- Frontend: `PhotoGrid.svelte` и обзор альбомов (`(app)/+page.svelte`).
- API: новые поля `medium_url` (фото) и URL medium-обложки (альбом); существующие клиенты
продолжают работать (аддитивно).
- Хранилище: +1 производный объект (800px WebP) на фото; preview у существующих фото
перегенерируется впустую и удаляется сборщиком мусора по ссылкам.