# Hero scene assets — sources and licences

The hero scene needs two things the dataset images can't provide as they come:
a dinosaur **isolated on a transparent background** (the dataset images are
flat JPEGs that already contain their own backdrop), and a separate habitat
backdrop behind it. This file records where each of those came from.

The habitat plates are the only images here sourced from outside the dataset.
They are CC BY, which requires attribution — hence this file, and the credit
line in the site footer.

## Dinosaur cut-outs

The hero wheel displays five specimens: **Anchiceratops**
(`anchiceratops.png`), **Albertosaurus** (`albertosaurus.png`),
**Alectrosaurus** (`alectrosaurus.png`), **Edmontonia** (`edmontonia.png`) and
**Barapasaurus** (`barapasaurus.png`).

All five come from the Natural History Museum dataset itself — they are the
dataset's own reconstruction images for those genera, colourised by the site
owner with an AI tool and cut out onto a transparent background. Nothing in the
wheel is sourced from a third-party artist, which is why no attribution line is
shown on the page: the underlying images carry the same dataset provenance as
every other image in the app, credited in the site footer.

Four of the five arrived pre-cut with a correct alpha channel, so no matting
was run on them — only a crop to the alpha bounding box and a resize to
~1100px on the long edge. Anchiceratops was matted with the script described
below.

### Background removal

Anchiceratops arrived as an opaque image on a flat white studio background.
There's no image-editing tool in this environment (no ImageMagick, no cwebp),
so a small stdlib-only PNG matting script was written for it (`zlib`-decode
the raw scanlines, border-connected flood-fill the white, feather the boundary
by luminance). A second pass was added after the first version left solid
white patches inside fully enclosed pockets — a bent leg against the body, the
gap under a raised foot — that a border-seeded flood fill can never reach,
since nothing connects them to the canvas edge; anything still white and
unvisited after the main fill is, by construction, walled off on every side
and safe to clear the same way.

## Habitat backdrops

Two plates, both wood engravings after Riou from Louis Figuier's *La Terre
avant le déluge* (1863) — same artist, same technique, so the two halves of
the wheel read as one continuous landscape rather than two different sources.

| File | Source | Licence |
|---|---|---|
| `habitat.jpg` | ["An ideal landscape of the Muschelkalk sub-period"](https://commons.wikimedia.org/wiki/File:An_ideal_landscape_of_the_muschelkalk_sub_period_with_retile_Wellcome_V0023199.jpg), Wellcome Collection | CC BY 4.0 |
| `habitat2.jpg` | ["An ideal landscape of the Upper Oolitic period"](https://commons.wikimedia.org/wiki/File:An_ideal_landscape_of_the_upper_oolitic_period_with_reptiles_Wellcome_V0023201.jpg), Wellcome Collection | CC BY 4.0 |

Each is cut from the full-resolution plate as an exact **2:1 crop** (1800×900,
downsized to 1800px wide), from a region with no animals in it — the hero
supplies its own dinosaur, and a second creature in the backdrop would read as
a mistake. `habitat.jpg` is the breaking wave and rocky treed bank;
`habitat2.jpg` is the reed-and-water midground with distant palms.

The 2:1 aspect isn't arbitrary: each plate fills exactly one half of the
`.showcase-wheel-spin` disc (`background-size: 100% 50%`), unwarped, at its
true aspect ratio. `::before` holds `habitat.jpg` at the top pole and
`::after` holds `habitat2.jpg` at the bottom, rotated 180° so it's upright
when its own pole comes to the top of the spin. This replaced an earlier
version that wrapped the engraving as a continuous texture around the full
circumference (a canvas panorama-into-annulus warp, `buildShowcaseRing` in an
earlier revision of `js/app.js`) — the warp guaranteed ground at every spin
angle, but it bent the plate's straight hatching into concentric arcs, which
read as a woven texture rather than a landscape. The two-half version gives up
continuous ground coverage at intermediate spin angles in exchange for the
plates looking like an actual place.

## Processing notes

Cropped and resized with `sips`. All raster formats then had metadata
stripped:

- The engravings each carried a **~400 KB embedded ICC colour profile** —
  multiple full APP2 segments — which is why resizing barely changed file
  size until the profile was removed. Stripping APP1–APP15 from JPEGs
  restores the expected size-to-quality ratio with no visible change.
- The dinosaur PNGs were already clean; the matting script's own PNG encoder
  writes minimal chunks (IHDR/IDAT/IEND only), so no separate strip pass is
  needed for those.

If you re-crop or re-export any of these, strip metadata again or the ICC
profile will silently come back and dwarf the actual image data. If you
re-crop the habitat plates to a different aspect ratio, update
`background-size: 100% 50%` in `.showcase-wheel-spin::before/::after`
accordingly, or the halves will stretch.
