Skip to content

Obrázky katalogu — R2 + D1 seed (bez admina)

Stav dokumentu: Hotovo pro publikovaný katalog — krok 1 (0022 + starter seed) + krok 2 (migrace 0028, skripty herb:fetch-habitus-wikidata, r2:seed-catalog-habitus-batch:*, deduplikace 0033). Nové byliny lze přidat ručně stejným vzorem nebo znovu spustit generátor po aktualizaci scripts/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.sqlphotographer, license, source_url vyplněné dle Commons; u heřmánku je v alt_text upozorně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:local nebo …: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 migraci INSERT … SELECT id FROM herbs WHERE slug = '…'.

2. Další byliny (doporučený postup)

  1. Vybrat bylinu s jasně licencovanou fotkou (Commons nebo vlastní) — 30-content-guidelines.md §7.
  2. Konvence r2_key: držet se vzoru herbs/<slug>/<role>.jpg (nebo .webp), ASCII, bez mezer.
  3. Nahrát objekt do bucketu soulofherbs-media (dashboard nebo wrangler r2 object put, případně rozšířit npm skript).
  4. Nová migrace INSERT INTO images s license, source_url, alt_text, image_type (české popisky typu obrázku: app/lib/labels/media-processing-labels.ts, funkce labelImageType).
  5. 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):

  1. npm run herb:fetch-habitus-wikidata — stáhne náhledy, doplní migrations/0028_catalog_habitus_images_wikidata.sql a scripts/data/herb-habitus-seed-manifest.json.
  2. Při throttlingu API: npm run herb:fetch-habitus-wikidata:resume (přeskakuje slugy už v manifestu).
  3. npm run d1:apply:local / :remote — aplikuje migraci (nepoužívat znovu d1 execute --file na stejný obsah jako už zapsaná migrace v historii).
  4. npm run r2:seed-catalog-habitus-batch:local / :remote — nahraje JPEG z scripts/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_key a složka scripts/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 images s r2_key habitu a odpovídající objekt v R2 (kromě výjimek řešených zvlášť).

5. Vazby