The export format

Regionly exports are versioned (currently 1.0) and designed to be consumed by AI models, agents, and ordinary code alike. Version 1.x changes are additive only — a consumer written today keeps working. The machine-readable contract lives at regionly-v1.schema.json.

Coordinate system

Origin is the top-left corner of the image; x increases rightward, y increases downward. Every geometry appears twice: pixels (exact image pixels) and normalized (each value divided by image width or height, range 0–1, resolution-independent).

Geometries

typepixels fieldsnotes
rectx, y, width, heighttop-left anchored
circlecx, cy, radiusnormalized form uses radiusX/radiusY (one per axis)
polygonpoints: [[x,y], …]source is "polygon" or "freeform"
linex1, y1, x2, y2arrow: true when drawn as an arrow (points at x2,y2)
pointx, ya single marked spot

Every region also carries an axis-aligned boundingBox (pixels + normalized) and an optional note. Regions sharing a label are grouped under one labels[] entry.

Example

{
  "format": "regionly",
  "version": "1.0",
  "exportedAt": "2026-07-20T14:00:00.000Z",
  "image": { "name": "room.png", "width": 1536, "height": 1024 },
  "coordinateSystem": {
    "pixels": "origin top-left of the image, x right, y down, units = image pixels",
    "normalized": "same origin/axes, each value divided by image width (x) or height (y), range 0-1"
  },
  "labels": [
    {
      "label": "bed",
      "color": "#3e7bfa",
      "regions": [
        {
          "id": "r1a2b3",
          "type": "rect",
          "note": "blocks movement",
          "pixels":     { "x": 90,  "y": 90,  "width": 170, "height": 230 },
          "normalized": { "x": 0.05859, "y": 0.08789, "width": 0.11068, "height": 0.22461 },
          "boundingBox": {
            "pixels":     { "x": 90, "y": 90, "width": 170, "height": 230 },
            "normalized": { "x": 0.05859, "y": 0.08789, "width": 0.11068, "height": 0.22461 }
          }
        }
      ]
    }
  ],
  "stats": { "labelCount": 1, "regionCount": 1 }
}

Prompt-ready text

The second export tab renders the same data as plain language, ready to paste into any AI prompt:

Labeled regions for image "room.png" (1536x1024 pixels).
Coordinate system: origin at the top-left corner of the image; x increases
rightward, y increases downward; all values are image pixels.
1 region across 1 label:

## bed (1 region)
- rectangle at x=90, y=90, width=170, height=230 (top-left corner at 90,90;
  bottom-right at 260,320)
   note: blocks movement

Project files

.regionly.json project files (format: "regionly-project") embed the image as a data URL plus the raw editor regions — they're a save format, not an interchange format. Use the export for anything downstream.