Skip to content

Commit 76dd121

Browse files
committed
Bump v0.4.40; expand MakerNote value names
Release bump to 0.4.40 with CHANGES.md entry and docs updated (interpretation coverage ~91%). Large expansion of exif value-name coverage: added many Canon, Nikon, Fujifilm, Pentax, Olympus, Casio, and Panasonic MakerNote numeric label handlers and numerous new helper functions in src/openmeta/exif_value_names.cc to cover additional sub-IFDs and scalar fields. Tests updated to exercise the new value-name paths. Also tightened behavior to leave ambiguous per-model/version/varying labels unlabeled instead of guessing.
1 parent 18c6961 commit 76dd121

8 files changed

Lines changed: 2414 additions & 223 deletions

File tree

CHANGES.md

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

3+
## 0.4.40 - 2026-05-27
4+
5+
Changes compared with `0.4.39`.
6+
7+
### Added
8+
9+
- Added bounded Canon MakerNote numeric labels for additional sub-IFDs,
10+
including focal length, AFInfo2, aspect, file info, processing, lighting
11+
optimization, vignetting correction, time info, filter, HDR, and selected
12+
CanonCustom function fields.
13+
- Added bounded Nikon MakerNote numeric labels for selected main, AFInfo,
14+
AFInfo2, ISOInfo, HDRInfo, VRInfo, FlashInfo, PictureControl, multi-exposure,
15+
world-time, distortion, AF-tune, lens-data, location, and NikonSettings
16+
scalar fields.
17+
- Added bounded Pentax MakerNote numeric labels for additional main scalar
18+
fields plus LensCorr, AWBInfo, SRInfo2, LensRec, and TimeInfo sub-IFDs.
19+
- Added bounded Olympus MakerNote numeric labels for main, CameraSettings,
20+
FocusInfo, Equipment, RawDevelopment, and ImageProcessing scalar fields.
21+
- Added bounded Casio MakerNote numeric labels for common Type2 and legacy
22+
scalar fields.
23+
- Added bounded Panasonic MakerNote numeric labels for the remaining stable
24+
long-tail main-table scalar fields.
25+
- Added bounded Fujifilm residual numeric labels for saturation, contrast,
26+
noise reduction, film mode, dynamic-range setting, shutter type, image
27+
generation, scene recognition, and face element-type fields.
28+
- Added focused C++ coverage for the expanded Canon, Nikon, Fujifilm, Pentax,
29+
Olympus, Casio, and Panasonic MakerNote value-name dispatch paths.
30+
31+
### Fixed
32+
33+
- Kept ambiguous per-model or version-dependent MakerNote values unlabeled
34+
instead of emitting plausible but wrong text for Nikon, CanonCustom, Olympus,
35+
Pentax, Casio, and Panasonic edge cases.
36+
337
## 0.4.39 - 2026-05-27
438

539
Changes compared with `0.4.38`.

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.39
1+
0.4.40

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, lens-correction, sensor, BMFF brand/item-property associations, item semantic counts, and primary item properties, JUMBF labels, Photoshop IRB embedded carriers plus fixed-layout, XML/text, path-record, byte-count, and descriptor-header summaries, computational, thermal, stitch/panorama capture state, and vendor-private fields. | Medium-high, about 90%. |
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, lens-correction, sensor, BMFF brand/item-property associations, item semantic counts, and primary item properties, JUMBF labels, Photoshop IRB embedded carriers plus fixed-layout, XML/text, path-record, byte-count, and descriptor-header summaries, computational, thermal, stitch/panorama capture state, and vendor-private fields. | Medium-high, about 91%. |
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, and conflict flags for crop/border/active-area, exposure/gain, color/WB/profile/source-color-transform, orientation, date/time, GPS, lens-correction, computational/thermal/stitch, and RAW/source-processing fields across standard and vendor metadata. | Medium-high, about 77-83%. |
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/interpretation_status.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ meaningful interpretation. Interpretation means that decoded entries have
55
stable names, typed values, semantic groups, query shapes, and transfer-safety
66
classification that host applications can use directly.
77

8-
Current overall status: **medium-high, about 90%** for the public target scope.
8+
Current overall status: **medium-high, about 91%** for the public target scope.
99
This is intentionally lower than decode coverage. Decode parity only proves
1010
that metadata carriers and entries are visible; interpretation also requires
1111
human-readable meaning and safe cross-format behavior.
@@ -38,7 +38,7 @@ explicit outcome:
3838
| 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. |
3939
| Color, white balance, profiles, and matrices | DNG color/calibration/reduction/forward matrix groups, white-balance vector groups, EXIF color-space evidence, ICC header/tag entries, XMP ICC/profile fields, PNG profile text carriers, RAW color/source-processing safety buckets, transfer hints, per-family grouped vendor color/WB candidates, long-tail camera-to-XYZ/RGB, style/color, and white-balance gain aliases, and cross-family concept candidates with full grouped value vectors are identified. ICC/profile and color-space records have a distinct `color_profile` semantic role, while camera RAW profile/look/tone-curve/style fields and vendor source color tables have a separate `source_color_transform` role marked unsafe for rendered-image transfer. Matrix/vector groups require numeric payloads with conservative minimum shapes before promotion. | Medium-high, about 85-92%. | Deeper camera/vendor color science interpretation is intentionally conservative, especially for rendered-image transfer. |
4040
| Lens correction and RAW processing | Lens-correction groups, black/white levels, linearization, CFA/sensor layout, raw-storage identifiers, vendor RAW/source-processing buckets, creative/picture style, film simulation, dynamic-range, optical correction, raw-development, computational, thermal, and stitch/panorama aliases, per-family vendor raw-storage/sensor/computational/thermal/stitch/source-processing table candidates, transfer hints, transfer diagnostics, and concept candidates with grouped table/vector values are classified for query and transfer safety. Lens-correction grouped tables require numeric payloads before promotion. | Medium-high, about 83-90%. | Long-tail per-model correction tables and richer numeric normalization. |
41-
| Vendor MakerNotes | Broad MakerNote naming and source-processing classification exists for common vendors and several live computational/thermal vendors. Unknown entries remain lossless and source-private subgroups distinguish preview, face geometry, computational, thermal, stitch/panorama, pixel-shift, multi-shot, composite, auto-lighting, RAW crop/active-area, source color-transform, source style/rendering aliases, lens-correction, raw-level processing data, and Phase One/Leaf RAW-processing fields handled by direct classification plus dedicated normalized helpers. Classified multi-field vendor groups now surface as grouped query/interpretation candidates where safe to expose structurally. Selected Canon/Nikon/Sony/Fujifilm/Pentax/Olympus/Panasonic/Phase One/Kodak/Minolta/Sigma/Samsung/Ricoh print conversions expose bounded human-readable labels, including expanded Canon CameraSettings/ShotInfo/main/MyColors, decoded Fujifilm `mk_fuji*`, and Panasonic main-table labels. Ambiguous per-model or value-type-dependent labels intentionally remain empty instead of guessing. | Medium-high, about 89-94%. | ExifTool-style long-tail print conversions, encrypted/custom settings, and per-model private tables. |
41+
| Vendor MakerNotes | Broad MakerNote naming and source-processing classification exists for common vendors and several live computational/thermal vendors. Unknown entries remain lossless and source-private subgroups distinguish preview, face geometry, computational, thermal, stitch/panorama, pixel-shift, multi-shot, composite, auto-lighting, RAW crop/active-area, source color-transform, source style/rendering aliases, lens-correction, raw-level processing data, and Phase One/Leaf RAW-processing fields handled by direct classification plus dedicated normalized helpers. Classified multi-field vendor groups now surface as grouped query/interpretation candidates where safe to expose structurally. Selected Canon/Nikon/Sony/Fujifilm/Pentax/Olympus/Panasonic/Casio/Phase One/Kodak/Minolta/Sigma/Samsung/Ricoh print conversions expose bounded human-readable labels, including expanded Canon sub-IFDs and CanonCustom fields, Nikon sub-IFDs and NikonSettings fields, decoded Fujifilm `mk_fuji*`, Pentax sub-IFDs, Olympus main/focus/equipment fields, Casio Type2 fields, and Panasonic long-tail main-table fields. Ambiguous per-model, per-version, or value-type-dependent labels intentionally remain empty instead of guessing. | Medium-high, about 91-95%. | Remaining ExifTool-style firmware/version formulas, encrypted/custom settings, and per-model private tables. |
4242
| BMFF item graph, HEIF/AVIF/CR3, JUMBF, and C2PA | BMFF derived fields, brand-name fields, item-info rows, item type/semantic labels and semantic aggregate counters for common metadata carriers, bounded `ipma` item-property association rows, bounded relations, primary-linked roles, aux semantics, primary color/profile property summaries, primary pixel aspect ratio, primary pixel component bit depth, clean-aperture rationals, JUMBF box labels, and draft C2PA/JUMBF structural fields are exposed. | Medium, about 70-80%. | Full BMFF scene modeling and full C2PA manifest/policy semantics. |
4343
| Photoshop IRB | Raw resources are preserved and a bounded interpreted subset is decoded for fixed-layout resources, including Photoshop 2 info/color-table summaries, resolution/version/print data, print-flag bytes, border/background/effective-BW data, display info, grid/guide info, color sampler headers/records, descriptor-header summaries, path record summaries, alpha names/identifiers, captions, QuickMask info, URL/list data, autosave strings, `XMLData`, ImageReady XML text, thumbnail headers, channel options, clipping-path names, legacy halftone/transfer/duotone/EPS byte summaries, embedded ICC/XMP/EXIF resource byte counts, and embedded IPTC/XMP/ICC payload decode where enabled. | Medium, about 75-84%. | Broader resource-specific descriptor parsing and long-tail resource interpretation. |
4444
| Semantic query/search and records | Query helpers expose raw matches, confidence, provenance, value shapes, normalized candidates, canonical crop/active-area rectangles, Fujifilm RAF raw crop/zoom rectangles, Canon/Nikon/Sony crop and border patterns, border margins, exposure/gain roles, selected vendor/MakerNote exposure-name aliases, per-family grouped vendor records, descriptive EXIF/IPTC/XMP concepts, explicit color-profile records for EXIF/ICC/XMP/PNG profile carriers, explicit source-color-transform records for camera RAW profiles, looks, tone curves, and vendor source color tables, explicit computational/thermal/stitch source-processing records, expanded source color/style/lens/source-processing aliases, source-processing buckets, optional RapidFuzz near-miss matching, structured interpretation records, and bounded cross-family concept resolution for orientation, date/time, exposure/gain, color/profile, GPS, geometry, lens-correction, and RAW-processing with parsed date/time fields, timezone/precision classification, combined GPS timestamps, GPS altitude-reference state and display token, canonical geometry origin/size/rect/margins, normalized exposure values, shape-checked grouped value vectors, transfer hints, rendered/compatible safety booleans, and tolerance-aware GPS/exposure/color/geometry conflicts. | Medium-high, about 82-88%. | More long-tail per-model concept aliases and richer localized policy wording. |
@@ -67,8 +67,9 @@ outputs.
6767
4. Expand GPS policy beyond current coordinate tolerance, altitude-reference
6868
display, and EXIF timestamp assembly into broader cross-family
6969
reconciliation.
70-
5. Expand MakerNote meaning depth in vendor order: remaining Canon sub-IFDs,
71-
Olympus, Nikon, Pentax, Casio, Panasonic long tail, CanonCustom/
72-
NikonSettings, Fujifilm residuals, then other active vendors.
70+
5. Expand the remaining unambiguous MakerNote long tail: firmware/version
71+
formulas, Canon ambience/AF microadjust/color-data fields, NikonSettings
72+
residuals, JVC/GE/FLIR/Apple/live-vendor scalar fields, and per-model tables
73+
only where context is strong enough to avoid wrong labels.
7374
6. Keep transfer-safety classification conservative when interpretation is
7475
incomplete.

docs/sphinx/development.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ model should stay compact:
3838
fixed-layout, XML/text, path-record, byte-count, and descriptor-header
3939
summaries, computational, thermal, stitch/panorama
4040
capture state, and vendor-private fields.
41-
- Medium-high, about 90%.
41+
- Medium-high, about 91%.
4242
* - Query
4343
- Find entries by name, fuzzy term, or semantic group, then expose
4444
normalized query candidates, structured interpretation records, and

docs/sphinx/interpretation_status.rst

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ meaningful interpretation. Interpretation means that decoded entries have
66
stable names, typed values, semantic groups, query shapes, and transfer-safety
77
classification that host applications can use directly.
88

9-
Current overall status: **medium-high, about 90%** for the public target scope.
9+
Current overall status: **medium-high, about 91%** for the public target scope.
1010
This is intentionally lower than decode coverage. Decode parity only proves
1111
that metadata carriers and entries are visible; interpretation also requires
1212
human-readable meaning and safe cross-format behavior.
@@ -160,15 +160,17 @@ Coverage matrix
160160
handled by direct classification plus dedicated normalized helpers.
161161
Classified multi-field vendor groups now surface as grouped
162162
query/interpretation candidates where safe to expose structurally.
163-
Selected Canon/Nikon/Sony/Fujifilm/Pentax/Olympus/Panasonic/Phase One/
164-
Kodak/Minolta/Sigma/Samsung/Ricoh print conversions expose bounded
165-
human-readable labels, including expanded Canon CameraSettings/
166-
ShotInfo/main/MyColors, decoded Fujifilm ``mk_fuji*``, and Panasonic
167-
main-table labels. Ambiguous per-model or value-type-dependent labels
163+
Selected Canon/Nikon/Sony/Fujifilm/Pentax/Olympus/Panasonic/Casio/
164+
Phase One/Kodak/Minolta/Sigma/Samsung/Ricoh print conversions expose
165+
bounded human-readable labels, including expanded Canon sub-IFDs and
166+
CanonCustom fields, Nikon sub-IFDs and NikonSettings fields, decoded
167+
Fujifilm ``mk_fuji*``, Pentax sub-IFDs, Olympus main/focus/equipment
168+
fields, Casio Type2 fields, and Panasonic long-tail main-table fields.
169+
Ambiguous per-model, per-version, or value-type-dependent labels
168170
intentionally remain empty instead of guessing.
169-
- Medium-high, about 89-94%.
170-
- ExifTool-style long-tail print conversions, encrypted/custom settings,
171-
and per-model private tables.
171+
- Medium-high, about 91-95%.
172+
- Remaining ExifTool-style firmware/version formulas, encrypted/custom
173+
settings, and per-model private tables.
172174
* - BMFF item graph, HEIF/AVIF/CR3, JUMBF, and C2PA
173175
- BMFF derived fields, brand-name fields, item-info rows,
174176
item type/semantic labels and semantic aggregate counters for common
@@ -253,8 +255,9 @@ Next interpretation priorities
253255
4. Expand GPS policy beyond current coordinate tolerance, altitude-reference
254256
display, and EXIF timestamp assembly into broader cross-family
255257
reconciliation.
256-
5. Expand MakerNote meaning depth in vendor order: remaining Canon sub-IFDs,
257-
Olympus, Nikon, Pentax, Casio, Panasonic long tail, CanonCustom/
258-
NikonSettings, Fujifilm residuals, then other active vendors.
258+
5. Expand the remaining unambiguous MakerNote long tail: firmware/version
259+
formulas, Canon ambience/AF microadjust/color-data fields, NikonSettings
260+
residuals, JVC/GE/FLIR/Apple/live-vendor scalar fields, and per-model tables
261+
only where context is strong enough to avoid wrong labels.
259262
6. Keep transfer-safety classification conservative when interpretation is
260263
incomplete.

0 commit comments

Comments
 (0)