@photivra/engine 1.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +393 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +65 -12
- package/dist/capture/native-raw.js +81 -19
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_1_5_0.md +0 -105
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type EvidenceBackedFact, type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
2
|
+
import { type PlanckianLocusModel, type WhiteLocus } from "./illuminants.js";
|
|
3
|
+
import { type CieXyChromaticity, type ColorMatrix3x3 } from "./colorimetry-math.js";
|
|
2
4
|
export declare const WHITE_BALANCE_PROFILE_SCHEMA_VERSION: "0.1.0";
|
|
3
5
|
export declare const WHITE_BALANCE_STATE_VERSION: "0.1.0";
|
|
4
6
|
export declare const COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION: "0.1.0";
|
|
@@ -21,9 +23,9 @@ export interface WhiteBalanceAwbPolicy {
|
|
|
21
23
|
policyId: string;
|
|
22
24
|
intent: WhiteBalanceAwbIntent;
|
|
23
25
|
/**
|
|
24
|
-
*
|
|
25
|
-
* gain space. 1
|
|
26
|
-
* more of the observed cast.
|
|
26
|
+
* How much of a grey-world neutralizing correction to apply, measured in
|
|
27
|
+
* logarithmic gain space. 1 applies the full correction (neutral priority).
|
|
28
|
+
* Lower values keep more of the observed colour cast.
|
|
27
29
|
*/
|
|
28
30
|
correctionStrength: EvidenceBackedFact<number>;
|
|
29
31
|
limitations?: readonly string[];
|
|
@@ -56,7 +58,7 @@ export interface ResolvedWhiteBalanceState {
|
|
|
56
58
|
version: typeof WHITE_BALANCE_STATE_VERSION;
|
|
57
59
|
stateId: string;
|
|
58
60
|
inputDomain: WhiteBalanceInputDomain;
|
|
59
|
-
source: "preset" | "manual-gains" | "custom-measurement" | "auto-white-balance";
|
|
61
|
+
source: "preset" | "manual-gains" | "custom-measurement" | "auto-white-balance" | "color-temperature";
|
|
60
62
|
channelGains: WhiteBalanceChannelGains;
|
|
61
63
|
locked: boolean;
|
|
62
64
|
sourceProfile?: {
|
|
@@ -79,6 +81,8 @@ export interface ResolvedWhiteBalanceState {
|
|
|
79
81
|
blue: number;
|
|
80
82
|
};
|
|
81
83
|
};
|
|
84
|
+
/** Present for `color-temperature` states: the declared CCT/tint and its camera neutral. */
|
|
85
|
+
colorTemperature?: ResolvedColorTemperatureWhiteBalance;
|
|
82
86
|
sourceStateId?: string;
|
|
83
87
|
trueIlluminantMetadataUsed: false;
|
|
84
88
|
sceneIlluminationModified: false;
|
|
@@ -96,6 +100,37 @@ export interface ColorTemperatureWhiteBalanceIntent {
|
|
|
96
100
|
requiresCameraProfileColorimetry: true;
|
|
97
101
|
sceneIlluminationModified: false;
|
|
98
102
|
}
|
|
103
|
+
/** Locus/tint interpretation and camera neutral behind a Kelvin + tint WB state. */
|
|
104
|
+
export interface ResolvedColorTemperatureWhiteBalance {
|
|
105
|
+
intentId: string;
|
|
106
|
+
colorTemperatureKelvin: number;
|
|
107
|
+
tint: number;
|
|
108
|
+
whiteLocus: WhiteLocus;
|
|
109
|
+
tintInterpretation: "duv-cie-1960-uv";
|
|
110
|
+
planckianLocusModel: "planck-analytic-cmf" | "planck-integration";
|
|
111
|
+
/** CIE 1931 xy of the declared white (CCT + Duv). */
|
|
112
|
+
adoptedWhiteChromaticity: CieXyChromaticity;
|
|
113
|
+
/** Pre-WB camera response to that white (XYZ with Y = 1 through xyzToCameraRgb). */
|
|
114
|
+
cameraNeutralRgb: WhiteBalanceChannelGains;
|
|
115
|
+
}
|
|
116
|
+
/** Camera colour model used to turn a declared white into channel gains. */
|
|
117
|
+
export interface ColorTemperatureWhiteBalanceCameraModel {
|
|
118
|
+
profileId: string;
|
|
119
|
+
profileVersion: string;
|
|
120
|
+
/** Row-major CIE XYZ (white Y = 1) → relative pre-WB camera-linear RGB. */
|
|
121
|
+
xyzToCameraRgb: ColorMatrix3x3;
|
|
122
|
+
}
|
|
123
|
+
export interface ResolveColorTemperatureWhiteBalanceInput {
|
|
124
|
+
stateId: string;
|
|
125
|
+
intent: ColorTemperatureWhiteBalanceIntent;
|
|
126
|
+
/** Locus whose temperature defines the white: Planckian or CIE daylight. */
|
|
127
|
+
whiteLocus: WhiteLocus;
|
|
128
|
+
/** Tint is read as Duv in the CIE 1960 UCS (positive = above the Planckian locus, greenish). */
|
|
129
|
+
tintInterpretation: "duv-cie-1960-uv";
|
|
130
|
+
/** Defaults to Planck's law integrated against the engine's analytic CIE 1931 CMFs (`planck-analytic-cmf`). */
|
|
131
|
+
planckianLocus?: PlanckianLocusModel;
|
|
132
|
+
camera: ColorTemperatureWhiteBalanceCameraModel;
|
|
133
|
+
}
|
|
99
134
|
export interface ResolvePresetWhiteBalanceInput {
|
|
100
135
|
stateId: string;
|
|
101
136
|
profile: WhiteBalanceProfile;
|
|
@@ -127,21 +162,34 @@ export interface CreateLockedWhiteBalanceStateInput {
|
|
|
127
162
|
/**
|
|
128
163
|
* Parses generic WB presets and AWB policies.
|
|
129
164
|
*
|
|
130
|
-
*
|
|
131
|
-
* treated as universal Kelvin
|
|
165
|
+
* The profile defines preset gains and AWB correction strength. A label is not
|
|
166
|
+
* treated as a universal Kelvin value or as any manufacturer's behaviour.
|
|
132
167
|
*/
|
|
133
168
|
export declare function parseWhiteBalanceProfile(value: unknown): WhiteBalanceProfile;
|
|
134
|
-
/** Resolves a
|
|
169
|
+
/** Resolves a WB preset defined by the profile. No universal label-to-Kelvin rule is applied. */
|
|
135
170
|
export declare function resolvePresetWhiteBalance(input: ResolvePresetWhiteBalanceInput): ResolvedWhiteBalanceState;
|
|
136
171
|
/** Resolves explicit manual camera-linear channel gains. */
|
|
137
172
|
export declare function resolveManualWhiteBalance(input: ResolveManualWhiteBalanceInput): ResolvedWhiteBalanceState;
|
|
138
173
|
/**
|
|
139
174
|
* Records independent color-temperature and tint intent.
|
|
140
175
|
*
|
|
141
|
-
* No channel gains are fabricated here;
|
|
142
|
-
*
|
|
176
|
+
* No channel gains are fabricated here; use
|
|
177
|
+
* `resolveColorTemperatureWhiteBalance()` with an explicit camera colour model to
|
|
178
|
+
* resolve gains.
|
|
143
179
|
*/
|
|
144
180
|
export declare function createColorTemperatureWhiteBalanceIntent(input: CreateColorTemperatureWhiteBalanceIntentInput): ColorTemperatureWhiteBalanceIntent;
|
|
181
|
+
/**
|
|
182
|
+
* Resolves a Kelvin + tint WB intent into camera channel gains, for an explicit camera
|
|
183
|
+
* colour model:
|
|
184
|
+
* - white xy = locus(CCT), offset by Duv = tint along the Planckian-locus normal in CIE 1960 uv;
|
|
185
|
+
* - camera neutral n = M_XYZ→camera · XYZ(white, Y = 1);
|
|
186
|
+
* - gains = (n_G/n_R, 1, n_G/n_B).
|
|
187
|
+
* A neutral surface lit by light of exactly that chromaticity then renders with equal channels.
|
|
188
|
+
* The CCT and tint are the white the photographer declares, not a measured scene illuminant.
|
|
189
|
+
* Accuracy is limited by the camera matrix (exact only under the Luther–Ives condition) and by
|
|
190
|
+
* the locus model.
|
|
191
|
+
*/
|
|
192
|
+
export declare function resolveColorTemperatureWhiteBalance(input: ResolveColorTemperatureWhiteBalanceInput): ResolvedWhiteBalanceState;
|
|
145
193
|
/**
|
|
146
194
|
* Resolves a user-declared neutral/gray custom-WB measurement.
|
|
147
195
|
*
|
|
@@ -152,24 +200,25 @@ export declare function resolveCustomWhiteBalance(input: ResolveCustomWhiteBalan
|
|
|
152
200
|
/**
|
|
153
201
|
* Estimates one global AWB state from declared pre-WB camera-linear samples.
|
|
154
202
|
*
|
|
155
|
-
* It
|
|
156
|
-
* neutralizing estimate is softened by the profile's
|
|
157
|
-
* different generic AWB priorities can
|
|
203
|
+
* It deliberately does not accept metadata about the true illuminant. A
|
|
204
|
+
* grey-world neutralizing estimate is softened by the profile's
|
|
205
|
+
* correctionStrength, so different generic AWB priorities can keep different
|
|
206
|
+
* amounts of colour cast.
|
|
158
207
|
*/
|
|
159
208
|
export declare function estimateAutoWhiteBalance(input: EstimateAutoWhiteBalanceInput): ResolvedWhiteBalanceState;
|
|
160
209
|
/**
|
|
161
210
|
* Freezes a resolved WB state under a new stable identity.
|
|
162
211
|
*
|
|
163
|
-
* Locking changes neither the scene nor the gains
|
|
164
|
-
* differ
|
|
212
|
+
* Locking changes neither the scene nor the gains. Later AWB estimates may
|
|
213
|
+
* differ, but this locked state stays the same.
|
|
165
214
|
*/
|
|
166
215
|
export declare function createLockedWhiteBalanceState(input: CreateLockedWhiteBalanceStateInput): ResolvedWhiteBalanceState;
|
|
167
216
|
/**
|
|
168
|
-
* Parses a committed resolved white-balance state from
|
|
169
|
-
*
|
|
217
|
+
* Parses a committed, resolved white-balance state from untrusted JSON,
|
|
218
|
+
* without estimating WB again.
|
|
170
219
|
*
|
|
171
|
-
* This is
|
|
172
|
-
* resolved gains
|
|
220
|
+
* This is deliberately a state parser, not an AWB estimator. It keeps the
|
|
221
|
+
* resolved gains, policy and measurement identity that a capture committed
|
|
222
|
+
* earlier.
|
|
173
223
|
*/
|
|
174
224
|
export declare function parseResolvedWhiteBalanceState(value: unknown): ResolvedWhiteBalanceState;
|
|
175
|
-
//# sourceMappingURL=white-balance.d.ts.map
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* White balance (WB): generic presets, manual gains, colour temperature and tint, custom (grey-card)
|
|
4
|
+
* WB, auto white balance (AWB), WB lock, and parsing of a committed WB state.
|
|
5
|
+
*
|
|
6
|
+
* The profile defines preset gains and AWB correction strength. A label such as "Daylight" is not
|
|
7
|
+
* treated as a universal Kelvin value or as any manufacturer's behaviour.
|
|
8
|
+
* @see docs/CAPTURE_COLOR.md for the equations, units, coordinate conventions, known blockers and
|
|
9
|
+
* support limits.
|
|
8
10
|
*/
|
|
9
11
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
10
12
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
11
13
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
14
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
15
|
+
import { calculateChromaticityFromCorrelatedColorTemperature } from "./illuminants.js";
|
|
16
|
+
import { multiplyMatrixVector, parseMatrix3x3, xyzOfChromaticity } from "./colorimetry-math.js";
|
|
12
17
|
export const WHITE_BALANCE_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
13
18
|
export const WHITE_BALANCE_STATE_VERSION = "0.1.0";
|
|
14
19
|
export const COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION = "0.1.0";
|
|
15
|
-
function requireRecord(value, path) {
|
|
20
|
+
function requireRecord(value, path, allowedKeys) {
|
|
16
21
|
if (typeof value !== "object" ||
|
|
17
22
|
value === null ||
|
|
18
23
|
Array.isArray(value)) {
|
|
19
24
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
20
25
|
}
|
|
26
|
+
if (allowedKeys !== null)
|
|
27
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
21
28
|
return value;
|
|
22
29
|
}
|
|
23
30
|
function requireNonEmptyString(value, path) {
|
|
@@ -47,7 +54,7 @@ function requireFraction(value, path) {
|
|
|
47
54
|
return parsed;
|
|
48
55
|
}
|
|
49
56
|
function parseChannelGains(value, path) {
|
|
50
|
-
const record = requireRecord(value, path);
|
|
57
|
+
const record = requireRecord(value, path, ["red", "green", "blue"]);
|
|
51
58
|
return {
|
|
52
59
|
red: requirePositiveFinite(record.red, path + ".red"),
|
|
53
60
|
green: requirePositiveFinite(record.green, path + ".green"),
|
|
@@ -68,8 +75,8 @@ function parseOptionalLimitations(value, path) {
|
|
|
68
75
|
return value === undefined ? undefined : parseLimitations(value, path);
|
|
69
76
|
}
|
|
70
77
|
function parsePreset(value, path) {
|
|
71
|
-
const record = requireRecord(value, path);
|
|
72
|
-
const gainsFact = requireRecord(record.channelGains, path + ".channelGains");
|
|
78
|
+
const record = requireRecord(value, path, ["channelGains", "limitations", "presetId", "label", "nominalColorTemperatureKelvin", "nominalTint"]);
|
|
79
|
+
const gainsFact = requireRecord(record.channelGains, path + ".channelGains", ["value", "evidence"]);
|
|
73
80
|
const limitations = parseOptionalLimitations(record.limitations, path + ".limitations");
|
|
74
81
|
return {
|
|
75
82
|
presetId: requireNonEmptyString(record.presetId, path + ".presetId"),
|
|
@@ -104,8 +111,8 @@ function parseAwbIntent(value, path) {
|
|
|
104
111
|
return value;
|
|
105
112
|
}
|
|
106
113
|
function parseAwbPolicy(value, path) {
|
|
107
|
-
const record = requireRecord(value, path);
|
|
108
|
-
const strengthFact = requireRecord(record.correctionStrength, path + ".correctionStrength");
|
|
114
|
+
const record = requireRecord(value, path, ["correctionStrength", "limitations", "policyId", "intent"]);
|
|
115
|
+
const strengthFact = requireRecord(record.correctionStrength, path + ".correctionStrength", ["value", "evidence"]);
|
|
109
116
|
const limitations = parseOptionalLimitations(record.limitations, path + ".limitations");
|
|
110
117
|
return {
|
|
111
118
|
policyId: requireNonEmptyString(record.policyId, path + ".policyId"),
|
|
@@ -120,11 +127,11 @@ function parseAwbPolicy(value, path) {
|
|
|
120
127
|
/**
|
|
121
128
|
* Parses generic WB presets and AWB policies.
|
|
122
129
|
*
|
|
123
|
-
*
|
|
124
|
-
* treated as universal Kelvin
|
|
130
|
+
* The profile defines preset gains and AWB correction strength. A label is not
|
|
131
|
+
* treated as a universal Kelvin value or as any manufacturer's behaviour.
|
|
125
132
|
*/
|
|
126
133
|
export function parseWhiteBalanceProfile(value) {
|
|
127
|
-
const record = requireRecord(value, "whiteBalanceProfile");
|
|
134
|
+
const record = requireRecord(value, "whiteBalanceProfile", ["schemaVersion", "scientificStatus", "inputDomain", "presets", "awbPolicies", "profileId", "profileVersion", "evidence", "limitations"]);
|
|
128
135
|
if (record.schemaVersion !== WHITE_BALANCE_PROFILE_SCHEMA_VERSION) {
|
|
129
136
|
throw new InvalidConfigurationError('whiteBalanceProfile.schemaVersion must be "' +
|
|
130
137
|
WHITE_BALANCE_PROFILE_SCHEMA_VERSION +
|
|
@@ -166,7 +173,7 @@ export function parseWhiteBalanceProfile(value) {
|
|
|
166
173
|
}
|
|
167
174
|
function requireScientificNonEmptyString(value, path) {
|
|
168
175
|
if (typeof value !== "string" || value.trim().length === 0) {
|
|
169
|
-
throw new
|
|
176
|
+
throw new InvalidConfigurationError(path + " must be a non-empty string.");
|
|
170
177
|
}
|
|
171
178
|
return value.trim();
|
|
172
179
|
}
|
|
@@ -208,6 +215,15 @@ function immutableState(state) {
|
|
|
208
215
|
...(state.awbPolicy === undefined
|
|
209
216
|
? {}
|
|
210
217
|
: { awbPolicy: Object.freeze({ ...state.awbPolicy }) }),
|
|
218
|
+
...(state.colorTemperature === undefined
|
|
219
|
+
? {}
|
|
220
|
+
: {
|
|
221
|
+
colorTemperature: Object.freeze({
|
|
222
|
+
...state.colorTemperature,
|
|
223
|
+
adoptedWhiteChromaticity: Object.freeze({ ...state.colorTemperature.adoptedWhiteChromaticity }),
|
|
224
|
+
cameraNeutralRgb: Object.freeze({ ...state.colorTemperature.cameraNeutralRgb })
|
|
225
|
+
})
|
|
226
|
+
}),
|
|
211
227
|
...(state.measurement === undefined
|
|
212
228
|
? {}
|
|
213
229
|
: {
|
|
@@ -236,8 +252,9 @@ function stateBase(stateId, source, gains, limitations) {
|
|
|
236
252
|
limitations: [...limitations]
|
|
237
253
|
};
|
|
238
254
|
}
|
|
239
|
-
/** Resolves a
|
|
255
|
+
/** Resolves a WB preset defined by the profile. No universal label-to-Kelvin rule is applied. */
|
|
240
256
|
export function resolvePresetWhiteBalance(input) {
|
|
257
|
+
requireInputKeys(input, "resolvePresetWhiteBalance", ["stateId", "profile", "presetId"]);
|
|
241
258
|
const profile = parseWhiteBalanceProfile(input.profile);
|
|
242
259
|
const presetId = requireScientificNonEmptyString(input.presetId, "presetId");
|
|
243
260
|
const preset = profile.presets.find((entry) => entry.presetId === presetId);
|
|
@@ -258,6 +275,7 @@ export function resolvePresetWhiteBalance(input) {
|
|
|
258
275
|
}
|
|
259
276
|
/** Resolves explicit manual camera-linear channel gains. */
|
|
260
277
|
export function resolveManualWhiteBalance(input) {
|
|
278
|
+
requireInputKeys(input, "resolveManualWhiteBalance", ["stateId", "channelGains"]);
|
|
261
279
|
return immutableState(stateBase(input.stateId, "manual-gains", input.channelGains, [
|
|
262
280
|
"Manual gains are caller-selected WB intent, not a measured physical illuminant."
|
|
263
281
|
]));
|
|
@@ -265,10 +283,12 @@ export function resolveManualWhiteBalance(input) {
|
|
|
265
283
|
/**
|
|
266
284
|
* Records independent color-temperature and tint intent.
|
|
267
285
|
*
|
|
268
|
-
* No channel gains are fabricated here;
|
|
269
|
-
*
|
|
286
|
+
* No channel gains are fabricated here; use
|
|
287
|
+
* `resolveColorTemperatureWhiteBalance()` with an explicit camera colour model to
|
|
288
|
+
* resolve gains.
|
|
270
289
|
*/
|
|
271
290
|
export function createColorTemperatureWhiteBalanceIntent(input) {
|
|
291
|
+
requireInputKeys(input, "createColorTemperatureWhiteBalanceIntent", ["intentId", "colorTemperatureKelvin", "tint"]);
|
|
272
292
|
return Object.freeze({
|
|
273
293
|
version: COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION,
|
|
274
294
|
intentId: requireScientificNonEmptyString(input.intentId, "intentId"),
|
|
@@ -279,13 +299,78 @@ export function createColorTemperatureWhiteBalanceIntent(input) {
|
|
|
279
299
|
sceneIlluminationModified: false
|
|
280
300
|
});
|
|
281
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Resolves a Kelvin + tint WB intent into camera channel gains, for an explicit camera
|
|
304
|
+
* colour model:
|
|
305
|
+
* - white xy = locus(CCT), offset by Duv = tint along the Planckian-locus normal in CIE 1960 uv;
|
|
306
|
+
* - camera neutral n = M_XYZ→camera · XYZ(white, Y = 1);
|
|
307
|
+
* - gains = (n_G/n_R, 1, n_G/n_B).
|
|
308
|
+
* A neutral surface lit by light of exactly that chromaticity then renders with equal channels.
|
|
309
|
+
* The CCT and tint are the white the photographer declares, not a measured scene illuminant.
|
|
310
|
+
* Accuracy is limited by the camera matrix (exact only under the Luther–Ives condition) and by
|
|
311
|
+
* the locus model.
|
|
312
|
+
*/
|
|
313
|
+
export function resolveColorTemperatureWhiteBalance(input) {
|
|
314
|
+
requireInputKeys(input, "resolveColorTemperatureWhiteBalance", ["stateId", "intent", "whiteLocus", "tintInterpretation", "planckianLocus", "camera"]);
|
|
315
|
+
const intent = input.intent;
|
|
316
|
+
if (typeof intent !== "object" ||
|
|
317
|
+
intent === null ||
|
|
318
|
+
intent.version !== COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION) {
|
|
319
|
+
throw new InvalidConfigurationError("intent must be a color-temperature WB intent of version " +
|
|
320
|
+
COLOR_TEMPERATURE_WHITE_BALANCE_INTENT_VERSION +
|
|
321
|
+
".");
|
|
322
|
+
}
|
|
323
|
+
const intentId = requireScientificNonEmptyString(intent.intentId, "intent.intentId");
|
|
324
|
+
const kelvin = requireScientificPositiveFinite(intent.colorTemperatureKelvin, "intent.colorTemperatureKelvin");
|
|
325
|
+
const tint = requireScientificFinite(intent.tint, "intent.tint");
|
|
326
|
+
if (input.tintInterpretation !== "duv-cie-1960-uv") {
|
|
327
|
+
throw new InvalidConfigurationError('tintInterpretation must be "duv-cie-1960-uv".');
|
|
328
|
+
}
|
|
329
|
+
const camera = input.camera;
|
|
330
|
+
if (typeof camera !== "object" || camera === null) {
|
|
331
|
+
throw new InvalidConfigurationError("camera must be an object.");
|
|
332
|
+
}
|
|
333
|
+
const profileId = requireScientificNonEmptyString(camera.profileId, "camera.profileId");
|
|
334
|
+
const profileVersion = requireScientificNonEmptyString(camera.profileVersion, "camera.profileVersion");
|
|
335
|
+
const matrix = parseMatrix3x3(camera.xyzToCameraRgb, "camera.xyzToCameraRgb");
|
|
336
|
+
const locus = input.planckianLocus ?? { kind: "planck-analytic-cmf" };
|
|
337
|
+
const white = calculateChromaticityFromCorrelatedColorTemperature({
|
|
338
|
+
correlatedColorTemperatureKelvin: kelvin,
|
|
339
|
+
duv: tint,
|
|
340
|
+
whiteLocus: input.whiteLocus,
|
|
341
|
+
locus
|
|
342
|
+
}).value;
|
|
343
|
+
const xyz = xyzOfChromaticity(white);
|
|
344
|
+
const [red, green, blue] = multiplyMatrixVector(matrix, [xyz.x, xyz.y, xyz.z]);
|
|
345
|
+
if (!(red > 0) || !(green > 0) || !(blue > 0)) {
|
|
346
|
+
throw new InvalidScientificInputError("The camera response to the declared white must be positive in every channel.");
|
|
347
|
+
}
|
|
348
|
+
return immutableState({
|
|
349
|
+
...stateBase(input.stateId, "color-temperature", { red: green / red, green: 1, blue: green / blue }, [
|
|
350
|
+
"Kelvin/tint gains neutralize the declared white through the supplied camera matrix; they do not identify the scene illuminant.",
|
|
351
|
+
"Tint is Duv in CIE 1960 uv; accuracy is bounded by the camera matrix and the locus model."
|
|
352
|
+
]),
|
|
353
|
+
sourceProfile: { profileId, profileVersion },
|
|
354
|
+
colorTemperature: {
|
|
355
|
+
intentId,
|
|
356
|
+
colorTemperatureKelvin: kelvin,
|
|
357
|
+
tint,
|
|
358
|
+
whiteLocus: input.whiteLocus,
|
|
359
|
+
tintInterpretation: "duv-cie-1960-uv",
|
|
360
|
+
planckianLocusModel: locus.kind,
|
|
361
|
+
adoptedWhiteChromaticity: { x: white.x, y: white.y },
|
|
362
|
+
cameraNeutralRgb: { red, green, blue }
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
282
366
|
function reduceSampleSet(sampleSet, clippedPolicy) {
|
|
367
|
+
requireInputObject(sampleSet, "sampleSet input");
|
|
283
368
|
if (sampleSet.inputDomain !== "relative-pre-wb-camera-linear-rgb") {
|
|
284
|
-
throw new
|
|
369
|
+
throw new InvalidConfigurationError('sampleSet.inputDomain must be "relative-pre-wb-camera-linear-rgb".');
|
|
285
370
|
}
|
|
286
371
|
const imageStateId = requireScientificNonEmptyString(sampleSet.imageStateId, "sampleSet.imageStateId");
|
|
287
372
|
if (!Array.isArray(sampleSet.samples) || sampleSet.samples.length === 0) {
|
|
288
|
-
throw new
|
|
373
|
+
throw new InvalidConfigurationError("sampleSet.samples must be a non-empty array.");
|
|
289
374
|
}
|
|
290
375
|
let weightSum = 0;
|
|
291
376
|
let redSum = 0;
|
|
@@ -350,6 +435,7 @@ function neutralizingGains(mean) {
|
|
|
350
435
|
* claim the selected object is spectrally neutral in the real scene.
|
|
351
436
|
*/
|
|
352
437
|
export function resolveCustomWhiteBalance(input) {
|
|
438
|
+
requireInputKeys(input, "resolveCustomWhiteBalance", ["stateId", "sampleSet"]);
|
|
353
439
|
const reduced = reduceSampleSet(input.sampleSet, "reject-any");
|
|
354
440
|
return immutableState({
|
|
355
441
|
...stateBase(input.stateId, "custom-measurement", neutralizingGains(reduced.weightedMean), [
|
|
@@ -367,11 +453,13 @@ export function resolveCustomWhiteBalance(input) {
|
|
|
367
453
|
/**
|
|
368
454
|
* Estimates one global AWB state from declared pre-WB camera-linear samples.
|
|
369
455
|
*
|
|
370
|
-
* It
|
|
371
|
-
* neutralizing estimate is softened by the profile's
|
|
372
|
-
* different generic AWB priorities can
|
|
456
|
+
* It deliberately does not accept metadata about the true illuminant. A
|
|
457
|
+
* grey-world neutralizing estimate is softened by the profile's
|
|
458
|
+
* correctionStrength, so different generic AWB priorities can keep different
|
|
459
|
+
* amounts of colour cast.
|
|
373
460
|
*/
|
|
374
461
|
export function estimateAutoWhiteBalance(input) {
|
|
462
|
+
requireInputKeys(input, "estimateAutoWhiteBalance", ["stateId", "profile", "policyId", "sampleSet"]);
|
|
375
463
|
const profile = parseWhiteBalanceProfile(input.profile);
|
|
376
464
|
const policyId = requireScientificNonEmptyString(input.policyId, "policyId");
|
|
377
465
|
const policy = profile.awbPolicies.find((entry) => entry.policyId === policyId);
|
|
@@ -413,10 +501,11 @@ export function estimateAutoWhiteBalance(input) {
|
|
|
413
501
|
/**
|
|
414
502
|
* Freezes a resolved WB state under a new stable identity.
|
|
415
503
|
*
|
|
416
|
-
* Locking changes neither the scene nor the gains
|
|
417
|
-
* differ
|
|
504
|
+
* Locking changes neither the scene nor the gains. Later AWB estimates may
|
|
505
|
+
* differ, but this locked state stays the same.
|
|
418
506
|
*/
|
|
419
507
|
export function createLockedWhiteBalanceState(input) {
|
|
508
|
+
requireInputKeys(input, "createLockedWhiteBalanceState", ["stateId", "sourceState"]);
|
|
420
509
|
const stateId = requireScientificNonEmptyString(input.stateId, "stateId");
|
|
421
510
|
const source = input.sourceState;
|
|
422
511
|
return immutableState({
|
|
@@ -444,9 +533,9 @@ function requirePositiveSafeInteger(value, path) {
|
|
|
444
533
|
return parsed;
|
|
445
534
|
}
|
|
446
535
|
function parseResolvedWhiteBalanceMeasurement(value, path) {
|
|
447
|
-
const record = requireRecord(value, path);
|
|
536
|
+
const record = requireRecord(value, path, ["weightedMeanPreWbSignal", "imageStateId", "usableSampleCount", "rejectedClippedSampleCount"]);
|
|
448
537
|
const mean = requireRecord(record.weightedMeanPreWbSignal, path +
|
|
449
|
-
".weightedMeanPreWbSignal");
|
|
538
|
+
".weightedMeanPreWbSignal", ["red", "green", "blue"]);
|
|
450
539
|
return {
|
|
451
540
|
imageStateId: requireNonEmptyString(record.imageStateId, path + ".imageStateId"),
|
|
452
541
|
usableSampleCount: requirePositiveSafeInteger(record.usableSampleCount, path +
|
|
@@ -464,15 +553,43 @@ function parseResolvedWhiteBalanceMeasurement(value, path) {
|
|
|
464
553
|
}
|
|
465
554
|
};
|
|
466
555
|
}
|
|
556
|
+
function parseResolvedColorTemperature(value, path) {
|
|
557
|
+
const record = requireRecord(value, path, ["whiteLocus", "tintInterpretation", "planckianLocusModel", "adoptedWhiteChromaticity", "intentId", "colorTemperatureKelvin", "tint", "cameraNeutralRgb"]);
|
|
558
|
+
if (record.whiteLocus !== "planckian" && record.whiteLocus !== "cie-daylight") {
|
|
559
|
+
throw new InvalidConfigurationError(path + ".whiteLocus is invalid.");
|
|
560
|
+
}
|
|
561
|
+
if (record.tintInterpretation !== "duv-cie-1960-uv") {
|
|
562
|
+
throw new InvalidConfigurationError(path + ".tintInterpretation is invalid.");
|
|
563
|
+
}
|
|
564
|
+
if (record.planckianLocusModel !== "planck-analytic-cmf" &&
|
|
565
|
+
record.planckianLocusModel !== "planck-integration") {
|
|
566
|
+
throw new InvalidConfigurationError(path + ".planckianLocusModel is invalid.");
|
|
567
|
+
}
|
|
568
|
+
const white = requireRecord(record.adoptedWhiteChromaticity, path + ".adoptedWhiteChromaticity", ["x", "y"]);
|
|
569
|
+
return {
|
|
570
|
+
intentId: requireNonEmptyString(record.intentId, path + ".intentId"),
|
|
571
|
+
colorTemperatureKelvin: requirePositiveFinite(record.colorTemperatureKelvin, path + ".colorTemperatureKelvin"),
|
|
572
|
+
tint: requireFinite(record.tint, path + ".tint"),
|
|
573
|
+
whiteLocus: record.whiteLocus,
|
|
574
|
+
tintInterpretation: "duv-cie-1960-uv",
|
|
575
|
+
planckianLocusModel: record.planckianLocusModel,
|
|
576
|
+
adoptedWhiteChromaticity: {
|
|
577
|
+
x: requirePositiveFinite(white.x, path + ".adoptedWhiteChromaticity.x"),
|
|
578
|
+
y: requirePositiveFinite(white.y, path + ".adoptedWhiteChromaticity.y")
|
|
579
|
+
},
|
|
580
|
+
cameraNeutralRgb: parseChannelGains(record.cameraNeutralRgb, path + ".cameraNeutralRgb")
|
|
581
|
+
};
|
|
582
|
+
}
|
|
467
583
|
/**
|
|
468
|
-
* Parses a committed resolved white-balance state from
|
|
469
|
-
*
|
|
584
|
+
* Parses a committed, resolved white-balance state from untrusted JSON,
|
|
585
|
+
* without estimating WB again.
|
|
470
586
|
*
|
|
471
|
-
* This is
|
|
472
|
-
* resolved gains
|
|
587
|
+
* This is deliberately a state parser, not an AWB estimator. It keeps the
|
|
588
|
+
* resolved gains, policy and measurement identity that a capture committed
|
|
589
|
+
* earlier.
|
|
473
590
|
*/
|
|
474
591
|
export function parseResolvedWhiteBalanceState(value) {
|
|
475
|
-
const record = requireRecord(value, "resolvedWhiteBalanceState");
|
|
592
|
+
const record = requireRecord(value, "resolvedWhiteBalanceState", ["version", "inputDomain", "source", "locked", "sourceProfile", "awbPolicy", "measurement", "colorTemperature", "presetId", "sourceStateId", "stateId", "channelGains", "limitations", "trueIlluminantMetadataUsed", "sceneIlluminationModified", "rawCaptureDestructivelyModified", "physicalExposureModified", "focusModified"]);
|
|
476
593
|
if (record.version !==
|
|
477
594
|
WHITE_BALANCE_STATE_VERSION) {
|
|
478
595
|
throw new InvalidConfigurationError('resolvedWhiteBalanceState.version must be "' +
|
|
@@ -489,7 +606,9 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
489
606
|
record.source !==
|
|
490
607
|
"custom-measurement" &&
|
|
491
608
|
record.source !==
|
|
492
|
-
"auto-white-balance"
|
|
609
|
+
"auto-white-balance" &&
|
|
610
|
+
record.source !==
|
|
611
|
+
"color-temperature") {
|
|
493
612
|
throw new InvalidConfigurationError("resolvedWhiteBalanceState.source is invalid.");
|
|
494
613
|
}
|
|
495
614
|
if (typeof record.locked !==
|
|
@@ -512,7 +631,7 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
512
631
|
const sourceProfile = record.sourceProfile === undefined
|
|
513
632
|
? undefined
|
|
514
633
|
: (() => {
|
|
515
|
-
const profile = requireRecord(record.sourceProfile, "resolvedWhiteBalanceState.sourceProfile");
|
|
634
|
+
const profile = requireRecord(record.sourceProfile, "resolvedWhiteBalanceState.sourceProfile", ["profileId", "profileVersion"]);
|
|
516
635
|
return {
|
|
517
636
|
profileId: requireNonEmptyString(profile.profileId, "resolvedWhiteBalanceState.sourceProfile.profileId"),
|
|
518
637
|
profileVersion: requireNonEmptyString(profile.profileVersion, "resolvedWhiteBalanceState.sourceProfile.profileVersion")
|
|
@@ -521,7 +640,7 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
521
640
|
const awbPolicy = record.awbPolicy === undefined
|
|
522
641
|
? undefined
|
|
523
642
|
: (() => {
|
|
524
|
-
const policy = requireRecord(record.awbPolicy, "resolvedWhiteBalanceState.awbPolicy");
|
|
643
|
+
const policy = requireRecord(record.awbPolicy, "resolvedWhiteBalanceState.awbPolicy", ["policyId", "intent", "correctionStrength"]);
|
|
525
644
|
return {
|
|
526
645
|
policyId: requireNonEmptyString(policy.policyId, "resolvedWhiteBalanceState.awbPolicy.policyId"),
|
|
527
646
|
intent: parseAwbIntent(policy.intent, "resolvedWhiteBalanceState.awbPolicy.intent"),
|
|
@@ -531,6 +650,9 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
531
650
|
const measurement = record.measurement === undefined
|
|
532
651
|
? undefined
|
|
533
652
|
: parseResolvedWhiteBalanceMeasurement(record.measurement, "resolvedWhiteBalanceState.measurement");
|
|
653
|
+
const colorTemperature = record.colorTemperature === undefined
|
|
654
|
+
? undefined
|
|
655
|
+
: parseResolvedColorTemperature(record.colorTemperature, "resolvedWhiteBalanceState.colorTemperature");
|
|
534
656
|
const presetId = record.presetId === undefined
|
|
535
657
|
? undefined
|
|
536
658
|
: requireNonEmptyString(record.presetId, "resolvedWhiteBalanceState.presetId");
|
|
@@ -555,6 +677,12 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
555
677
|
measurement === undefined)) {
|
|
556
678
|
throw new InvalidConfigurationError("An auto-white-balance state requires sourceProfile, awbPolicy, and measurement identity.");
|
|
557
679
|
}
|
|
680
|
+
if ((record.source === "color-temperature") !==
|
|
681
|
+
(colorTemperature !== undefined) ||
|
|
682
|
+
(record.source === "color-temperature" &&
|
|
683
|
+
sourceProfile === undefined)) {
|
|
684
|
+
throw new InvalidConfigurationError("A color-temperature WB state requires sourceProfile and colorTemperature; other sources must not declare colorTemperature.");
|
|
685
|
+
}
|
|
558
686
|
if (record.locked &&
|
|
559
687
|
sourceStateId === undefined) {
|
|
560
688
|
throw new InvalidConfigurationError("A locked WB state requires sourceStateId.");
|
|
@@ -590,6 +718,11 @@ export function parseResolvedWhiteBalanceState(value) {
|
|
|
590
718
|
: {
|
|
591
719
|
measurement
|
|
592
720
|
}),
|
|
721
|
+
...(colorTemperature === undefined
|
|
722
|
+
? {}
|
|
723
|
+
: {
|
|
724
|
+
colorTemperature
|
|
725
|
+
}),
|
|
593
726
|
...(sourceStateId === undefined
|
|
594
727
|
? {}
|
|
595
728
|
: {
|