You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Convert prepared EXIF chunk payloads to the raw TIFF byte stream (omit JPEG APP1 Exif\0\0 preamble) and emit WebP EXIF chunks using that TIFF payload. Add adjust_exif_time_patch_slot_for_target to map time-patch offsets for PNG/WebP/JXL/JP2/BMFF targets and rename the PNG helper to build_tiff_exif_payload_from_app1. Implement detection of foreign top-level BMFF meta boxes and fail/decline bounded BMFF edits for such files (reject until OpenMeta can safely merge foreign item/property graphs). Update documentation to reflect the WebP EXIF payload shape and the constrained OpenMeta-managed BMFF edit contract. Add/adjust tests and CMake test helpers (WebP VP8X wrapper, payload checks, and a test asserting rejection of foreign BMFF meta boxes).
Copy file name to clipboardExpand all lines: docs/metadata_transfer_plan.md
+12-7Lines changed: 12 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -55,7 +55,7 @@ The first public write-side sync controls are also in place:
55
55
| WebP | Bounded but real | Prepared bundle, compiled emit, bounded chunk rewrite/edit, file-helper roundtrip | Not a general WebP chunk editor |
56
56
| JP2 | Bounded but real | Prepared bundle, compiled emit, bounded box rewrite/edit, file-helper roundtrip |`jp2h` synthesis is still out of scope |
57
57
| JXL | Bounded but real | Prepared bundle, compiled emit, bounded box rewrite/edit, file-helper roundtrip | Still narrower than JPEG/TIFF |
58
-
| HEIF / AVIF / CR3 | Bounded but real | Prepared bundle, compiled emit, bounded BMFF item/property edit, file-helper roundtrip | Not broad BMFF writer parity |
58
+
| HEIF / AVIF / CR3 | Bounded but real | Prepared bundle, compiled emit, bounded OpenMeta-managed BMFF item/property edit, file-helper roundtrip | Not broad BMFF writer parity; foreign top-level `meta` graphs are rejected until merge support exists|
59
59
| EXR | Bounded but real | Prepared bundle, compiled emit, direct backend attribute emit, prepared-bundle to `ExrAdapterBatch` bridge, CLI/Python transfer surface | No file rewrite/edit path yet; current transfer payload is safe string attributes only |
60
60
61
61
## What Is Already Implemented
@@ -104,16 +104,17 @@ OpenMeta now has explicit end-to-end read-backed transfer tests for:
|`JP2`| top-level `Exif`, top-level XMP `xml` box, `jp2h/colr` ICC | Replace matching top-level metadata boxes; rewrite `jp2h` only to replace/insert `colr`; preserve unrelated boxes and unrelated `jp2h` children | Does not synthesize `jp2h`; requires one existing `jp2h` for ICC |
61
61
|`JXL`| top-level `Exif`, XMP `xml` box, `jumb`, `c2pa`| Replace matching top-level boxes; preserve signature and non-managed boxes; classify `jumb` as generic JUMBF or C2PA | ICC is encoder handoff only; file edit emits uncompressed prepared metadata boxes |
62
-
|`HEIF` / `AVIF` / `CR3`| one OpenMeta-authored metadata-only top-level `meta` box with Exif/XMP/JUMBF/C2PA items and `colr` ICC property | Preserve all non-OpenMeta top-level boxes; replace prior OpenMeta-authored metadata `meta`; append a new OpenMeta metadata `meta`when needed | Does not rewrite arbitrary existing BMFF scene/item graphs |
62
+
|`HEIF` / `AVIF` / `CR3`| one OpenMeta-authored metadata-only top-level `meta` box with Exif/XMP/JUMBF/C2PA items and `colr` ICC property | Preserve non-`meta` top-level boxes; replace prior OpenMeta-authored metadata `meta`; reject foreign top-level `meta`boxes instead of appending a competing metadata graph | Does not rewrite or merge arbitrary existing BMFF scene/item graphs |
63
63
|`EXR`| safe string header attributes through the EXR transfer emitter or adapter batch | No file rewrite contract today; host applies prepared attributes through its own EXR writer | Attribute-emitter target, not a file edit path |
64
64
65
65
## JPEG
@@ -141,6 +141,9 @@ chunks from the same managed family. Unrelated chunks are preserved. When
141
141
EXIF, XMP, or ICC is present after rewrite, OpenMeta patches the existing
142
142
`VP8X` feature flags to match the final metadata state.
143
143
144
+
Prepared WebP `EXIF` chunks carry the TIFF byte stream directly. They do not
145
+
include the JPEG APP1 `Exif\0\0` preamble.
146
+
144
147
The current WebP edit contract requires an existing `VP8X` chunk for EXIF,
145
148
XMP, or ICC metadata edits. It does not synthesize `VP8X`.
146
149
@@ -174,14 +177,20 @@ encoder-side handoff and is not serialized by the file edit path.
174
177
175
178
## HEIF / AVIF / CR3
176
179
177
-
The bounded BMFF edit path preserves all non-OpenMeta top-level boxes as
178
-
source ranges.
180
+
The bounded BMFF edit path preserves non-`meta` top-level boxes as source
181
+
ranges.
179
182
180
183
OpenMeta writes one metadata-only top-level `meta` box using the public
181
184
bounded contract. That box can contain prepared Exif, XMP, JUMBF, C2PA, and
182
185
ICC `colr` property payloads. A prior OpenMeta-authored metadata `meta` box is
183
-
removed and replaced by the newly prepared box. Foreign `meta` boxes and
184
-
normal BMFF scene/item graphs are preserved.
186
+
removed and replaced by the newly prepared box.
187
+
188
+
OpenMeta does not append a second top-level `meta` box when the target already
189
+
has a foreign top-level `meta` box. Real HEIF/AVIF scene graphs commonly use
190
+
that box for image items and properties; appending a competing metadata graph
191
+
can make the result unusable. Until OpenMeta has a real BMFF merge path for
192
+
foreign item/property graphs, that case is reported as unsupported and no
193
+
edited output is written.
185
194
186
195
If sidecar-only writeback asks to strip embedded XMP, OpenMeta can remove XMP
187
196
from its own OpenMeta-authored metadata `meta` box. It does not strip XMP from
0 commit comments