shelf primitive

article-hero

A framed lead image for an article — classical public-domain art or a NASA plate, never stock — with a mono attribution caption. Self-hosted to R2, never hotlinked.

<link rel="stylesheet" href="https://assets.gf.cx/article-hero/article-hero.css">

Natural aspect (default)

Joachim Beuckelaer, Fish Market (1568)
Joachim Beuckelaer, Fish Market, 1568 · The Met · public domain
<figure class="article-hero">
  <img src="https://media.gf.cx/<surface>/hero/<slug>.jpg"
       alt="Joachim Beuckelaer, Fish Market (1568)" loading="lazy" decoding="async">
  <figcaption>Joachim Beuckelaer, <em>Fish Market</em>, 1568 ·
    <a href="…">The Met</a> · public domain</figcaption>
</figure>

Banner crop — .band

Add band for a uniform 16:7 hero height regardless of the source painting's ratio.

Joachim Beuckelaer, Fish Market (1568), cropped to a banner
Same plate, .band crop

Fetch + self-host

The classical_art_fetch.py toolkit script queries a public-domain source, filters for CC0, resizes, pushes to R2 (media.gf.cx/<surface>/hero/<slug>.jpg), and prints this exact markup.

# browse, then fetch a specific object
classical_art_fetch.py --source met  --query "still life fish oysters" --list
classical_art_fetch.py --source nasa --query "Earth from orbit"        --list
classical_art_fetch.py --source met --object-id 679844 \
    --surface happiness.gf.cx --slug omega-3-iron-and-zinc