@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
package/README.md
CHANGED
|
@@ -10,12 +10,17 @@ Its calculations use explicit units, documented assumptions, validation, provena
|
|
|
10
10
|
|
|
11
11
|
The source is licensed under Apache-2.0.
|
|
12
12
|
|
|
13
|
+
Standalone stray-light irradiance, composed digital geometry and generic camera lens-correction APIs are documented in [Digital optics foundations](https://github.com/Photivra/photivra/blob/main/docs/DIGITAL_OPTICS_FOUNDATION.md). They preserve optical/sensor capture authority and explicit sampling/noise costs; production composition remains separate.
|
|
14
|
+
The standalone [SimulatedCapture contract](https://github.com/Photivra/photivra/blob/main/docs/SIMULATED_CAPTURE.md) commits format-neutral linear float master data and public metadata. Its [virtual-camera color model](https://github.com/Photivra/photivra/blob/main/docs/CAPTURE_COLOR.md) provides explicit linear color conversion and resolved-WB application; [linear encoding](https://github.com/Photivra/photivra/blob/main/docs/LINEAR_CAPTURE_ENCODING.md) defines deterministic 16-bit quantization. File serialization remains a subsequent stage.
|
|
15
|
+
|
|
16
|
+
The standalone [SDR rendering foundation](https://github.com/Photivra/photivra/blob/main/docs/SDR_RENDERING.md) separates post-capture rendering, output encoding and external display adaptation. Capture/WB/correction integration is available through the [processed output contract](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md), with explicit input domains and bounded support.
|
|
17
|
+
|
|
13
18
|
## Quick start
|
|
14
19
|
|
|
15
|
-
|
|
20
|
+
After owner publication, install the ESM package below. During candidate review, use the verified tarball from the [release guide](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_0_1.md):
|
|
16
21
|
|
|
17
22
|
```sh
|
|
18
|
-
npm install @photivra/engine
|
|
23
|
+
npm install @photivra/engine@1.0.1
|
|
19
24
|
```
|
|
20
25
|
|
|
21
26
|
Calculate horizontal field of view for a 36 mm sensor dimension and 50 mm focal length:
|
|
@@ -32,27 +37,30 @@ console.log(horizontal.value.degrees);
|
|
|
32
37
|
console.log(horizontal.provenance);
|
|
33
38
|
```
|
|
34
39
|
|
|
35
|
-
|
|
40
|
+
Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md), then use the [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md) and [export-derived API reference](https://github.com/Photivra/photivra/blob/main/docs/API_REFERENCE.md). These documents describe the 1.0.1 candidate. The published 1.0.0 release remains available; installation of 1.0.1 becomes available after owner publication.
|
|
36
41
|
|
|
37
42
|
## Documentation
|
|
38
43
|
|
|
39
|
-
- [Usage Guide](docs/USAGE.md)
|
|
40
|
-
- [Architecture](docs/ARCHITECTURE.md)
|
|
41
|
-
- [Contributor Guide](CONTRIBUTING.md)
|
|
42
|
-
- [Agent Instructions](AGENTS.md)
|
|
43
|
-
- [Changelog](CHANGELOG.md)
|
|
44
|
-
- [Public API Style](docs/API_STYLE.md)
|
|
45
|
-
- [Physics Foundation](docs/PHYSICS_FOUNDATION.md)
|
|
46
|
-
- [Image-Formation Contract](docs/IMAGE_FORMATION.md)
|
|
47
|
-
- [
|
|
48
|
-
- [
|
|
49
|
-
- [
|
|
50
|
-
- [
|
|
51
|
-
- [
|
|
44
|
+
- [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md)
|
|
45
|
+
- [Architecture](https://github.com/Photivra/photivra/blob/main/docs/ARCHITECTURE.md)
|
|
46
|
+
- [Contributor Guide](https://github.com/Photivra/photivra/blob/main/CONTRIBUTING.md)
|
|
47
|
+
- [Agent Instructions](https://github.com/Photivra/photivra/blob/main/AGENTS.md)
|
|
48
|
+
- [Changelog](https://github.com/Photivra/photivra/blob/main/CHANGELOG.md)
|
|
49
|
+
- [Public API Style](https://github.com/Photivra/photivra/blob/main/docs/API_STYLE.md)
|
|
50
|
+
- [Physics Foundation](https://github.com/Photivra/photivra/blob/main/docs/PHYSICS_FOUNDATION.md)
|
|
51
|
+
- [Image-Formation Contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md)
|
|
52
|
+
- [Production Image-Formation Plan](https://github.com/Photivra/photivra/blob/main/docs/PRODUCTION_COMPOSITION.md)
|
|
53
|
+
- [Scene Radiance and Illumination](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md)
|
|
54
|
+
- [PSF and Pupil Foundation](https://github.com/Photivra/photivra/blob/main/docs/PSF_FOUNDATION.md)
|
|
55
|
+
- [Motion and Signal Foundation](https://github.com/Photivra/photivra/blob/main/docs/MOTION_AND_SIGNAL.md)
|
|
56
|
+
- [Camera Shake and Stabilization](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md)
|
|
57
|
+
- [Scientific and Source Provenance](https://github.com/Photivra/photivra/blob/main/docs/PROVENANCE.md)
|
|
58
|
+
- [Scientific Assurance and Uncertainty Composition](https://github.com/Photivra/photivra/blob/main/docs/SCIENTIFIC_ASSURANCE.md)
|
|
59
|
+
- [Local POC HTTP API](https://github.com/Photivra/photivra/blob/main/docs/POC_API.md)
|
|
52
60
|
|
|
53
61
|
## Getting help
|
|
54
62
|
|
|
55
|
-
Use [GitHub Issues](https://github.com/photivra/photivra/issues) for reproducible bugs, documentation problems, and feature discussions. For security vulnerabilities, follow [SECURITY.md](SECURITY.md).
|
|
63
|
+
Use [GitHub Issues](https://github.com/photivra/photivra/issues) for reproducible bugs, documentation problems, and feature discussions. For security vulnerabilities, follow [SECURITY.md](https://github.com/Photivra/photivra/blob/main/SECURITY.md).
|
|
56
64
|
|
|
57
65
|
## What is implemented
|
|
58
66
|
|
|
@@ -60,56 +68,112 @@ The root package exports deterministic or explicitly labeled approximate models
|
|
|
60
68
|
|
|
61
69
|
### Optics and geometry
|
|
62
70
|
|
|
63
|
-
- [
|
|
64
|
-
- [
|
|
65
|
-
- [
|
|
66
|
-
- [
|
|
67
|
-
- [
|
|
68
|
-
- [generic
|
|
69
|
-
- [
|
|
70
|
-
- [
|
|
71
|
-
- [
|
|
72
|
-
- [
|
|
73
|
-
- [
|
|
71
|
+
- [generic MF / single-AF / continuous-AF focus control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-control-mf-single-af-continuous-af-and-lock), with explicit acquisition/loss/lock state, renderer-neutral longitudinal target distance, strict target-loss/reacquisition semantics, and a separate focus-vs-release priority gate;
|
|
72
|
+
- [explicit finite/infinity focus-plane state](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#explicit-finite-and-infinity-focus-state), without non-finite or fabricated focus distances;
|
|
73
|
+
- [centered and asymmetric rectilinear field of view, with optional focus-aware thin-lens projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#field-of-view);
|
|
74
|
+
- [physical vs diagonal-based 35 mm-equivalent focal length](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#actual-and-35-mm-equivalent-focal-length);
|
|
75
|
+
- [caller-declared focus-breathing projection/FOV approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-breathing-projection);
|
|
76
|
+
- [generic invertible radial distortion mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radial-lens-distortion-mapping), including multi-point inverse batch sampling;
|
|
77
|
+
- [generic RGB-channel lateral chromatic-aberration field mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#lateral-chromatic-aberration-mapping);
|
|
78
|
+
- [generic linear-light illumination-vignetting approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#illumination-vignetting);
|
|
79
|
+
- [front-of-lens filter transmission](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#front-of-lens-filter-transmission) for generic neutral-linear, neutral optical-density, and wavelength-resolved passive filters without polarization claims;
|
|
80
|
+
- [scene-radiance to sensor-irradiance optical bridge](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-to-sensor-irradiance), composing explicit pupil acceptance, lens transmission or working-T-stop approximation, optional front-filter transmission, and exactly one field-throughput term while stopping before the sensor optical stack;
|
|
81
|
+
- [Gaussian thin-lens image distance and magnification](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#thin-lens-image-distance-and-magnification);
|
|
82
|
+
- [geometric depth of field and defocus-circle diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-of-field-and-defocus);
|
|
83
|
+
- [ideal circular-aperture first-zero Airy diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#circular-aperture-diffraction);
|
|
84
|
+
- [real-lens sampled PSF and complex-pupil framework](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#real-lens-psf-profiles-and-complex-pupil-reference), with full-2D directional kernels, bounded field/focus/aperture/wavelength/defocus interpolation, explicit field-curvature/longitudinal-focus offsets, unit-energy PSF shape, separate pupil throughput, and an MTF-only fail-closed boundary;
|
|
85
|
+
- [separated PSF/pupil contribution foundation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#psf-and-pupil-foundation);
|
|
86
|
+
- [ideal regular-polygon aperture geometry and sunstar direction symmetry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-geometry-and-sunstar-directions).
|
|
74
87
|
|
|
75
88
|
### Exposure and motion
|
|
76
89
|
|
|
77
|
-
- [
|
|
78
|
-
- [
|
|
79
|
-
- [
|
|
80
|
-
- [
|
|
81
|
-
- [capture
|
|
82
|
-
- [
|
|
83
|
-
- [
|
|
90
|
+
- [scene-to-sensor irradiance quadrature](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_QUADRATURE.md), binding declared spectral scene samples to exact pre-AA coordinates, wavelengths and time through the existing optical bridge;
|
|
91
|
+
- [temporal scene-to-sensor EQE composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md), applying optics and response validity independently at every local shutter midpoint;
|
|
92
|
+
- [local sampled-PSF sensor quadrature](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_PSF_QUADRATURE.md), applying wavelength-resolved normalized PSF shape with explicit native/image axes and complete source support;
|
|
93
|
+
- [sensor-to-environment projection queries](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_ENVIRONMENT_QUERY.md), deriving scene request directions from physical optical support and analytic camera rotation;
|
|
94
|
+
- [executed environment capture to native RAW](https://github.com/Photivra/photivra/blob/main/docs/ENVIRONMENT_RAW_CAPTURE.md), joining provider calls, optional local PSF, temporal EQE and existing seeded RAW generation with paired export handoff;
|
|
95
|
+
- [temporal EQE photo signal to RAW](https://github.com/Photivra/photivra/blob/main/docs/TEMPORAL_PHOTO_RAW.md), carrying validated changing-light midpoint counts through exact-event dark/accumulated charge, native RAW and paired files;
|
|
96
|
+
- [irradiance-to-EQE local exposure composition](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_EQE_LOCAL_EXPOSURE.md), validating explicit physical node samples through response applicability/range and stationary local integration before the existing RAW producer;
|
|
97
|
+
- [generic equipment exposure capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#generic-equipment-exposure-capabilities), separating generic body/lens capability facts from selected camera state and resolving focal-length-specific aperture plus shutter/ISO envelopes for downstream #99 control policy;
|
|
98
|
+
- [detailed ISO/exposure-index capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain), representing standard and expanded settings, Auto ISO bounds, and optional capture-mode restrictions without inferring physical gain/noise behavior;
|
|
99
|
+
- [generic ISO/high-ISO signal-chain profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain), mapping explicit ISO/capture-mode states to #14 readout regimes while preserving upstream photons/shot noise and keeping Good/Better/Best as convenience profile selectors rather than real-camera rankings;
|
|
100
|
+
- [Manual and Manual + Auto ISO exposure resolution](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-and-auto-iso-exposure-resolution), consuming the typed meter target and resolved equipment envelope while preserving manual aperture/shutter ownership and reporting ISO quantization/limit residuals explicitly;
|
|
101
|
+
- [Aperture Priority with manual ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-priority-with-manual-iso), preserving caller-selected aperture/ISO while resolving only shutter against the same typed target/reference/capability contracts;
|
|
102
|
+
- [priority modes with Auto ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#priority-modes-with-auto-iso), adding explicit minimum-shutter and aperture-first two-auto-axis policies plus Shutter Priority with manual/automatic ISO without inventing new exposure equations;
|
|
103
|
+
- [Program Auto and Full Auto exposure](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#program-auto-and-full-auto-exposure), using versioned generic program lines to choose aperture/shutter while keeping ISO policy explicit and limiting Full Auto to exposure axes only;
|
|
104
|
+
- [Bulb, Time, and long-exposure control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#bulb-time-and-long-exposure-control), resolving control events to concrete elapsed seconds before the existing exposure-window/charge pipeline without inventing a special long-exposure physics path;
|
|
105
|
+
- [EV100, relative optical exposure, relative rendered exposure, and equivalent ISO compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#exposure-and-iso-relations);
|
|
106
|
+
- [relative pre-exposure metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#relative-pre-exposure-metering), with explicit generic multi-zone, center-weighted, spot, and highlight-weighted policies over the oriented active capture frame, plus generic body metering capability/profile compatibility and a frozen target seam into automatic exposure;
|
|
107
|
+
- [scene-radiance-derived and explicit temporal metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-derived-and-temporal-metering), binding relative meter samples to the #85 provider/material/illumination context and requiring declared time averaging for time-varying illumination without inventing a spectral-to-luminance conversion;
|
|
108
|
+
- [manual ordinary flash + front/rear sync](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-flash-and-ordinary-sync), registering a spatial #85 scene-light source and explicit pulse waveform to #12 exposure-window timing, preserving ambient temporal illumination, and failing closed when an ordinary pulse cannot fit a real whole-frame-open interval; HSS/TTL are not faked;
|
|
109
|
+
- [stable meter targets and exposure compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#meter-target-and-exposure-compensation), freezing metering identity for AE lock and shifting the automatic-exposure target downstream without mutating the underlying meter result;
|
|
110
|
+
- [deterministic logical release sequencing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#logical-release-sequences) for single, burst, self-timer and exposure/focus bracket timing;
|
|
111
|
+
- [extended-object time-varying projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#extended-object-time-varying-projection), projecting explicit metric object points under shared rigid translation, optionally validating fronto-parallel magnification, and binding the same geometry to #12 local exposure windows without claiming visibility or a finished blur kernel;
|
|
112
|
+
- [constant-velocity projected point motion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-subject-motion);
|
|
113
|
+
- [time-parameterized spatial camera-rotation mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#spatial-camera-rotation-mapping) for yaw/pitch/roll;
|
|
114
|
+
- [capture-local pure-rotation exposure trajectories](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-exposure-trajectories), evaluated at each native point's local exposure start/end without claiming a finished rolling-shutter warp;
|
|
115
|
+
- [capture-mode-bound shutter/readout timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-bound-shutterreadout-timing), binding timing evidence to one exact capture-mode/profile identity while keeping sensor readout separate from exposure boundaries and failing closed on unsupported non-uniform schedules;
|
|
116
|
+
- [depth-aware capture translation/parallax temporal geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-aware-translationparallax-temporal-geometry), requiring metric scene depth, preserving camera and subject translation independently, and explicitly prohibiting one global 3D-scene translation homography;
|
|
117
|
+
- [temporal scene-radiance sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#temporal-scene-radiance-sampling), generating deterministic provider-evaluation nodes on each point's authoritative local exposure clock and reducing only identity/time-matched radiance results;
|
|
118
|
+
- [capture-local pure-rotation temporal quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-temporal-quadrature), using deterministic midpoint nodes plus separate normalized-average and seconds-valued temporal measures without calculating radiance or blur;
|
|
119
|
+
- [instantaneous inverse capture-scan mapping under pure rotation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#instantaneous-capture-rotation-inverse-mapping), with an explicit local-exposure phase and analytic destination-to-reference ray inversion;
|
|
120
|
+
- [time-domain physical stabilization system](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md#time-domain-physical-stabilization-system), with generic synthetic sensor-shift/OIS/coordinated rotational correction, explicit latency/gain/limits, declared panning-axis bypass, and #12 local-exposure sampling without consuming tripod/support state or stop ratings;
|
|
121
|
+
- [the existing controlled yaw/pitch camera-shake and stabilization-equivalent approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-shake-and-stabilization-equivalent-approximation).
|
|
122
|
+
|
|
123
|
+
### Color controls
|
|
124
|
+
|
|
125
|
+
- [white-balance control and Auto WB](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#white-balance-and-auto-wb), including generic profile-owned presets, manual gains, independent CCT+tint intent, custom measurement, deterministic AWB priorities, and AWB lock without modifying scene illumination or RAW-like capture.
|
|
84
126
|
|
|
85
127
|
### Sensor and output
|
|
86
128
|
|
|
87
|
-
- [projected fronto-parallel object size and sensor-pixel sampling](docs/USAGE.md#projected-object-size-and-sensor-sampling);
|
|
88
|
-
- [pixel pitch](docs/USAGE.md#pixel-pitch);
|
|
89
|
-
- [sensor imaging-area, native-raster, crop-factor, megapixel, and 2D sampling metrics](docs/USAGE.md#sensor-imaging-area-and-native-raster);
|
|
90
|
-
- [provenance-aware sensor architecture/capability metadata](docs/USAGE.md#sensor-architecture-metadata);
|
|
91
|
-
- [exact color-sampling topology profiles](docs/USAGE.md#color-sampling-topology), supporting monochrome and arbitrary periodic mosaics on a sensor-anchored abstract sampling-site lattice while keeping spectral response and raster/photodiode binding separate;
|
|
92
|
-
- [capture-mode/color-sampling structural bindings](docs/USAGE.md#capture-modecolor-sampling-binding), explicitly relating one exact native effective raster to the color-site lattice and resolving compact pre-reconstruction source regions without inventing signal weights;
|
|
93
|
-
- [sensor optical-stack profiles](docs/USAGE.md#sensor-optical-stack), separating physical stack-component metadata from effective AA spatial response, with explicit absent/unknown/unresolved distinctions and arbitrary normalized point-splitting kernels;
|
|
94
|
-
- [sensor sampling-aperture profiles](docs/USAGE.md#sensor-sampling-aperture), explicitly registering color-site centers in native sensor physical space and resolving geometric sensitive rectangles without conflating pitch, fill area, QE, microlenses, or radiometry;
|
|
95
|
-
- [sensor spatial-sampling quadrature](docs/USAGE.md#sensor-spatial-sampling-quadrature), combining AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights;
|
|
96
|
-
- [sensor spatial-sample reduction](docs/USAGE.md#sensor-spatial-sample-reduction), reducing explicitly identified nonnegative linear node values in relative or physical irradiance domains without claiming CFA spectral filtering or RAW conversion;
|
|
97
|
-
- [
|
|
98
|
-
- [
|
|
99
|
-
- [
|
|
100
|
-
- [
|
|
101
|
-
- [
|
|
129
|
+
- [projected fronto-parallel object size and sensor-pixel sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-object-size-and-sensor-sampling);
|
|
130
|
+
- [pixel pitch](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#pixel-pitch);
|
|
131
|
+
- [sensor imaging-area, native-raster, crop-factor, megapixel, and 2D sampling metrics](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-imaging-area-and-native-raster);
|
|
132
|
+
- [provenance-aware sensor architecture/capability metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-architecture-metadata), including independent optional CMOS/CCD technology-family identity;
|
|
133
|
+
- [exact color-sampling topology profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#color-sampling-topology), supporting monochrome and arbitrary periodic mosaics on a sensor-anchored abstract sampling-site lattice while keeping spectral response and raster/photodiode binding separate;
|
|
134
|
+
- [capture-mode/color-sampling structural bindings](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-modecolor-sampling-binding), explicitly relating one exact native effective raster to the color-site lattice and resolving compact pre-reconstruction source regions without inventing signal weights;
|
|
135
|
+
- [sensor optical-stack profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-optical-stack), separating physical stack-component metadata from effective AA spatial response, with explicit absent/unknown/unresolved distinctions and arbitrary normalized point-splitting kernels;
|
|
136
|
+
- [sensor sampling-aperture profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-sampling-aperture), explicitly registering color-site centers in native sensor physical space and resolving geometric sensitive rectangles without conflating pitch, fill area, QE, microlenses, or radiometry;
|
|
137
|
+
- [sensor spatial-sampling quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sampling-quadrature), combining AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights;
|
|
138
|
+
- [sensor spatial-sample reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sample-reduction), reducing explicitly identified nonnegative linear node values in relative or physical irradiance domains without claiming CFA spectral filtering or RAW conversion;
|
|
139
|
+
- [sensor spectral-response profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-response), binding reusable wavelength-dependent channel response data to exact color-sampling IDs without inferring spectra from CFA labels;
|
|
140
|
+
- [sensor spectral quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-quadrature), creating response-knot-aware, bounded-midpoint wavelength plans with explicit dλ while keeping response application and source-spectrum integration separate;
|
|
141
|
+
- [sensor spatio-spectral irradiance reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatio-spectral-irradiance-reduction), composing explicit W/m^2/nm source samples over spatial and wavelength quadrature into pre-response irradiance/incident-flux integrals;
|
|
142
|
+
- [sensor-response application compatibility](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-application-compatibility), fail-closed matching of response plane, area normalization, spatial separability, profile identity, and reference conditions before any QE/A/W conversion;
|
|
143
|
+
- [sensor-response operating-range assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-operating-range), preserving calibrated power/irradiance domain, wavelength applicability, reference conditions, and nonlinearity criterion before any instantaneous response-rate conversion;
|
|
144
|
+
- [photon-energy wavelength basis](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photon-energy-wavelength-basis), deriving photon energy from vacuum wavelength with exact SI constants and requiring explicit refractive-index/atmosphere handling for air wavelengths;
|
|
145
|
+
- [EQE electron-rate conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#eqe-electron-rate-conversion), applying authorized effective QE per wavelength node to convert geometric-aperture spectral power into incident-photon and expected-electron rates without exposure integration;
|
|
146
|
+
- [A/W responsivity photocurrent conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aw-responsivity-photocurrent-conversion), applying calibrated spectral responsivity per wavelength node to produce detector-terminal photocurrent magnitude under explicit electrical operating conditions without transimpedance or temporal integration;
|
|
147
|
+
- [dark-current charge accumulation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#dark-current-charge), integrating evidence-backed pre-compensation thermal electron rate over the exact local EQE exposure without inventing a universal temperature law or full-well assessment;
|
|
148
|
+
- [accumulated-charge completeness](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#accumulated-charge-completeness), binding photo, dark, and explicitly incremental other stored-electron contributors to one exact exposure before physical full-well assessment can be authorized;
|
|
149
|
+
- [physical charge-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#physical-charge-capacity), comparing complete expected stored electrons with an evidence-backed physical storage capacity without conflating it with camera/digital saturation or inventing blooming/clamping;
|
|
150
|
+
- [stochastic sensor charge and RAW-code readout](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#stochastic-charge-conversion-adc-and-raw-code), with deterministic seeded photo/dark shot-noise, explicit additional-charge sampling policies, separate electronic read-noise components, explicit conversion-gain regimes, black offset, pre-ADC saturation, ADC quantization, and digital saturation without inferring behavior from ISO;
|
|
151
|
+
- [capture-mode/CFA-bound RAW samples and reconstruction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#raw-capture-samples-and-reconstruction), preserving absolute native CFA phase, failing closed for grouped/remosaic modes without explicit combination math, and using evidence-backed capture-mode/CFA-specific linear reconstruction kernels without claiming aliasing or moiré modeling;
|
|
152
|
+
- [camera saturation-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-saturation-capacity), comparing dark-corrected photo-signal electron-equivalent expectation against an evidence-backed camera response-chain saturation capacity without reusing total stored charge or inferring the limiting clipping stage;
|
|
153
|
+
- [local sensor-rate/exposure binding](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#local-sensor-rateexposure-binding), mapping an exact response-rate color site through an evidenced one-to-one native-effective-raster relationship to its local shutter window without yet authorizing rate×duration integration;
|
|
154
|
+
- [constant-rate local-exposure integration](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#constant-rate-local-exposure-integration), requiring stationarity evidence for the exact local window before producing EQE expected counts or A/W photocurrent charge while keeping saturation unauthorized;
|
|
155
|
+
- [processed camera output](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md), sharing explicit RAW-derived SDR development between preview, paired JPEG and committed production-plan output stages;
|
|
156
|
+
- [orthogonal capture-mode profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-profiles), separating acquisition sequence, per-frame sampling, sensor-shift sequence, reconstruction stages, processed raster, and final output geometry;
|
|
157
|
+
- [capture-specific native sensor readout scan timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-readout-timing), with separately evidenced total data-readout duration and rolling spatial timing skew;
|
|
158
|
+
- [readout/exposure spatial linkage assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#readoutexposure-spatial-linkage), for evidence-backed same/reversed normalized phase relationships between rolling readout and electronic exposure boundaries without asserting absolute synchronization;
|
|
159
|
+
- [capture exposure-window timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-exposure-window-timing), with independent opening/closing boundary schedules and local-duration validation;
|
|
160
|
+
- [capture orientation, active sensor area, and output geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-orientation-active-area-and-output-geometry);
|
|
102
161
|
- explicit oriented-physical-raster ↔ pre-orientation image-plane metric coordinate transforms for renderer/lens-field integration;
|
|
103
|
-
- [centered crop and subject-height framing crop](docs/USAGE.md#centered-crop-and-subject-framing-crop);
|
|
104
|
-
- [radiometry prerequisite/readiness assessment](docs/USAGE.md#radiometry-readiness);
|
|
105
|
-
- [mean photoelectron conversion and basic shot-noise/read-noise SNR primitives](docs/USAGE.md#photoelectron-and-snr-primitives).
|
|
162
|
+
- [centered crop and subject-height framing crop](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#centered-crop-and-subject-framing-crop);
|
|
163
|
+
- [radiometry prerequisite/readiness assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radiometry-readiness);
|
|
164
|
+
- [mean photoelectron conversion and basic shot-noise/read-noise SNR primitives](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photoelectron-and-snr-primitives).
|
|
106
165
|
|
|
107
166
|
### Data, validation, and composition
|
|
108
167
|
|
|
109
|
-
- [
|
|
110
|
-
- [
|
|
111
|
-
- [
|
|
112
|
-
- [
|
|
168
|
+
- [shared spectral wavelength primitives and scene illumination-source profiles](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md), keeping source metadata distinct from outgoing scene radiance while preserving explicit source-specific units, approximation/calibration status, provenance, and renderer-independent source identities;
|
|
169
|
+
- [scene material-response and radiance-provider contracts](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#scene-radiance-provider-and-material-response-boundary), validating renderer/provider fidelity, exact scene/profile/sample binding, wavelength/time/direction identity, and W/m²/sr/nm output without treating provider output as calibrated sensor input;
|
|
170
|
+
- [shared continuous spectral coverage and discrete-line composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#shared-spectral-composition), intersecting explicit scene/optics/sensor wavelength support and preserving delta-like integrated line measures separately from continuous per-nanometre quadrature;
|
|
171
|
+
- [temporal illumination waveforms and capture-time registration](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#temporal-illumination), evaluating flash/flicker relative multipliers in seconds against authoritative local exposure windows without conflating sensor readout, metering, or automatic exposure policy;
|
|
172
|
+
- [image-formation ownership/order contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md), including coordinate, temporal, renderer, and reserved sensor-stage semantics;
|
|
173
|
+
- [production image-formation plan](https://github.com/Photivra/photivra/blob/main/docs/PRODUCTION_COMPOSITION.md), separating prepared static context from immutable capture snapshots, binding committed #105 release-frame and #108 WB state, expanding stage dependencies from the authoritative graph, composing the #110 physical path plus mature temporal timing/rotation foundations, preserving cross-engine scientific assurance/evidence/uncertainty, surfacing renderer/engine fidelity blockers, and providing shared optimized/reference consumer manifests without modifying the POC;
|
|
174
|
+
- [camera/scene schemas and runtime validation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-and-scene-schema-validation);
|
|
175
|
+
- [provenance plus optional uncertainty/quality metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#provenance-uncertainty-and-quality-metadata);
|
|
176
|
+
- [the composed `simulatePocCamera()` proof-of-concept calculation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#composed-poc-simulation).
|
|
113
177
|
|
|
114
178
|
The package has no runtime npm dependencies.
|
|
115
179
|
|
|
@@ -130,6 +194,7 @@ The root engine now exposes standalone APIs for:
|
|
|
130
194
|
- evidence-backed native-effective-raster ↔ color-site-grid bindings plus capture-mode structural-source resolution with explicit grouped-mode phase and channel-site counts;
|
|
131
195
|
- evidence-backed sensor optical-stack profiles with ordered physical components, microlens presence metadata, and separately declared effective anti-aliasing spatial response;
|
|
132
196
|
- evidence-backed sensor site-center registration plus geometric sampling-aperture profiles with unresolved/resolved footprint semantics and derived geometric sensitive-area fraction;
|
|
197
|
+
- evidence-backed sensor spectral-response profiles plus deterministic bounded spectral-quadrature plans that preserve wavelength measure separately from response application and source-spectrum integration;
|
|
133
198
|
- evidence-backed capture-mode profiles with single/fixed/variable multi-frame acquisition, native/grouped/declared per-frame sampling, optional sensor-shift offsets, reconstruction stages, and processed-image raster separation;
|
|
134
199
|
- capture-specific native readout scan timing with explicit provenance and no output-resolution inference;
|
|
135
200
|
- capture exposure-window timing with independent opening/closing boundary schedules;
|
|
@@ -137,7 +202,7 @@ The root engine now exposes standalone APIs for:
|
|
|
137
202
|
- instantaneous inverse capture-scan rotation mapping at a caller-selected local-exposure phase, still independent from sensor data-readout timing;
|
|
138
203
|
- radiometry prerequisite/readiness assessment.
|
|
139
204
|
|
|
140
|
-
These contracts are **not all composed into `simulatePocCamera()` yet**. POC API 0.20 now composes staged capture geometry through final output/viewing semantics: orientation, active-capture rectangles, output crop/raster, active/output FOV, active-capture 35 mm-equivalent focal length, viewing-based CoC against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling. Sensor-architecture metadata, color-sampling topology profiles, native-effective-raster/color-site bindings, sensor optical-stack profiles, sensor sampling-aperture profiles, capture-mode profiles, sensor readout scan timing, capture exposure-window timing, and radiometry-readiness profiles remain
|
|
205
|
+
These contracts are **not all composed into `simulatePocCamera()` yet**. POC API 0.20 now composes staged capture geometry through final output/viewing semantics: orientation, active-capture rectangles, output crop/raster, active/output FOV, active-capture 35 mm-equivalent focal length, viewing-based CoC against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling. Sensor-architecture metadata, color-sampling topology profiles, native-effective-raster/color-site bindings, sensor optical-stack profiles, sensor sampling-aperture profiles, capture-mode profiles, sensor readout scan timing, capture exposure-window timing, and radiometry-readiness profiles remain uncomposed into the legacy POC. The separate production plan 0.7.0 executes its bounded declared environment/sensor/RAW/output route. Readout timing stays in invariant native sensor coordinates; physical orientation is an explicit downstream transform.
|
|
141
206
|
|
|
142
207
|
The POC exposes X/Y sampling diagnostics but still uses one representative horizontal pitch internally for several pixel-domain calculations; it therefore rejects geometry whose X/Y pitch differs by more than 1% rather than silently producing directional error.
|
|
143
208
|
|
|
@@ -200,12 +265,13 @@ The calling application can then use those results while keeping the underlying
|
|
|
200
265
|
|
|
201
266
|
## Status
|
|
202
267
|
|
|
203
|
-
- Repository package version: `0.
|
|
204
|
-
- Engine API contract: `0.
|
|
268
|
+
- Repository package version: `1.0.1` (release candidate; publication is separate)
|
|
269
|
+
- Engine API contract: `1.0.1`
|
|
270
|
+
- Versioned generic tier reference assets: [GENERIC_TIER_PRESETS.md](https://github.com/Photivra/photivra/blob/main/docs/GENERIC_TIER_PRESETS.md).
|
|
205
271
|
- Composed POC simulation API contract: `0.20.0`
|
|
206
|
-
- Stability:
|
|
272
|
+
- Stability: 1.0 root-package compatibility policy; bounded scientific models and independent POC contract
|
|
207
273
|
|
|
208
|
-
|
|
274
|
+
From 1.0.1, package version and `ENGINE_API_VERSION` are equal. New captures/plans record 1.0.1; existing archives retain their original creator identities. Schema, model and POC contract versions remain independent. Breaking root contracts now require a package major release; additive and corrective changes follow [compatibility and migration](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_0_1.md). A 1.0 package is not a claim of calibrated physical accuracy.
|
|
209
275
|
|
|
210
276
|
Creating a GitHub release/tag and publishing `@photivra/engine` are separate release actions. The tag-triggered publish workflow verifies that the `vX.Y.Z` tag matches the package version before publishing.
|
|
211
277
|
|
|
@@ -213,7 +279,7 @@ Creating a GitHub release/tag and publishing `@photivra/engine` are separate rel
|
|
|
213
279
|
|
|
214
280
|
The root engine now exports `getImageFormationContract()` as a descriptive public contract for scientific domain ownership, coordinate spaces, stage dependencies/couplings, temporal basis, renderer warp/compositing semantics, and reserved sensor ordering.
|
|
215
281
|
|
|
216
|
-
The contract does **not** claim that every listed stage is implemented. Reserved stages remain future work, and `simulatePocCamera()` is unchanged at API 0.20. See [Image-Formation Contract](docs/IMAGE_FORMATION.md).
|
|
282
|
+
The contract does **not** claim that every listed stage is implemented. Reserved stages remain future work, and `simulatePocCamera()` is unchanged at API 0.20. See [Image-Formation Contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md).
|
|
217
283
|
|
|
218
284
|
## Important scientific limits
|
|
219
285
|
|
|
@@ -223,26 +289,27 @@ Photivra deliberately avoids claiming more than the current models support.
|
|
|
223
289
|
- Generic radial distortion is a caller-parameterized field mapping with an explicit physical normalization radius and invertible operating envelope. Decentering/tangential distortion and named-lens calibration are not yet modeled.
|
|
224
290
|
- Generic illumination vignetting is a field-dependent scene-linear/channel-linear attenuation model only; it does not model pupil clipping, cat's-eye bokeh, PSF changes, or calibrated lens radiometry.
|
|
225
291
|
- Generic lateral CA is represented as independent radial field mapping for abstract RGB renderer channels. It is not a spectral lens model, sensor-CFA calibration, longitudinal-CA model, or named-lens profile.
|
|
226
|
-
-
|
|
227
|
-
- The legacy stabilization-equivalent camera-shake API remains one global yaw/pitch image-plane vector. A separate low-level rotation-only mapping now models field-position-dependent yaw/pitch/roll image motion;
|
|
292
|
+
- The legacy projected-motion primitive follows one representative point. Separate extended-object/depth-direction temporal projection supports declared rigid reference geometry and constant linear motion; visibility, deformation and radiance accumulation remain external responsibilities.
|
|
293
|
+
- The legacy stabilization-equivalent camera-shake API remains one global yaw/pitch image-plane vector. A separate low-level rotation-only mapping now models field-position-dependent yaw/pitch/roll image motion; separate depth-aware translation/parallax quadrature and generic response/latency/limit stabilization models are available. Neither models calibrated commercial IBIS/OIS, and the bounded production environment route consumes only its declared constant-axis rotation.
|
|
228
294
|
- Native sensor readout timing currently uses a caller-declared uniform-linear single-axis spatial phase approximation. Capture data-readout duration and rolling spatial skew are distinct evidence-backed facts; the model does not infer one effective raster row/column as one physical hardware readout line and does not yet model non-uniform/segmented readout or rolling-shutter image distortion.
|
|
229
295
|
- Readout/exposure linkage can assert only a normalized native spatial-phase/order relationship to an electronic exposure boundary. It does not establish absolute readout-vs-exposure timing, and equal directions or equal timing spans are never treated as proof of synchronization.
|
|
230
|
-
- Capture exposure-window timing models opening and closing boundaries independently as simultaneous or uniform-linear native scans. It validates positive local duration across the full active rectangle, but does not model curtain acceleration, segmented/nonlinear electronic timing,
|
|
231
|
-
- Capture rotation trajectories evaluate a stationary reference ray at local exposure start/end under pure constant camera rotation. The endpoint chord is not an integrated blur kernel, and the API is not an inverse destination-to-source rolling-shutter warp;
|
|
296
|
+
- Capture exposure-window timing models opening and closing boundaries independently as simultaneous or uniform-linear native scans. It validates positive local duration across the full active rectangle, but does not itself model curtain acceleration, segmented/nonlinear electronic timing, shutter shock, EFCS-specific pupil/bokeh behavior, or automatically equate exposure boundaries with sensor readout. The separate manual-flash foundation registers a pulse against this timing without redefining the #12 exposure-window contract.
|
|
297
|
+
- Capture rotation trajectories evaluate a stationary reference ray at local exposure start/end under pure constant camera rotation. The endpoint chord is not an integrated blur kernel, and the API is not an inverse destination-to-source rolling-shutter warp; separate instantaneous inverse mapping and midpoint temporal quadrature provide those geometric seams. Executed environment capture integrates declared radiance at its supported local shutter nodes.
|
|
232
298
|
- Capture rotation temporal quadrature supplies deterministic midpoint geometry samples across each local exposure. It does not sample scene radiance, output an averaged coordinate/blur radius, model shutter-transmission ramps, or claim a geometry-only error bound; downstream radiance integration remains separate.
|
|
233
299
|
- Instantaneous capture-rotation inverse mapping now provides destination-to-reference geometry at an explicit phase within each local exposure window. Pure rotation is inverted analytically, not iteratively. The result is still not a finite-exposure image or blur model; reference rays may validly fall outside the active source frame and are not clamped.
|
|
234
|
-
- The Airy diagnostic
|
|
300
|
+
- The Airy diagnostic remains a separately named ideal circular-pupil size diagnostic. `calculateIdealPolygonDiffractionPsf()` adds continuous unit-energy density for ideal on-axis regular polygon pupils with explicit equal-area physical scaling; blade geometry alone does not supply a physical PSF. The real-lens framework owns explicitly profiled combined primary-optical PSFs and complex-pupil/wavefront propagation. Do not stack polygon diffraction over a kernel that already includes diffraction.
|
|
235
301
|
- Capture-mode profiles describe acquisition/sampling/reconstruction structure only. Grouped sampling does not imply charge-domain binning unless that domain is separately evidenced; processed-image resolution does not change FOV, physical sensor identity, or establish physical photosite count. Pixel-shift offsets are expressed in native effective-sampling-pitch units and do not claim photodiode pitch.
|
|
236
302
|
- Color-sampling topology is independent from `NativeImageRaster`: periodic mosaic phase is anchored to absolute native sensor sampling-site indices, not crop-local coordinates. Channel IDs are semantic labels rather than spectral response curves. Layered color uses a separate unresolved spatial reference and remains structural-only until per-layer sampling density/registration is explicit; sparse non-periodic exceptions such as PDAF/masked/defect sites are not represented by schema 0.1.0.
|
|
237
303
|
- Native-effective-raster/color-site binding requires its own evidence and is tied to one exact native raster; matching dimensions alone never prove 1:1 CFA correspondence. Grouped capture modes also require an evidenced full-frame top-left grouping phase. The bridge reports compact pre-reconstruction source rectangles and channel-site counts only—no sum/average weights, spectral response, downstream reconstructed-pixel dependency, or photodiode count. Pixel-shift offsets do not change CFA channel assignment because sensor and CFA move together.
|
|
238
304
|
- Sensor optical-stack schema 0.1.0 separates physical component presence from effective anti-aliasing response. Omitted AA response means unknown, while explicit `absent` means no intentional AA spatial-splitting term in this contract—not an identity whole-stack PSF or zero aliasing risk. Point-splitting kernels are normalized spatial redistribution only and exclude throughput, spectral transmission, field/wavelength/polarization dependence, cover-glass refraction, and microlens behavior.
|
|
239
305
|
- Sensor sampling-aperture schema 0.1.0 keeps color-site physical registration separate from both `NativeImageRaster` and radiometry. Site pitch/origin must be explicitly evidenced; aperture geometry is not inferred from pitch or fill fraction. The first resolved aperture is a uniform axis-aligned geometric sensitive rectangle contained within one lattice cell. Its derived sensitive-area fraction is a geometry diagnostic only—not QE, effective collection area, microlens behavior, charge diffusion/crosstalk, spectral response, or optical throughput.
|
|
240
306
|
- Sensor spatial quadrature inverse-samples the pre-AA optical field through the declared AA split and geometric aperture. Destination CFA channel remains authoritative for all nodes; pre-AA source coordinates never reassign CFA color. Off-imaging-area source support is exposed rather than clamped/dropped, normalized weights remain unchanged, and square-micrometre measures remain geometric—not radiometric collection area.
|
|
307
|
+
- Sensor spectral-response schema 0.1.0 treats channel IDs as labels until explicit wavelength-dependent data is supplied. Direct effective EQE, direct A/W responsivity, and explicitly separable filter×detector-QE are distinct representations; response curves require reusable-data/Photivra-owned provenance, never extrapolate outside their wavelength range, never convert air/vacuum wavelength coordinates implicitly, and do not model field-angle/temperature/polarization dependence or perform wavelength/photon/electron integration.
|
|
241
308
|
- Signal/noise primitives require caller-supplied photon/electron quantities. The radiometry-readiness API can assess declared prerequisites, but it does not derive photons or enable photon/noise output in the composed POC.
|
|
242
309
|
- The composed POC still uses one representative pixel-pitch path internally and therefore rejects sensor geometry whose X/Y sample pitch differs by more than 1%; lower-level geometry APIs already preserve independent X/Y pitch.
|
|
243
310
|
- No named commercial camera or lens performance is claimed.
|
|
244
311
|
|
|
245
|
-
See [Physics Foundation](docs/PHYSICS_FOUNDATION.md), [Motion and Signal Foundation](docs/MOTION_AND_SIGNAL.md), and [Camera Shake and Stabilization](docs/STABILIZATION.md) for details.
|
|
312
|
+
See [Physics Foundation](https://github.com/Photivra/photivra/blob/main/docs/PHYSICS_FOUNDATION.md), [Motion and Signal Foundation](https://github.com/Photivra/photivra/blob/main/docs/MOTION_AND_SIGNAL.md), and [Camera Shake and Stabilization](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md) for details.
|
|
246
313
|
|
|
247
314
|
## Principles
|
|
248
315
|
|
|
@@ -276,7 +343,7 @@ When the package is installed directly from a Git repository using normal npm li
|
|
|
276
343
|
|
|
277
344
|
## Development
|
|
278
345
|
|
|
279
|
-
Development and Node-only tooling
|
|
346
|
+
Development and Node-only tooling support maintained Node.js 22 (minimum 22.13), maintained 24, and 26 Current. Prefer patched Node 24 for builds. CI verifies Node.js 22.13 (minimum), patched 22 and 24 LTS, and 26 Current under [the runtime policy](NODE_SUPPORT.md).
|
|
280
347
|
|
|
281
348
|
The reproducible npm workflow uses the committed lockfile:
|
|
282
349
|
|
|
@@ -310,10 +377,10 @@ TypeScript types are not treated as validation for untrusted data.
|
|
|
310
377
|
|
|
311
378
|
## Citation
|
|
312
379
|
|
|
313
|
-
GitHub can generate citation text from [CITATION.cff](CITATION.cff). Use that metadata when citing Photivra in research, technical documentation, or reproducible analyses.
|
|
380
|
+
GitHub can generate citation text from [CITATION.cff](https://github.com/Photivra/photivra/blob/main/CITATION.cff). Use that metadata when citing Photivra in research, technical documentation, or reproducible analyses.
|
|
314
381
|
|
|
315
382
|
## Licensing
|
|
316
383
|
|
|
317
|
-
Source code in this repository is licensed under Apache-2.0 unless a file clearly states otherwise. See [LICENSE](LICENSE), [NOTICE](NOTICE), and [THIRD_PARTY.md](THIRD_PARTY.md).
|
|
384
|
+
Source code in this repository is licensed under Apache-2.0 unless a file clearly states otherwise. See [LICENSE](https://github.com/Photivra/photivra/blob/main/LICENSE), [NOTICE](https://github.com/Photivra/photivra/blob/main/NOTICE), and [THIRD_PARTY.md](https://github.com/Photivra/photivra/blob/main/THIRD_PARTY.md).
|
|
318
385
|
|
|
319
386
|
The Apache license does not grant trademark rights to the Photivra name, logos, or branding except as allowed by applicable law and the license itself.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Please do not open a public issue containing vulnerability details.
|
|
4
|
+
|
|
5
|
+
## Supported versions
|
|
6
|
+
|
|
7
|
+
The published 1.0.0 release established the 1.x root-package compatibility line. Security fixes target the current maintained development/release line; older snapshots and pre-1.0 releases should not be assumed to receive fixes. The current 1.0.1 candidate is not yet published. Node runtime support follows [NODE_SUPPORT.md](NODE_SUPPORT.md), covering maintained LTS lines plus Current; older/EOL runtimes are not qualified.
|
|
8
|
+
|
|
9
|
+
## Reporting a vulnerability
|
|
10
|
+
|
|
11
|
+
For the public GitHub repository, use GitHub's private vulnerability reporting flow ("Report a vulnerability" on the Security tab) when available.
|
|
12
|
+
|
|
13
|
+
Private vulnerability reporting must be enabled before the repository is made public. If that private reporting entry point is unavailable, contact the repository owner privately before disclosing exploit details.
|
|
14
|
+
|
|
15
|
+
Please include, when relevant:
|
|
16
|
+
|
|
17
|
+
- affected commit/package/API version;
|
|
18
|
+
- reproduction steps or a minimal proof of concept;
|
|
19
|
+
- impact and preconditions;
|
|
20
|
+
- whether the issue affects the browser-safe root package, repository-local POC API tooling, development tooling, or the supply chain.
|
|
21
|
+
|
|
22
|
+
## Security boundaries
|
|
23
|
+
|
|
24
|
+
The root `@photivra/engine` package is a calculation library. Its browser-facing dependency graph is checked in CI to prevent Node-only modules or the POC HTTP transport from becoming reachable through the root export.
|
|
25
|
+
|
|
26
|
+
The repository-local `src/api` code is a separate Node-only proof-of-concept development server. It is not exported by or included in the published `@photivra/engine` package:
|
|
27
|
+
|
|
28
|
+
- it is unauthenticated;
|
|
29
|
+
- it binds to loopback/localhost by default;
|
|
30
|
+
- it is not a production hosting recommendation;
|
|
31
|
+
- CORS is a browser policy, not authentication or authorization;
|
|
32
|
+
- exposing it on a non-loopback interface requires separate production-grade protection that this repository does not provide.
|
|
33
|
+
|
|
34
|
+
## Release and publishing controls
|
|
35
|
+
|
|
36
|
+
The npm release workflow is designed so verification/build tooling does not receive npm publishing identity:
|
|
37
|
+
|
|
38
|
+
- release tags must be protected, match the package version, and point at the current `main` commit;
|
|
39
|
+
- the `main` branch must report as protected through GitHub before a publish is allowed;
|
|
40
|
+
- verification, coverage, build, and package creation run in a job without `id-token: write`;
|
|
41
|
+
- only the minimal final publish job receives OIDC permission;
|
|
42
|
+
- the verified tarball is transferred between jobs as a short-lived Actions artifact and checked against its SHA-256 before publication;
|
|
43
|
+
- GitHub Actions are pinned to immutable commit SHAs;
|
|
44
|
+
- checkout credentials are not persisted into later CI steps;
|
|
45
|
+
- dependency installation uses the lockfile and `--ignore-scripts`;
|
|
46
|
+
- the public package has no runtime npm dependencies.
|
|
47
|
+
|
|
48
|
+
Repository administrators must keep release tags and the default branch protected; the publish workflow fails closed if either protection is absent. For the strongest npm posture, also use a protected GitHub deployment environment in the npm trusted-publisher configuration and disable traditional token-based publishing after trusted publishing is verified.
|
|
49
|
+
|
|
50
|
+
## Development rules
|
|
51
|
+
|
|
52
|
+
- Never commit credentials, API keys, tokens, private keys, private datasets, or proprietary calibration material.
|
|
53
|
+
- Keep runtime dependencies minimal; the root package currently has no runtime npm dependencies.
|
|
54
|
+
- Dependencies, models, data, and copied/adapted material require explicit license/provenance review before adoption.
|
|
55
|
+
- Treat material dependency, secret, supply-chain, unsafe transport, and browser-boundary findings as release blockers.
|
package/THIRD_PARTY.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Third-party inventory
|
|
2
|
+
|
|
3
|
+
The published/runtime root package currently declares **no runtime npm dependencies**.
|
|
4
|
+
|
|
5
|
+
This file records direct development and CI dependencies intentionally used by the repository. Versions match `package.json`; GitHub Actions are additionally pinned to immutable commit SHAs in CI.
|
|
6
|
+
|
|
7
|
+
| Component | Version / revision | Purpose | License |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| TypeScript | 6.0.3 | Type checking/compiler | Apache-2.0 |
|
|
10
|
+
| @types/node | 24.13.6 | Node API type definitions | MIT |
|
|
11
|
+
| ESLint | 10.10.0 | Linting | MIT |
|
|
12
|
+
| @eslint/js | 10.0.1 | ESLint JavaScript configuration | MIT |
|
|
13
|
+
| typescript-eslint | 8.70.0 | TypeScript ESLint integration | MIT |
|
|
14
|
+
| Vitest | 5.0.1 | Unit/integration testing | MIT |
|
|
15
|
+
| @vitest/coverage-v8 | 5.0.1 | V8-backed test coverage | MIT |
|
|
16
|
+
| actions/checkout | v7 / `3d3c42e5aac5ba805825da76410c181273ba90b1` | CI checkout | MIT |
|
|
17
|
+
| actions/setup-node | v7 / `820762786026740c76f36085b0efc47a31fe5020` | CI Node setup | MIT |
|
|
18
|
+
| actions/upload-artifact | v7.0.1 / `043fb46d1a93c77aae656e7c1c64a875d1fc6a0a` | Verified release artifact transfer | MIT |
|
|
19
|
+
| actions/download-artifact | v8.0.1 / `3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c` | Verified release artifact retrieval | MIT |
|
|
20
|
+
|
|
21
|
+
Node built-in modules are used only by development tooling and the repository-local POC API; that API is excluded from the published package and the built-ins are not third-party dependencies.
|
|
22
|
+
|
|
23
|
+
This inventory does not replace a transitive dependency/SBOM review before a release. New runtime dependencies, scientific datasets, model weights, or calibration material require explicit provenance and license review.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Automated license policy
|
|
27
|
+
|
|
28
|
+
The bounded DNG/TIFF and baseline JPEG encoders are independently authored.
|
|
29
|
+
No Adobe SDK, external encoder source, default quantization/Huffman tables,
|
|
30
|
+
calibration dataset or runtime dependency is incorporated. Numeric test profiles
|
|
31
|
+
and custom coding tables are owned synthetic fixtures, not camera calibration.
|
|
32
|
+
|
|
33
|
+
Format references:
|
|
34
|
+
|
|
35
|
+
- Adobe DNG and patent-license notice: https://helpx.adobe.com/camera-raw/desktop/dng-and-file-formats/digital-negative.html
|
|
36
|
+
- DNG specification: https://helpx.adobe.com/content/dam/help/en/photoshop/pdf/DNG_Spec_1_7_1_0.pdf
|
|
37
|
+
- ITU-T T.81 JPEG: https://www.w3.org/Graphics/JPEG/itu-t81.pdf
|
|
38
|
+
- JFIF: https://www.w3.org/Graphics/JPEG/jfif3.pdf
|
|
39
|
+
- Adobe XMP: https://developer.adobe.com/xmp/docs/xmp-specifications/
|
|
40
|
+
- CIPA Exif: https://www.cipa.jp/std/documents/e/DC-X008-Translation-2019-E.pdf
|
|
41
|
+
|
|
42
|
+
The DNG patent-license notice appears in `NOTICE` and exporter source. These
|
|
43
|
+
references do not authorize copying SDK code or scientific datasets. Human
|
|
44
|
+
provenance/license review remains required before release.
|
|
45
|
+
|
|
46
|
+
### Dependency allowlist
|
|
47
|
+
|
|
48
|
+
`npm run check:licenses` reviews every package recorded in `package-lock.json`.
|
|
49
|
+
|
|
50
|
+
Currently allowed without additional review:
|
|
51
|
+
|
|
52
|
+
- Apache-2.0
|
|
53
|
+
- MIT
|
|
54
|
+
- BSD-2-Clause
|
|
55
|
+
- BSD-3-Clause
|
|
56
|
+
- ISC
|
|
57
|
+
- BlueOak-1.0.0
|
|
58
|
+
|
|
59
|
+
MPL-2.0 is allowed only when the dependency is marked development-only in the lockfile.
|
|
60
|
+
|
|
61
|
+
Any missing, new, compound, or otherwise unrecognized license fails CI until it is reviewed and the policy is deliberately updated.
|
|
62
|
+
|
|
63
|
+
The allowlist is a review control, not a legal conclusion that every future use of an allowed license is automatically compatible. Redistribution context still matters.
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates conventional 35 mm-equivalent focal length from physical focal length and the effective
|
|
4
|
+
* active-capture diagonal. The physical focal length remains unchanged and continues to be the optical
|
|
5
|
+
* input for projection and depth-of-field calculations. Focus distance and later digital/output crops
|
|
6
|
+
* are deliberately excluded from this conventional equivalence quantity.
|
|
7
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
8
|
+
* limits.
|
|
9
|
+
*/
|
|
1
10
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
11
|
import { type SensorImagingArea } from "../sensor/sensor-geometry.js";
|
|
3
12
|
export interface CalculateEquivalentFocalLength35MmInput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equivalent-focal-length.d.ts","sourceRoot":"","sources":["../../src/camera/equivalent-focal-length.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uCAAuC;IACtD,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,yBAAyB,EAAE,MAAM,CAAC;IAClC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,2BAA2B,EAAE,MAAM,CAAC;IACpC,+DAA+D;IAC/D,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,uCAAuC,GAC7C,iBAAiB,CAAC,yBAAyB,CAAC,CAyB9C"}
|
|
1
|
+
{"version":3,"file":"equivalent-focal-length.d.ts","sourceRoot":"","sources":["../../src/camera/equivalent-focal-length.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,uCAAuC;IACtD,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,yBAAyB,EAAE,MAAM,CAAC;IAClC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,uDAAuD;IACvD,2BAA2B,EAAE,MAAM,CAAC;IACpC,+DAA+D;IAC/D,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,uCAAuC,GAC7C,iBAAiB,CAAC,yBAAyB,CAAC,CAyB9C"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates conventional 35 mm-equivalent focal length from physical focal length and the effective
|
|
5
|
+
* active-capture diagonal. The physical focal length remains unchanged and continues to be the optical
|
|
6
|
+
* input for projection and depth-of-field calculations. Focus distance and later digital/output crops
|
|
7
|
+
* are deliberately excluded from this conventional equivalence quantity.
|
|
8
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
9
|
+
* limits.
|
|
10
|
+
*/
|
|
2
11
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
12
|
import { requirePositiveFinite } from "../core/validation.js";
|
|
4
13
|
import { calculateImagingAreaMetrics } from "../sensor/sensor-geometry.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equivalent-focal-length.js","sourceRoot":"","sources":["../../src/camera/equivalent-focal-length.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,2BAA2B,EAE5B,MAAM,8BAA8B,CAAC;AAsBtC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kCAAkC,CAChD,KAA8C;IAE9C,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAE5D,MAAM,kBAAkB,GAAG,2BAA2B,CACpD,KAAK,CAAC,iBAAiB,CACxB,CAAC,KAAK,CAAC;IAER,OAAO,gBAAgB,CACrB;QACE,mBAAmB,EAAE,KAAK,CAAC,aAAa;QACxC,yBAAyB,EACvB,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,cAAc;QACzD,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,2BAA2B,EAAE,kBAAkB,CAAC,UAAU;QAC1D,KAAK,EAAE,UAAU;KAClB,EACD,8BAA8B,EAC9B,OAAO,EACP;QACE,wEAAwE;QACxE,gEAAgE;QAChE,6EAA6E;QAC7E,kHAAkH;KACnH,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"equivalent-focal-length.js","sourceRoot":"","sources":["../../src/camera/equivalent-focal-length.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;GAQG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,2BAA2B,EAE5B,MAAM,8BAA8B,CAAC;AAsBtC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kCAAkC,CAChD,KAA8C;IAE9C,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAE5D,MAAM,kBAAkB,GAAG,2BAA2B,CACpD,KAAK,CAAC,iBAAiB,CACxB,CAAC,KAAK,CAAC;IAER,OAAO,gBAAgB,CACrB;QACE,mBAAmB,EAAE,KAAK,CAAC,aAAa;QACxC,yBAAyB,EACvB,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,cAAc;QACzD,cAAc,EAAE,kBAAkB,CAAC,cAAc;QACjD,2BAA2B,EAAE,kBAAkB,CAAC,UAAU;QAC1D,KAAK,EAAE,UAAU;KAClB,EACD,8BAA8B,EAC9B,OAAO,EACP;QACE,wEAAwE;QACxE,gEAAgE;QAChE,6EAA6E;QAC7E,kHAAkH;KACnH,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates rectilinear angular field of view as 2 * atan(sensorDimension / (2 *
|
|
4
|
+
* projectionDistance)). Without focusDistanceM, projectionDistance is nominal focal length for
|
|
5
|
+
* backwards-compatible infinity-focus/pinhole behavior. With focusDistanceM, projectionDistance is the
|
|
6
|
+
* ideal Gaussian thin-lens image distance for that focus plane. Neither mode models real-lens focus
|
|
7
|
+
* breathing or distortion.
|
|
8
|
+
* Calculates an asymmetric rectilinear FOV span from signed sensor-plane bounds relative to the
|
|
9
|
+
* optical axis. This is required for off-center active sensor crops where the optical axis is not at
|
|
10
|
+
* the center of the retained rectangle.
|
|
11
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
12
|
+
* limits.
|
|
13
|
+
*/
|
|
1
14
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
15
|
export interface CalculateFieldOfViewInput {
|
|
3
16
|
/** Lens focal length in millimetres. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-of-view.d.ts","sourceRoot":"","sources":["../../src/camera/field-of-view.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,+BAA+B;IAC9C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,iBAAiB,CAAC,WAAW,CAAC,CAsBhC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,iBAAiB,CAAC,iBAAiB,CAAC,CAmDtC"}
|
|
1
|
+
{"version":3,"file":"field-of-view.d.ts","sourceRoot":"","sources":["../../src/camera/field-of-view.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,+BAA+B;IAC9C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;OAGG;IACH,yBAAyB,EAAE,MAAM,CAAC;IAClC,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,yBAAyB,GAC/B,iBAAiB,CAAC,WAAW,CAAC,CAsBhC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,+BAA+B,GACrC,iBAAiB,CAAC,iBAAiB,CAAC,CAmDtC"}
|