Skip to content

Commit 68f05b7

Browse files
committed
Interpret image-region geometry and XMP wrappers
- Normalize scoped IPTC rectangle, circle, and polygon boundaries with explicit pixel/relative units. - Interpret XMP manifest/version wrapper records, expose the additions through thin Python bindings, update documentation, and bump OpenMeta to 0.4.82.
1 parent 66dcc4f commit 68f05b7

15 files changed

Lines changed: 937 additions & 41 deletions

‎CHANGES.md‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# OpenMeta Changes
22

3+
## 0.4.82 - 2026-07-21
4+
5+
Changes compared with `0.4.81`.
6+
7+
### Added
8+
9+
- Added scoped IPTC Extension image-region boundary interpretation for
10+
rectangle, circle, and polygon shapes with explicit pixel or relative
11+
coordinate units, numeric field candidates, normalized rectangle/circle
12+
values, polygon vertex records, and complete source-entry provenance.
13+
- Added XMP Media Management manifest-item and version records for manifest
14+
link/resolution fields and version comments, modifier, modification date,
15+
and identifier wrappers.
16+
- Added append-only C++ and thin Python enums for image-region shapes,
17+
coordinate units, boundary roles, and manifest/version record kinds.
18+
19+
### Changed
20+
21+
- XMP Media Management version wrapper fields now query as document history;
22+
image-region boundaries require a target image specification, while
23+
manifest/version records remain source-bound for rendered-image transfer.
24+
325
## 0.4.81 - 2026-07-20
426

527
Changes compared with `0.4.80`.

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.81
1+
0.4.82

‎docs/development.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ model should stay compact:
1717
| Area | Purpose | Readiness |
1818
| --- | --- | --- |
1919
| Decoding | Find metadata carriers and decode EXIF, XMP, IPTC, ICC, Photoshop IRB, JUMBF/C2PA, EXR, and related blocks into `MetaStore` entries. | High, about 98-100% for the current target scope. |
20-
| Interpretation | Normalize names and values, group entries by meaning, and classify source-bound data such as RAW crop, exposure adjustment, color/profile/source-color-transform evidence, RAW curves/linearity metadata with descriptor-backed compressed-storage applicability, lens-correction, sensor, BMFF brand/item-property associations and rollups including `avio` AVIF brands, item groups, item semantic counts, whole-scene policy hints, graph-component summaries with per-component roles, member item IDs, semantic composition, typed relation counts, bounded `grid`/`iovl`/`iden` construction semantics with recursive item-offset descriptors and graph-cycle/source validation, bounded complete `tili` configuration/reference/offset-table interpretation, `container_graph` concepts, primary item properties, primary metadata-carrier flags, primary sidecar and scene summaries, and display-transform summaries, JUMBF labels, Photoshop IRB embedded carriers plus fixed-layout, XML/text, working-path and numbered clipping-path records, byte-count, descriptor-header, scalar/class/alias/enum/reference, and bounded nested list/object summaries, EXIF 3.1 correction/noise labels, version/firmware-style value formatting for selected EXIF/Nikon/Olympus/native RAF contexts, selected Sony ILCE-7RM6 correction-offset routing, Fujifilm flash white-balance naming, Apple/FLIR/JVC/GE/Reconyx/Microsoft/Nintendo/Sanyo scalar MakerNote labels, current Canon RF/Nikon Z lens labels, an ambiguous Pentax Sigma/Samsung/Tokina lens-family label, EXIF/XMP GPS timestamp composites, EXIF `OffsetTime*`/`SubSecTime*` date composition with normalized-instant conflict checks, separate camera/destination/shown/created GPS roles with scope-aware structured-location conflicts, language-aware descriptive roles, legacy editorial duplicate reconciliation, accessibility/taxonomy/registry/image-region/document-identity/lineage/history semantics, structured creator-contact/event/person/organization/product/artwork/rights/license/release/end-user/image-creator/image-supplier/image-asset/controlled-vocabulary/registry/image-region/resource-reference/resource-event/pantry records, independent privacy/policy sensitivity, computational, thermal, stitch/panorama capture state, and vendor-private fields. | High, about 98-99%. |
20+
| Interpretation | Normalize names and values, group entries by meaning, and classify source-bound data such as RAW crop, exposure adjustment, color/profile/source-color-transform evidence, RAW curves/linearity metadata with descriptor-backed compressed-storage applicability, lens-correction, sensor, BMFF brand/item-property associations and rollups including `avio` AVIF brands, item groups, item semantic counts, whole-scene policy hints, graph-component summaries with per-component roles, member item IDs, semantic composition, typed relation counts, bounded `grid`/`iovl`/`iden` construction semantics with recursive item-offset descriptors and graph-cycle/source validation, bounded complete `tili` configuration/reference/offset-table interpretation, `container_graph` concepts, primary item properties, primary metadata-carrier flags, primary sidecar and scene summaries, and display-transform summaries, JUMBF labels, Photoshop IRB embedded carriers plus fixed-layout, XML/text, working-path and numbered clipping-path records, byte-count, descriptor-header, scalar/class/alias/enum/reference, and bounded nested list/object summaries, EXIF 3.1 correction/noise labels, version/firmware-style value formatting for selected EXIF/Nikon/Olympus/native RAF contexts, selected Sony ILCE-7RM6 correction-offset routing, Fujifilm flash white-balance naming, Apple/FLIR/JVC/GE/Reconyx/Microsoft/Nintendo/Sanyo scalar MakerNote labels, current Canon RF/Nikon Z lens labels, an ambiguous Pentax Sigma/Samsung/Tokina lens-family label, EXIF/XMP GPS timestamp composites, EXIF `OffsetTime*`/`SubSecTime*` date composition with normalized-instant conflict checks, separate camera/destination/shown/created GPS roles with scope-aware structured-location conflicts, language-aware descriptive roles, legacy editorial duplicate reconciliation, accessibility/taxonomy/registry/image-region/document-identity/lineage/history semantics, structured creator-contact/event/person/organization/product/artwork/rights/license/release/end-user/image-creator/image-supplier/image-asset/controlled-vocabulary/registry/image-region/image-region-boundary/resource-reference/resource-event/manifest-item/version/pantry records, explicit image-region shape and coordinate-unit contracts, independent privacy/policy sensitivity, computational, thermal, stitch/panorama capture state, and vendor-private fields. | High, about 98-99%. |
2121
| Query | Find entries by name, fuzzy term, or semantic group, then expose normalized query candidates, structured interpretation records, bounded cross-family concept resolutions, transfer hints, sensitivity, and conflict flags for crop/border/active-area, exposure/gain, color/WB/profile/source-color-transform, orientation, date/time, GPS, descriptive fields including contact/event/person/organization/product/artwork/rights/license/release, editorial, accessibility, taxonomy, registry, image-region, document-identity, document-lineage, and document-history semantics, lens-correction, computational/thermal/stitch, RAW/source-processing fields, and BMFF derived-image construction and tiled-image configuration evidence across standard and vendor metadata. | High, about 98-99%. |
2222
| Creation | Build fresh metadata entries from host-provided values. | Medium, about 55-65%. |
2323
| Editing | Modify existing logical metadata entries while preserving valid surrounding structure. | Medium, about 60-70%. |

‎docs/host_integration.md‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,22 @@ additive collections retain distinct values. Structured
9595
members carry both a `record_kind` and `record_scope`, such as `person` plus
9696
`Person[1]`, so hosts can keep associated names, identifiers, descriptions,
9797
contacts, constraints, and release records together.
98+
IPTC image boundaries use the `image_region_boundary` record kind. A complete
99+
boundary adds a `region_boundary` candidate with explicit
100+
`image_region_shape` and `image_region_coordinate_unit` fields. Rectangle
101+
values use `rect` as x, y, width, height; circles use a three-value x, y,
102+
radius vector; polygons use a flattened x, y `vector_set` plus scoped `vec2`
103+
vertex candidates. OpenMeta does not synthesize geometry when the shape, unit,
104+
or required coordinates are incomplete, but valid individual numeric fields
105+
remain queryable. Pixel and relative coordinates are not interchangeable:
106+
hosts must use source and target image specifications to transform or validate
107+
them before transfer.
98108
Treat this as an inspection and policy input rather than an automatic metadata
99109
rewrite decision; source-bound color, lens, and RAW-processing values still need
100110
rendered-transfer safety filtering. Document identity, registry, XMP Media
101-
Management lineage/history, and pantry identity are source-bound; image-region
102-
records require target image specifications because their meaning is tied to
103-
the source image. Each candidate also carries a transfer
111+
Management manifest/version/lineage/history records, and pantry identity are
112+
source-bound; image-region records require target image specifications because
113+
their meaning is tied to the source image. Each candidate also carries a transfer
104114
hint: `safe`, `source_bound`, `rendered_unsafe`, or
105115
`requires_target_image_spec`, plus `compatible_file_safe` and
106116
`rendered_image_safe` booleans for host UI and preflight policy. For transfer

‎docs/interpretation_status.md‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ explicit outcome:
3333
| --- | --- | --- | --- |
3434
| Standard EXIF/TIFF/DNG tag names and typed values | Standard tag names, common scalar/vector values, DNG crop/color/exposure/RAW-processing fields, GeoTIFF key names, EXIF 3.1 learning/development/correction/noise tag names, and common EXIF/TIFF/DNG numeric value-name helpers are available. Exposure time, aperture, ISO sensitivity, exposure bias, exposure program/mode, gain, correction/noise status values, and raw exposure-adjustment records now flow into concept candidates or stable display helpers where appropriate. | High, about 93-96%. | More enum-style human-readable values and richer conflict handling between duplicated families. |
3535
| ICC profiles | ICC header/tag table decode plus interpreted `desc`, text, signatures, XYZ, curves, named-color, measurement, viewing-condition, MFT/MAB/MBA, numeric array, and malformed/limit handling. | High, about 90-95%. | Full color-management policy remains host-owned; OpenMeta interprets profile metadata, not rendered color transforms. |
36-
| IPTC-IIM and portable XMP | IPTC datasets and XMP properties decode into typed entries, bounded EXIF/IPTC-to-XMP projection exists for transfer/writeback, and common descriptive EXIF/IPTC/XMP concepts such as title/headline, description/caption, creator/author, keywords/subject, rights/license, credit/source, IPTC created date/time, and IPTC digital-creation date/time are queryable with source-entry provenance. The `Descriptive` concept also reconciles legacy IPTC/Photoshop urgency, category, supplemental-category, instructions, creator-title, transmission-reference, and caption-writer pairs; interprets IPTC Core accessibility/taxonomy fields, IPTC Extension controlled-vocabulary, registry, and image-region entity records, XMP document identity, and XMP Media Management resource-reference, ingredient, history, manifest-reference, and bounded pantry records; and groups structured creator contacts, events, people, organizations, products, artwork/objects, encoded rights expressions, PLUS parties/assets/license policy, and model/property releases with record kind, record scope, language, transfer hint, and independent sensitivity. | High, about 98-99%. | Non-equivalent legacy workflow fields, image-region boundary normalization, arbitrary pantry payloads, and remaining version/manifest wrapper fields remain bounded. |
36+
| IPTC-IIM and portable XMP | IPTC datasets and XMP properties decode into typed entries, bounded EXIF/IPTC-to-XMP projection exists for transfer/writeback, and common descriptive EXIF/IPTC/XMP concepts such as title/headline, description/caption, creator/author, keywords/subject, rights/license, credit/source, IPTC created date/time, and IPTC digital-creation date/time are queryable with source-entry provenance. The `Descriptive` concept also reconciles legacy IPTC/Photoshop urgency, category, supplemental-category, instructions, creator-title, transmission-reference, and caption-writer pairs; interprets IPTC Core accessibility/taxonomy fields, IPTC Extension controlled-vocabulary, registry, image-region entity records, and rectangle/circle/polygon boundary geometry with explicit pixel/relative units, XMP document identity, and XMP Media Management resource-reference, ingredient, history, manifest-item/reference, version/event, and bounded pantry records; and groups structured creator contacts, events, people, organizations, products, artwork/objects, encoded rights expressions, PLUS parties/assets/license policy, and model/property releases with record kind, record scope, language, transfer hint, and independent sensitivity. | High, about 98-99%. | Non-equivalent legacy workflow fields and deliberately unmodeled arbitrary pantry payloads remain bounded. |
3737
| Orientation | EXIF/TIFF orientation query, LibRaw flip mapping, generic orientation helpers for index, rotation degrees, mirrored state, dimension swap, rotation-only fallback, human-readable labels, and EXIF-vs-XMP conflict reporting in the LibRaw bridge. | High, about 90-95%. | Higher-level policy for resolving container and host pixel-orientation state remains host-specific. |
3838
| Geometry, crop, active area, and borders | DNG crop/active-area/masked-area tags, Phase One/Leaf geometry, Fujifilm RAF raw crop/zoom rectangles, Canon aspect/crop metadata, Nikon Capture crop bounds, Sony panorama crop margins, canonical border margins, vendor RAW-processing geometry buckets, and fuzzy crop/border-style paths are queryable. | High, about 88-92%. | More vendor-specific normalized rectangles and stronger output contracts for ambiguous multi-tag geometry. |
3939
| Exposure and gain | Standard EXIF exposure time, f-number, exposure program/mode, photographic sensitivity, exposure bias, exposure index, gain control, selected DNG baseline/raw-preview gain fields, matching XMP paths, and selected decoded vendor/MakerNote exposure names are queryable and promoted into cross-family exposure roles. Standard EXIF exposure program/mode and gain-control values plus selected Canon/Nikon/Sony/Fujifilm/Pentax/Olympus/Panasonic/Phase One/Kodak/Minolta/Sigma/Samsung/Ricoh MakerNote values carry human-readable labels where stable. Capture exposure facts are marked safe, while raw/DNG exposure adjustments are marked unsafe for rendered-image transfer. | Medium-high, about 91-94%. | More vendor MakerNote exposure print conversions and richer per-vendor exposure/gain labels. |
@@ -63,9 +63,8 @@ outputs.
6363
independently authored conformance files as they become available.
6464
2. Broaden transfer diagnostic policy coverage now that stable message tokens
6565
and localizable argument tokens are available for GUI workflows.
66-
3. Interpret remaining non-equivalent legacy workflow fields, image-region
67-
boundary geometry, and bounded XMP Media Management version/manifest
68-
wrapper fields without guessing at arbitrary pantry payloads.
66+
3. Interpret remaining non-equivalent legacy workflow fields and add pantry
67+
payload semantics only where a validated, bounded schema exists.
6968
4. Expand the remaining unambiguous MakerNote long tail: encrypted/custom
7069
settings, per-model firmware formulas outside currently supported
7170
formatter contexts, remaining live-vendor scalar/string-coded fields, and

‎docs/sphinx/development.rst‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ model should stay compact:
6767
document-identity/lineage/history semantics,
6868
structured creator-contact/event/person/organization/product/artwork/
6969
rights/license/release/end-user/image-creator/image-supplier/image-asset/
70-
controlled-vocabulary/registry/image-region/resource-reference/
71-
resource-event/pantry records,
70+
controlled-vocabulary/registry/image-region/image-region-boundary/
71+
resource-reference/resource-event/manifest-item/version/pantry records,
72+
explicit image-region shape and coordinate-unit contracts,
7273
and independent privacy/policy sensitivity,
7374
computational, thermal, stitch/panorama capture state, and
7475
vendor-private fields.

‎docs/sphinx/host_integration.rst‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,24 @@ delivered-image fields. Scalar
100100
conflicts are isolated by normalized language and structured location scope;
101101
additive collections retain distinct values. Structured
102102
members carry both a ``record_kind`` and ``record_scope``, such as ``person``
103-
plus ``Person[1]``, so hosts can keep associated values together. Treat this as
104-
an inspection and policy input
103+
plus ``Person[1]``, so hosts can keep associated values together. IPTC image
104+
boundaries use the ``image_region_boundary`` record kind. A complete boundary
105+
adds a ``region_boundary`` candidate with explicit ``image_region_shape`` and
106+
``image_region_coordinate_unit`` fields. Rectangle values use ``rect`` as x,
107+
y, width, height; circles use a three-value x, y, radius vector; polygons use
108+
a flattened x, y ``vector_set`` plus scoped ``vec2`` vertex candidates.
109+
OpenMeta does not synthesize geometry when the shape, unit, or required
110+
coordinates are incomplete, but valid individual numeric fields remain
111+
queryable. Pixel and relative coordinates are not interchangeable: hosts must
112+
use source and target image specifications to transform or validate them
113+
before transfer. Treat this as an inspection and policy input
105114
rather than an automatic
106115
metadata rewrite decision; source-bound color, lens, and RAW-processing values
107116
still need rendered-transfer safety filtering. Document identity, registry,
108-
XMP Media Management lineage/history, and pantry identity are source-bound;
109-
image-region records require target image specifications because their meaning
110-
is tied to the source image. Each candidate also carries a
117+
XMP Media Management manifest/version/lineage/history records, and pantry
118+
identity are source-bound; image-region records require target image
119+
specifications because their meaning is tied to the source image. Each
120+
candidate also carries a
111121
transfer hint: ``safe``, ``source_bound``, ``rendered_unsafe``, or
112122
``requires_target_image_spec``, plus ``compatible_file_safe`` and
113123
``rendered_image_safe`` booleans for host UI and preflight policy. For transfer

0 commit comments

Comments
 (0)