@photivra/engine 1.4.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 +401 -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 +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- 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 +67 -10
- package/dist/capture/native-raw.js +90 -24
- 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 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- 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/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 -47
- 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_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/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/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
package/dist/exposure/flash.js
CHANGED
|
@@ -1,35 +1,47 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
3
|
+
* Manual flash and flash sync.
|
|
4
|
+
*
|
|
5
|
+
* The parsers validate untrusted input and return the normalized typed contract. Unknown enum values,
|
|
6
|
+
* missing required fields and incompatible scientific data are rejected.
|
|
7
|
+
*
|
|
8
|
+
* Manual flash is a relative light pulse added on top of the scene light, timed on the capture's
|
|
9
|
+
* opening-reference clock.
|
|
10
|
+
* - Ordinary front- or rear-curtain sync needs a real interval when the whole frame is open at once.
|
|
11
|
+
* - High-speed sync (HSS; schema 0.2.0 sync profiles) is separate: a near-continuous burst that
|
|
12
|
+
* covers the travelling shutter slit (resolveHighSpeedFlashSync).
|
|
13
|
+
* - TTL pre-flash power and guide-number relations are in flash-ttl.ts.
|
|
14
|
+
* Source brightness, optical transport and sensor integration have their own contracts.
|
|
15
|
+
* @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
|
|
16
|
+
* limits.
|
|
15
17
|
*/
|
|
16
18
|
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
17
19
|
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
18
20
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
19
21
|
import { parseSceneIlluminationProfile } from "../schema/illumination.js";
|
|
20
22
|
import { parseSceneIlluminationTemporalProfile } from "../schema/illumination-temporal.js";
|
|
23
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
21
24
|
export const MANUAL_FLASH_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
22
25
|
export const FLASH_SYNC_CAPABILITY_SCHEMA_VERSION = "0.1.0";
|
|
26
|
+
/** Sync-capability schema that may declare high-speed sync (a fast pulse train that acts as continuous light). */
|
|
27
|
+
export const FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION = "0.2.0";
|
|
28
|
+
/** Model identity of the pulsed quasi-continuous high-speed-sync burst. */
|
|
29
|
+
export const HIGH_SPEED_SYNC_MODEL = Object.freeze({
|
|
30
|
+
id: "flash-hss-quasi-continuous-burst",
|
|
31
|
+
version: "1.0.0"
|
|
32
|
+
});
|
|
23
33
|
const ORDINARY_SYNC_MODES = new Set([
|
|
24
34
|
"front-curtain",
|
|
25
35
|
"rear-curtain"
|
|
26
36
|
]);
|
|
27
|
-
function requireRecord(value, path) {
|
|
37
|
+
function requireRecord(value, path, allowedKeys) {
|
|
28
38
|
if (typeof value !== "object" ||
|
|
29
39
|
value === null ||
|
|
30
40
|
Array.isArray(value)) {
|
|
31
41
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
32
42
|
}
|
|
43
|
+
if (allowedKeys !== null)
|
|
44
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
33
45
|
return value;
|
|
34
46
|
}
|
|
35
47
|
function requireNonEmptyString(value, path) {
|
|
@@ -81,7 +93,7 @@ function parsePulseSamples(value, supportDurationSeconds, path) {
|
|
|
81
93
|
"[" +
|
|
82
94
|
index +
|
|
83
95
|
"]";
|
|
84
|
-
const record = requireRecord(entry, samplePath);
|
|
96
|
+
const record = requireRecord(entry, samplePath, ["timeSecondsFromWaveformReference", "relativeMagnitudeMultiplier"]);
|
|
85
97
|
const time = requireFinite(record
|
|
86
98
|
.timeSecondsFromWaveformReference, samplePath +
|
|
87
99
|
".timeSecondsFromWaveformReference");
|
|
@@ -131,6 +143,7 @@ function parsePulseSamples(value, supportDurationSeconds, path) {
|
|
|
131
143
|
return samples;
|
|
132
144
|
}
|
|
133
145
|
function validateSourceTemplate(sourceTemplate) {
|
|
146
|
+
requireInputObject(sourceTemplate, "manualFlashProfile.sourceTemplate");
|
|
134
147
|
const probe = parseSceneIlluminationProfile({
|
|
135
148
|
schemaVersion: "0.1.0",
|
|
136
149
|
profileId: "manual-flash-source-validation",
|
|
@@ -171,20 +184,20 @@ function validateSourceTemplate(sourceTemplate) {
|
|
|
171
184
|
};
|
|
172
185
|
}
|
|
173
186
|
/**
|
|
174
|
-
*
|
|
175
|
-
* missing required fields and incompatible scientific data
|
|
187
|
+
* Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,
|
|
188
|
+
* missing required fields and incompatible scientific data are rejected here.
|
|
176
189
|
*
|
|
177
|
-
* Manual flash is a
|
|
178
|
-
* Ordinary front
|
|
179
|
-
*
|
|
180
|
-
* contracts.
|
|
181
|
-
* @param value - unknown.
|
|
182
|
-
* @returns ManualFlashProfile.
|
|
190
|
+
* Manual flash is a relative light pulse added on top of the scene light, timed on the capture's
|
|
191
|
+
* opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole
|
|
192
|
+
* frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source
|
|
193
|
+
* brightness, optical transport and sensor integration have their own contracts.
|
|
194
|
+
* @param value - unknown. Untrusted input; TypeScript types alone are not validation.
|
|
195
|
+
* @returns ManualFlashProfile. The result states its shape and scientific status; a successful call does not imply calibration.
|
|
183
196
|
*
|
|
184
197
|
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
185
198
|
*/
|
|
186
199
|
export function parseManualFlashProfile(value) {
|
|
187
|
-
const record = requireRecord(value, "manualFlashProfile");
|
|
200
|
+
const record = requireRecord(value, "manualFlashProfile", ["schemaVersion", "pulse", "outputControl", "profileId", "profileVersion", "sourceTemplate", "evidence", "limitations", "ttlModeled", "highSpeedSyncModeled", "recycleBehaviorModeled", "redEyePreflashModeled", "modelingLightModeled", "afAssistModeled"]);
|
|
188
201
|
if (record.schemaVersion !==
|
|
189
202
|
MANUAL_FLASH_PROFILE_SCHEMA_VERSION) {
|
|
190
203
|
throw new InvalidConfigurationError('manualFlashProfile.schemaVersion must be "' +
|
|
@@ -205,7 +218,7 @@ export function parseManualFlashProfile(value) {
|
|
|
205
218
|
" must be false in schema 0.1.0.");
|
|
206
219
|
}
|
|
207
220
|
}
|
|
208
|
-
const pulse = requireRecord(record.pulse, "manualFlashProfile.pulse");
|
|
221
|
+
const pulse = requireRecord(record.pulse, "manualFlashProfile.pulse", ["supportDurationSeconds", "scientificStatus", "interpolation", "normalization", "waveformId", "samples", "evidence", "limitations"]);
|
|
209
222
|
const supportDurationSeconds = requirePositiveFinite(pulse.supportDurationSeconds, "manualFlashProfile.pulse.supportDurationSeconds");
|
|
210
223
|
if (pulse.scientificStatus !==
|
|
211
224
|
"approximation" ||
|
|
@@ -215,7 +228,7 @@ export function parseManualFlashProfile(value) {
|
|
|
215
228
|
"relative-peak-one") {
|
|
216
229
|
throw new InvalidConfigurationError("manualFlashProfile.pulse scientificStatus/interpolation/normalization is invalid.");
|
|
217
230
|
}
|
|
218
|
-
const output = requireRecord(record.outputControl, "manualFlashProfile.outputControl");
|
|
231
|
+
const output = requireRecord(record.outputControl, "manualFlashProfile.outputControl", ["kind", "flashExposureCompensationStops", "scale"]);
|
|
219
232
|
if (output.kind !==
|
|
220
233
|
"relative-linear-source-scale" ||
|
|
221
234
|
output
|
|
@@ -254,33 +267,58 @@ export function parseManualFlashProfile(value) {
|
|
|
254
267
|
};
|
|
255
268
|
}
|
|
256
269
|
/**
|
|
257
|
-
*
|
|
258
|
-
* missing required fields and incompatible scientific data
|
|
270
|
+
* Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,
|
|
271
|
+
* missing required fields and incompatible scientific data are rejected here.
|
|
259
272
|
*
|
|
260
|
-
* Manual flash is a
|
|
261
|
-
* Ordinary front
|
|
262
|
-
*
|
|
263
|
-
* contracts.
|
|
264
|
-
* @param value - unknown.
|
|
265
|
-
* @returns FlashSyncCapabilityProfile.
|
|
273
|
+
* Manual flash is a relative light pulse added on top of the scene light, timed on the capture's
|
|
274
|
+
* opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole
|
|
275
|
+
* frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source
|
|
276
|
+
* brightness, optical transport and sensor integration have their own contracts.
|
|
277
|
+
* @param value - unknown. Untrusted input; TypeScript types alone are not validation.
|
|
278
|
+
* @returns FlashSyncCapabilityProfile. The result states its shape and scientific status; a successful call does not imply calibration.
|
|
266
279
|
*
|
|
267
280
|
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
268
281
|
*/
|
|
269
282
|
export function parseFlashSyncCapabilityProfile(value) {
|
|
270
|
-
const record = requireRecord(value, "flashSyncCapabilityProfile");
|
|
283
|
+
const record = requireRecord(value, "flashSyncCapabilityProfile", ["schemaVersion", "highSpeedSyncSupported", "ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed", "highSpeedSync", "supportedOrdinarySyncModes", "profileId", "profileVersion", "captureModeId", "timingProfileId", "evidence", "limitations"]);
|
|
271
284
|
if (record.schemaVersion !==
|
|
272
|
-
FLASH_SYNC_CAPABILITY_SCHEMA_VERSION
|
|
285
|
+
FLASH_SYNC_CAPABILITY_SCHEMA_VERSION &&
|
|
286
|
+
record.schemaVersion !==
|
|
287
|
+
FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION) {
|
|
273
288
|
throw new InvalidConfigurationError('flashSyncCapabilityProfile.schemaVersion must be "' +
|
|
274
289
|
FLASH_SYNC_CAPABILITY_SCHEMA_VERSION +
|
|
290
|
+
'" or "' +
|
|
291
|
+
FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION +
|
|
275
292
|
'".');
|
|
276
293
|
}
|
|
277
|
-
|
|
278
|
-
|
|
294
|
+
const hssSchema = record.schemaVersion ===
|
|
295
|
+
FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION;
|
|
296
|
+
if ((hssSchema
|
|
297
|
+
? typeof record.highSpeedSyncSupported !==
|
|
298
|
+
"boolean"
|
|
299
|
+
: record.highSpeedSyncSupported !==
|
|
300
|
+
false) ||
|
|
279
301
|
record
|
|
280
302
|
.ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed !==
|
|
281
303
|
true) {
|
|
282
304
|
throw new InvalidConfigurationError("flashSyncCapabilityProfile schema 0.1.0 supports ordinary whole-frame sync only and must not claim HSS.");
|
|
283
305
|
}
|
|
306
|
+
let highSpeedSync;
|
|
307
|
+
if (record.highSpeedSyncSupported === true) {
|
|
308
|
+
const hss = requireRecord(record.highSpeedSync, "flashSyncCapabilityProfile.highSpeedSync", ["burstEnergyFractionOfFullPulse", "evidence"]);
|
|
309
|
+
const fraction = requirePositiveFinite(hss.burstEnergyFractionOfFullPulse, "flashSyncCapabilityProfile.highSpeedSync.burstEnergyFractionOfFullPulse");
|
|
310
|
+
if (fraction > 1) {
|
|
311
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile.highSpeedSync.burstEnergyFractionOfFullPulse must be at most 1.");
|
|
312
|
+
}
|
|
313
|
+
highSpeedSync = {
|
|
314
|
+
burstEnergyFractionOfFullPulse: fraction,
|
|
315
|
+
evidence: parseEvidenceList(hss.evidence, "flashSyncCapabilityProfile.highSpeedSync.evidence")
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
else if (record.highSpeedSync !==
|
|
319
|
+
undefined) {
|
|
320
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile.highSpeedSync must be omitted when HSS is unsupported.");
|
|
321
|
+
}
|
|
284
322
|
if (!Array.isArray(record.supportedOrdinarySyncModes) ||
|
|
285
323
|
record
|
|
286
324
|
.supportedOrdinarySyncModes
|
|
@@ -304,18 +342,46 @@ export function parseFlashSyncCapabilityProfile(value) {
|
|
|
304
342
|
throw new InvalidConfigurationError("flashSyncCapabilityProfile.supportedOrdinarySyncModes must not contain duplicates.");
|
|
305
343
|
}
|
|
306
344
|
return {
|
|
307
|
-
schemaVersion:
|
|
345
|
+
schemaVersion: hssSchema
|
|
346
|
+
? FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION
|
|
347
|
+
: FLASH_SYNC_CAPABILITY_SCHEMA_VERSION,
|
|
308
348
|
profileId: requireNonEmptyString(record.profileId, "flashSyncCapabilityProfile.profileId"),
|
|
309
349
|
profileVersion: requireNonEmptyString(record.profileVersion, "flashSyncCapabilityProfile.profileVersion"),
|
|
310
350
|
captureModeId: requireNonEmptyString(record.captureModeId, "flashSyncCapabilityProfile.captureModeId"),
|
|
311
351
|
timingProfileId: requireNonEmptyString(record.timingProfileId, "flashSyncCapabilityProfile.timingProfileId"),
|
|
312
352
|
supportedOrdinarySyncModes: modes,
|
|
313
|
-
highSpeedSyncSupported:
|
|
353
|
+
highSpeedSyncSupported: highSpeedSync !== undefined,
|
|
354
|
+
...(highSpeedSync === undefined
|
|
355
|
+
? {}
|
|
356
|
+
: { highSpeedSync }),
|
|
314
357
|
ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed: true,
|
|
315
358
|
evidence: parseEvidenceList(record.evidence, "flashSyncCapabilityProfile.evidence"),
|
|
316
359
|
limitations: parseLimitations(record.limitations, "flashSyncCapabilityProfile.limitations")
|
|
317
360
|
};
|
|
318
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Shape guard for the resolved capture-mode timing record read by the flash sync functions: every
|
|
364
|
+
* nested object read below must be an object, so a malformed record fails with
|
|
365
|
+
* InvalidConfigurationError instead of a raw TypeError. Values are checked where they are used.
|
|
366
|
+
*/
|
|
367
|
+
function requireTimingRecordShape(timing, path) {
|
|
368
|
+
requireInputObject(timing, path);
|
|
369
|
+
const record = timing;
|
|
370
|
+
if (!Array.isArray(record.evidence))
|
|
371
|
+
throw new InvalidConfigurationError(path + ".evidence must be an array.");
|
|
372
|
+
requireInputObject(record.exposureWindows, path + ".exposureWindows");
|
|
373
|
+
const windows = record.exposureWindows;
|
|
374
|
+
requireInputObject(windows.nominalExposureDurationSeconds, path + ".exposureWindows.nominalExposureDurationSeconds");
|
|
375
|
+
requireInputObject(windows.localExposureDurationRangeSeconds, path + ".exposureWindows.localExposureDurationRangeSeconds");
|
|
376
|
+
for (const boundary of ["opening", "closing"]) {
|
|
377
|
+
requireInputObject(windows[boundary], path + ".exposureWindows." + boundary);
|
|
378
|
+
const schedule = windows[boundary].schedule;
|
|
379
|
+
requireInputObject(schedule, path + ".exposureWindows." + boundary + ".schedule");
|
|
380
|
+
if (schedule.kind !== "simultaneous") {
|
|
381
|
+
requireInputObject(schedule.traversalDurationSeconds, path + ".exposureWindows." + boundary + ".schedule.traversalDurationSeconds");
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
319
385
|
function wholeFrameOpenInterval(timing) {
|
|
320
386
|
const opening = timing.exposureWindows.opening
|
|
321
387
|
.schedule;
|
|
@@ -337,6 +403,8 @@ function wholeFrameOpenInterval(timing) {
|
|
|
337
403
|
};
|
|
338
404
|
}
|
|
339
405
|
function validateReleaseBinding(release, timing) {
|
|
406
|
+
requireInputObject(release, "releaseFrame");
|
|
407
|
+
requireInputObject(release.exposure, "releaseFrame.exposure");
|
|
340
408
|
const nominal = timing.exposureWindows
|
|
341
409
|
.nominalExposureDurationSeconds
|
|
342
410
|
.value;
|
|
@@ -348,23 +416,25 @@ function validateReleaseBinding(release, timing) {
|
|
|
348
416
|
Number.EPSILON *
|
|
349
417
|
16 *
|
|
350
418
|
scale) {
|
|
351
|
-
throw new InvalidScientificInputError("releaseFrame shutter duration must match the
|
|
419
|
+
throw new InvalidScientificInputError("releaseFrame shutter duration must match the exposure duration of the capture-mode exposure-window timing.");
|
|
352
420
|
}
|
|
353
421
|
}
|
|
354
422
|
/**
|
|
355
|
-
*
|
|
356
|
-
* front or rear sync
|
|
423
|
+
* Places a declared ordinary flash pulse inside the actual interval when the whole frame is open, for
|
|
424
|
+
* front- or rear-curtain sync. Otherwise returns a structured incompatibility.
|
|
357
425
|
*
|
|
358
|
-
* Manual flash is a
|
|
359
|
-
* Ordinary front
|
|
360
|
-
*
|
|
361
|
-
* contracts.
|
|
362
|
-
* @param input - ResolveManualFlashSyncInput. See
|
|
363
|
-
* @returns ResolvedManualFlashSync.
|
|
426
|
+
* Manual flash is a relative light pulse added on top of the scene light, timed on the capture's
|
|
427
|
+
* opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole
|
|
428
|
+
* frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source
|
|
429
|
+
* brightness, optical transport and sensor integration have their own contracts.
|
|
430
|
+
* @param input - ResolveManualFlashSyncInput. See that type for coordinates, units and profile binding.
|
|
431
|
+
* @returns ResolvedManualFlashSync. The result states its shape and scientific status; a successful call does not imply calibration.
|
|
364
432
|
*
|
|
365
433
|
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
366
434
|
*/
|
|
367
435
|
export function resolveManualFlashSync(input) {
|
|
436
|
+
requireInputKeys(input, "resolveManualFlashSync", ["flashEnabled", "flashProfile", "syncCapabilities", "timing", "syncMode", "releaseFrame"]);
|
|
437
|
+
requireTimingRecordShape(input.timing, "resolveManualFlashSync timing");
|
|
368
438
|
const flash = parseManualFlashProfile(input.flashProfile);
|
|
369
439
|
const capabilities = parseFlashSyncCapabilityProfile(input.syncCapabilities);
|
|
370
440
|
if (capabilities.captureModeId !==
|
|
@@ -423,7 +493,7 @@ export function resolveManualFlashSync(input) {
|
|
|
423
493
|
}
|
|
424
494
|
if (input.syncMode ===
|
|
425
495
|
"high-speed-sync") {
|
|
426
|
-
throw new InvalidScientificInputError("High-speed sync is not
|
|
496
|
+
throw new InvalidScientificInputError("High-speed sync is not an ordinary sync mode; ordinary single-pulse flash cannot be used as an HSS substitute. Use resolveHighSpeedFlashSync with an HSS-capable sync profile.");
|
|
427
497
|
}
|
|
428
498
|
if (!capabilities
|
|
429
499
|
.supportedOrdinarySyncModes
|
|
@@ -432,7 +502,7 @@ export function resolveManualFlashSync(input) {
|
|
|
432
502
|
}
|
|
433
503
|
if (openInterval.durationSeconds <=
|
|
434
504
|
0) {
|
|
435
|
-
throw new InvalidScientificInputError("Ordinary one-pulse flash cannot uniformly expose the active frame because the
|
|
505
|
+
throw new InvalidScientificInputError("Ordinary one-pulse flash cannot uniformly expose the active frame because the exposure-window timing has no whole-frame-open interval.");
|
|
436
506
|
}
|
|
437
507
|
if (flash.pulse
|
|
438
508
|
.supportDurationSeconds >
|
|
@@ -498,19 +568,20 @@ function scaledFlashSource(flash) {
|
|
|
498
568
|
};
|
|
499
569
|
}
|
|
500
570
|
/**
|
|
501
|
-
*
|
|
502
|
-
*
|
|
571
|
+
* Builds a temporal illumination overlay from the resolved manual pulse. The identity of the base
|
|
572
|
+
* ambient light source is kept.
|
|
503
573
|
*
|
|
504
|
-
* Manual flash is a
|
|
505
|
-
* Ordinary front
|
|
506
|
-
*
|
|
507
|
-
* contracts.
|
|
508
|
-
* @param input - CreateManualFlashIlluminationOverlayInput. See
|
|
509
|
-
* @returns ManualFlashIlluminationOverlay.
|
|
574
|
+
* Manual flash is a relative light pulse added on top of the scene light, timed on the capture's
|
|
575
|
+
* opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole
|
|
576
|
+
* frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source
|
|
577
|
+
* brightness, optical transport and sensor integration have their own contracts.
|
|
578
|
+
* @param input - CreateManualFlashIlluminationOverlayInput. See that type for coordinates, units and profile binding.
|
|
579
|
+
* @returns ManualFlashIlluminationOverlay. The result states its shape and scientific status; a successful call does not imply calibration.
|
|
510
580
|
*
|
|
511
581
|
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
512
582
|
*/
|
|
513
583
|
export function createManualFlashIlluminationOverlay(input) {
|
|
584
|
+
requireInputKeys(input, "createManualFlashIlluminationOverlay", ["baseIlluminationProfile", "baseTemporalProfile", "flashProfile", "resolvedSync", "illuminationProfileId", "temporalProfileId"]);
|
|
514
585
|
const base = parseSceneIlluminationProfile(input
|
|
515
586
|
.baseIlluminationProfile);
|
|
516
587
|
const baseTemporal = input.baseTemporalProfile ===
|
|
@@ -527,6 +598,9 @@ export function createManualFlashIlluminationOverlay(input) {
|
|
|
527
598
|
}
|
|
528
599
|
const flash = parseManualFlashProfile(input.flashProfile);
|
|
529
600
|
const sync = input.resolvedSync;
|
|
601
|
+
requireInputObject(sync, "createManualFlashIlluminationOverlay resolvedSync");
|
|
602
|
+
if (!Array.isArray(sync.evidence))
|
|
603
|
+
throw new InvalidConfigurationError("createManualFlashIlluminationOverlay resolvedSync.evidence must be an array.");
|
|
530
604
|
if (sync.flashProfileId !==
|
|
531
605
|
flash.profileId ||
|
|
532
606
|
sync.flashProfileVersion !==
|
|
@@ -614,7 +688,7 @@ export function createManualFlashIlluminationOverlay(input) {
|
|
|
614
688
|
scientificStatus: "approximation",
|
|
615
689
|
timingUncertainty: {
|
|
616
690
|
kind: "not-quantified",
|
|
617
|
-
limitation: "Schema 0.1.0 uses ideal deterministic flash trigger registration within the declared
|
|
691
|
+
limitation: "Schema 0.1.0 uses ideal deterministic flash trigger registration within the declared exposure-window schedule."
|
|
618
692
|
},
|
|
619
693
|
evidence: sync.evidence
|
|
620
694
|
}
|
|
@@ -641,4 +715,130 @@ export function createManualFlashIlluminationOverlay(input) {
|
|
|
641
715
|
ttlMeteringIncluded: false
|
|
642
716
|
};
|
|
643
717
|
}
|
|
718
|
+
function integratePulse(samples) {
|
|
719
|
+
let area = 0;
|
|
720
|
+
for (let index = 1; index < samples.length; index += 1) {
|
|
721
|
+
const a = samples[index - 1], b = samples[index];
|
|
722
|
+
area += (b.timeSecondsFromWaveformReference - a.timeSecondsFromWaveformReference) *
|
|
723
|
+
(a.relativeMagnitudeMultiplier + b.relativeMagnitudeMultiplier) / 2;
|
|
724
|
+
}
|
|
725
|
+
return area;
|
|
726
|
+
}
|
|
727
|
+
/**
|
|
728
|
+
* Resolves high-speed (focal-plane) sync (HSS): a fast pulse train that acts as continuous light and
|
|
729
|
+
* covers the whole travelling-slit exposure.
|
|
730
|
+
*
|
|
731
|
+
* At shutter speeds faster than the ordinary sync limit, the shutter's opening and closing edges
|
|
732
|
+
* cross the frame as a slit, and the whole frame is never open at once. A single short pulse would
|
|
733
|
+
* light only a band.
|
|
734
|
+
*
|
|
735
|
+
* HSS instead fires a rapid pulse train. It behaves like constant output P over the burst D, from
|
|
736
|
+
* the first line opening to the last line closing. Each line collects P·t_e over its slit time t_e.
|
|
737
|
+
* - The burst energy is E_burst = η·p·E_pulse. η comes from the sync profile, p is the power
|
|
738
|
+
* fraction and E_pulse is the energy of an ordinary full-power pulse.
|
|
739
|
+
* - So P = E_burst/D, and each line receives η·p·E_pulse·t_e/D.
|
|
740
|
+
* - Exposure ∝ GN² (inverse-square law, GN = d·N). So, relative to an ordinary pulse at the same
|
|
741
|
+
* power, the effective guide number is GN_HSS/GN = √(η·t_e/D).
|
|
742
|
+
* Shortening t_e by one stop therefore costs half a stop of guide number.
|
|
743
|
+
*
|
|
744
|
+
* Approximations: the pulse train is treated as continuous (pulse period ≪ t_e). Recycle and thermal
|
|
745
|
+
* limits are folded into η. Front/rear-curtain placement does not apply, because the burst covers
|
|
746
|
+
* the whole exposure.
|
|
747
|
+
* @see docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md#high-speed-sync
|
|
748
|
+
*/
|
|
749
|
+
export function resolveHighSpeedFlashSync(input) {
|
|
750
|
+
requireInputKeys(input, "resolveHighSpeedFlashSync", ["flashEnabled", "flashProfile", "syncCapabilities", "timing", "powerFraction", "releaseFrame"]);
|
|
751
|
+
requireTimingRecordShape(input.timing, "resolveHighSpeedFlashSync timing");
|
|
752
|
+
const flash = parseManualFlashProfile(input.flashProfile);
|
|
753
|
+
const capabilities = parseFlashSyncCapabilityProfile(input.syncCapabilities);
|
|
754
|
+
if (capabilities.captureModeId !== input.timing.captureModeId || capabilities.timingProfileId !== input.timing.timingProfileId) {
|
|
755
|
+
throw new InvalidScientificInputError("Flash sync capability profile must exactly match the resolved capture-mode and timing-profile identities.");
|
|
756
|
+
}
|
|
757
|
+
if (!capabilities.highSpeedSyncSupported || capabilities.highSpeedSync === undefined) {
|
|
758
|
+
throw new InvalidScientificInputError("The flash sync capability profile does not declare high-speed sync.");
|
|
759
|
+
}
|
|
760
|
+
const power = input.powerFraction;
|
|
761
|
+
if (typeof power !== "number" || !Number.isFinite(power) || power <= 0 || power > 1) {
|
|
762
|
+
throw new InvalidScientificInputError("HSS powerFraction must lie in (0, 1].");
|
|
763
|
+
}
|
|
764
|
+
if (input.releaseFrame !== undefined)
|
|
765
|
+
validateReleaseBinding(input.releaseFrame, input.timing);
|
|
766
|
+
const windows = input.timing.exposureWindows;
|
|
767
|
+
const closing = windows.closing.schedule;
|
|
768
|
+
const burstEnd = windows.nominalExposureDurationSeconds.value +
|
|
769
|
+
(closing.kind === "simultaneous" ? 0 : closing.traversalDurationSeconds.value);
|
|
770
|
+
const eta = capabilities.highSpeedSync.burstEnergyFractionOfFullPulse;
|
|
771
|
+
const local = windows.localExposureDurationRangeSeconds;
|
|
772
|
+
const fraction = { minimum: eta * local.minimum / burstEnd, maximum: eta * local.maximum / burstEnd };
|
|
773
|
+
const pulseEnergy = integratePulse(flash.pulse.samples);
|
|
774
|
+
const burstFlashProfile = {
|
|
775
|
+
...flash,
|
|
776
|
+
pulse: {
|
|
777
|
+
...flash.pulse,
|
|
778
|
+
waveformId: flash.pulse.waveformId + "-hss-burst",
|
|
779
|
+
supportDurationSeconds: burstEnd,
|
|
780
|
+
samples: [
|
|
781
|
+
{ timeSecondsFromWaveformReference: 0, relativeMagnitudeMultiplier: 1 },
|
|
782
|
+
{ timeSecondsFromWaveformReference: burstEnd, relativeMagnitudeMultiplier: 1 }
|
|
783
|
+
],
|
|
784
|
+
limitations: [...flash.pulse.limitations,
|
|
785
|
+
"Quasi-continuous HSS burst: the pulse train is approximated by constant output over the burst support."]
|
|
786
|
+
},
|
|
787
|
+
outputControl: { ...flash.outputControl, scale: flash.outputControl.scale * power * eta * pulseEnergy / burstEnd }
|
|
788
|
+
};
|
|
789
|
+
const enabled = input.flashEnabled;
|
|
790
|
+
return {
|
|
791
|
+
modelId: HIGH_SPEED_SYNC_MODEL.id,
|
|
792
|
+
modelVersion: HIGH_SPEED_SYNC_MODEL.version,
|
|
793
|
+
flashEnabled: enabled,
|
|
794
|
+
flashProfileId: flash.profileId,
|
|
795
|
+
flashProfileVersion: flash.profileVersion,
|
|
796
|
+
sourceId: flash.sourceTemplate.sourceId,
|
|
797
|
+
syncMode: "high-speed-sync",
|
|
798
|
+
syncStatus: enabled ? "high-speed-sync-resolved" : "disabled",
|
|
799
|
+
captureModeId: input.timing.captureModeId,
|
|
800
|
+
timingProfileId: input.timing.timingProfileId,
|
|
801
|
+
syncCapabilityProfileId: capabilities.profileId,
|
|
802
|
+
timeReference: "first-opening-boundary-phase",
|
|
803
|
+
powerFraction: power,
|
|
804
|
+
burstEnergyFractionOfFullPulse: eta,
|
|
805
|
+
singlePulseIntegratedRelativeSeconds: pulseEnergy,
|
|
806
|
+
burstStartSecondsFromCaptureReference: 0,
|
|
807
|
+
burstEndSecondsFromCaptureReference: burstEnd,
|
|
808
|
+
burstDurationSeconds: burstEnd,
|
|
809
|
+
localExposureDurationRangeSeconds: { minimum: local.minimum, maximum: local.maximum },
|
|
810
|
+
energyFractionOfSinglePulseRange: fraction,
|
|
811
|
+
guideNumberFactorRange: { minimum: Math.sqrt(fraction.minimum), maximum: Math.sqrt(fraction.maximum) },
|
|
812
|
+
uniformAcrossActiveFrame: local.minimum === local.maximum,
|
|
813
|
+
burstFlashProfile: enabled ? burstFlashProfile : null,
|
|
814
|
+
waveformTimeZeroSecondsFromCaptureReference: enabled ? 0 : null,
|
|
815
|
+
releaseFrameBinding: !enabled || input.releaseFrame === undefined ? null : {
|
|
816
|
+
sequenceId: input.releaseFrame.sequenceId,
|
|
817
|
+
releaseFrameId: input.releaseFrame.releaseFrameId,
|
|
818
|
+
frameIndex: input.releaseFrame.frameIndex,
|
|
819
|
+
sceneTimeSecondsFromSequenceStartAtBurstStart: input.releaseFrame.sceneTimeSecondsFromSequenceStart,
|
|
820
|
+
sceneTimeSecondsFromSequenceStartAtBurstEnd: input.releaseFrame.sceneTimeSecondsFromSequenceStart + burstEnd
|
|
821
|
+
},
|
|
822
|
+
hssModeled: true,
|
|
823
|
+
ttlModeled: false,
|
|
824
|
+
sensorReadoutTimingUsedAsExposureTiming: false,
|
|
825
|
+
evidence: [...flash.evidence, ...capabilities.evidence, ...capabilities.highSpeedSync.evidence, ...input.timing.evidence],
|
|
826
|
+
limitations: [
|
|
827
|
+
...flash.limitations,
|
|
828
|
+
...capabilities.limitations,
|
|
829
|
+
"HSS burst is registered to exposure-boundary timing (first line opening to last line closing), never sensor data-readout timing.",
|
|
830
|
+
"Pulse-train ripple, recycle/thermal limits beyond the declared burst energy fraction and branded flash protocols are not modeled."
|
|
831
|
+
]
|
|
832
|
+
};
|
|
833
|
+
}
|
|
834
|
+
/**
|
|
835
|
+
* Registers a resolved high-speed-sync burst as a temporal illumination overlay: a rectangular
|
|
836
|
+
* waveform over [0, D]. Each line then collects the burst over its own local exposure window.
|
|
837
|
+
*/
|
|
838
|
+
export function createHighSpeedSyncIlluminationOverlay(input) {
|
|
839
|
+
requireInputKeys(input, "createHighSpeedSyncIlluminationOverlay", ["baseIlluminationProfile", "baseTemporalProfile", "flashProfile", "illuminationProfileId", "temporalProfileId", "resolvedSync"]);
|
|
840
|
+
requireInputObject(input.resolvedSync, "createHighSpeedSyncIlluminationOverlay resolvedSync");
|
|
841
|
+
return createManualFlashIlluminationOverlay({ ...input,
|
|
842
|
+
flashProfile: input.resolvedSync.burstFlashProfile ?? input.flashProfile });
|
|
843
|
+
}
|
|
644
844
|
//# sourceMappingURL=flash.js.map
|