eliets2
25314aaacf
LR-MERGE-PANO: a panorama of raws keeps the as-shot white balance of its frames ( #1144 )
...
A raw whose white balance is only in the vendor's multipliers (CR2, NEF, ARW...)
has no AsShotNeutral of its own. Loading a frame dropped the multipliers and
stitch copied the first frame's colour tags, so a panorama of frames that reach
the stitcher without a neutral wrote a DNG with neither AsShotNeutral nor
AsShotWhiteXY, and a viewer had no white to start from (a strong colour cast
until White Balance > Auto).
Frames now carry the multipliers (Frame::wb_multipliers, filled from the decoded
raw; load_frame_with is split so a decoded raw can be tested without a file).
stitch takes the median R/G and B/G of the multipliers of the frames that are in
the panorama (the mean of the middle two for an even count; frames without
multipliers, or with non-finite or non-positive ones, do not vote) and sets the
result's AsShotNeutral to their reciprocal, green = 1. The source's
AsShotWhiteXY is dropped with it: a reader takes it before the neutral and the
DNG spec makes the two exclusive. With no multipliers anywhere (DNG sources) the
first frame's tags are kept, as before.
In the app and the CLI a raw without colour matrices already gets a neutral from
starting_colour_tags (#965 ). For frames balanced alike the new neutral renders
the same (checked in the engine crate); it differs when the camera balanced the
frames differently: the panorama follows the median instead of the first frame.
Tests: the frame carries the multipliers; the consensus for odd and even counts,
with missing and unusable values; stitching raw-style frames gives the median
AsShotNeutral, ignores frames outside the panorama and leaves the colour as it
was without multipliers; the written DNG, read back with the raw reader, has the
reciprocal AsShotNeutral and the white balance the source's multipliers give.
2026-10-13 12:23:36 +03:00
Brandon Thomas
4ee6a4888b
Merge PR #1126
2026-10-13 02:05:14 -04:00
Brandon Thomas
478f20054b
Merge PR #1056
2026-10-13 02:02:17 -04:00
Brandon Thomas
d8f10a1ef7
Merge PR #919
2026-10-13 02:01:30 -04:00
bflatastic
ece9bd83e4
Batch 32: one tracker row per id (rows two PRs both edited), parity summary refreshed
2026-10-13 12:05:26 +07:00
bflatastic
fa3dfbbc4a
Merge PR #1238
...
# Conflicts:
# crates/pipeline/src/spots.rs
# crates/ui-egui/src/panels/edit.rs
# docs/parity-checklist.md
2026-10-13 11:06:46 +07:00
bflatastic
84d6849cf3
Merge PR #1216
...
# Conflicts:
# crates/engine/src/files.rs
# crates/ui-egui/locales/de-formats.json
# crates/ui-egui/locales/de.json
# crates/ui-egui/locales/es-formats.json
# crates/ui-egui/locales/es.json
# crates/ui-egui/locales/fr-formats.json
# crates/ui-egui/locales/fr.json
# crates/ui-egui/locales/ja-formats.json
# crates/ui-egui/locales/ja.json
# crates/ui-egui/locales/pt-br-formats.json
# crates/ui-egui/locales/pt-br.json
# crates/ui-egui/locales/ru-formats.json
# crates/ui-egui/locales/ru.json
# crates/ui-egui/locales/uk-formats.json
# crates/ui-egui/locales/uk.json
# crates/ui-egui/locales/zh-hans-formats.json
# crates/ui-egui/locales/zh-hans.json
# crates/ui-egui/locales/zh-hant-formats.json
# crates/ui-egui/locales/zh-hant.json
# docs/parity-checklist.md
2026-10-13 11:06:28 +07:00
bflatastic
ed1d641f22
Merge PR #1174
...
# Conflicts:
# crates/catalog/src/lock.rs
# crates/pipeline/src/spots.rs
# docs/parity-checklist.md
2026-10-13 11:06:26 +07:00
bflatastic
692ab7f7c2
Merge PR #1235
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:05:55 +07:00
bflatastic
32253d862a
Merge PR #1017
...
# Conflicts:
# crates/pipeline/src/spots.rs
# docs/gaps.md
# docs/parity-checklist.md
2026-10-13 11:05:54 +07:00
bflatastic
4e78514948
Merge PR #1324
...
# Conflicts:
# docs/gaps.md
# docs/parity-checklist.md
# docs/raw-parity.md
# docs/whats-new.md
2026-10-13 11:05:53 +07:00
bflatastic
bac147a460
Merge PR #1189
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:05:48 +07:00
bflatastic
2181c69162
Merge PR #1151
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:05:47 +07:00
bflatastic
8df468bfc6
Merge PR #1246
...
# Conflicts:
# crates/pipeline/src/spots.rs
# docs/parity-checklist.md
2026-10-13 11:05:44 +07:00
bflatastic
8ca6a835ec
Merge PR #1411
...
# Conflicts:
# crates/ui-egui/locales/pt-br.json
# docs/whats-new.md
2026-10-13 11:05:35 +07:00
bflatastic
94808da369
Merge PR #1250
...
# Conflicts:
# crates/ui-egui/src/tests_panels.rs
2026-10-13 11:04:33 +07:00
bflatastic
edfe7c6351
Merge PR #1242
...
# Conflicts:
# crates/ui-egui/src/tests_panels.rs
# docs/parity-checklist.md
2026-10-13 11:04:32 +07:00
bflatastic
1c473ed64c
Merge PR #1361
2026-10-13 11:03:53 +07:00
bflatastic
cb8aa0b017
Merge PR #1341
2026-10-13 11:03:11 +07:00
bflatastic
d3c024e4df
Merge PR #1047
...
# Conflicts:
# crates/pipeline/src/spots.rs
# docs/gaps.md
2026-10-13 11:03:10 +07:00
bflatastic
74a0b5796a
Merge PR #1070
...
# Conflicts:
# crates/pipeline/src/spots.rs
2026-10-13 11:03:05 +07:00
bflatastic
76fd9b9ae8
Merge PR #805
...
# Conflicts:
# docs/camera-preview-colour.md
# docs/parity-checklist.md
2026-10-13 11:02:58 +07:00
bflatastic
62b1ba04d0
Merge PR #1367
2026-10-13 11:02:55 +07:00
bflatastic
6eb04f9a1c
Merge PR #1119
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:02:52 +07:00
bflatastic
c7e259b3ce
Merge PR #1297
...
# Conflicts:
# docs/parity-checklist.md
# docs/raw-parity.md
# docs/whats-new.md
2026-10-13 11:02:49 +07:00
bflatastic
bcbcf3b968
Merge PR #1357
...
# Conflicts:
# docs/parity-checklist.md
# docs/raw-parity.md
# docs/whats-new.md
2026-10-13 11:02:48 +07:00
bflatastic
695eb6acc5
Merge PR #1282
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:02:44 +07:00
bflatastic
5e430d057f
Merge PR #1301
2026-10-13 11:02:40 +07:00
bflatastic
9e0f00c557
Merge PR #1222
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:02:40 +07:00
bflatastic
33f03ba0f7
Merge PR #1094
...
# Conflicts:
# crates/pipeline/src/spots.rs
# docs/gaps.md
# docs/hardware-parity.md
2026-10-13 11:01:54 +07:00
bflatastic
18bd8fd881
Merge PR #1397
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:01:53 +07:00
bflatastic
a39567306b
Merge PR #1071
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:01:52 +07:00
bflatastic
14b111f6f5
Merge PR #1344
...
# Conflicts:
# docs/parity-checklist.md
# docs/whats-new.md
2026-10-13 11:01:49 +07:00
bflatastic
d3d55e8327
Merge PR #1413
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:01:48 +07:00
bflatastic
ecf1236b7c
Merge PR #1150
...
# Conflicts:
# docs/whats-new.md
2026-10-13 11:01:46 +07:00
bflatastic
f28b9c46d3
Merge PR #1051
...
# Conflicts:
# crates/pipeline/src/spots.rs
# docs/gaps.md
# docs/parity-checklist.md
2026-10-13 11:01:45 +07:00
bflatastic
6aabe43386
Merge PR #1023
...
# Conflicts:
# ROADMAP.md
# crates/pipeline/src/spots.rs
# docs/gaps.md
# docs/parity-checklist.md
2026-10-13 11:01:44 +07:00
bflatastic
b9b6bf57de
Merge PR #1020
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:01:43 +07:00
bflatastic
64b3361125
Merge PR #1340
...
# Conflicts:
# docs/gaps.md
# docs/parity-checklist.md
# docs/whats-new.md
2026-10-13 11:01:42 +07:00
bflatastic
44684b7950
Merge PR #1288
...
# Conflicts:
# docs/parity-checklist.md
# docs/raw-parity.md
# docs/whats-new.md
2026-10-13 11:01:41 +07:00
bflatastic
61c3042efe
Merge PR #1280
...
# Conflicts:
# docs/parity-checklist.md
# docs/raw-parity.md
# docs/whats-new.md
2026-10-13 11:01:40 +07:00
bflatastic
2fc2419fa1
Merge PR #1193
...
# Conflicts:
# docs/parity-checklist.md
2026-10-13 11:01:37 +07:00
bflatastic
5cec4d0720
Merge PR #992
2026-10-13 11:01:10 +07:00
bflatastic
1543fef701
Merge PR #1268
2026-10-13 11:01:01 +07:00
bflatastic
ac19325c57
Merge PR #978
2026-10-13 11:01:01 +07:00
bflatastic
b56f052a59
Merge PR #1387
2026-10-13 11:00:58 +07:00
bflatastic
b2a5997e55
Merge PR #1412
2026-10-13 11:00:53 +07:00
bflatastic
43799cc903
Merge PR #1296
2026-10-13 11:00:48 +07:00
bflatastic
a6369c4009
Merge PR #1264
2026-10-13 11:00:47 +07:00
bflatastic
c9e12bd9ff
Merge PR #1123
2026-10-13 11:00:41 +07:00