feat(gallery): sidecar files, EXIF/IPTC, and page-bundle auto-discovery

Adds the metadata pipeline that makes the gallery block self-curating.
Per-image metadata now resolves through a four-tier waterfall, first
non-empty source wins:

  1. Frontmatter (items[].caption etc.)
  2. Sidecar file next to the image - tries six patterns:
     <name>.yaml / .yml / .json and <basename>.yaml / .yml / .json,
     looked up in both site assets and the page bundle (covers album
     mode and page-resource mode alike).
  3. Embedded IPTC/EXIF via Hugo's .Exif.Tags - caption from
     Caption-Abstract / ImageDescription / XPSubject / Description,
     credit from By-line / Artist / Creator. Wrapped in `try` so
     non-EXIF formats and bad metadata never break the build.
  4. Humanised filename - alt fallback only; captions stay empty
     rather than fabricated from filenames.

Also adds a third source mode - content.page_resources: true -
auto-discovers image resources attached to the current page bundle.
Drop-in for blog posts and project pages where photos live next to
index.md; sidecar lookup works inside the bundle too.

Fixes a leading-slash quirk: Resource.Name returns "/media/..." for
site assets but a bare path for page-bundle resources; the path is
now normalised so sidecar lookups land in either layout.

Test site adds two sidecar YAML files (04-cabin.jpg.yaml and
06-mountain.jpg.yaml) - the masonry album demo now picks up titles,
markdown captions, and links from those sidecars without listing any
items[].
This commit is contained in:
George Cushen committed 2026-05-17 23:45:27 +01:00
1 parent b67f09b8fd
commit bdd3820f27
3 files changed
+120 -19

No files matched your search

@@ -0,0 +1,4 @@
title: "The cabin"
caption: "*Winter quarters* — where the team writes up over the slow months"
credit: "Photo: [Picsum](https://picsum.photos)"
alt: "Snow-dusted wooden cabin among pine trees"
@@ -0,0 +1,5 @@
title: "Summit"
caption: "Final ridge of the **Highland traverse**, with the trig point in view"
credit: "Photo: [Picsum](https://picsum.photos)"
link: "/expeditions/highland-traverse/"
keywords: [highland, traverse, summit]