@photivra/engine 0.6.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +674 -0
- package/CHANGELOG.md +186 -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 +138 -71
- 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 +14 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +15 -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 +132 -0
- 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 +65 -0
- package/docs/RELEASE_AUDIT.md +38 -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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Physics Foundation
|
|
2
2
|
|
|
3
|
+
Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
|
|
4
|
+
|
|
3
5
|
Photivra starts with analytical models that can be independently tested and whose assumptions can be stated explicitly.
|
|
4
6
|
|
|
5
7
|
## Implemented models
|
|
@@ -92,7 +94,77 @@ At a focus distance of at least 100 focal lengths, the ideal thin-lens projectio
|
|
|
92
94
|
|
|
93
95
|
The focus-aware model improves internal consistency with thin-lens DOF/defocus calculations, but it is still an ideal paraxial model. It does not model real-lens focus breathing, pupil magnification, principal-plane movement, distortion, aberrations, or lens-specific macro behavior.
|
|
94
96
|
|
|
95
|
-
Projected subject motion
|
|
97
|
+
Projected subject motion remains a representative-point displacement model with constant linear world velocity. The separate extended-object projection foundation now evaluates multiple explicit metric points under shared rigid translation, so depth-direction motion can produce spatially varying trajectories and validated planar magnification where appropriate.
|
|
98
|
+
|
|
99
|
+
### Extended-object projection under rigid translation
|
|
100
|
+
|
|
101
|
+
A representative point does not fully describe an extended object moving along the optical axis. Under rectilinear projection, an on-axis center point can remain fixed while off-axis points move radially as object depth changes.
|
|
102
|
+
|
|
103
|
+
The extended-object foundation therefore projects each supplied metric point independently through time.
|
|
104
|
+
|
|
105
|
+
For a rigid object and translating camera:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
relative velocity = object translation - camera translation
|
|
109
|
+
position_i(t) = position_i(0) + relative velocity * t
|
|
110
|
+
projected_i(t) = v * (x_i(t)/z_i(t), y_i(t)/z_i(t))
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
where `v` is the selected nominal or focus-aware image-plane projection distance.
|
|
114
|
+
|
|
115
|
+
This first model is deliberately rigid and translational. It does not model object rotation, articulation, deformation or acceleration.
|
|
116
|
+
|
|
117
|
+
A single uniform magnification is scientifically justified only for a constrained geometry. Photivra therefore reports a planar scale diagnostic only when the caller explicitly declares a fronto-parallel planar patch and every supplied point validates against the same reference depth. Under shared rigid translation the diagnostic scale is:
|
|
118
|
+
|
|
119
|
+
`reference depth / current depth`
|
|
120
|
+
|
|
121
|
+
That special-case result does not imply that arbitrary 3D geometry admits one scale or one homography.
|
|
122
|
+
|
|
123
|
+
When bound to #12, each object point is evaluated on its own local exposure clock. This preserves rolling-capture timing without treating sensor data readout as exposure timing.
|
|
124
|
+
|
|
125
|
+
The geometry result does not solve visibility. Axial/lateral motion can reveal/hide surfaces or move geometry through frame boundaries; a renderer must evaluate those states explicitly. Similarly, relative depth changes can alter defocus/PSF through the exposure, so a static blur/PSF composition is not automatically valid.
|
|
126
|
+
|
|
127
|
+
### Mode-bound exposure/readout timing and temporal translation
|
|
128
|
+
|
|
129
|
+
The #12 closure preserves two different clocks:
|
|
130
|
+
|
|
131
|
+
1. **local exposure-window timing**, referenced to the first opening-boundary phase; and
|
|
132
|
+
2. **sensor data-readout timing**, referenced to its own native readout phase.
|
|
133
|
+
|
|
134
|
+
A capture-mode timing profile binds both sets of facts to one exact capture-mode/profile identity without asserting that those clocks are synchronized. Global readout removes spatial readout skew; it does not remove finite-exposure motion.
|
|
135
|
+
|
|
136
|
+
The first supported exposure/readout schedules remain simultaneous or uniform-linear native scans. More complex non-uniform schedules are rejected unless a future explicit model represents them.
|
|
137
|
+
|
|
138
|
+
Pure camera rotation can be evaluated without scene depth. Camera translation cannot. Under constant translation, a stationary scene point at metric position `(x,y,z)` is evaluated from its relative camera-space position over time, so image displacement scales with scene depth through rectilinear projection. Consequently, arbitrary 3D translation does not admit one globally valid image-plane homography.
|
|
139
|
+
|
|
140
|
+
Optional subject velocity remains separate from camera translation and composes as relative motion. The model does not reinterpret subject motion as sensor/readout behavior.
|
|
141
|
+
|
|
142
|
+
Temporal radiance integration uses deterministic midpoint nodes inside each authoritative local exposure interval. Scene-radiance providers must evaluate at those physical capture times; sensor readout timing is not substituted for exposure time. Per-node uncertainty/evidence is preserved, while aggregate uncertainty remains unquantified unless justified correlation assumptions are supplied.
|
|
143
|
+
|
|
144
|
+
### Manual flash timing and scene-light boundary
|
|
145
|
+
|
|
146
|
+
The first flash model composes two already-established domains instead of introducing a special image effect:
|
|
147
|
+
|
|
148
|
+
1. #85 spatial/temporal illumination; and
|
|
149
|
+
2. #12 exposure-boundary timing.
|
|
150
|
+
|
|
151
|
+
A short manual-flash pulse is an aperiodic relative illumination waveform attached to an explicit spatial source. The source geometry therefore remains available to the scene-radiance transport layer for distance, surface-angle, visibility/shadow, and indirect-light behavior.
|
|
152
|
+
|
|
153
|
+
Ordinary full-frame flash synchronization requires a non-empty interval where every point in the active capture is simultaneously exposed. For the currently supported simultaneous or uniform-linear boundary schedules:
|
|
154
|
+
|
|
155
|
+
- latest opening phase is zero for a simultaneous opening, otherwise the declared opening traversal duration;
|
|
156
|
+
- earliest closing phase is the nominal closing reference;
|
|
157
|
+
- ordinary one-pulse sync is valid only when the complete pulse support lies inside that interval.
|
|
158
|
+
|
|
159
|
+
This rule is derived from exposure boundaries, not sensor data readout.
|
|
160
|
+
|
|
161
|
+
Front- and rear-curtain modes differ only in where the same pulse support is registered inside that valid interval. Their different relationship to subject motion/ambient trails must emerge from time-dependent scene-radiance integration rather than drawing a synthetic trail.
|
|
162
|
+
|
|
163
|
+
Flash duration and shutter duration remain independent. Extending the shutter can integrate more ambient scene time without proportionally increasing a fixed short flash pulse.
|
|
164
|
+
|
|
165
|
+
Schema 0.1.0 intentionally excludes HSS. A moving-slit exposure with no whole-frame-open interval cannot be made ordinary-flash-compatible by relabeling a single pulse as HSS.
|
|
166
|
+
|
|
167
|
+
Manual flash also excludes TTL/preflash metering, recycle/thermal behavior, flash exposure lock, red-eye/modeling/AF-assist emissions and branded protocols. Camera WB remains downstream interpretation and never changes the emitted flash spectrum.
|
|
96
168
|
|
|
97
169
|
### Generic illumination vignetting
|
|
98
170
|
|
|
@@ -176,10 +248,44 @@ In composed POC capture mode, the equivalent-viewing helper uses the final retai
|
|
|
176
248
|
|
|
177
249
|
The model is not a macro calibration model and does not include diffraction, pupil magnification, aberrations, focus breathing, or lens-specific principal-plane behavior in its DOF criterion.
|
|
178
250
|
|
|
251
|
+
### Focus-control state versus optical focus
|
|
252
|
+
|
|
253
|
+
Focus control is a camera-control state machine, not a blur algorithm.
|
|
254
|
+
|
|
255
|
+
The #104 layer resolves a target/control event into the existing #103 `FocusPlane`. Downstream thin-lens, defocus and PSF calculations therefore depend only on the resulting finite/infinity optical focus state, not on whether that state came from MF, AF-S, AF-C or focus lock.
|
|
256
|
+
|
|
257
|
+
Finite autofocus target distance uses the same longitudinal camera-space/conjugate distance convention as #103. Off-axis points on one fronto-parallel plane therefore resolve to the same ideal focus distance; renderer ray length is not an autofocus distance.
|
|
258
|
+
|
|
259
|
+
The first autofocus actuator is an explicitly ideal instantaneous approximation. It supplies deterministic state semantics without modeling motor dynamics, AF sensor error, hunting, subject-recognition quality, low-light behavior or branded-camera performance.
|
|
260
|
+
|
|
261
|
+
Single AF acquires once and holds. Continuous AF can consume time-ordered observations of one stable target identity. Target loss holds the last focus and requires an explicit reacquisition event; the engine never silently jumps to another subject.
|
|
262
|
+
|
|
263
|
+
Focus lock freezes the resolved optical state independently from AE, metering and white balance. Release-priority policy is evaluated by a separate gate and cannot alter the optical focus calculation.
|
|
264
|
+
|
|
179
265
|
### Defocus circle
|
|
180
266
|
|
|
181
267
|
Defocus is calculated geometrically by comparing the selected sensor plane for the focus distance with the ideal image plane for the subject distance and projecting an ideal circular entrance-pupil cone to the sensor.
|
|
182
268
|
|
|
269
|
+
### Real-lens sampled PSF and complex-pupil propagation
|
|
270
|
+
|
|
271
|
+
The #113 framework adds explicit combined primary-optical PSF representations without redefining the existing geometric-defocus or circular-Airy diagnostics.
|
|
272
|
+
|
|
273
|
+
A sampled PSF is a full 2D unit-energy intensity distribution in image-plane metric coordinates. Regular-grid interpolation is bounded across focal length, focus state, aperture, field X/Y, wavelength and signed image-plane defocus. The engine never extrapolates beyond declared profile support.
|
|
274
|
+
|
|
275
|
+
Field curvature and longitudinal chromatic focus are represented as field-/wavelength-dependent best-focus image-plane offsets. They do not modify distortion or lateral-CA coordinates.
|
|
276
|
+
|
|
277
|
+
A complex pupil stores relative amplitude plus optical-path difference. The reference evaluator uses scalar Fraunhofer propagation:
|
|
278
|
+
|
|
279
|
+
`PSF ∝ |FT{ A(x,y) exp(i 2π OPD(x,y)/λ) }|²`
|
|
280
|
+
|
|
281
|
+
and then normalizes the sampled intensity to unit energy. Diffraction and aberration are therefore evaluated together in this path rather than composed as two unrelated image-space blur kernels.
|
|
282
|
+
|
|
283
|
+
Mechanical pupil clipping may be represented in the pupil amplitude/PSF shape, but relative pupil throughput is an explicit separate factor. This prevents the normalized PSF from absorbing throughput that #110 would later apply again.
|
|
284
|
+
|
|
285
|
+
MTF magnitude alone cannot uniquely determine a PSF because phase is absent. Photivra therefore accepts MTF magnitude as diagnostic/validation data but never reconstructs a unique PSF from it.
|
|
286
|
+
|
|
287
|
+
Lens PSF remains upstream of the sensor optical stack, sensor sampling and reconstruction. Stray light is also separate because ghosts and veiling glare are not ordinary primary-image PSF blur.
|
|
288
|
+
|
|
183
289
|
### PSF/pupil foundation
|
|
184
290
|
|
|
185
291
|
The engine now exposes a PSF/pupil foundation that evaluates existing geometric defocus and circular diffraction diagnostics in one explicit context while keeping the numerical contributions separate.
|
|
@@ -194,7 +300,7 @@ The context declares:
|
|
|
194
300
|
|
|
195
301
|
The current foundation does **not** calculate a combined point-spread function or MTF. Defocus-circle diameter and Airy first-zero diameter are not added together or collapsed into one sharpness value.
|
|
196
302
|
|
|
197
|
-
|
|
303
|
+
The dedicated ideal-polygon API evaluates on-axis non-circular diffraction density; the real-lens framework owns explicitly profiled pupil clipping, field curvature, aberration and bokeh. None is silently combined by the legacy diagnostic calculator. See [PSF and Pupil Foundation](PSF_FOUNDATION.md).
|
|
198
304
|
|
|
199
305
|
Illumination vignetting remains outside the PSF contribution list because it is currently modeled as throughput-only.
|
|
200
306
|
|
|
@@ -208,7 +314,7 @@ where `λ` is wavelength and `N` is f-number.
|
|
|
208
314
|
|
|
209
315
|
This is a monochromatic, ideal-circular-pupil diagnostic.
|
|
210
316
|
|
|
211
|
-
It is deliberately separate from regular-polygon aperture geometry used for bokeh/sunstar exploration. Supplying a polygon blade count does not convert the circular Airy result into a polygon-aperture diffraction PSF
|
|
317
|
+
It is deliberately separate from regular-polygon aperture geometry used for bokeh/sunstar exploration. Supplying a polygon blade count does not convert the circular Airy result into a polygon-aperture diffraction PSF. Use `calculateIdealPolygonDiffractionPsf()` with an explicit physical equal-area pupil, propagation distance and wavelength for the ideal on-axis polygon model; arbitrary real diaphragms remain outside that model.
|
|
212
318
|
|
|
213
319
|
### Ideal diaphragm geometry and sunstar symmetry
|
|
214
320
|
|
|
@@ -228,11 +334,52 @@ The current model returns one global image-plane vector. It does not compute the
|
|
|
228
334
|
|
|
229
335
|
Equivalent stabilization stops attenuate angular displacement by `2^-stops`; that attenuation is explicitly an educational approximation rather than a real IBIS/OIS or CIPA performance model.
|
|
230
336
|
|
|
337
|
+
### Sensor stochastic readout and RAW boundary
|
|
338
|
+
|
|
339
|
+
The #14 closure separates deterministic expectation calculations from stochastic realizations and from digital encoding.
|
|
340
|
+
|
|
341
|
+
Expected photo, dark and additional stored charge remain upstream scientific quantities. A seeded realization may sample photo/dark Poisson statistics and explicitly declared additional-component statistics without mutating those expectation APIs.
|
|
342
|
+
|
|
343
|
+
Electronic read noise is a downstream input-referred stochastic contribution and remains separate from photon/dark shot noise. Multiple declared RMS read-noise components are sampled independently; their metadata is not collapsed into a claim about physical circuit origin unless evidence says so.
|
|
344
|
+
|
|
345
|
+
The electronic chain preserves separate saturation domains:
|
|
346
|
+
|
|
347
|
+
1. physical charge-storage capacity;
|
|
348
|
+
2. pre-ADC electron-equivalent saturation;
|
|
349
|
+
3. ADC/digital code saturation.
|
|
350
|
+
|
|
351
|
+
A scalar clamp at physical capacity is not a blooming model. Blooming requires spatial charge-transfer/adjacency and anti-blooming semantics.
|
|
352
|
+
|
|
353
|
+
Conversion gain is expressed as electrons per digital code for one explicitly selected operating regime. The engine does not infer that regime from ISO, CMOS/CCD family, capture-mode labels, or product tier.
|
|
354
|
+
|
|
355
|
+
RAW codes retain absolute native sensor/CFA coordinates. Capture orientation and final output rotation do not rotate or re-phase the sensor mosaic.
|
|
356
|
+
|
|
357
|
+
The first reconstruction model is an explicit linear native-neighborhood transform tied to exact capture-mode and CFA identities. It is intentionally not a generic claim that a CFA name determines a demosaic algorithm. It also does not claim moiré/aliasing physics unless an adequate pre-sampling optical/scene spatial-frequency model exists.
|
|
358
|
+
|
|
359
|
+
### ISO/exposure-index and sensor-readout boundary
|
|
360
|
+
|
|
361
|
+
ISO/exposure index is a camera control/reporting state, not a photon source.
|
|
362
|
+
|
|
363
|
+
For fixed scene radiance, aperture, shutter duration, optical transmission and sensor collection geometry, changing ISO does not change the number of photons that arrived during the exposure. Accordingly, #7 never modifies upstream photon/photoelectron expectation or photon shot-noise statistics merely because a different ISO/EI was selected.
|
|
364
|
+
|
|
365
|
+
The detailed ISO capability contract distinguishes:
|
|
366
|
+
|
|
367
|
+
- standard exposure-index settings;
|
|
368
|
+
- expanded low/high reported settings;
|
|
369
|
+
- Auto ISO eligibility/ranges;
|
|
370
|
+
- optional capture-mode restrictions.
|
|
371
|
+
|
|
372
|
+
It does not infer physical gain, conversion gain, read noise or saturation from those numbers.
|
|
373
|
+
|
|
374
|
+
When generic high-ISO behavior is needed, #7 maps an explicit ISO/capture-mode state to an explicit #14 readout regime. The selected regime—not the ISO number itself—contains the declared conversion gain, electronic read noise and downstream saturation/ADC behavior. This keeps piecewise or dual/multiple-gain behavior representable without smoothing it into a universal ISO→noise curve.
|
|
375
|
+
|
|
376
|
+
Good/Better/Best labels are convenience mappings to full signal-chain profile identities. They are not sensor equations and do not rank real cameras. Sensor size/resolution, photon shot noise, processed-image denoising/sharpening, and technology-family labels such as CMOS/CCD remain separate domains.
|
|
377
|
+
|
|
231
378
|
### Radiometry readiness boundary
|
|
232
379
|
|
|
233
380
|
Absolute scene luminance or relative exposure alone is not enough to derive a defensible photon count.
|
|
234
381
|
|
|
235
|
-
Before
|
|
382
|
+
Before a composed photon simulation, Photivra requires an explicit prerequisite package covering:
|
|
236
383
|
|
|
237
384
|
- scene spectral radiance or a documented spectral approximation;
|
|
238
385
|
- optical transmission;
|
|
@@ -264,7 +411,7 @@ The contract intentionally avoids describing all image formation as independent
|
|
|
264
411
|
|
|
265
412
|
Current analytical primitives remain valid and separately named. Adding a broader stage must not silently reinterpret existing focal length, defocus, diffraction, motion, crop, or sensor-sampling outputs.
|
|
266
413
|
|
|
267
|
-
|
|
414
|
+
The static ordering contract retains broad foundation/reserved metadata. Those labels alone do not establish execution. Production plan 0.7.0 separately records actual bounded environment-route execution through sampling, photons, charge, ADC and reconstruction; broader unsupported models remain blocked.
|
|
268
415
|
|
|
269
416
|
## Source provenance
|
|
270
417
|
|
package/docs/POC_API.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Local POC Simulation API
|
|
2
2
|
|
|
3
|
+
Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
|
|
4
|
+
|
|
3
5
|
Photivra includes a minimal Node HTTP transport for proof-of-concept development and integration testing.
|
|
4
6
|
|
|
5
7
|
It is **not** the recommended production runtime. Browser applications can consume the root `@photivra/engine` scientific surface directly; the production Photivra architecture is intended to keep the simulation math client-side rather than expose this unauthenticated POC server to the public internet.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Request-local defocus projection reuse: #45
|
|
2
|
+
|
|
3
|
+
Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
|
|
4
|
+
|
|
5
|
+
The measured candidate reuses the focus-plane image distance already calculated
|
|
6
|
+
inside `simulatePocCamera()` for its subject and defocus sweep. It is a small
|
|
7
|
+
private optimization against merged main
|
|
8
|
+
`c1374c31473f893310d1ce4f0d5a737aaba43ab5`. It consumes no pending tier/export draft.
|
|
9
|
+
Root API 0.103.0, POC API 0.20.0 and public scalar signatures/semantics stay unchanged.
|
|
10
|
+
|
|
11
|
+
## Measurement and decision
|
|
12
|
+
|
|
13
|
+
[Recorded evidence](benchmarks/2026-10-02-poc-projection-reuse.json) contains two
|
|
14
|
+
independent ordinary paired runs and one GC-assisted paired run, all built with
|
|
15
|
+
`tsc`. Each path/scenario has 500 warmup calls and nine blocks of 1,000 whole
|
|
16
|
+
requests. Reference/candidate order alternates, scenario order rotates, and the
|
|
17
|
+
final recorded runs were performed after local tests finished, without concurrent
|
|
18
|
+
task benchmarks. Shared host activity remains uncontrolled.
|
|
19
|
+
|
|
20
|
+
Runtime was Node 24.19.0/V8 13.6.233.17-node.51 on Linux x64, reporting AMD EPYC 9V74
|
|
21
|
+
and 9 logical CPUs. Every run records runtime/hardware, baseline commit and SHA-256
|
|
22
|
+
fingerprints of both candidate runtime source files. The source identity is
|
|
23
|
+
operator-attested; fingerprints allow verification after commit. These are
|
|
24
|
+
public POC developer-consumer request shapes, not observed product traffic or
|
|
25
|
+
browser frame-time evidence.
|
|
26
|
+
|
|
27
|
+
| Whole request | Ordinary reference µs, run 1 | Candidate µs, run 1 | Candidate/reference, run 1 | Ratio, run 2 | GC-assisted ratio |
|
|
28
|
+
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
29
|
+
| Base, no sweep | 11.11 | 11.29 | 1.017 | 1.014 | 0.989 |
|
|
30
|
+
| 1 defocus sample | 12.16 | 11.89 | 0.978 | 0.942 | 0.974 |
|
|
31
|
+
| 2 defocus samples | 13.20 | 11.85 | 0.897 | 0.950 | 0.980 |
|
|
32
|
+
| 4 defocus samples | 14.69 | 13.50 | 0.919 | 0.906 | 0.941 |
|
|
33
|
+
| 8 defocus samples | 18.37 | 16.67 | 0.907 | 0.856 | 0.952 |
|
|
34
|
+
| 16 defocus samples | 27.10 | 19.97 | 0.737 | 0.819 | 0.857 |
|
|
35
|
+
| 16 each defocus/size/motion | 56.33 | 50.52 | 0.897 | 0.902 | 0.880 |
|
|
36
|
+
| Portrait/off-center staged mixed | 95.54 | 90.79 | 0.950 | 0.924 | 0.970 |
|
|
37
|
+
|
|
38
|
+
A ratio below one means a shorter measured request. The two ordinary runs show
|
|
39
|
+
18–26% improvement on the 16-defocus shape, about 10% on mixed samples and 5–8%
|
|
40
|
+
on staged capture. The base shape is about 0.16–0.18 µs slower (1.4–1.7%) in those
|
|
41
|
+
runs; no universal speedup or zero overhead is claimed. GC-assisted timings are
|
|
42
|
+
separate distributions and do not establish ordinary-vs-GC causality. Earlier
|
|
43
|
+
exploratory runs are excluded from the final evidence.
|
|
44
|
+
|
|
45
|
+
The decision is to retain this bounded private reuse candidate for human review.
|
|
46
|
+
The repeatable sweep/mixed improvement justifies it, with the small base-path
|
|
47
|
+
tradeoff explicitly visible. Further FOV/motion/sampling reuse or a generic
|
|
48
|
+
prepared public API is not justified by this experiment. #43 retains its separate
|
|
49
|
+
measurement/decision gate; this result does not establish its conclusion.
|
|
50
|
+
|
|
51
|
+
## Preparation and memory
|
|
52
|
+
|
|
53
|
+
Context creation copies three scalar numbers into a frozen object only when a
|
|
54
|
+
non-empty defocus sweep is present. It adds no new thin-lens resolution: it borrows
|
|
55
|
+
the same request's existing calculated projection. It cannot survive the request,
|
|
56
|
+
is not returned in the response and has no global cache or cross-input lifetime.
|
|
57
|
+
No-sweep requests allocate no context. An isolated object/freeze probe measured
|
|
58
|
+
about 42–46 ns per preparation; its JIT/escape behavior can differ inside the
|
|
59
|
+
whole call, so it is not an independent cost/error bound.
|
|
60
|
+
|
|
61
|
+
Short sweeps are explicitly measured above; benefits increase enough at 16
|
|
62
|
+
samples to amortize the context in these workloads. A single sample is close to
|
|
63
|
+
noise, so no portable break-even count is asserted. Raw net retained-heap deltas
|
|
64
|
+
are preserved but are not allocation counts or persistent-context size estimates.
|
|
65
|
+
|
|
66
|
+
A separate V8 Inspector allocation-sampling pass measured 2,000 staged requests
|
|
67
|
+
per path at 32 KiB sampling intervals, requesting inclusion of objects collected
|
|
68
|
+
by both major and minor GC. Estimated sampled bytes were 593,837,880 for reference
|
|
69
|
+
and 551,945,312 for candidate (about 7% lower); inclusive thin-lens sampled bytes
|
|
70
|
+
were 177,301,960 and 138,224,096 (about 22% lower). These are statistical sampling
|
|
71
|
+
estimates, not exact allocation counters, GC-pause measurements or latency
|
|
72
|
+
attribution. Instrumented allocations are separate from all timing comparisons.
|
|
73
|
+
No raw inspector profile/private path is stored.
|
|
74
|
+
|
|
75
|
+
The sensor dimensions are an explicit 36×24 mm, 6000×4000 raster. This POC computes
|
|
76
|
+
analytical diagnostics; it does not execute 24 million image samples. Raster
|
|
77
|
+
size is therefore context, not a claim of full image-rendering throughput. The
|
|
78
|
+
canonical tiny #130 fixture is used only for correctness, never as the runtime
|
|
79
|
+
performance basis.
|
|
80
|
+
|
|
81
|
+
## Correctness and boundary
|
|
82
|
+
|
|
83
|
+
The public scalar `calculateDefocusCircle()` uses the same shared implementation
|
|
84
|
+
without a borrowed projection. Its validation, arithmetic, result model,
|
|
85
|
+
assumptions and provenance remain authoritative. The internal borrowed context
|
|
86
|
+
requires exact physical focal/focus identity and positive finite projection.
|
|
87
|
+
The POC constructs it from its already validated thin-lens result, never from
|
|
88
|
+
serialized user projection values. Subject-plane projection still uses the
|
|
89
|
+
ordinary thin-lens calculation; no equation or scientific stage is replaced.
|
|
90
|
+
|
|
91
|
+
`test/fixtures/poc-projection-reuse-reference.json` stores 64 owned deterministic
|
|
92
|
+
inputs and complete response/provenance SHA-256 commitments generated from the
|
|
93
|
+
unchanged main reference build. The corpus includes all four orientations,
|
|
94
|
+
off-center captures, legacy crops, varied focal/focus/aperture state and sample
|
|
95
|
+
counts. Seed is `0x45c1374c`. Do not regenerate expectations from the candidate to
|
|
96
|
+
hide drift. #130 remains unchanged. Additional tests compare the scalar oracle,
|
|
97
|
+
invalid-input errors, stale context rejection and alternating request identities.
|
|
98
|
+
|
|
99
|
+
Browser-surface and package gates remain required. This is a Node-measured POC
|
|
100
|
+
optimization, not a browser-motivated public API; no browser performance or private
|
|
101
|
+
application claim is made. It does not activate production rendering/radiometry
|
|
102
|
+
or change capture/output/version contracts. Scientific/provenance review and
|
|
103
|
+
contribution-specific DCO certification remain required before merge.
|
|
104
|
+
|
|
105
|
+
## Reproduction
|
|
106
|
+
|
|
107
|
+
Create an independent checkout of the recorded reference commit and build it with
|
|
108
|
+
`npm ci` / `npm run build`. Build the candidate checkout too. Run only the
|
|
109
|
+
benchmark during timing; replace the example reference-root with that checkout.
|
|
110
|
+
The tooling consumes the reference's `dist/index.js` and first verifies complete
|
|
111
|
+
response equivalence for every measured scenario.
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
node scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5
|
|
115
|
+
node --expose-gc scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5 --allocation=sample
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Repeat ordinary runs separately. Build labels are not independently attested by
|
|
119
|
+
the script. There is no timing CI threshold, paid service, runtime dependency or
|
|
120
|
+
new third-party material. This tooling is Node-only and outside the public root.
|
|
121
|
+
|
|
122
|
+
## Final V1 remeasurement
|
|
123
|
+
|
|
124
|
+
[Final V1 performance disposition](V1_PERFORMANCE_DISPOSITION.md) records current main #204, fresh paired timing/equivalence, preparation/memory profiles and dense executed environment-to-RAW evidence. PR #205 merged the final reviewed/signed no-further-change disposition; PR #206 merged final conformance. The measured engine commit remains the historical benchmark identity. Earlier candidate and pending-remeasurement statements above are historical.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Processed camera output
|
|
2
|
+
|
|
3
|
+
Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
|
|
4
|
+
|
|
5
|
+
Root API 0.115.0 completes the bounded SDR post-capture handoff for #112.
|
|
6
|
+
Production plan 0.6.0 adds explicit committed RAW processing. At introduction, package 0.6.0,
|
|
7
|
+
POC 0.20.0, capture, RAW, color, correction and SDR schemas remain unchanged.
|
|
8
|
+
This is the engine boundary used by preview and file consumers; integrating
|
|
9
|
+
commercial UI controls and browser presentation belongs to the apps repository.
|
|
10
|
+
|
|
11
|
+
## Entry points and domains
|
|
12
|
+
|
|
13
|
+
| Authoritative input | Entry point | Semantic checks |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| Scene-referred XYZ, virtual-camera channels or already transformed linear RGB | `calculateCaptureSdr()` | Exact #15 plane, profile/version, WB application history, channel order, reference white and raster binding |
|
|
16
|
+
| Capture-bound linear plane with selected corrections | `calculateCaptureCorrectedSdr()` | Same color/WB checks, exact capture/lens/time/geometry state, compatible correction domains and explicit sampling/support policy |
|
|
17
|
+
| Attached post-ADC native RAW | `calculateProcessedSensorRaw()` | Revalidated frame, explicit reconstruction kernels and coverage, registered RGB interpretation, resolved sensor gains, oriented crop and optional native correction |
|
|
18
|
+
| RAW plus file metadata/encoder policy | `createPhotographicExportPair()` | Uses `calculateProcessedSensorRaw()` for JPEG pixels; preserves exact native RAW for DNG |
|
|
19
|
+
| Committed production snapshot plus RAW policy | `createProductionImageFormationPlan()` | Optional `processedOutput: { outputStateId, processing }` binds attached capture, scene clock, seed, physical exposure, WB and available focus commits |
|
|
20
|
+
|
|
21
|
+
There is no untyped "linear RGB" input or screenshot/canvas source. A caller
|
|
22
|
+
with capture-linear data uses its declared #15 state. A RAW preview and paired
|
|
23
|
+
JPEG use the same explicit `ProcessedSensorRawInput`: reconstruction,
|
|
24
|
+
`ExportSensorColorProfile`, white-balance policy, `SdrRenderingProfile` and
|
|
25
|
+
optional correction. Metadata and JPEG quantization are separate file choices.
|
|
26
|
+
The returned arrays are high fidelity values before lossy JPEG packing, so a
|
|
27
|
+
JPEG decoder is not expected to reproduce them bit for bit.
|
|
28
|
+
|
|
29
|
+
The RAW result records input/output domains, color profile/evidence, WB policy
|
|
30
|
+
and disposition, child reconstruction/rendering/correction envelopes, native
|
|
31
|
+
DNG crop and processed output view. It owns copies of input values. Standalone
|
|
32
|
+
results are ordinary owned values; a production plan deep-freezes its copy.
|
|
33
|
+
Physical capture and actual display adaptation are explicitly unchanged.
|
|
34
|
+
|
|
35
|
+
## Ordered processing
|
|
36
|
+
|
|
37
|
+
RAW processing delegates to existing implementations:
|
|
38
|
+
|
|
39
|
+
1. Reconstruct exact attached native post-ADC codes; preserve signed normalized
|
|
40
|
+
shadows and per-site capture/readout diagnostics.
|
|
41
|
+
2. Apply the explicit approximate sensor-channel interpretation and resolved
|
|
42
|
+
sensor WB gains once; develop XYZ/linear sRGB/D65.
|
|
43
|
+
3. Without correction, map the committed orientation and 1:1 output crop. With
|
|
44
|
+
correction, build the oriented full-active linear RGB view, then delegate
|
|
45
|
+
native optical correction, joint-valid retained view and orientation to the
|
|
46
|
+
capture correction executor.
|
|
47
|
+
4. Apply rendering exposure, declared tone curve, explicit component gamut
|
|
48
|
+
handling, sRGB transfer encoding and quantization through the SDR renderer.
|
|
49
|
+
5. Return output-referred encoding to the consumer. File packing and platform
|
|
50
|
+
display/view adaptation remain distinct downstream operations.
|
|
51
|
+
|
|
52
|
+
The current correction executor supports its explicitly compatible RGB
|
|
53
|
+
geometry/CA mapping followed by linear gain. It rejects unsupported domains or
|
|
54
|
+
orders; it does not silently coerce reconstruction-adjacent channel correction
|
|
55
|
+
into post-color RGB. Existing #118 mapping/resampling diagnostics retain crop,
|
|
56
|
+
local Jacobian/stretch, support mask, interpolation/filter identity, gain/noise
|
|
57
|
+
costs, residual assumptions and clipping. RAW correction intent is informational;
|
|
58
|
+
DNG sensor codes are unchanged. Native prefiltering cannot be declared without
|
|
59
|
+
an implemented source prefilter.
|
|
60
|
+
|
|
61
|
+
Rendering controls never change aperture, shutter, ISO, focus, geometry,
|
|
62
|
+
photo/dark charge, noise realization, physical saturation or RAW codes. Metering
|
|
63
|
+
remains upstream: this API has no meter input, exposure resolver or feedback
|
|
64
|
+
path. Consumers must identify whether histograms/zebras analyze capture data or
|
|
65
|
+
these output-referred samples.
|
|
66
|
+
|
|
67
|
+
## Encoding, clipping and future modes
|
|
68
|
+
|
|
69
|
+
The existing SDR profile fully declares deterministic exposure EV, identity or
|
|
70
|
+
positive per-channel Reinhard tone curve, clipping or rejection of out-of-range
|
|
71
|
+
components, sRGB transfer, 8/16-bit nearest-ties-up quantization and no dither.
|
|
72
|
+
Output explicitly records sRGB primaries, D65 and 80 cd/m² reference white.
|
|
73
|
+
Component clipping is range handling, not a perceptual wide-gamut transform.
|
|
74
|
+
See [SDR rendering](SDR_RENDERING.md) for equations and limitations.
|
|
75
|
+
|
|
76
|
+
RAW preview supports both SDR bit depths. Baseline JPEG requires 8 bits and
|
|
77
|
+
rejects a 16-bit profile; it never silently reduces the requested bit depth.
|
|
78
|
+
Full-well/ADC flags stay in RAW samples, correction-gain clipping stays in the
|
|
79
|
+
correction envelope, and rendering/tone/gamut counts stay in SDR diagnostics.
|
|
80
|
+
Actual display saturation is unknown because display adaptation is external.
|
|
81
|
+
|
|
82
|
+
HDR/PQ/HLG profiles fail validation. Future HDR encoding needs a separately
|
|
83
|
+
versioned transfer/primaries/reference/mastering contract and explicit display
|
|
84
|
+
semantics. Source float headroom does not become an HDR output declaration.
|
|
85
|
+
Picture styles, restoration, sharpening and denoise remain future rendering
|
|
86
|
+
choices, separately identified from sensor/optical quality.
|
|
87
|
+
|
|
88
|
+
## Production plan and compatibility
|
|
89
|
+
|
|
90
|
+
With a valid attached RAW policy and declared renderer support, the existing
|
|
91
|
+
contract graph activates four executed downstream stages: `reconstruction`,
|
|
92
|
+
`physical-orientation-transform`, `output-crop-resample`, `display-processing`.
|
|
93
|
+
Each records model `processed-sensor-raw-sdr` 0.1.0 and attached frame identity.
|
|
94
|
+
The plan retains the complete processed result, profile identity, requested
|
|
95
|
+
output domain and approximate scientific status in its fingerprint. Scientific
|
|
96
|
+
assurance includes the approximate processing component and unpropagated
|
|
97
|
+
uncertainty, retaining color evidence and child results.
|
|
98
|
+
|
|
99
|
+
Missing or mismatched processing records `processed-output-evaluation-blocked`;
|
|
100
|
+
renderer stage declarations still gate each active stage. A request without an
|
|
101
|
+
attachment preserves prior unsupported downstream behavior. Existing inputs
|
|
102
|
+
remain valid; plan version and resulting fingerprints intentionally change.
|
|
103
|
+
Serialized consumers must understand plan 0.6.0 and its optional result field.
|
|
104
|
+
|
|
105
|
+
`outputStateId` explicitly binds numerical attached crop/raster policy to the
|
|
106
|
+
snapshot's committed output identity; it is a caller assertion, not an invented
|
|
107
|
+
geometry lookup. The RAW frame remains independently attached authoritative
|
|
108
|
+
capture data. Matching IDs do not prove its upstream source transport. PSF,
|
|
109
|
+
sensor-stack, photosite, charge, read-noise and ADC composition are still
|
|
110
|
+
separate upstream work: their missing-stage blockers remain. An executed
|
|
111
|
+
post-capture boundary does not make the whole production plan ready.
|
|
112
|
+
|
|
113
|
+
## Bounded operating envelope
|
|
114
|
+
|
|
115
|
+
Existing reconstruction permits at most 4,096 native sites, registered dense
|
|
116
|
+
reference kernels, and complete required support. RAW output crop remains 1:1;
|
|
117
|
+
source reconstruction must cover it, or the whole active region for correction.
|
|
118
|
+
The color interpretation is explicit RGB-channel approximation, not sensor
|
|
119
|
+
calibration. General resizing, streaming/native camera resolution, arbitrary CFA
|
|
120
|
+
color models and external-editor qualification remain #16/#178 requirements.
|
|
121
|
+
This boundary introduces no renderer/provider, file IO or network dependency.
|
|
122
|
+
|
|
123
|
+
## Acceptance evidence
|
|
124
|
+
|
|
125
|
+
| #112 requirement | Regression evidence |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| Tone/render EV cannot alter capture/noise/settings | `processed-sensor-raw.test.ts`, `raw-output-conformance.test.ts` |
|
|
128
|
+
| WB applied once; preserved RAW intent; upstream balanced state | `capture-sdr.test.ts`, `photographic-export-correction.test.ts` |
|
|
129
|
+
| Explicit image-state identity; reject unresolved/wrong domain | `capture-sdr.test.ts`, `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
|
|
130
|
+
| Separate tone/gamut/transfer/quantization; deterministic SDR | `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
|
|
131
|
+
| Primaries/reference white and explicit out-of-range policy | `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
|
|
132
|
+
| RAW/correction/output clipping remain distinct | `raw-output-conformance.test.ts`, `capture-corrected-sdr.test.ts`, `processed-sensor-raw.test.ts` |
|
|
133
|
+
| Metering remains pre-display | No processing API calls the upstream meter; `metering-equipment-integration.test.ts` preserves its separate domain |
|
|
134
|
+
| Same rendering intent for preview/JPEG without screenshots | `processed-sensor-raw.test.ts`, four-orientation/WB checks in `photographic-export-correction.test.ts` |
|
|
135
|
+
| HDR remains distinct; no implicit SDR reinterpretation | Profile rejection tests in `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
|
|
136
|
+
| Correction domains/support/costs and immutable plan binding | `capture-corrected-sdr.test.ts`, `production-image-formation-plan.test.ts` |
|
|
137
|
+
|
|
138
|
+
RAW/linear fixtures use the #130 canonical camera/seed through documented tiny
|
|
139
|
+
owned derived variants; test pixels and ideal color profiles are synthetic,
|
|
140
|
+
not measured/calibrated scene truth. Acceptance demonstrates the declared bounded
|
|
141
|
+
post-capture foundation, not Adobe compatibility or complete physical rendering.
|
|
142
|
+
|
|
143
|
+
This contribution independently composes existing Photivra APIs; it introduces
|
|
144
|
+
no new scientific equation, third-party code/data, look assets or dependency.
|
|
145
|
+
AI-assisted draft requires substantive owner review and contribution-specific
|
|
146
|
+
DCO certification before merge. External editor/high-resolution acceptance and
|
|
147
|
+
upstream physical activation retain their existing issue owners.
|
|
148
|
+
|
|
149
|
+
## Executed upstream production handoff
|
|
150
|
+
|
|
151
|
+
Plan 0.7.0 additionally supports `environmentCapture.processing`. Its
|
|
152
|
+
reconstruction policy omits `rawFrame`: the plan supplies only the exact RAW
|
|
153
|
+
returned by its executed source-to-ADC pipeline. This route cannot be combined
|
|
154
|
+
with `processedOutput` or an independent physical scene sample. Existing
|
|
155
|
+
attached-RAW plan inputs and their conservative origin limitations remain valid.
|
|
156
|
+
See [production environment capture](PRODUCTION_ENVIRONMENT_CAPTURE.md) for
|
|
157
|
+
binding, replay, stage activation and migration details.
|