@photivra/engine 0.6.0 → 1.0.1
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/AGENTS.md +674 -0
- package/CHANGELOG.md +191 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +139 -72
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +9 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +10 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +87 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -6
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +16 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +16 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +15 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +11 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +18 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +18 -0
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +8 -0
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +14 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -1
- package/dist/sensor/capture-mode.js +13 -0
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts.map +1 -1
- package/dist/sensor/color-sampling.js +19 -0
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +14 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -1
- package/dist/sensor/exposure-window.js +14 -0
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -1
- package/dist/sensor/optical-stack.js +17 -0
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +12 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +13 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -1
- package/dist/sensor/readout-timing.js +13 -0
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -1
- package/dist/sensor/sampling-aperture.js +14 -0
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +51 -5
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +27 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +139 -3
- package/docs/ARCHITECTURE.md +134 -24
- package/docs/AUTOMATION_COORDINATION.md +2 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +80 -10
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +5 -3
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +66 -0
- package/docs/RELEASE_1_0_1.md +61 -0
- package/docs/RELEASE_AUDIT.md +39 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5050 -1047
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +15 -3
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
5
|
+
* missing required fields and incompatible scientific data fail at this boundary. Manual flash is a
|
|
6
|
+
* registered relative pulse/source overlay on the capture opening-reference clock. Ordinary front/rear
|
|
7
|
+
* sync requires a real whole-frame opening interval. HSS/TTL and flash metering are unsupported here;
|
|
8
|
+
* source magnitude, optical transport and sensor integration retain their own contracts.
|
|
9
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
10
|
+
* missing required fields and incompatible scientific data fail at this boundary. Manual flash is a
|
|
11
|
+
* registered relative pulse/source overlay on the capture opening-reference clock. Ordinary front/rear
|
|
12
|
+
* sync requires a real whole-frame opening interval. HSS/TTL and flash metering are unsupported here;
|
|
13
|
+
* source magnitude, optical transport and sensor integration retain their own contracts.
|
|
14
|
+
* @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
15
|
+
*/
|
|
16
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
17
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
18
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
19
|
+
import { parseSceneIlluminationProfile } from "../schema/illumination.js";
|
|
20
|
+
import { parseSceneIlluminationTemporalProfile } from "../schema/illumination-temporal.js";
|
|
21
|
+
export const MANUAL_FLASH_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
22
|
+
export const FLASH_SYNC_CAPABILITY_SCHEMA_VERSION = "0.1.0";
|
|
23
|
+
const ORDINARY_SYNC_MODES = new Set([
|
|
24
|
+
"front-curtain",
|
|
25
|
+
"rear-curtain"
|
|
26
|
+
]);
|
|
27
|
+
function requireRecord(value, path) {
|
|
28
|
+
if (typeof value !== "object" ||
|
|
29
|
+
value === null ||
|
|
30
|
+
Array.isArray(value)) {
|
|
31
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function requireNonEmptyString(value, path) {
|
|
36
|
+
if (typeof value !== "string" ||
|
|
37
|
+
value.trim().length === 0) {
|
|
38
|
+
throw new InvalidConfigurationError(path +
|
|
39
|
+
" must be a non-empty string.");
|
|
40
|
+
}
|
|
41
|
+
return value.trim();
|
|
42
|
+
}
|
|
43
|
+
function requireFinite(value, path) {
|
|
44
|
+
if (typeof value !== "number" ||
|
|
45
|
+
!Number.isFinite(value)) {
|
|
46
|
+
throw new InvalidConfigurationError(path + " must be finite.");
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
function requirePositiveFinite(value, path) {
|
|
51
|
+
const parsed = requireFinite(value, path);
|
|
52
|
+
if (parsed <= 0) {
|
|
53
|
+
throw new InvalidConfigurationError(path +
|
|
54
|
+
" must be greater than zero.");
|
|
55
|
+
}
|
|
56
|
+
return parsed;
|
|
57
|
+
}
|
|
58
|
+
function parseLimitations(value, path) {
|
|
59
|
+
if (!Array.isArray(value)) {
|
|
60
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
61
|
+
}
|
|
62
|
+
const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
|
|
63
|
+
"[" +
|
|
64
|
+
index +
|
|
65
|
+
"]"));
|
|
66
|
+
if (new Set(parsed).size !==
|
|
67
|
+
parsed.length) {
|
|
68
|
+
throw new InvalidConfigurationError(path +
|
|
69
|
+
" must not contain duplicates.");
|
|
70
|
+
}
|
|
71
|
+
return parsed;
|
|
72
|
+
}
|
|
73
|
+
function parsePulseSamples(value, supportDurationSeconds, path) {
|
|
74
|
+
if (!Array.isArray(value) ||
|
|
75
|
+
value.length < 2) {
|
|
76
|
+
throw new InvalidConfigurationError(path +
|
|
77
|
+
" must contain at least two waveform samples.");
|
|
78
|
+
}
|
|
79
|
+
const samples = value.map((entry, index) => {
|
|
80
|
+
const samplePath = path +
|
|
81
|
+
"[" +
|
|
82
|
+
index +
|
|
83
|
+
"]";
|
|
84
|
+
const record = requireRecord(entry, samplePath);
|
|
85
|
+
const time = requireFinite(record
|
|
86
|
+
.timeSecondsFromWaveformReference, samplePath +
|
|
87
|
+
".timeSecondsFromWaveformReference");
|
|
88
|
+
const magnitude = requireFinite(record
|
|
89
|
+
.relativeMagnitudeMultiplier, samplePath +
|
|
90
|
+
".relativeMagnitudeMultiplier");
|
|
91
|
+
if (time < 0 ||
|
|
92
|
+
time >
|
|
93
|
+
supportDurationSeconds) {
|
|
94
|
+
throw new InvalidConfigurationError(samplePath +
|
|
95
|
+
".timeSecondsFromWaveformReference must lie within the declared pulse support.");
|
|
96
|
+
}
|
|
97
|
+
if (magnitude < 0) {
|
|
98
|
+
throw new InvalidConfigurationError(samplePath +
|
|
99
|
+
".relativeMagnitudeMultiplier must be nonnegative.");
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
timeSecondsFromWaveformReference: time,
|
|
103
|
+
relativeMagnitudeMultiplier: magnitude
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
for (let index = 1; index < samples.length; index += 1) {
|
|
107
|
+
if (!(samples[index]
|
|
108
|
+
.timeSecondsFromWaveformReference >
|
|
109
|
+
samples[index - 1]
|
|
110
|
+
.timeSecondsFromWaveformReference)) {
|
|
111
|
+
throw new InvalidConfigurationError(path +
|
|
112
|
+
" times must be strictly increasing.");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (samples[0]
|
|
116
|
+
.timeSecondsFromWaveformReference !==
|
|
117
|
+
0 ||
|
|
118
|
+
samples[samples.length - 1]
|
|
119
|
+
.timeSecondsFromWaveformReference !==
|
|
120
|
+
supportDurationSeconds) {
|
|
121
|
+
throw new InvalidConfigurationError(path +
|
|
122
|
+
" must start at waveform time 0 and end exactly at supportDurationSeconds.");
|
|
123
|
+
}
|
|
124
|
+
const peak = Math.max(...samples.map((sample) => sample
|
|
125
|
+
.relativeMagnitudeMultiplier));
|
|
126
|
+
if (Math.abs(peak - 1) >
|
|
127
|
+
1e-12) {
|
|
128
|
+
throw new InvalidConfigurationError(path +
|
|
129
|
+
" peak relative magnitude must equal one for relative-peak-one normalization.");
|
|
130
|
+
}
|
|
131
|
+
return samples;
|
|
132
|
+
}
|
|
133
|
+
function validateSourceTemplate(sourceTemplate) {
|
|
134
|
+
const probe = parseSceneIlluminationProfile({
|
|
135
|
+
schemaVersion: "0.1.0",
|
|
136
|
+
profileId: "manual-flash-source-validation",
|
|
137
|
+
sceneId: "manual-flash-source-validation",
|
|
138
|
+
evidence: sourceTemplate.evidence,
|
|
139
|
+
sources: [{
|
|
140
|
+
...sourceTemplate,
|
|
141
|
+
enabled: true,
|
|
142
|
+
temporalBehavior: {
|
|
143
|
+
kind: "time-invariant"
|
|
144
|
+
}
|
|
145
|
+
}],
|
|
146
|
+
sceneRadianceCalculated: false,
|
|
147
|
+
materialResponseApplied: false,
|
|
148
|
+
visibilityEvaluated: false,
|
|
149
|
+
indirectTransportEvaluated: false,
|
|
150
|
+
fluorescenceModeled: false,
|
|
151
|
+
volumetricTransportModeled: false,
|
|
152
|
+
polarizationModeled: false
|
|
153
|
+
});
|
|
154
|
+
const source = probe.sources[0];
|
|
155
|
+
if (source === undefined) {
|
|
156
|
+
throw new InvalidConfigurationError("manualFlashProfile.sourceTemplate must produce one valid illumination source.");
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
sourceId: source.sourceId,
|
|
160
|
+
family: source.family,
|
|
161
|
+
geometry: source.geometry,
|
|
162
|
+
magnitude: source.magnitude,
|
|
163
|
+
spectrum: source.spectrum,
|
|
164
|
+
evidence: source.evidence,
|
|
165
|
+
...(source.limitations ===
|
|
166
|
+
undefined
|
|
167
|
+
? {}
|
|
168
|
+
: {
|
|
169
|
+
limitations: source.limitations
|
|
170
|
+
})
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
175
|
+
* missing required fields and incompatible scientific data fail at this boundary.
|
|
176
|
+
*
|
|
177
|
+
* Manual flash is a registered relative pulse/source overlay on the capture opening-reference clock.
|
|
178
|
+
* Ordinary front/rear sync requires a real whole-frame opening interval. HSS/TTL and flash metering
|
|
179
|
+
* are unsupported here; source magnitude, optical transport and sensor integration retain their own
|
|
180
|
+
* contracts.
|
|
181
|
+
* @param value - unknown. Treated as untrusted data; static typing alone is not validation.
|
|
182
|
+
* @returns ManualFlashProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
183
|
+
*
|
|
184
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
185
|
+
*/
|
|
186
|
+
export function parseManualFlashProfile(value) {
|
|
187
|
+
const record = requireRecord(value, "manualFlashProfile");
|
|
188
|
+
if (record.schemaVersion !==
|
|
189
|
+
MANUAL_FLASH_PROFILE_SCHEMA_VERSION) {
|
|
190
|
+
throw new InvalidConfigurationError('manualFlashProfile.schemaVersion must be "' +
|
|
191
|
+
MANUAL_FLASH_PROFILE_SCHEMA_VERSION +
|
|
192
|
+
'".');
|
|
193
|
+
}
|
|
194
|
+
for (const [key, expected] of [
|
|
195
|
+
["ttlModeled", false],
|
|
196
|
+
["highSpeedSyncModeled", false],
|
|
197
|
+
["recycleBehaviorModeled", false],
|
|
198
|
+
["redEyePreflashModeled", false],
|
|
199
|
+
["modelingLightModeled", false],
|
|
200
|
+
["afAssistModeled", false]
|
|
201
|
+
]) {
|
|
202
|
+
if (record[key] !== expected) {
|
|
203
|
+
throw new InvalidConfigurationError("manualFlashProfile." +
|
|
204
|
+
key +
|
|
205
|
+
" must be false in schema 0.1.0.");
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const pulse = requireRecord(record.pulse, "manualFlashProfile.pulse");
|
|
209
|
+
const supportDurationSeconds = requirePositiveFinite(pulse.supportDurationSeconds, "manualFlashProfile.pulse.supportDurationSeconds");
|
|
210
|
+
if (pulse.scientificStatus !==
|
|
211
|
+
"approximation" ||
|
|
212
|
+
pulse.interpolation !==
|
|
213
|
+
"piecewise-linear" ||
|
|
214
|
+
pulse.normalization !==
|
|
215
|
+
"relative-peak-one") {
|
|
216
|
+
throw new InvalidConfigurationError("manualFlashProfile.pulse scientificStatus/interpolation/normalization is invalid.");
|
|
217
|
+
}
|
|
218
|
+
const output = requireRecord(record.outputControl, "manualFlashProfile.outputControl");
|
|
219
|
+
if (output.kind !==
|
|
220
|
+
"relative-linear-source-scale" ||
|
|
221
|
+
output
|
|
222
|
+
.flashExposureCompensationStops !==
|
|
223
|
+
0) {
|
|
224
|
+
throw new InvalidConfigurationError("manualFlashProfile.outputControl must use relative-linear-source-scale with zero flash exposure compensation in the manual-only schema.");
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
schemaVersion: MANUAL_FLASH_PROFILE_SCHEMA_VERSION,
|
|
228
|
+
profileId: requireNonEmptyString(record.profileId, "manualFlashProfile.profileId"),
|
|
229
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "manualFlashProfile.profileVersion"),
|
|
230
|
+
sourceTemplate: validateSourceTemplate(record.sourceTemplate),
|
|
231
|
+
pulse: {
|
|
232
|
+
waveformId: requireNonEmptyString(pulse.waveformId, "manualFlashProfile.pulse.waveformId"),
|
|
233
|
+
scientificStatus: "approximation",
|
|
234
|
+
supportDurationSeconds,
|
|
235
|
+
interpolation: "piecewise-linear",
|
|
236
|
+
samples: parsePulseSamples(pulse.samples, supportDurationSeconds, "manualFlashProfile.pulse.samples"),
|
|
237
|
+
normalization: "relative-peak-one",
|
|
238
|
+
evidence: parseEvidenceList(pulse.evidence, "manualFlashProfile.pulse.evidence"),
|
|
239
|
+
limitations: parseLimitations(pulse.limitations, "manualFlashProfile.pulse.limitations")
|
|
240
|
+
},
|
|
241
|
+
outputControl: {
|
|
242
|
+
kind: "relative-linear-source-scale",
|
|
243
|
+
scale: requirePositiveFinite(output.scale, "manualFlashProfile.outputControl.scale"),
|
|
244
|
+
flashExposureCompensationStops: 0
|
|
245
|
+
},
|
|
246
|
+
ttlModeled: false,
|
|
247
|
+
highSpeedSyncModeled: false,
|
|
248
|
+
recycleBehaviorModeled: false,
|
|
249
|
+
redEyePreflashModeled: false,
|
|
250
|
+
modelingLightModeled: false,
|
|
251
|
+
afAssistModeled: false,
|
|
252
|
+
evidence: parseEvidenceList(record.evidence, "manualFlashProfile.evidence"),
|
|
253
|
+
limitations: parseLimitations(record.limitations, "manualFlashProfile.limitations")
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
258
|
+
* missing required fields and incompatible scientific data fail at this boundary.
|
|
259
|
+
*
|
|
260
|
+
* Manual flash is a registered relative pulse/source overlay on the capture opening-reference clock.
|
|
261
|
+
* Ordinary front/rear sync requires a real whole-frame opening interval. HSS/TTL and flash metering
|
|
262
|
+
* are unsupported here; source magnitude, optical transport and sensor integration retain their own
|
|
263
|
+
* contracts.
|
|
264
|
+
* @param value - unknown. Treated as untrusted data; static typing alone is not validation.
|
|
265
|
+
* @returns FlashSyncCapabilityProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
266
|
+
*
|
|
267
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
268
|
+
*/
|
|
269
|
+
export function parseFlashSyncCapabilityProfile(value) {
|
|
270
|
+
const record = requireRecord(value, "flashSyncCapabilityProfile");
|
|
271
|
+
if (record.schemaVersion !==
|
|
272
|
+
FLASH_SYNC_CAPABILITY_SCHEMA_VERSION) {
|
|
273
|
+
throw new InvalidConfigurationError('flashSyncCapabilityProfile.schemaVersion must be "' +
|
|
274
|
+
FLASH_SYNC_CAPABILITY_SCHEMA_VERSION +
|
|
275
|
+
'".');
|
|
276
|
+
}
|
|
277
|
+
if (record.highSpeedSyncSupported !==
|
|
278
|
+
false ||
|
|
279
|
+
record
|
|
280
|
+
.ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed !==
|
|
281
|
+
true) {
|
|
282
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile schema 0.1.0 supports ordinary whole-frame sync only and must not claim HSS.");
|
|
283
|
+
}
|
|
284
|
+
if (!Array.isArray(record.supportedOrdinarySyncModes) ||
|
|
285
|
+
record
|
|
286
|
+
.supportedOrdinarySyncModes
|
|
287
|
+
.length === 0) {
|
|
288
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile.supportedOrdinarySyncModes must be a non-empty array.");
|
|
289
|
+
}
|
|
290
|
+
const modes = record
|
|
291
|
+
.supportedOrdinarySyncModes
|
|
292
|
+
.map((entry, index) => {
|
|
293
|
+
if (typeof entry !==
|
|
294
|
+
"string" ||
|
|
295
|
+
!ORDINARY_SYNC_MODES.has(entry)) {
|
|
296
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile.supportedOrdinarySyncModes[" +
|
|
297
|
+
index +
|
|
298
|
+
"] is invalid.");
|
|
299
|
+
}
|
|
300
|
+
return entry;
|
|
301
|
+
});
|
|
302
|
+
if (new Set(modes).size !==
|
|
303
|
+
modes.length) {
|
|
304
|
+
throw new InvalidConfigurationError("flashSyncCapabilityProfile.supportedOrdinarySyncModes must not contain duplicates.");
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
schemaVersion: FLASH_SYNC_CAPABILITY_SCHEMA_VERSION,
|
|
308
|
+
profileId: requireNonEmptyString(record.profileId, "flashSyncCapabilityProfile.profileId"),
|
|
309
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "flashSyncCapabilityProfile.profileVersion"),
|
|
310
|
+
captureModeId: requireNonEmptyString(record.captureModeId, "flashSyncCapabilityProfile.captureModeId"),
|
|
311
|
+
timingProfileId: requireNonEmptyString(record.timingProfileId, "flashSyncCapabilityProfile.timingProfileId"),
|
|
312
|
+
supportedOrdinarySyncModes: modes,
|
|
313
|
+
highSpeedSyncSupported: false,
|
|
314
|
+
ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed: true,
|
|
315
|
+
evidence: parseEvidenceList(record.evidence, "flashSyncCapabilityProfile.evidence"),
|
|
316
|
+
limitations: parseLimitations(record.limitations, "flashSyncCapabilityProfile.limitations")
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function wholeFrameOpenInterval(timing) {
|
|
320
|
+
const opening = timing.exposureWindows.opening
|
|
321
|
+
.schedule;
|
|
322
|
+
const latestOpening = opening.kind ===
|
|
323
|
+
"simultaneous"
|
|
324
|
+
? 0
|
|
325
|
+
: opening
|
|
326
|
+
.traversalDurationSeconds
|
|
327
|
+
.value;
|
|
328
|
+
const earliestClosing = timing.exposureWindows
|
|
329
|
+
.nominalExposureDurationSeconds
|
|
330
|
+
.value;
|
|
331
|
+
const duration = earliestClosing -
|
|
332
|
+
latestOpening;
|
|
333
|
+
return {
|
|
334
|
+
startSecondsFromCaptureReference: latestOpening,
|
|
335
|
+
endSecondsFromCaptureReference: earliestClosing,
|
|
336
|
+
durationSeconds: Math.max(0, duration)
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function validateReleaseBinding(release, timing) {
|
|
340
|
+
const nominal = timing.exposureWindows
|
|
341
|
+
.nominalExposureDurationSeconds
|
|
342
|
+
.value;
|
|
343
|
+
const scale = Math.max(1, Math.abs(nominal), Math.abs(release.exposure
|
|
344
|
+
.shutterSeconds));
|
|
345
|
+
if (Math.abs(release.exposure
|
|
346
|
+
.shutterSeconds -
|
|
347
|
+
nominal) >
|
|
348
|
+
Number.EPSILON *
|
|
349
|
+
16 *
|
|
350
|
+
scale) {
|
|
351
|
+
throw new InvalidScientificInputError("releaseFrame shutter duration must match the #12 capture-mode timing exposure duration.");
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Place a declared ordinary flash pulse into the actual whole-frame exposure opening interval for
|
|
356
|
+
* front or rear sync, or return structured incompatibility.
|
|
357
|
+
*
|
|
358
|
+
* Manual flash is a registered relative pulse/source overlay on the capture opening-reference clock.
|
|
359
|
+
* Ordinary front/rear sync requires a real whole-frame opening interval. HSS/TTL and flash metering
|
|
360
|
+
* are unsupported here; source magnitude, optical transport and sensor integration retain their own
|
|
361
|
+
* contracts.
|
|
362
|
+
* @param input - ResolveManualFlashSyncInput. See the linked contract for coordinate, unit and profile binding semantics.
|
|
363
|
+
* @returns ResolvedManualFlashSync. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
364
|
+
*
|
|
365
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
366
|
+
*/
|
|
367
|
+
export function resolveManualFlashSync(input) {
|
|
368
|
+
const flash = parseManualFlashProfile(input.flashProfile);
|
|
369
|
+
const capabilities = parseFlashSyncCapabilityProfile(input.syncCapabilities);
|
|
370
|
+
if (capabilities.captureModeId !==
|
|
371
|
+
input.timing.captureModeId ||
|
|
372
|
+
capabilities.timingProfileId !==
|
|
373
|
+
input.timing.timingProfileId) {
|
|
374
|
+
throw new InvalidScientificInputError("Flash sync capability profile must exactly match the resolved capture-mode and timing-profile identities.");
|
|
375
|
+
}
|
|
376
|
+
if (input.releaseFrame !==
|
|
377
|
+
undefined) {
|
|
378
|
+
validateReleaseBinding(input.releaseFrame, input.timing);
|
|
379
|
+
}
|
|
380
|
+
const openInterval = wholeFrameOpenInterval(input.timing);
|
|
381
|
+
const base = {
|
|
382
|
+
flashProfileId: flash.profileId,
|
|
383
|
+
flashProfileVersion: flash.profileVersion,
|
|
384
|
+
sourceId: flash.sourceTemplate.sourceId,
|
|
385
|
+
captureModeId: input.timing.captureModeId,
|
|
386
|
+
timingProfileId: input.timing.timingProfileId,
|
|
387
|
+
syncCapabilityProfileId: capabilities.profileId,
|
|
388
|
+
syncMode: input.syncMode,
|
|
389
|
+
timeReference: "first-opening-boundary-phase",
|
|
390
|
+
wholeActiveFrameOpenInterval: openInterval,
|
|
391
|
+
pulseSupportDurationSeconds: flash.pulse
|
|
392
|
+
.supportDurationSeconds,
|
|
393
|
+
hssModeled: false,
|
|
394
|
+
ttlModeled: false,
|
|
395
|
+
sensorReadoutTimingUsedAsExposureTiming: false,
|
|
396
|
+
whiteBalanceModified: false,
|
|
397
|
+
focusModified: false,
|
|
398
|
+
exposureSettingsModified: false,
|
|
399
|
+
driveModeModified: false,
|
|
400
|
+
supportStateModified: false,
|
|
401
|
+
evidence: [
|
|
402
|
+
...flash.evidence,
|
|
403
|
+
...capabilities.evidence,
|
|
404
|
+
...input.timing.evidence
|
|
405
|
+
],
|
|
406
|
+
limitations: [
|
|
407
|
+
...flash.limitations,
|
|
408
|
+
...capabilities.limitations,
|
|
409
|
+
"Ordinary flash synchronization is registered to exposure-boundary timing, never sensor data-readout timing.",
|
|
410
|
+
"Schema 0.1.0 does not model HSS, TTL/preflash metering, recycle/thermal limits, red-eye preflash, modeling lights, AF-assist or branded flash protocols."
|
|
411
|
+
]
|
|
412
|
+
};
|
|
413
|
+
if (!input.flashEnabled) {
|
|
414
|
+
return {
|
|
415
|
+
flashEnabled: false,
|
|
416
|
+
...base,
|
|
417
|
+
syncStatus: "disabled",
|
|
418
|
+
pulseStartSecondsFromCaptureReference: null,
|
|
419
|
+
pulseEndSecondsFromCaptureReference: null,
|
|
420
|
+
waveformTimeZeroSecondsFromCaptureReference: null,
|
|
421
|
+
releaseFrameBinding: null
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
if (input.syncMode ===
|
|
425
|
+
"high-speed-sync") {
|
|
426
|
+
throw new InvalidScientificInputError("High-speed sync is not modeled in manual flash schema 0.1.0; ordinary single-pulse flash cannot be used as an HSS substitute.");
|
|
427
|
+
}
|
|
428
|
+
if (!capabilities
|
|
429
|
+
.supportedOrdinarySyncModes
|
|
430
|
+
.includes(input.syncMode)) {
|
|
431
|
+
throw new InvalidScientificInputError("Requested ordinary flash sync mode is not supported by the capability profile.");
|
|
432
|
+
}
|
|
433
|
+
if (openInterval.durationSeconds <=
|
|
434
|
+
0) {
|
|
435
|
+
throw new InvalidScientificInputError("Ordinary one-pulse flash cannot uniformly expose the active frame because the #12 timing has no whole-frame-open interval.");
|
|
436
|
+
}
|
|
437
|
+
if (flash.pulse
|
|
438
|
+
.supportDurationSeconds >
|
|
439
|
+
openInterval.durationSeconds) {
|
|
440
|
+
throw new InvalidScientificInputError("Ordinary flash pulse support does not fit inside the whole-active-frame-open interval.");
|
|
441
|
+
}
|
|
442
|
+
const pulseStart = input.syncMode ===
|
|
443
|
+
"front-curtain"
|
|
444
|
+
? openInterval
|
|
445
|
+
.startSecondsFromCaptureReference
|
|
446
|
+
: openInterval
|
|
447
|
+
.endSecondsFromCaptureReference -
|
|
448
|
+
flash.pulse
|
|
449
|
+
.supportDurationSeconds;
|
|
450
|
+
const pulseEnd = pulseStart +
|
|
451
|
+
flash.pulse
|
|
452
|
+
.supportDurationSeconds;
|
|
453
|
+
const releaseBinding = input.releaseFrame ===
|
|
454
|
+
undefined
|
|
455
|
+
? null
|
|
456
|
+
: {
|
|
457
|
+
sequenceId: input.releaseFrame
|
|
458
|
+
.sequenceId,
|
|
459
|
+
releaseFrameId: input.releaseFrame
|
|
460
|
+
.releaseFrameId,
|
|
461
|
+
frameIndex: input.releaseFrame
|
|
462
|
+
.frameIndex,
|
|
463
|
+
sceneTimeSecondsFromSequenceStartAtPulseStart: input.releaseFrame
|
|
464
|
+
.sceneTimeSecondsFromSequenceStart +
|
|
465
|
+
pulseStart,
|
|
466
|
+
sceneTimeSecondsFromSequenceStartAtPulseEnd: input.releaseFrame
|
|
467
|
+
.sceneTimeSecondsFromSequenceStart +
|
|
468
|
+
pulseEnd
|
|
469
|
+
};
|
|
470
|
+
return {
|
|
471
|
+
flashEnabled: true,
|
|
472
|
+
...base,
|
|
473
|
+
syncStatus: "ordinary-sync-resolved",
|
|
474
|
+
pulseStartSecondsFromCaptureReference: pulseStart,
|
|
475
|
+
pulseEndSecondsFromCaptureReference: pulseEnd,
|
|
476
|
+
waveformTimeZeroSecondsFromCaptureReference: pulseStart,
|
|
477
|
+
releaseFrameBinding: releaseBinding
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
function scaledFlashSource(flash) {
|
|
481
|
+
const template = flash.sourceTemplate;
|
|
482
|
+
const magnitude = template.magnitude;
|
|
483
|
+
if (magnitude.kind !==
|
|
484
|
+
"relative-linear-scale") {
|
|
485
|
+
throw new InvalidScientificInputError("Manual flash schema 0.1.0 relative output control requires a relative-linear-scale illumination source magnitude; calibrated physical flash energy belongs to a later profile.");
|
|
486
|
+
}
|
|
487
|
+
return {
|
|
488
|
+
...template,
|
|
489
|
+
magnitude: {
|
|
490
|
+
...magnitude,
|
|
491
|
+
scale: magnitude.scale *
|
|
492
|
+
flash.outputControl.scale
|
|
493
|
+
},
|
|
494
|
+
enabled: true,
|
|
495
|
+
temporalBehavior: {
|
|
496
|
+
kind: "time-invariant"
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Construct an owned registered temporal illumination overlay from the resolved manual pulse while
|
|
502
|
+
* preserving base ambient source identity.
|
|
503
|
+
*
|
|
504
|
+
* Manual flash is a registered relative pulse/source overlay on the capture opening-reference clock.
|
|
505
|
+
* Ordinary front/rear sync requires a real whole-frame opening interval. HSS/TTL and flash metering
|
|
506
|
+
* are unsupported here; source magnitude, optical transport and sensor integration retain their own
|
|
507
|
+
* contracts.
|
|
508
|
+
* @param input - CreateManualFlashIlluminationOverlayInput. See the linked contract for coordinate, unit and profile binding semantics.
|
|
509
|
+
* @returns ManualFlashIlluminationOverlay. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
510
|
+
*
|
|
511
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
512
|
+
*/
|
|
513
|
+
export function createManualFlashIlluminationOverlay(input) {
|
|
514
|
+
const base = parseSceneIlluminationProfile(input
|
|
515
|
+
.baseIlluminationProfile);
|
|
516
|
+
const baseTemporal = input.baseTemporalProfile ===
|
|
517
|
+
undefined
|
|
518
|
+
? null
|
|
519
|
+
: parseSceneIlluminationTemporalProfile(input.baseTemporalProfile);
|
|
520
|
+
if (baseTemporal !== null &&
|
|
521
|
+
(baseTemporal.sceneId !==
|
|
522
|
+
base.sceneId ||
|
|
523
|
+
baseTemporal
|
|
524
|
+
.illuminationProfileId !==
|
|
525
|
+
base.profileId)) {
|
|
526
|
+
throw new InvalidScientificInputError("baseTemporalProfile must exactly match the base illumination profile scene/profile identities.");
|
|
527
|
+
}
|
|
528
|
+
const flash = parseManualFlashProfile(input.flashProfile);
|
|
529
|
+
const sync = input.resolvedSync;
|
|
530
|
+
if (sync.flashProfileId !==
|
|
531
|
+
flash.profileId ||
|
|
532
|
+
sync.flashProfileVersion !==
|
|
533
|
+
flash.profileVersion ||
|
|
534
|
+
sync.sourceId !==
|
|
535
|
+
flash.sourceTemplate.sourceId) {
|
|
536
|
+
throw new InvalidScientificInputError("Resolved flash sync identity must match the manual flash profile.");
|
|
537
|
+
}
|
|
538
|
+
if (base.sources.some((source) => source.sourceId ===
|
|
539
|
+
flash.sourceTemplate
|
|
540
|
+
.sourceId)) {
|
|
541
|
+
throw new InvalidScientificInputError("Flash sourceId must be unique within the base illumination profile.");
|
|
542
|
+
}
|
|
543
|
+
if (!sync.flashEnabled) {
|
|
544
|
+
return {
|
|
545
|
+
flashApplied: false,
|
|
546
|
+
illuminationProfile: base,
|
|
547
|
+
temporalProfile: baseTemporal,
|
|
548
|
+
sourceId: flash.sourceTemplate
|
|
549
|
+
.sourceId,
|
|
550
|
+
waveformId: flash.pulse.waveformId,
|
|
551
|
+
timeReference: "first-opening-boundary-phase",
|
|
552
|
+
sourceMagnitudeAppliedBySceneTransport: true,
|
|
553
|
+
materialTransportOwnedBySceneRadiance: true,
|
|
554
|
+
visibilityOwnedBySceneRadiance: true,
|
|
555
|
+
indirectTransportOwnedBySceneRadiance: true,
|
|
556
|
+
postRenderBrightnessMultiplierUsed: false,
|
|
557
|
+
whiteBalanceModified: false,
|
|
558
|
+
ambientMeteringModified: false,
|
|
559
|
+
ambientTemporalBehaviorPreserved: true,
|
|
560
|
+
ttlMeteringIncluded: false
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
if (sync
|
|
564
|
+
.waveformTimeZeroSecondsFromCaptureReference ===
|
|
565
|
+
null) {
|
|
566
|
+
throw new InvalidScientificInputError("Enabled flash sync must provide an authoritative waveform time-zero registration.");
|
|
567
|
+
}
|
|
568
|
+
const flashSource = scaledFlashSource(flash);
|
|
569
|
+
const illumination = parseSceneIlluminationProfile({
|
|
570
|
+
...base,
|
|
571
|
+
profileId: requireNonEmptyString(input.illuminationProfileId, "illuminationProfileId"),
|
|
572
|
+
sources: [
|
|
573
|
+
...base.sources,
|
|
574
|
+
flashSource
|
|
575
|
+
]
|
|
576
|
+
});
|
|
577
|
+
const temporal = parseSceneIlluminationTemporalProfile({
|
|
578
|
+
schemaVersion: "0.1.0",
|
|
579
|
+
profileId: requireNonEmptyString(input.temporalProfileId, "temporalProfileId"),
|
|
580
|
+
sceneId: illumination.sceneId,
|
|
581
|
+
illuminationProfileId: illumination.profileId,
|
|
582
|
+
evidence: [
|
|
583
|
+
...(baseTemporal?.evidence ?? []),
|
|
584
|
+
...flash.evidence,
|
|
585
|
+
...sync.evidence
|
|
586
|
+
],
|
|
587
|
+
waveforms: [
|
|
588
|
+
...(baseTemporal?.waveforms ?? []),
|
|
589
|
+
{
|
|
590
|
+
waveformId: flash.pulse.waveformId,
|
|
591
|
+
kind: "aperiodic-relative-multiplier",
|
|
592
|
+
timeUnit: "s",
|
|
593
|
+
scientificStatus: "approximation",
|
|
594
|
+
uncertainty: {
|
|
595
|
+
kind: "not-quantified",
|
|
596
|
+
limitation: "Manual flash pulse timing/shape is an explicit approximation."
|
|
597
|
+
},
|
|
598
|
+
evidence: flash.pulse.evidence,
|
|
599
|
+
interpolation: "piecewise-linear",
|
|
600
|
+
samples: flash.pulse.samples,
|
|
601
|
+
outsideSupportBehavior: "zero"
|
|
602
|
+
}
|
|
603
|
+
],
|
|
604
|
+
sourceBindings: [
|
|
605
|
+
...(baseTemporal?.sourceBindings ?? []),
|
|
606
|
+
{
|
|
607
|
+
bindingId: flash.profileId +
|
|
608
|
+
":sync",
|
|
609
|
+
sourceId: flashSource.sourceId,
|
|
610
|
+
waveformId: flash.pulse.waveformId,
|
|
611
|
+
captureTimeReference: "first-opening-boundary-phase",
|
|
612
|
+
waveformTimeZeroSecondsFromCaptureReference: sync
|
|
613
|
+
.waveformTimeZeroSecondsFromCaptureReference,
|
|
614
|
+
scientificStatus: "approximation",
|
|
615
|
+
timingUncertainty: {
|
|
616
|
+
kind: "not-quantified",
|
|
617
|
+
limitation: "Schema 0.1.0 uses ideal deterministic flash trigger registration within the declared #12 exposure-window schedule."
|
|
618
|
+
},
|
|
619
|
+
evidence: sync.evidence
|
|
620
|
+
}
|
|
621
|
+
],
|
|
622
|
+
baseIlluminationProfileRemainsAuthoritative: true,
|
|
623
|
+
sensorReadoutTimingUsedAsExposureTiming: false,
|
|
624
|
+
automaticExposurePolicyIncluded: false
|
|
625
|
+
});
|
|
626
|
+
return {
|
|
627
|
+
flashApplied: true,
|
|
628
|
+
illuminationProfile: illumination,
|
|
629
|
+
temporalProfile: temporal,
|
|
630
|
+
sourceId: flashSource.sourceId,
|
|
631
|
+
waveformId: flash.pulse.waveformId,
|
|
632
|
+
timeReference: "first-opening-boundary-phase",
|
|
633
|
+
sourceMagnitudeAppliedBySceneTransport: true,
|
|
634
|
+
materialTransportOwnedBySceneRadiance: true,
|
|
635
|
+
visibilityOwnedBySceneRadiance: true,
|
|
636
|
+
indirectTransportOwnedBySceneRadiance: true,
|
|
637
|
+
postRenderBrightnessMultiplierUsed: false,
|
|
638
|
+
whiteBalanceModified: false,
|
|
639
|
+
ambientMeteringModified: false,
|
|
640
|
+
ambientTemporalBehaviorPreserved: true,
|
|
641
|
+
ttlMeteringIncluded: false
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
//# sourceMappingURL=flash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flash.js","sourceRoot":"","sources":["../../src/exposure/flash.ts"],"names":[],"mappings":"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"}
|