Obrázky katalogu — R2 + D1 seed (bez admina)
Stav dokumentu: Hotovo pro publikovaný katalog — krok 1 (
0022+ starter seed) + krok 2 (migrace0028, skriptyherb:fetch-habitus-wikidata,r2:seed-catalog-habitus-batch:*, deduplikace0033). Nové byliny lze přidat ručně stejným vzorem nebo znovu spustit generátor po aktualizaciscripts/data/herbs-missing-images.json.
Cíl: u publikovaných bylin mít náhled habitu v galerii — objekt v R2 (r2_key) a řádek v images (alt, typ, licence, zdroj), bez nutnosti čekat na admin upload.
Vstup: README.md § Cloudflare R2 · 22-data-model.md (images) · 30-content-guidelines.md §7 (image_type, licence, zdroj) · šablony migrací migrations/0005_r2_smoke_image.sql, migrations/0022_catalog_r2_seed_three_herbs.sql. Admin upload je popsán v 32-admin.md §9 — není součástí tohoto úkolu.
Související UI backlog (zobrazení patičky photographer / license / source_url na kartě): bezpecnost-a-media-stitky.md §3.
0. Hotový krok 1 (reference)
- Byliny:
medunka-lekarska,hermanek-pravy,meta-peprna. - Konvence klíče:
herbs/<slug>/habitus.jpg(ASCII slug z DB). - Migrace:
0022_catalog_r2_seed_three_herbs.sql—photographer,license,source_urlvyplněné dle Commons; u heřmánku je valt_textupozornění, že Commons snímek je Matricaria recutita, zatímco v katalogu je druh uveden jako Matricaria chamomilla (lze později vyměnit za přesnější fotku). - R2: po aplikaci migrace spusť
npm run r2:seed-catalog-starter:localnebo…:remote. - Atribuce souborů v repu: scripts/assets/herbs/README.md.
1. Jak to funguje (stručně)
- Worker servíruje binárky z R2 na cestě
/media/<r2_key>(segmenty URL-encoded). - Tabulka
images:herb_id,r2_key, volitelněpublic_url(externí),image_type,alt_text,caption,photographer,license,source_url,sort_order, … - Bez admina: soubor do bucketu přes Cloudflare dashboard nebo CLI
wrangler r2 object put; řádek v D1 přes novou migraciINSERT … SELECT id FROM herbs WHERE slug = '…'.
2. Další byliny (doporučený postup)
- Vybrat bylinu s jasně licencovanou fotkou (Commons nebo vlastní) — 30-content-guidelines.md §7.
- Konvence
r2_key: držet se vzoruherbs/<slug>/<role>.jpg(nebo.webp), ASCII, bez mezer. - Nahrát objekt do bucketu
soulofherbs-media(dashboard nebowrangler r2 object put, případně rozšířit npm skript). - Nová migrace
INSERT INTO imagesslicense,source_url,alt_text,image_type(české popisky typu obrázku:app/lib/labels/media-processing-labels.ts, funkcelabelImageType). - Ověření:
d1:apply+ seed R2 +/byliny/<slug>(404 na/media/…= chybí objekt nebo špatný klíč).
Šablona SQL: migrace 0005 (minimální řádek) nebo 0022 (řádek s licencí a autorem).
2a. Dávka habitusů (Wikidata P18 → Commons)
Pro větší počet bylin najednou (aktuálně podle scripts/data/herbs-missing-images.json):
npm run herb:fetch-habitus-wikidata— stáhne náhledy, doplnímigrations/0028_catalog_habitus_images_wikidata.sqlascripts/data/herb-habitus-seed-manifest.json.- Při throttlingu API:
npm run herb:fetch-habitus-wikidata:resume(přeskakuje slugy už v manifestu). npm run d1:apply:local/:remote— aplikuje migraci (nepoužívat znovud1 execute --filena stejný obsah jako už zapsaná migrace v historii).npm run r2:seed-catalog-habitus-batch:local/:remote— nahraje JPEG zscripts/assets/herbs/<slug>-habitus.jpg.
Poznámka k obsahu: výchozí výběr taxonu jde přes Wikidata vyhledávání podle latin_name; u složitých taxonů zkontroluj fotku ručně. Duplicity herb_id + r2_key řeší migrace 0033_images_dedupe_herb_r2_key.sql.
Implementace: scripts/fetch-catalog-habitus-from-wikidata.mjs, scripts/r2-upload-catalog-habitus-batch.mjs.
3. Checklist
- Dohodnutá konvence
r2_keya složkascripts/assets/herbs/+ README s atribucí. - První migrace s více
INSERT(3 byliny) + npm skript pro nahrání do R2. - U kroku 1 vyplněné
alt_text,license,source_url(a fotograf kde šlo). - Dokumentace v kořenovém README § R2 a v tomto souboru.
- Dávkový generátor + migrace
0028+ R2 batch +0033(deduplikace).
4. Akceptace
- U tří bylin z kroku 1 je po nahrání do R2 na kartě vidět obrázek z
/media/herbs/…/habitus.jpg. - Žádná závislost na dokončení admin uploadu pro tento seed.
- Každá publikovaná bylina má aspoň jeden řádek v
imagessr2_keyhabitu a odpovídající objekt v R2 (kromě výjimek řešených zvlášť).
5. Vazby
- Bezpečnostní štítky / patička obrázku v UI — bezpecnost-a-media-stitky.md.
- Editor a budoucí upload — 32-admin.md §9.