Standard EXIF Authoring Inventory¶
Audit date: 2026-09-17. Baseline: C++ 0.5.9, ABI 3, commit 6d04da1.
This is an inventory and batch decision.
0.5.10 update: the selected validation batch is implemented. The 64 routed fields now have fixed schemas; five registered Interop fields and three structural pointers are recognized. The following counts and probe observations remain the historical 0.5.9 baseline. See Generic Typed Metadata Authoring for the current validation boundary. The six EXIF 3.1 development/correction fields are implemented in 0.5.11; LearningOptOutIn is covered by the next bounded structured contract.
0.5.12 update: LearningOptOutIn 9287 now has a bounded C++/Python
transaction with exact exifEX structure and native type-7 validation. The
profile transaction covers IFD0 ImageDescription, Artist, scalar
Copyright, ExifIFD ColorSpace and RelatedSoundFile. These routes do
not create a mandatory complete-file profile or infer ICC, image or audio facts.
Scope and counts¶
Sources are EXIF 3.0, corrected 2024 edition, EXIF 3.1, 2026 edition and the 2026 XMP mapping specification. Counts cover primary-image data fields in Tables 6, 8, 9, 14 and 16. They exclude duplicate thumbnail instances, TIFF/EP, DNG, vendor fields and structural pointers 8769, 8825 and A005. Tag IDs are hexadecimal.
Group |
Fields |
Reverse targets |
Boundary |
|---|---|---|---|
TIFF/IFD0, Table 6 |
30 |
7 |
Four technical and three geometry fields |
ExifIFD, EXIF 3.0 |
88 |
85 |
75 capture, eight date, two geometry fields |
ExifIFD, EXIF 3.1 |
95 |
85 |
Seven new fields |
GPSIFD, Table 14 |
32 |
31 |
GPSVersionID is a managed companion |
InteropIFD, Table 16 |
1 |
0 |
InteroperabilityIndex; other registry entries are extensions |
The ExifIFD editions overlap and must not be added. A reverse route is a bounded XMP-to-native contract, not all-value support, complete-file conformance or competitor parity. Generic exact-key authoring and registry names are separate. The seventeen capture APIs have 86 mappings to 81 tags. ISO, ExposureBiasValue, CameraOwnerName, LensMake and LensModel each have two owners; the six development/correction fields are new singleton targets; see Capture Synchronization Milestone.
Validation findings and selected next batch¶
Fixed schema entries cover 17/30 IFD0 fields, 45/95 ExifIFD fields, 9/32 GPS fields and 0/1 Interop fields. These counts do not establish semantic validation. 64 existing reverse targets lack fixed schema entries: 41 ExifIFD and 23 GPSIFD fields. All seven routed IFD0 fields have entries.
Runtime probes against 0.5.9 reproduce these boundaries:
Text at MeteringMode 9207 is accepted under the default unknown-tag policy. A valid SHORT at that key is rejected as
UnknownExifTagunder strict policy.Valid ASCII
R98at InteroperabilityIndex 0001 is rejected asWrongIfd. The fallback recognizes the same numeric ID in GPSIFD, with no Interop schema.Detached authoring accepts ImageTitle without ExifVersion, Photographer without Artist and reserved ColorSpace 42. The EXIF text translator accepts CameraOwnerName without Artist. UTF-8 Make remains outside the documented ASCII-only technical reverse contract.
The next coherent batch is validation of existing writeback fields:
Add type/count/singleton rules for the 64 routed fields; reuse existing enum, bitfield, rational-sentinel, array and text validators. Check detailed tag definitions, not only summary-table wire types.
Recognize the standard Interop field and legal reused IDs. Cover registered Interop extensions as needed while preserving true misplaced-tag diagnostics.
Check a consistent native contract through authoring, typed editing, translation and serialization, including malformed values, wire hints, unknown-tag policies, duplicates, limits and rollback.
Qualify combined capture/GPS values, portable output, snapshots and container round trips together; run one final platform matrix for the implemented batch.
Preserve documented valid translator output and sentinels. Keep unknown/private policy explicit and document tighter rejection of malformed known fields. Detached stores must not acquire mandatory complete-file requirements or inferred companions. Conflicting shared-object access remains host-synchronized.
Remaining writeback and profile work¶
Only MakerNote 927C remains without a dedicated EXIF 3.0 reverse route. The 0.5.12 profile transaction covers ColorSpace A001 and RelatedSoundFile A004; ICC, target-image and audio-file authority remains host-owned.
The six EXIF 3.1 development/correction fields A40D–A412 are implemented in 0.5.11:
DevelopmentType: SHORT containing two bytes, each chosen from 1, 2 or 4; XMP uses a structure.
DevelopmentTypeDescription: native UTF-8 type 129, even for ASCII characters.
DistortionCorrection, ChromaticAberrationCorrection, ShadingCorrection: SHORT 0 or 1. NoiseReduction: SHORT 0 through 3.
DC-010-2026 Table A.6 spells the structure fields
exifEX:DevelopmentCharacterstic and exifEX:FactoryDefault. Preserve that
published spelling and use namespace URI http://cipa.jp/exif/1.0/.
Native and XMP values are retained together during rendered-image transfer; do
not infer processing history from RAW or MakerNote data.
Version policy needs an explicit decision: DC-008-2026 section 4.6.6.1.1 says
0300 in English (PDF page 58) and the Japanese original (PDF page 60),
whereas DC-010-2026 Table 7 describes EXIF 3.1 as 0310 (PDF page 14).
Record the source discrepancy and chosen host-supplied policy; the translator
requires 0300 or 0310 for selected writeback and never changes ExifVersion.
LearningOptOutIn 9287 is the seventh EXIF 3.1 field. Its complete bounded
usage/intention structure and explicit 0300/0310 host policy are implemented.
The 0.5.12 profile transaction provides dedicated routes for IFD0 ImageDescription, Artist, scalar Copyright, ColorSpace and RelatedSoundFile. An existing legacy two-part NUL Copyright value is preserved or conflicts by policy; arbitrary two-part Copyright authoring and broader companion relationships remain outside the route. The other twenty unrouted Table 6 fields describe raster/color/layout facts and need host/encoder authority. Full mandatory-tag and color/Interop validation requires file/container/version context beyond today’s dimensions/CFA context.
Downstream OIIO/iRAW acceptance stays on hold pending consumer runs. Existing JP2 and boxed JPH rewrite support is covered by focused tests; real-file ICC/read-back remains external qualification. C/Rust and vendor rewrite guarantees are unchanged. Fuzzy search remains lowest priority.