CoRE-Math picture archive workflow
This is the website-facing operational guide to selecting and preparing photographs. The permanent archive, original files, permissions evidence and activity records remain in Dropbox; this repository contains only the web derivatives and documentation needed to publish them consistently. It does not replace the wider CoRE-Math communication or image-policy material held in Dropbox.
The archive is stored in Dropbox at:
/CoRE-Math/06. Communication, Dissemination, and Visibility/Pictures/
It is deliberately simple: browse pictures in Dropbox, preserve originals, embed standard metadata in working masters, and keep web copies separate. The archive is not a website asset folder and does not replace the website repository.
Folder structure
Pictures/
00-Inbox/
_unidentified/
_external-reference-only/
YYYY/
YYYY-MM-DD-activity-name/
activity.json
originals/
masters/ # only when metadata/editing is required
web/ # only when a derivative is required
rights/
archive-index.csv
Use a date only when it is known. If only month and year are known, use YYYY-MM-activity-name; do not invent a day. IPMS pictures remains outside this workflow until separately reviewed.
Adding new photographs
- Ask the contributor to send the original file, not a screenshot, social-media download or web export. They should supply: activity, date and location; photographer; copyright holder; requested credit; source; and explicit permission/restrictions for web publication.
- Place received files in
00-Inbox/while checking the information. Do not alter the received file. - Create the year/activity folder and move the unchanged received file to
originals/. Assign the next permanent identifier, for exampleCM-PH-000028. - Create
activity.jsonfrom the template below. Store common activity information there once rather than repeating it in each image. - If metadata or a web image is required, copy the original to
masters/. Add IPTC/XMP fields to the copy only. For an immutable received file that must remain untouched, store its identifiers and provenance in a same-name.xmpsidecar. Leave unknown fields blank or useunknownin the activity record; never infer authorship, copyright or permission. - Create a file in
web/only after permission for publication has been recorded. Copy that derivative, not the original, to the GitHub repository. Add an accurate caption, credit and alt text to the page/post.
Metadata and rights
The master must use standard IPTC/XMP fields where known:
XMP-xmp:Identifier: permanent ID, such asCM-PH-000028.XMP-dc:TitleandXMP-dc:Description: title and factual caption.EXIF:DateTimeOriginal/XMP-xmp:CreateDate: actual capture time only.- IPTC Core location/city/country fields.
XMP-dc:Creator,XMP-dc:Rights,XMP-photoshop:CreditandXMP-photoshop:Source.XMP-xmpRights:UsageTermsandXMP-xmpRights:WebStatementfor documented terms.XMP-dc:Subjectfor controlled keywords, for exampleInstitution|Makerere UniversityandProgramme|Industrial Mathematics.
Use the following rights-status values in activity.json: unknown, permission-requested, approved-web, restricted, CC/licensed, or public-domain. A webpage that happens to display a picture is not permission evidence.
Activity record template
Save this as activity.json in each activity folder. Keep unknown values as null or "unknown".
{
"activity_id": "CM-ACT-2026-0001",
"title": "Activity title",
"date": "2026-10-02",
"source_post_date": null,
"location": "Institution, city, country",
"institutions": ["Institution name"],
"networks": ["CoRE-Math"],
"programmes": [],
"projects": [],
"source_urls": [],
"rights_status": "unknown",
"rights_evidence": null,
"notes": ""
}
Use date only for a verified activity date or date range. When a historical image is associated only with a dated website post, leave date as null and record that post date separately in source_post_date.
Browsing and catalogue
Browse visually in Dropbox by year and activity. For searching by title, person, institution, programme, rights status or source, open archive-index.csv in Numbers, Excel, LibreOffice or any text editor.
The catalogue is generated, never manually edited. Once ExifTool is installed and the Dropbox folder is synced locally, run:
python3 scripts/generate_photo_archive_catalog.py \
"$HOME/Library/CloudStorage/Dropbox/CoRE-Math/06. Communication, Dissemination, and Visibility/Pictures"
The generator reads embedded metadata (and same-name .xmp sidecars when an original must remain untouched) plus activity.json records, then rewrites archive-index.csv. It does not modify photographs. Its rights_status column comes from the activity record; XMP usage terms are retained separately.
Preparing web copies
- Check
rights_statusand the evidence before creating a derivative. - Work from
masters/, preserving the original aspect ratio and retaining the original inoriginals/. - Create a reasonably sized JPEG or AVIF in
web/; name it from the permanent identifier, for exampleCM-PH-000028-card-960.avif. - Record the GitHub destination in the activity record notes, then use the derivative in the website. Do not publish originals or rights correspondence.
One-time requirement
ExifTool is required for embedded IPTC/XMP writing and catalogue generation. Install it locally on the archive-maintenance Mac with Homebrew:
brew install exiftool
Then test it on a copied master, never on an original. The repository script is intentionally dependency-free apart from ExifTool and Python 3, which macOS provides.
If ExifTool is installed outside the shell PATH, set EXIFTOOL to its executable path when generating the catalogue.