Status: draft for comment, 21 September 2026. Comments welcome — open an issue. “Image Scale Metadata” is a working name.
Editor: Daniel Lindskog (PHOTARCH). Licence: this specification, CC BY 4.0; the code in this repository, MIT.
Try it: the viewer opens an image and draws its scale from the file itself. It also writes the scale into an older picture that has a ruler in it: measure the ruler once, and the file carries its scale from then on. Test files and the reference library are in the repository.
A photograph of an object only shows its size if the viewer knows how large one pixel is on the object. Today that knowledge is lost the moment the file leaves the software that measured it: a scale bar burnt into the picture cannot be re-used, a ruler in the frame has to be read by eye, and the resolution fields in TIFF and EXIF are read as print settings.
ISM is a small, open set of metadata fields, written into the image file itself, that lets any program — at any museum, archive or university — open the file and show its true scale: draw a scale bar, measure a distance, or place two objects side by side at the same size. It says how large a pixel is on the object, which pixel grid that applies to, how the scale was obtained, and how certain it is.
ISM does not describe how to photograph an object, nor how to measure one. It only describes how the result is carried in the file, so that it survives copying, export and import into another system.
| Term | Meaning |
|---|---|
| Scale | The length on the object, in millimetres, covered by one pixel of the reference grid, in the measured plane. Written mm/px. |
| Reference grid | The pixel width and height of the image the scale was measured on, as stored in the file (before any EXIF orientation is applied). |
| Current grid | The pixel width and height of the file being read. |
| Writer | Software that puts ISM fields into a file. |
| Reader | Software that reads them and shows or uses the scale. |
“MUST”, “SHOULD” and “MAY” are used as in RFC 2119.
ISM fields live in an XMP namespace of their own, so they travel with JPEG, TIFF, PNG, WebP, HEIF, DNG and PDF, and are kept by the tools that keep XMP.
https://w3id.org/ism/0.1/ — registered at w3id.org; it resolves to this specification.ism| Field | Type | Meaning |
|---|---|---|
ism:version |
Text | The version of this specification the file follows, e.g. 0.1. |
ism:scale |
Real | Millimetres per pixel in the measured plane, on the reference grid. Greater than 0. |
ism:referenceWidth |
Integer | Width in pixels of the reference grid. |
ism:referenceHeight |
Integer | Height in pixels of the reference grid. |
These four are enough for a reader to draw a correct scale bar.
| Field | Type | Meaning |
|---|---|---|
ism:method |
Closed choice | ruler (a ruler or scale in the picture), calipers (a length measured on the object and entered), target (a calibration target of known geometry in the picture), optics (known distance and focal length), other. |
ism:methodNote |
Text | Free description, e.g. “calipers, length of the blade, 42.80 mm”. |
ism:uncertainty |
Real | Relative standard uncertainty of ism:scale, as a fraction: 0.005 is ±0.5 %. |
ism:measuredBy |
Text | Person or organisation that measured. |
ism:measuredAt |
Date | ISO 8601 date the scale was set. |
ism:software |
Text | Software and version that wrote the scale, e.g. “PHOTARCH Desktop 1.0”. |
| Field | Type | Meaning |
|---|---|---|
ism:objectBox |
Seq of 4 Integer | The object’s bounding box on the reference grid: x, y, width, height in pixels, from the top-left of the stored image. |
ism:objectWidthMm |
Real | The object’s width in millimetres along the reference grid’s x axis. |
ism:objectHeightMm |
Real | The object’s height in millimetres along the y axis. |
ism:objectThicknessMm |
Real | Thickness, when measured separately; not derivable from the image. |
When both ism:objectBox and ism:scale are present, the width and height SHOULD agree
with box × scale; a reader MAY check this.
| Field | Type | Meaning |
|---|---|---|
ism:plane |
Text | Which plane the scale holds for, e.g. “upper surface of the find”, “the page”. |
For a three-dimensional object the scale is only exact in one plane; parts nearer the camera look larger. Writers SHOULD say which plane, and readers SHOULD show it next to any measurement they display.
ism:referenceWidth and ism:referenceHeight MUST be the pixel dimensions of the file
the fields are written into, at the moment they are written.ism:scale and both reference dimensions to
the new grid. It MUST NOT change one without the other.ism:method = other and an honest ism:uncertainty.ism:uncertainty is
left out when there is no real figure for it; a guessed one is worse than none.ism:scale.scale_current = ism:scale × referenceWidth / currentWidth.ism:objectBox is given on the stored grid and MUST be rotated with the
image when drawn.ISM is the source. Writers SHOULD also fill these, so older tools see as much as they can.
XResolution = YResolution = 10 / ism:scale pixels per centimetre with
ResolutionUnit = 3 (centimetre), or the same resolution in inches,
25.4 / ism:scale with ResolutionUnit = 2. Both say the same thing; a writer uses the
one its imaging library can write (macOS ImageIO, for one, cannot write unit 3). Readers
MUST NOT rely on the JFIF density in a JPEG: some libraries add a JFIF segment with no
unit (DensityUnit = 0) next to correct EXIF values. Most software reads these as print settings; some
scientific viewers (e.g. ImageJ/Fiji) read them as pixel size. They are lost on many
conversions, which is why ISM does not rely on them.
On a IIIF Presentation canvas whose dimensions are the reference grid, the Physical Dimensions service carries the same number:
"service": [{
"@context": "http://iiif.io/api/annex/services/physdim/1/context.json",
"profile": "http://iiif.io/api/annex/services/physdim",
"physicalScale": 0.0428,
"physicalUnits": "mm"
}]
physicalScale is ism:scale rescaled to the canvas’s width by §6.3. IIIF itself notes
that physical dimensions are often missing or unreliable; ISM’s method and uncertainty are
what make the number trustworthy.
ism:objectWidthMm and ism:objectHeightMm map to Linked Art dimension entries with a
unit of millimetres and a method that names “measured from a scaled photograph”. ISM does
not replace a museum’s own recorded dimensions; it says how large the object is in this
picture.
PixelSpacing (0028,0030): the medical model, where every viewer shows a
true scale because the file says how large a pixel is. ISM is that idea for heritage
images.A JPEG exported at 1509 × 1509 px, measured with calipers:
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:ism="https://w3id.org/ism/0.1/"
ism:version="0.1"
ism:scale="0.0428"
ism:referenceWidth="1509"
ism:referenceHeight="1509"
ism:method="calipers"
ism:methodNote="Length of the blade, 42.80 mm, measured with calipers"
ism:uncertainty="0.004"
ism:measuredAt="2026-09-21"
ism:software="PHOTARCH Desktop 1.0"
ism:plane="Upper surface of the find"
ism:objectWidthMm="42.80"
ism:objectHeightMm="39.92">
<ism:objectBox>
<rdf:Seq><rdf:li>254</rdf:li><rdf:li>286</rdf:li><rdf:li>1000</rdf:li><rdf:li>933</rdf:li></rdf:Seq>
</ism:objectBox>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
A reader opening a 1000 px wide copy of the same image uses 0.0428 × 1509 / 1000 = 0.0646 mm/px.
| Level | Writer writes | A reader can |
|---|---|---|
| ISM-A | the four core fields | draw a true scale bar |
| ISM-B | A + method, uncertainty, measuredAt, software | say how far to trust it |
| ISM-C | B + objectBox and object dimensions | show and check the object’s size |
The reference implementation and test files (§10) decide what “correct” means in practice: a writer or reader conforms when it passes them.
https://w3id.org/ism/.ism:scale = 0.001 is already 1 µm/px.)