Post hero images — uniqueness rules

MUST before shipping any news or evergreen post hero:

  1. Prefer a topic-matched unique public-domain / U.S. government photo (NARA, Library of Congress, NPS, White House, Architect of the Capitol, USCIS, DVIDS). Crop hard landscape ~16:9 or 3:2 (typical hero size 1536×864). No watermarks or burned-in text; one subject/scene.
  2. Never reuse a ceremony, stock, or landscape photo that already appears as another post’s hero — even if re-encoded or lightly cropped. Byte-identical and near-duplicate perceptual copies both count.
  3. Run the dupe check on the candidate before committing:
# From repo root
python3 tools/check_post_hero_dupes.py --new path/to/new-hero.jpg

Exit code must be 0. If it flags a collision (identical SHA256 or aHash Hamming ≤5 vs an existing primary hero), pick a different photo.

  1. After adding or replacing a hero, refresh the registry:
python3 tools/check_post_hero_dupes.py --write-registry

Then set source_url on the new entry in _hero_registry.json.

  1. Full corpus check (primary heroes only):
python3 tools/check_post_hero_dupes.py

See also: repo USAGE_GUIDE.md § Post hero uniqueness, and tools/check_post_hero_dupes.py --help.