API Stability¶
This page defines the adoption status for public OpenMeta APIs. Python bindings mirror these labels unless a Python wrapper documents a different status.
OpenMeta 0.8.3 retains the unfrozen development ABI label 4. C++ layouts and APIs may change without advancing this label; consumers rebuild against matching release headers and libraries. CMake package discovery permits a newer release within the requested major version; this does not guarantee ABI compatibility. Existing patch/handoff and snapshot v1 contracts retain their versioned guarantees. See Migrating to OpenMeta 0.8.
Stability levels¶
Level |
Meaning |
|---|---|
Stable |
Intended for downstream use. Breaking changes require a new contract version, a compatibility path, or a documented migration. |
Experimental |
Public and tested, but the exact shape or semantics may still evolve while the surrounding workflow is being hardened. |
Internal |
Publicly visible only because it is part of a lower-level implementation surface. Do not build new downstream integrations on it unless another doc names it as supported. |
Host-facing API map¶
API surface |
Header |
Stability |
Notes |
|---|---|---|---|
Host Adoption Profile v1:
|
|
Stable |
Exact compile-time/runtime contract descriptor for the narrow positional read, persistence, reconciliation, diagnostics, and typed codec-operation schema. See Host Adoption Profile. |
Prepared Transfer Handoff v1:
immutable template preparation/replay plus
|
|
Stable v1 |
Move-only opaque owners hide routes and bundle state. Template preparation and worker creation may allocate. Instance query, patch, access, and replay allocate nothing; patch batches are exact-width, required-slot, alias-rejecting, and transactional. Independent instances own their payloads and may run concurrently. See Prepared Transfer Handoff. |
Runtime capability query: |
|
Stable |
v1 query contract for read, structured decode, transfer preparation, target edit, and raw-preservation status by format/family. |
Positional source, snapshot, and read diagnostics:
|
|
Stable v1 |
Allocation-free exact callback reads, caller-owned accounting/scratch, owned finalized snapshots, explicit completeness/residual semantics, and caller-buffered structured diagnostics. Format coverage may grow additively. See Host Adoption Profile and Random-Access Input. |
Low-level positional format decode, payload, and scan APIs:
|
|
Experimental |
Format-specific structures and scratch requirements may still evolve. The stable top-level snapshot result exposes unsupported or incomplete lanes as explicit residuals. |
Compatibility dumps: |
|
Stable |
Stable v1 line-oriented compatibility dump contract, including
generic BMFF component membership, role, relation-summary, policy,
derived-image construction, and tiled-image configuration fields as
normal |
XMP sync and writeback policy enums: |
|
Stable |
Stable bounded writer policy for generated portable XMP. See XMP Sync And Writeback Policy. |
Generic metadata traversal: |
|
Stable |
v1 traversal contract. Borrowed names are valid only during
|
|
|
Stable |
Stable naming modes for key-space-aware and portable exports. |
|
|
Stable |
Stable v1 flat host naming contract. See FlatHost Mapping Contract. |
Typed FlatHost import: |
|
Stable v1 |
Transactional detached-store reconciliation by exact source identity,
unique FlatHost name, or explicit typed key. Removals retain stable
|
Fresh metadata creation: |
|
Experimental |
Transactional v1 contract for bounded host-provided logical fields.
Produces a finalized canonical portable-XMP |
Generic typed metadata authoring: |
|
Experimental v1 |
Transactional bounded construction of finalized EXIF/TIFF/DNG-style, XMP, and IPTC-IIM entries. Unknown/private EXIF and custom XMP namespaces remain authorable; safe scalar/indexed custom XMP is supported. C++ only in this milestone. See Generic Typed Metadata Authoring. |
Detached store/schema validation: |
|
Experimental v1 |
Structured structural and initial TIFF/EXIF/GPS/DNG/XMP schema diagnostics with resource limits, duplicate-singleton checks, and optional image/CFA/color context. |
Canonical TIFF/EXIF serialization: |
|
Experimental v1 |
Deterministic measure/write for unwrapped little-endian TIFF bytes. The same payload feeds existing target wrappers. Opaque MakerNotes drop by default. See Canonical Metadata Serialization. |
Prepared TIFF/EXIF and scalar XMP patching:
|
|
Experimental v1 |
Target-neutral opaque handles for typed EXIF and emitted scalar XMP values. Preparation and worker creation may allocate; mixed batches, payload access and library replay do not. Failure changes neither payload. See Prepared metadata patching. |
Logical metadata editing: |
|
Experimental |
Transactional v1 contract over finalized stores and the Creation
logical field map. Set/remove preserve provenance through dirty values
and tombstones; add handles deterministic repeated fields and explicit
singleton conflicts. Python returns a detached edited |
Reverse creation-date translation:
|
|
Experimental |
Transactional v2 projection of eligible edited XMP creation dates into
exact native EXIF/IPTC date groups. The caller selects mappings, source
mode, conflict behavior, and lowered resource limits; lossy precision,
malformed dates, duplicate sources, and unresolved conflicts fail
without replacing the output. Python exposes the same C++ transaction
through a detached |
Reverse technical EXIF translation:
|
|
Experimental |
Transactional v2 projection of exact |
Reverse capture EXIF translation:
|
|
Experimental |
Transactional v2 projection of exposure time, F-number, ISO, focal
length, and exposure compensation XMP properties into tag-specific
native |
EXIF 3.1 LearningOptOutIn translation:
|
|
Experimental v1 |
Bounded transactional projection of the exact |
Profile authoring translation: |
|
Experimental v1 |
Bounded transactional projection of TIFF ImageDescription, Artist and scalar Copyright plus EXIF ColorSpace and printable 8.3 RelatedSoundFile into native EXIF. Text encoding, legacy two-part Copyright conflict behavior, filename validation and limits are explicit; ICC/image/audio inference is not performed. Python mirrors the detached-store transaction. See Metadata Translation. |
Target-bound image-geometry translation:
|
|
Experimental |
Transactional v1 projection of exact XMP orientation and complete
stored-raster dimensions into canonical native TIFF/EXIF |
Reverse descriptive translation:
|
|
Experimental |
Transactional v1 projection of exact default-language title/description/rights, indexed creators/keywords, credit, and source into bounded IPTC-IIM datasets. Repeated cardinality, dirty tombstones, byte limits, conflicts, and UTF-8 charset declaration are explicit; unsafe legacy charset reinterpretation fails atomically. Python remains a thin detached-document wrapper. See Metadata Translation. |
Reverse location translation: |
|
Experimental |
Transactional v1 projection of five flat IPTC Core location properties into native IPTC-IIM. Reuses descriptive policies, statuses, and result diagnostics with separate location options. Exact singleton paths, byte limits, country-code syntax, dirty tombstones, and charset safety are explicit; structured locations and GPS are outside the contract. Python provides the same operation. See Metadata Translation. |
Reverse editorial translation: |
|
Experimental |
Transactional v1 Headline, Instructions, and TransmissionReference writeback with independent editorial options. Reuses descriptive policies/results, exact singleton validation, UTF-8 safety, and resource limits. Python provides the same operation. See Metadata Translation. |
Combined IPTC translation: |
|
Experimental |
Transactional v1 writeback of 20 text/priority groups, adding creator job title, caption writer, category, supplemental categories, and urgency. Independent flags, shared charset/resource limits, and cross-group atomicity. Existing subgroup/date contracts are unchanged. Python provides the same operation. See Metadata Translation. |
Structured location reconciliation: |
|
Experimental |
Transactional v1 projection of one explicitly selected structured record into five flat XMP/native IPTC pairs. Record kind/index, paired conflicts, dirty leaf removal, text limits, and charset safety are explicit. Python provides the same operation. See Metadata Translation. |
Primary GPS translation: |
|
Experimental |
Transactional v1 latitude/longitude and altitude/reference writeback. Exact rational precision, paired source/native reconciliation, GPS version handling, and resource limits are explicit. Python provides the same operation. See Metadata Translation. |
GPS time/navigation translation: |
|
Experimental |
Transactional v1 UTC date/time, speed/unit, track/reference, and image direction/reference writeback. Exact precision, UTC rollover, version support, paired conflicts/removal, and portable reference aliases are explicit. Python provides the same operation. See Metadata Translation. |
Destination GPS translation: |
|
Experimental |
Transactional v1 destination coordinates, bearing/reference, and distance/unit writeback. Exact precision, paired conflicts/removal, version retention, and historical distance-label compatibility are explicit. Python provides the same operation. See Metadata Translation. |
GPS quality translation: |
|
Experimental |
Transactional v1 status, measurement mode, DOP, differential correction, and horizontal error with explicit enum, precision, version, and removal contracts. Python provides the same operation. See Metadata Translation. |
GPS text translation: |
|
Experimental |
Transactional v1 satellites, map datum, processing method, and area with explicit ASCII/Unicode encoding, version, conflict, and removal contracts. Python provides the same operation. See Metadata Translation. |
LightSource translation: |
|
Experimental |
One bounded LightSource SHORT with explicit code/label ambiguity, typed conflicts and removal. See Metadata Translation. |
Sensitivity translation: |
|
Experimental |
Version 2 seven-tag sensitivity group with explicit companions, LONG limits, whole-group conflicts and atomic removal. See Metadata Translation. |
Camera/lens/spectral text translation: |
|
Experimental |
Version 2 six-field printable-ASCII transaction with bounded lens lifecycle, with exact namespaces, explicit aliases, typed conflicts, bounds and removal. See Metadata Translation. |
Flash translation: |
|
Experimental |
Version 2 scalar or five-child Flash writeback with explicit bitfield, conflict, and removal rules. See Metadata Translation. |
Capture rational translation: |
|
Experimental |
Four exact unsigned capture rationals with explicit sentinel, precision, conflict, and removal rules. See Metadata Translation. |
Capture settings translation: |
|
Experimental |
Twelve closed SHORT camera-setting enums with atomic conflicts/removal and Python support. See Metadata Translation. |
Structured location construction: |
|
Experimental |
Five flat XMP fields into an explicit Created/Shown record with dense indexes and atomic removal. See Metadata Translation. |
EXIF/TIFF orientation helpers: |
|
Stable |
Small utility contract for user-facing orientation labels, clockwise rotation degrees, mirrored-state detection, dimension-swap detection, and rotation-only fallbacks. Python exposes the same helpers through thin scalar/dictionary wrappers. |
EXIF/TIFF/DNG numeric value names and version formatting:
|
|
Stable |
Small helper contract for common enum-like TIFF/EXIF/DNG numeric values
such as compression, photometric interpretation, planar configuration,
exposure program/mode, metering mode, light source, flash, color space,
white balance, scene capture type, gain control, CFA layout, and DNG
calibration illuminants, and EXIF 3.1 lens-correction /
noise-reduction status values, plus selected bounded Canon/Nikon/
Sony/Fujifilm/Pentax/Olympus/Panasonic/Phase One/Kodak/Minolta/Sigma/
Samsung/Ricoh/Apple/FLIR/JVC/GE/Reconyx/Microsoft/Motorola/Nintendo/Sanyo
MakerNote contexts including NikonSettings On/Off labels, Reconyx
scalar labels, Microsoft stitch labels, Motorola |
Photoshop IRB decode: |
|
Experimental |
Bounded resource traversal with stable raw resource preservation
behavior, but the interpreted subset can still grow. Current
interpretation includes fixed-layout resource fields,
display/grid/thumbnail/color-sampler headers, working-path and
numbered clipping-path byte counts / record summaries,
descriptor-header summaries plus safe descriptor class-name/class-ID/
item-count fields, bounded descriptor item bodies for |
Semantic metadata query: |
|
Experimental |
Query contract for inspection matches plus normalized candidates.
Current coverage includes crop/active-area/border margins,
exposure/gain, white balance, color/profile/source-color-transform,
lens correction, orientation, descriptive EXIF/IPTC/XMP fields
including exact contact/event/person/organization/product/artwork/
rights/license/credit/source/rights-expression/release semantics,
container-graph evidence for BMFF content-bound metadata and
multi-image scene policy, and RAW/source-processing metadata across
standard tags, selected DNG tags,
RAW value curves, RAW linearity limits, RAW calibration curves, RAW
curve control points, EXIF color-space evidence, ICC header/tag
entries, XMP
ICC/profile/color-space fields, XMP camera RAW profile/look/tone-curve
fields, PNG profile text carriers, Fujifilm RAF raw crop/zoom
rectangles, Canon aspect/crop metadata, Canon AF micro-adjustment,
Canon ambience-selection, Canon ColorData source color-transform,
NikonSettings source-processing aliases, Nikon Capture crop bounds,
Sony panorama crop margins, selected decoded vendor/MakerNote exposure
names, crop/border XMP paths, and vendor RAW-processing classification.
Semantic Query uses deterministic tag, namespace, and name matching;
tolerant partial matching is isolated in the separate Fuzzy Search API
so near names cannot change metadata meaning. Matches retain
|
Structured metadata interpretation records:
|
|
Experimental |
Thin structured projection over semantic query candidates. Records
carry query class, semantic kind, normalized shape, confidence, source
entry ids, and normalized origin/size/rect/margins/value arrays where
available. Current scope covers orientation, geometry/crop/border
including Fujifilm RAF, Canon, Nikon Capture, and Sony panorama
geometry patterns, exposure/gain,
color/white-balance/profile/source-color-transform records,
lens-correction, and RAW/source-processing records including raw value
curves, linearity limits, calibration curves, curve control points,
computational, thermal, and stitch/panorama subroles, and grouped
vendor-family table/vector records where
classification supports them. Python |
Cross-family concept resolution:
|
|
Experimental |
First bounded resolver for duplicated host-facing concepts. Current
scope reports candidates, candidate source entries, source families,
preferred entries, normalized numeric/text keys, full normalized value
vectors, transfer hints, RAW applicability states, normalized date/time
fields, date/time precision including bounded subsecond digits,
timezone kind, normalized geometry fields, normalized exposure values,
and same-role conflicts for orientation,
date/time, exposure/gain, color/profile/source-color-transform, GPS,
descriptive fields, geometry, lens-correction, RAW-processing, and
container-graph evidence
across EXIF, XMP, IPTC, ICC, PNG text, BMFF fields, and query-backed
interpretation records where applicable. Exposure
candidates cover exposure time, aperture, ISO sensitivity, exposure
bias, exposure program/mode, gain, and raw exposure-adjustment roles
across standard EXIF/DNG/XMP evidence and selected decoded
vendor/MakerNote exposure names. 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 include human-readable labels where stable. Capture
exposure facts are safe, while raw/DNG exposure adjustments stay
rendered-unsafe. Geometry
candidates cover crop, active area, border, and sensor geometry with
canonical origin, size, rect, and margin fields when available,
including normalized DNG, Phase One/Leaf, Fujifilm RAF, Canon, Nikon
Capture, and Sony panorama geometry patterns.
Candidate transfer hints distinguish |
Bounded fuzzy entry search: |
|
Experimental |
Optional RapidFuzz-backed search over decoded metadata names and
property paths. The API has bounded query/candidate/result sizes,
caller-selected score cutoff, deterministic top-k ordering, stable
entry-id ties, explicit exact/curated-alias/general-fuzzy provenance,
and status returns for unavailable, invalid, short, long, or non-ASCII
queries. The current normalization contract is locale-independent ASCII
with separator, camel-case, and acronym-boundary normalization but
without Unicode normalization or transliteration. Calls use local state
and are safe against an immutable finalized store. Python |
Transfer concept diagnostics:
|
|
Experimental |
Preflight view over concept candidates for |
Vendor RAW-processing summaries:
|
|
Experimental |
Conservative grouped source-RAW/source-processing field summaries for decoded Sony, Canon, Nikon, Fujifilm, Pentax, Panasonic, Olympus, Kodak, Minolta, Sigma, Samsung, Ricoh, Apple, DJI, Google, FLIR, Casio, Sanyo, KyoceraRaw, Reconyx, HP, JVC, GE, Motorola, Nintendo, and Microsoft MakerNotes, including vendor-private, computational, thermal, preview, face-geometry, stitch/panorama, Apple computational capture/HDR/motion, DJI pose/thermal, Google HDR+/shot-log, pixel-shift/multi-shot/ composite/auto-lighting/source-style processing, and FLIR radiometric/raw-value buckets. Long-tail aliases cover source color/style, camera-to-XYZ/RGB matrix, white-balance gain, optical/lens correction, dynamic-range, and raw-development terms. Direct field classification also recognizes decoded Phase One/Leaf RAW-processing tags; use the dedicated Phase One/Leaf helpers for normalized geometry and processing summaries. Intended for audit/UI and rendered-transfer safety decisions, not for writing vendor RAW/source-processing values into rendered targets. |
Transfer safety audit:
|
|
Experimental |
Preflight summary of source entries and entries filtered or invalidated
by |
MakerNote transfer audits:
|
|
Experimental |
The generic audit reports raw opaque payload and decoded-only entry
counts plus current rewrite trust capabilities. The layout audit
recognizes canonical Nikon type 1 outer-TIFF-relative notes and type 3
notes with an embedded TIFF at byte 10; bounded embedded-TIFF validation
covers standard directory/value offsets only. It also recognizes
plausible Canon source-dependent IFD notes when the EXIF camera make is
Canon, but reports their source offset basis as ambiguous and does not
mark them rewritable. The writer still cannot reconstruct decoded
fields, relocate vendor-private offsets, repair checksums, prove semantic
readability, or pass MakerNotes through as raw carriers. Python
|
Raw-carrier passthrough audit:
|
|
Experimental |
Diagnostic preflight for opt-in raw carriers. Reports candidate carriers and primary block reasons such as missing payload, target incompatibility, safety filtering, content-bound C2PA, explicit profile policy, missing decoded-entry links, or unsupported carrier kind. Hosts can call it directly before enabling snapshot passthrough. |
Decoded source snapshot state: |
|
Stable v1 profile |
Stable decoded-store state for positional read, persistence, and reconciliation. Optional raw-carrier records are preserved as data, but raw-carrier passthrough policy remains experimental. Const reuse is safe when callers do not mutate the snapshot. |
File/bytes/build snapshot helpers:
|
|
Experimental |
Convenience entry points outside the narrow positional Host Adoption Profile. |
Versioned source snapshot persistence:
|
|
Stable v1 |
Target-neutral canonical v1 representation with transactional bounded parsing and an exact compatibility vector. Preserves store blocks, duplicate order, typed values, provenance, tombstones, flags, and optional raw-carrier links. Unknown versions are rejected atomically. |
Fileless preparation:
|
|
Experimental |
Intended for hosts that already decoded metadata and want to prepare
transfer artifacts without reopening the source file.
|
Snapshot execution:
|
|
Experimental |
Intended for deferred save/writeback from a reusable decoded source snapshot. |
Bundle execution:
|
|
Experimental |
Intended for hosts that already own a prepared bundle and destination bytes. Treat bundles as immutable except through documented patch helpers. |
Typed adapter operation schema:
|
|
Stable v1 schema |
Enum-based insertion operations with explicit marker, tag, box, chunk,
item, property, and payload sizing fields. Stable hosts obtain payload
and EXR name/type/value views through |
Adapter-view execution:
|
|
Experimental |
Builds and validates the stable v1 operation schema over an experimental prepared bundle. Construction and payload resolution remain coupled to the broader prepared-bundle model. |
Generated transfer payload internals, route strings, low-level package chunks, and diagnostic counters not documented by a stable API page |
|
Internal |
These fields may be useful for tests and diagnostics, but they are not a compatibility contract for downstream integrations. |
Structured descriptive record kinds cover creator contacts, events, people,
organizations, products, artwork/objects, rights expressions, rights holders,
licensors, licensees, licenses, releases, end users, image creators, image
suppliers, image assets, controlled-vocabulary terms, registry entries, image
regions, resource references, resource events, manifest items, versions,
editorial workflows, source software, editorial contacts, technical-image,
audio-asset, preview-asset, and pantry records. The IPTC technical records
normalize image layout, component count, audio channel/rate/resolution/
duration, preview format/version, and bounded binary payload identity without
treating IPTC layout as EXIF rotation.
Sensitivity
is mirrored in transfer diagnostics and thin Python dictionaries. Hosts must
not interpret a safe transfer
hint as approval to publish personal-contact,
person-identity, location, or legal-rights metadata.
Exact descriptive query semantics also cover legacy editorial workflow pairs,
non-equivalent IPTC taxonomy and workflow fields, scoped prior-envelope
references and originating software, IPTC Core accessibility and taxonomy
fields, IPTC Extension registry and
image-region entities, resource/document identity and lineage/history, and
remaining bounded PLUS party, delivered-asset, and license-policy fields.
Legacy IPTC image, audio, and preview datasets use exact
technical_image, audio, and preview semantics.
Equivalent scalar pairs participate in preference/conflict handling; taxonomy,
resource-identifier, and license-document collections remain additive.
Document identity/lineage/history, registry, prior-envelope-reference, and
source-software records are source-bound for rendered transfer; image-region
records require target image specifications. Editorial contacts carry
personal-contact sensitivity independently of their technical transfer hint.
Technical-image, audio-asset, and preview-asset records are source-bound.
The bounded BMFF tiled-image field contract covers tilC version 0 tile
dimensions, up to eight extra dimensions, dref/deti mapping, internal
tile_item_type/tipa associations, bounded external URL components,
logical offset-table rows, explicit or sequentially inferred tile sizes, and
separate core/layout/complete validity. Offset-table validation is capped at
262144 entries, emitted rows at 64, property associations at 64, and retained
URL components at 512 bytes. TiledImageConfiguration remains an
experimental source-bound concept role exposed unchanged by the thin Python
enum.
Practical guidance¶
Use stable APIs for normal application integrations. Use experimental APIs when they match a real workflow and the integration can track OpenMeta releases. Avoid internal surfaces unless you are contributing to OpenMeta itself or writing a test that is intentionally tied to implementation details.
High-throughput hosts should use Host Adoption Profile for read/state compatibility and Prepared Transfer Handoff for stable target preparation, then query format capabilities separately.
Image Encoding and Composite Translation (0.5.7)¶
translate_xmp_image_encoding_metadata and translate_xmp_composite_metadata
are experimental v1 APIs with thin Python wrappers. Six typed native fields,
exact rationals, group dependencies and bounded binary exposure lists share
validation and portable-output rules. EntryFlags::ValueBigEndian preserves
raw big-endian exposure bytes. Snapshot v1 layout remains unchanged, but a
snapshot carrying this new flag needs a 0.5.7 or later reader. See
Metadata Translation.
Structured Capture Update (0.5.8)¶
OECF, SpatialFrequencyResponse, CFAPattern and DeviceSettingDescription add
four native targets in one transaction through
translate_xmp_structured_capture_metadata and its Python counterpart.
The 0.5.8 combined inventory was 65 distinct native tags across fifteen APIs
(62 retained by compatible-file transfer). ABI 3 and host synchronization
remain unchanged; big-endian snapshots for these four tags need a 0.5.8
reader. See Metadata Translation for the encoding, bounds and conflict contract.
EXIF Text Update (0.5.9)¶
The 0.5.9 text/version batch adds UserComment, both version fields and seven EXIF 3 text tags. The new EXIF text API also supports UTF-8 owner/lens fields. The combined capture inventory is 75 distinct ExifIFD tags across sixteen APIs; compatible-file transfer retains 72. Version and Artist/Software companion requirements are explicit. ABI 3, snapshot v1 layout and host synchronization responsibilities remain unchanged. BOM-less big-endian UserComment snapshots require a 0.5.9 reader. See the EXIF text/version translation contract for limits and the recorded OIIO/ExifTool reader limitations.
EXIF 3.1 Development and Correction Update (0.5.11)¶
The experimental translate_xmp_development_correction_metadata contract
and its Python counterpart add A40D-A412 with a packed DevelopmentType
resource, the published DevelopmentCharacterstic spelling, UTF-8 type-129
description and bounded correction codes. Selected writeback requires an
explicit host version of 0300 or 0310. The translator never changes
ExifVersion. ABI 3, snapshot v1 and host-owned synchronization remain
unchanged. See Metadata Translation.
Standard Validation Update (0.5.10)¶
Fixed schemas now cover 64 existing reverse targets, five registered Interop fields and three structural pointers. Authoring, typed editing and canonical serialization reject malformed known fields that previously followed the unknown-tag policy. Strict unknown-tag validation accepts valid fields in this batch. Native enum and value checks also govern portable-output eligibility. This is a validation behavior change; public signatures, ABI 3, snapshot v1 layout and host synchronization responsibilities are unchanged. Detached validation does not enforce mandatory complete-file companions. See Generic Typed Metadata Authoring for the bounded validation contract.