A HEIC imported with no capture time. `container::embedded` knew JPEG, PNG,
WebP, TIFF-based files, RAF and CR3, but no ISO base media still image, so
every HEIC produced an empty `Embedded` and carried no Exif at all (#1233).
With no date in the file and none in a sidecar, the import falls back to the
file's modification time, which LightCraft writes as UTC: a photo taken at
13:00 in UTC-5 was catalogued as 18:00, and one taken after 19:00 local time
landed in the next day's folder.
`meta::heif` reads the `meta` box's item information (`iinf`) and item
location (`iloc`) boxes and returns the `Exif` item's TIFF stream and the XMP
`mime` item. It parses the container only, so it is in every build and the
HEVC decoder stays behind the `heif` feature. The box walker `cr3` already
had is now shared instead of written twice.
Camera, lens, ISO, GPS and keywords come through with the date. HEIF puts
orientation in the container and its Exif tag only mirrors that, so the probe
still takes the orientation from the container; a test checks that a HEIC
whose Exif says 6 imports upright.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`cargo xtask ci` fails with the craft-fonts input supplied, which CLAUDE.md says
releases always build with:
ka in Proportional (faces: ["Noto Sans Georgian"]) lack glyphs: ✕
Two strings in ka.json use ✕ (U+2715). Noto Sans Georgian has no glyph for it
and egui's bundled fonts do not either, so a Georgian reader gets a blank where
the text describes the activity stack's stop control. Without the fonts input
those twenty tests skip, so a plain `cargo xtask ci` is green and this stayed
invisible.
The two Georgian values use × (U+00D7) instead: it reads the same at text size
and every face has it. The English keys are untouched — they are the source text
from docs/whats-new.md, and the test checks values, which is the right scope. An
English reader's font covers ✕; the problem is a translation carrying it into a
script whose face does not.
`translated_catalogs_do_not_use_missing_menu_triangles` already forbids ▸ and ▾
in locale JSON for the same reason, so ✕ joins them in one list. That matters
because ✕ is in the English source of those two strings: every language that
translates them next would hit the same failure, and a cheap test now catches it
instead of the font-dependent one.
An X-T30 RAF shot in Acros embeds a black-and-white camera JPEG, so the
per-file look fits only the tone curve, and the colour came from the
neutral "camera RGB ~ sRGB" fallback: a grey sky and muted colours. The
raw decode (lossless compressed) was correct.
Add a hand-kept SAME_SENSOR alias list next to the generated
rawtoaces-data table: the 26.1 MP X-Trans CMOS 4 bodies (X-T30, X-T30 II,
X-Pro3, X100V, X-S10, X-E4) use the X-T3's measured matrices, and their
white balance reads in Kelvin through them.
Since the web zip moved from trunk to cargo xtask web (aeaf4154), packaging/web/package.sh needs the
wasm-bindgen CLI at Cargo.lock's version, and the shared release workflow installs only trunk, so
0.9.0's Web (wasm) job failed. In CI, install it first (as FilmCraft and EffectCraft do).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>