Skip to content

Commit fd7ad2e

Browse files
committed
Interpret structured editorial and licensing metadata
Add normalized record kinds and roles for structured IPTC and PLUS metadata, including contacts, people, organizations, products, artwork, rights expressions, licenses, constraints, and releases. Expose independent policy-sensitivity classification through C++, transfer diagnostics, and Python bindings. Extend exact query semantics, conflict handling, tests, and public documentation. Increase version to 0.4.79.
1 parent 4b11794 commit fd7ad2e

22 files changed

Lines changed: 1400 additions & 145 deletions

CHANGES.md

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

3+
## 0.4.79 - 2026-07-17
4+
5+
Changes compared with `0.4.78`.
6+
7+
### Added
8+
9+
- Added structured descriptive record kinds and normalized roles for creator
10+
contacts, events, people, organizations, products, artwork/objects, encoded
11+
rights expressions, rights holders, licensors, licensees, licenses, and
12+
model/property releases.
13+
- Added exact query semantics for contact, event, person, organization,
14+
product, artwork, encoded-rights-expression, and release fields.
15+
- Added an independent sensitivity classification for personal contact,
16+
person identity, location, and legal-rights metadata. C++ candidates,
17+
transfer diagnostics, and thin Python dictionaries expose the same values.
18+
- Added interpretation for PLUS license dates, constraints, transaction and
19+
project identifiers, terms, conditions, and release status/identifiers.
20+
21+
### Changed
22+
23+
- Structured descriptive conflicts and preference are isolated by record kind,
24+
record scope, and language where applicable, so equal roles in different
25+
people, products, artwork, license, or release records remain independent.
26+
- Technical transfer safety and policy sensitivity are reported separately;
27+
privacy-sensitive metadata can remain technically portable without being
28+
treated as automatically appropriate for publication.
29+
- Creator-contact, structured editorial, rights-expression, and PLUS fields
30+
now participate in exact descriptive query results without consuming new
31+
bits from the full legacy `MetadataQueryMatchTerm` mask.
32+
333
## 0.4.78 - 2026-07-15
434

535
Changes compared with `0.4.77`.

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.78
1+
0.4.79

docs/api_stability.md

Lines changed: 10 additions & 1 deletion
Large diffs are not rendered by default.

docs/development.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ 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 scalar roles and additive creator/keyword/location-identifier/rights-holder/licensor collections with structured owner/licensor scopes, computational, thermal, stitch/panorama capture state, and vendor-private fields. | High, about 97-98%. |
21-
| 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, and conflict flags for crop/border/active-area, exposure/gain, color/WB/profile/source-color-transform, orientation, date/time, GPS, descriptive fields including rights/license/credit/source, lens-correction, computational/thermal/stitch, RAW/source-processing fields, and BMFF derived-image construction and tiled-image configuration evidence across standard and vendor metadata. | Medium-high, about 92-95%. |
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, structured creator-contact/event/person/organization/product/artwork/rights/license/release records, independent privacy/policy sensitivity, computational, thermal, stitch/panorama capture state, and vendor-private fields. | High, about 98-99%. |
21+
| 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 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 96-98%. |
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%. |
2424
| Transfer | Move metadata between files using explicit compatible-file or rendered-image safety policies. | Medium-high, about 80-85%. |
@@ -99,8 +99,9 @@ candidate source entries, source families, preferred entries, normalized
9999
compare keys, parsed date/time fields, date/time precision, timezone kind, GPS
100100
altitude-reference state, distinct destination/shown/created coordinate roles,
101101
structured-location scope, normalized descriptive language, additive
102-
collection preference, generic structured-record scope for rights/licensor
103-
records, canonical geometry origin/size/rect/margins,
102+
collection preference, structured record kinds and scopes for editorial,
103+
rights, license, and release records, independent policy sensitivity,
104+
canonical geometry origin/size/rect/margins,
104105
normalized exposure values, full normalized value vectors for grouped
105106
matrix/vector/table records, transfer hints, compatible and rendered safety
106107
booleans, and same-role conflict flags. This is deliberately an

docs/host_integration.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,13 @@ resolved independently within each scope. Use
8484
Descriptive concepts reconcile standard EXIF, IPTC IIM, Dublin Core,
8585
XMP Rights, Photoshop, IPTC Core/Extension, and PLUS title/headline,
8686
description, creator, keyword/subject, location, copyright, rights/license,
87-
credit, and source fields. Scalar conflicts are isolated by normalized
88-
language and structured location scope; creator, keyword, location-identifier,
89-
rights-holder, and licensor values are additive collections whose duplicate
90-
values select one preferred source. Structured owner/licensor members also
91-
carry a `record_scope`, such as `Licensor[1]`, so hosts can keep associated
92-
names and identifiers together.
87+
credit, source, creator-contact, event, person, organization, product,
88+
artwork/object, encoded-rights-expression, license-constraint, and release
89+
fields. Scalar conflicts are isolated by normalized language and structured
90+
location scope; additive collections retain distinct values. Structured
91+
members carry both a `record_kind` and `record_scope`, such as `person` plus
92+
`Person[1]`, so hosts can keep associated names, identifiers, descriptions,
93+
contacts, constraints, and release records together.
9394
Treat this as an inspection and policy input rather than an automatic metadata
9495
rewrite decision; source-bound color, lens, and RAW-processing values still need
9596
rendered-transfer safety filtering. Each candidate also carries a transfer
@@ -106,6 +107,13 @@ diagnostics distinguish stored RAW samples from rendered pixels before
106107
choosing keep/drop actions. Rendered-transfer drop messages distinguish source
107108
color transforms, white balance, lens correction, source RAW curves/linearity
108109
metadata, source-bound RAW processing, and target-owned image properties.
110+
111+
`sensitivity` is a separate policy signal with `none`, `personal_contact`,
112+
`person_identity`, `location`, and `legal_rights` values. A candidate marked
113+
`safe` can still be privacy- or policy-sensitive. Hosts that publish or share
114+
images should review or remove sensitive metadata according to their own user
115+
consent, privacy, and rights policies; OpenMeta does not drop it automatically
116+
merely because it is sensitive.
109117
Hosts can localize or replace the wording, but they do not need to invent the
110118
basic safe/drop/rewrite reasons.
111119

0 commit comments

Comments
 (0)