Work in progress — this reference is being written in the open. Unfinished pages are excluded from search engines.
Paged · IDML Reference
Geometry & coordinates

Units & origin

IDML geometry is measured in points (1/72 inch) from an origin at the page's top-left, with Y growing downward instead of upward.

Beginner· explanation

Every IDML coordinate is a point, measured from the page's top-left, with Y growing downward.

In short: Every coordinate in an IDML page item — its bounds, its transform, the anchor points of its outline — is a plain number with two implicit conventions behind it: a unit and an origin. The unit is always the point (1/72 of an inch), so a value like 595.276 is simply 210 mm expressed in points. The origin is the page's top-left corner, and unlike the math-class plane, Y grows downward — moving down the page gives a larger Y. Get those two conventions right and the numbers stop being mysterious.

The unit is the point

There is one measurement unit in IDML geometry: the point, defined as 1/72 of an inch. The parser never asks what unit a coordinate is in; it parses every geometry attribute as a plain number and treats it as points throughout. When you see a page bound like 841.89, that is points — an A4 page is 841.89 pt tall (297 mm × 72 / 25.4).

This is why a value such as 595.276 shows up so often: it is 210 mm, the A4 width, expressed in points. Nothing in the file says "points"; it is simply the unit the whole format is built on.

The origin is the top-left, and Y grows downward

The point (0, 0) of a page is its top-left corner. From there:

  • X grows to the right — the familiar direction.
  • Y grows downward — the unfamiliar one. Moving down the page means a larger Y, the opposite of the math-class plane where up is positive.
origin (0, 0)X →Y ↓tx, tyTextFrame
IDML units are points; the origin is the page's top-left and Y grows downward. ItemTransform places a frame.

This downward-Y convention is the single most common source of confusion when reading IDML by hand. A frame whose top edge is at Y = 100 and whose bottom edge is at Y = 300 is 200 pt tall, with the bottom edge below the top — even though 300 is the bigger number. Everything else in the format follows from holding that picture steady.

How the parser reads it

The parser confirms this directly in how it derives a frame's size. A Bounds record stores top, left, bottom, and right, and computes:

  • width as right − left
  • height as bottom − top

For those subtractions to give positive sizes, bottom must be the larger Y and right the larger X — exactly the top-left-origin, Y-downward space. The same holds for the path anchors: when a shape has no explicit bounds, the parser scans its anchor points and takes the smallest Y as the top and the largest Y as the bottom. Up is the small number; down is the big one.

Inner space vs. page space

One more subtlety, picked up in detail on the next pages: each page item is authored in its own coordinate space, usually starting at its own (0, 0), and then an ItemTransform places that whole little space onto the page. So a shape's anchor points are not page coordinates — they are the shape's inner coordinates, waiting to be moved into place. The unit (points) and the orientation (Y down) are the same in both spaces; only the origin shifts.

Frequently asked questions

What unit does IDML use for coordinates? IDML geometry uses the point, defined as 1/72 of an inch, as its only unit. Nothing in the file labels a value as points — the parser reads every geometry attribute as a plain number and treats it as points throughout.

Where is the origin in an IDML page? The origin (0, 0) is the page's top-left corner. X grows to the right as usual, but Y grows downward, so a point further down the page has a larger Y value — the opposite of the math-class convention where up is positive.

Why is a value like 595.276 so common in IDML files? 595.276 is 210 mm — the width of A4 — expressed in points (210 × 72 / 25.4). Likewise 841.89 is the A4 height of 297 mm in points. Metric page sizes show up as these non-round numbers because the format's underlying unit is the point.

On this page