Colophon
How this is made
The catalogue is a folder of text files. This site is a rendering of it, and the photographs are derived from archival masters that the site never touches.
The record is the source
Each note is one YAML file in catalog/items/, named for its accession number. Research that belongs to a whole series — history, rarity, signature varieties — lives once in catalog/types/ and is referenced by every copy, so an essay written for one note serves all of them. Controlled vocabularies in catalog/vocab/ fix the grading scale and the list of issuing authorities; a value outside them fails the build rather than quietly publishing.
Numbers mean nothing, deliberately
Accession numbers are sequential and carry no information: OM-00001, OM-00002. A number that encoded the country or the catalogue variety would become wrong the first time an attribution changed — and on the very first note here, the cashier's signature is still unread. A meaningless number makes no claim, so it can never be falsified. Where a note is stored, and what it is called on the web, are separate fields that change on their own schedules.
Scans, masters and derivatives
Notes are scanned front and back at 600 dpi in 24-bit colour, with scanner auto-crop and auto-correction switched off. The pipeline pulls the embedded image out of the scanner's PDF without recompressing it, so the archived master is bit-identical to what the scanner produced. Everything on this site — the web images, the deep-zoom tiles — is derived from those masters and can be regenerated at any time. The crop box and rotation live in the record, so a wrong guess is a one-line edit and a rerender, never a rescan.
546/546 scans currently meet the 600 dpi target.
What the site will not show you
Storage locations and purchase prices live in a private block that is stripped before anything is rendered. Estimated values are published: what a note is worth to a collector is ordinary catalogue information, while where it is kept and what was paid for it are not. That is enforced twice: the loader is the only code allowed to touch a raw record and it removes the block by construction, and om check-private then greps the built output for those exact values and fails the deploy if any survived. A page that pairs a valuation with a shelf location is a shopping list; the location is the half that has to go.
Uncertainty is a field, not a silence
Every attribution carries a confidence. A signature that cannot be read is recorded as unread with its candidates, not guessed at, and a dimension the scan cannot establish is recorded as a lower bound rather than a measurement. Recording those distinctions is what stops a guess hardening into a fact over a few years.
Running it
| om ingest | Accession new scans, build derivatives, write stub records |
| om status | What is catalogued and what still needs work |
| om rerender | Rebuild every derivative from the archived masters |
| om verify | Re-check every master against its recorded checksum |
| om check-private | Fail if a private value reached the built site |