@photivra/engine 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
package/README.md
CHANGED
|
@@ -4,28 +4,62 @@ Photivra is an open TypeScript engine for the science and mathematics of photogr
|
|
|
4
4
|
|
|
5
5
|
**Pronunciation (IPA):** /foʊˈtɪvɹə/
|
|
6
6
|
|
|
7
|
-
Photivra
|
|
7
|
+
Photivra gives you a reusable, tested API for:
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- camera geometry and optics;
|
|
10
|
+
- focus and depth of field;
|
|
11
|
+
- exposure;
|
|
12
|
+
- subject and camera motion;
|
|
13
|
+
- sensor sampling;
|
|
14
|
+
- diffraction;
|
|
15
|
+
- cropping and framing;
|
|
16
|
+
- stabilization approximations;
|
|
17
|
+
- signal and noise.
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
Every calculation uses explicit units, documented assumptions, validation and provenance (a record of how the result was produced). Approximations are clearly labelled. Results are reproducible, and their limits are written down.
|
|
12
20
|
|
|
13
|
-
|
|
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.
|
|
21
|
+
The source is licensed under Apache-2.0.
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
### Related foundations
|
|
17
24
|
|
|
18
|
-
|
|
25
|
+
- [Digital optics foundations](https://github.com/Photivra/photivra/blob/main/docs/DIGITAL_OPTICS_FOUNDATION.md) document the standalone stray-light irradiance, composed digital geometry and generic lens-correction APIs. They keep the optical/sensor capture model in charge, and make sampling and noise costs explicit. Production composition is separate.
|
|
26
|
+
- The standalone [SimulatedCapture contract](https://github.com/Photivra/photivra/blob/main/docs/SIMULATED_CAPTURE.md) stores format-neutral linear floating-point master data plus public metadata.
|
|
27
|
+
- Its [virtual-camera colour model](https://github.com/Photivra/photivra/blob/main/docs/CAPTURE_COLOR.md) provides explicit linear colour conversion and applies a resolved white balance (WB).
|
|
28
|
+
- [Linear encoding](https://github.com/Photivra/photivra/blob/main/docs/LINEAR_CAPTURE_ENCODING.md) defines deterministic 16-bit quantization.
|
|
29
|
+
- Writing files is a later stage.
|
|
30
|
+
- The standalone [SDR rendering foundation](https://github.com/Photivra/photivra/blob/main/docs/SDR_RENDERING.md) keeps three steps apart: rendering after capture, output encoding, and adaptation to an external display. (SDR = standard dynamic range.) The [processed output contract](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md) connects capture, WB and correction, with explicit input domains and bounded support.
|
|
31
|
+
- The standalone [Print planner](https://github.com/Photivra/photivra/blob/main/docs/PRINT_PLANNING.md) works out printer-file geometry from native pixels only. It uses the physical image size, an independent viewing distance and explicit sampling conventions. It does not assess captured detail or print quality.
|
|
19
32
|
|
|
20
33
|
## Quick start
|
|
21
34
|
|
|
22
|
-
|
|
35
|
+
Install the published ESM package below. The [2.0.0 release record](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_2_0_0.md) and [changelog](https://github.com/Photivra/photivra/blob/main/CHANGELOG.md) describe the current release:
|
|
23
36
|
|
|
24
37
|
```sh
|
|
25
|
-
npm install @photivra/engine@
|
|
38
|
+
npm install @photivra/engine@2.0.0
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Simulate a photograph of a test chart with a generic camera, then read the developed sRGB pixels:
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { simulateCapture } from "@photivra/engine";
|
|
45
|
+
|
|
46
|
+
const capture = await simulateCapture({
|
|
47
|
+
camera: "professional",
|
|
48
|
+
lens: { fNumber: 8 },
|
|
49
|
+
exposure: { mode: "manual", iso: 100, shutterSeconds: 1 / 125 },
|
|
50
|
+
scene: { preset: "slanted-edge" },
|
|
51
|
+
output: { width: 16, height: 16 }
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
console.log(capture.image.samples.length, capture.exposure.settings);
|
|
55
|
+
console.log(capture.assumptions.map((a) => `${a.id}: ${a.explanation}`));
|
|
26
56
|
```
|
|
27
57
|
|
|
28
|
-
|
|
58
|
+
`simulateCapture()` runs the full physical pipeline through the engine's existing contracts: scene radiance, lens, spectral sensor, noise, RAW readout, RAW development and optional JPEG. It lists every default and modelling choice it made in `assumptions`.
|
|
59
|
+
|
|
60
|
+
The [Quick Start](https://github.com/Photivra/photivra/blob/main/docs/QUICK_START.md) covers the inputs, the chart presets (slanted edge, Siemens star, step wedge, grey ramp, checkerboard, point grid, caller patches), illuminants, white balance and limits.
|
|
61
|
+
|
|
62
|
+
The individual calculations are still available as small functions. For example, the horizontal field of view for a 36 mm sensor dimension and a 50 mm focal length:
|
|
29
63
|
|
|
30
64
|
```ts
|
|
31
65
|
import { calculateFieldOfView } from "@photivra/engine";
|
|
@@ -39,10 +73,14 @@ console.log(horizontal.value.degrees);
|
|
|
39
73
|
console.log(horizontal.provenance);
|
|
40
74
|
```
|
|
41
75
|
|
|
42
|
-
Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md)
|
|
76
|
+
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 the [API reference](https://github.com/Photivra/photivra/blob/main/docs/API_REFERENCE.md), which is generated from the package exports.
|
|
77
|
+
|
|
78
|
+
Repository `main` may describe newer, unreleased work. For the stable contract, use the docs bundled in the published package, or the exact `v2.0.0` tag.
|
|
43
79
|
|
|
44
80
|
## Documentation
|
|
45
81
|
|
|
82
|
+
- [Quick Start: simulate a capture](https://github.com/Photivra/photivra/blob/main/docs/QUICK_START.md)
|
|
83
|
+
- [Using Photivra from an agent](https://github.com/Photivra/photivra/blob/main/docs/AGENT_GUIDE.md)
|
|
46
84
|
- [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md)
|
|
47
85
|
- [Architecture](https://github.com/Photivra/photivra/blob/main/docs/ARCHITECTURE.md)
|
|
48
86
|
- [Contributor Guide](https://github.com/Photivra/photivra/blob/main/CONTRIBUTING.md)
|
|
@@ -62,159 +100,217 @@ Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/
|
|
|
62
100
|
|
|
63
101
|
## Getting help
|
|
64
102
|
|
|
65
|
-
Use [GitHub Issues](https://github.com/photivra/photivra/issues) for reproducible bugs, documentation problems
|
|
103
|
+
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).
|
|
66
104
|
|
|
67
105
|
## What is implemented
|
|
68
106
|
|
|
69
|
-
The root package exports deterministic or explicitly
|
|
107
|
+
The root package exports models in four areas. Each model is either deterministic or explicitly labelled as an approximation.
|
|
108
|
+
|
|
109
|
+
A few abbreviations used below: FOV (field of view), PSF (point-spread function: how a lens spreads one point of light), MTF (modulation transfer function), CA (chromatic aberration), AA (anti-aliasing filter), CFA (colour filter array, such as a Bayer mosaic), QE / EQE (quantum efficiency / external quantum efficiency), A/W (amperes per watt, a detector's responsivity), ADC (analog-to-digital converter), AE / AF / WB (auto-exposure / autofocus / white balance).
|
|
70
110
|
|
|
71
111
|
### Optics and geometry
|
|
72
112
|
|
|
73
|
-
- [
|
|
74
|
-
- [
|
|
75
|
-
- [
|
|
76
|
-
- [
|
|
77
|
-
- [
|
|
78
|
-
- [
|
|
79
|
-
- [
|
|
80
|
-
- [
|
|
81
|
-
- [
|
|
82
|
-
- [
|
|
83
|
-
- [Gaussian thin-lens image distance and magnification](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#thin-lens-image-distance-and-magnification)
|
|
84
|
-
- [
|
|
85
|
-
- [
|
|
86
|
-
- [
|
|
87
|
-
-
|
|
88
|
-
-
|
|
113
|
+
- [Generic focus control: MF, single AF and continuous AF](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-control-mf-single-af-continuous-af-and-lock). Explicit acquisition, loss and lock state; a renderer-neutral target distance along the lens axis; strict rules for losing and reacquiring a target; and a separate gate for focus-priority versus release-priority.
|
|
114
|
+
- [Explicit finite and infinity focus-plane state](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#explicit-finite-and-infinity-focus-state), with no non-finite or made-up focus distances.
|
|
115
|
+
- [Field of view](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#field-of-view) for centered and asymmetric rectilinear framing, with optional focus-aware thin-lens projection.
|
|
116
|
+
- [Physical versus diagonal-based 35 mm-equivalent focal length](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#actual-and-35-mm-equivalent-focal-length).
|
|
117
|
+
- [Focus-breathing approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-breathing-projection) of projection and FOV, using a scale the caller declares.
|
|
118
|
+
- [Generic invertible radial distortion mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radial-lens-distortion-mapping), including batch inverse sampling of many points.
|
|
119
|
+
- [Generic lateral CA field mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#lateral-chromatic-aberration-mapping) per RGB channel.
|
|
120
|
+
- [Generic illumination-vignetting approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#illumination-vignetting) in linear light.
|
|
121
|
+
- [Front-of-lens filter transmission](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#front-of-lens-filter-transmission) for generic passive filters: neutral (linear), neutral optical density, and wavelength-resolved. No polarization claims.
|
|
122
|
+
- [Scene radiance to sensor irradiance](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-to-sensor-irradiance): an optical bridge from the light leaving the scene to the light arriving at the sensor. It combines explicit pupil acceptance, lens transmission or a working-T-stop approximation, optional front-filter transmission, and exactly one field-throughput term. It stops before the sensor's own optical stack.
|
|
123
|
+
- [Gaussian thin-lens image distance and magnification](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#thin-lens-image-distance-and-magnification).
|
|
124
|
+
- [Geometric depth of field and defocus-circle diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-of-field-and-defocus).
|
|
125
|
+
- [First-zero Airy diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#circular-aperture-diffraction) for an ideal circular aperture.
|
|
126
|
+
- [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):
|
|
127
|
+
- full 2D directional kernels;
|
|
128
|
+
- bounded interpolation over field, focus, aperture, wavelength and defocus;
|
|
129
|
+
- explicit field-curvature and longitudinal-focus offsets;
|
|
130
|
+
- PSF shape normalized to unit energy, with pupil throughput kept separate;
|
|
131
|
+
- MTF-only data fails closed: it lacks phase and spatial information, so it returns blockers instead of a guessed PSF.
|
|
132
|
+
- [Separated PSF/pupil contribution foundation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#psf-and-pupil-foundation).
|
|
133
|
+
- [Ideal regular-polygon aperture geometry and sunstar direction symmetry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-geometry-and-sunstar-directions).
|
|
89
134
|
|
|
90
135
|
### Exposure and motion
|
|
91
136
|
|
|
92
|
-
- [
|
|
93
|
-
- [
|
|
94
|
-
- [
|
|
95
|
-
- [
|
|
96
|
-
- [
|
|
97
|
-
- [
|
|
98
|
-
- [
|
|
99
|
-
- [
|
|
100
|
-
- [
|
|
101
|
-
- [
|
|
102
|
-
- [Manual and Manual + Auto ISO exposure resolution](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-and-auto-iso-exposure-resolution)
|
|
103
|
-
- [Aperture Priority with manual ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-priority-with-manual-iso)
|
|
104
|
-
- [
|
|
105
|
-
- [Program Auto and Full Auto exposure](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#program-auto-and-full-auto-exposure)
|
|
106
|
-
- [Bulb, Time
|
|
107
|
-
- [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)
|
|
108
|
-
- [
|
|
109
|
-
- [
|
|
110
|
-
- [
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
- [
|
|
116
|
-
- [
|
|
117
|
-
- [
|
|
118
|
-
- [
|
|
119
|
-
- [
|
|
120
|
-
- [
|
|
121
|
-
- [
|
|
122
|
-
- [
|
|
123
|
-
- [
|
|
137
|
+
- [Scene-to-sensor irradiance quadrature](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_QUADRATURE.md). Binds declared spectral scene samples to exact pre-AA coordinates, wavelengths and times through the existing optical bridge. ("Quadrature" means numerical integration over chosen sample points.)
|
|
138
|
+
- [Temporal scene-to-sensor EQE composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md). Applies optics and response validity independently at every local shutter midpoint.
|
|
139
|
+
- [Local sampled-PSF sensor quadrature](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_PSF_QUADRATURE.md). Applies a wavelength-resolved, normalized PSF shape with explicit native and image axes and complete source support.
|
|
140
|
+
- [Sensor-to-environment projection queries](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_ENVIRONMENT_QUERY.md). Derives the scene directions to request from physical optical support and analytic camera rotation.
|
|
141
|
+
- [Executed environment capture to native RAW](https://github.com/Photivra/photivra/blob/main/docs/ENVIRONMENT_RAW_CAPTURE.md). Joins provider calls, an optional local PSF, temporal EQE and the existing seeded RAW generation, then hands off to paired export.
|
|
142
|
+
- [Temporal EQE photo signal to RAW](https://github.com/Photivra/photivra/blob/main/docs/TEMPORAL_PHOTO_RAW.md). Carries validated midpoint counts under changing light through exact-event dark and accumulated charge, to native RAW and paired files.
|
|
143
|
+
- [Irradiance-to-EQE local exposure composition](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_EQE_LOCAL_EXPOSURE.md). Validates explicit physical node samples through response applicability and range, and stationary local integration, before the existing RAW producer.
|
|
144
|
+
- [Generic equipment exposure capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#generic-equipment-exposure-capabilities). Keeps generic body and lens capability facts separate from the selected camera state. Resolves the aperture range at a given focal length, plus shutter and ISO envelopes, for exposure-control policy (#99).
|
|
145
|
+
- [Detailed ISO/exposure-index capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain). Represents standard and expanded settings, Auto ISO bounds and optional capture-mode restrictions, without inferring physical gain or noise behaviour.
|
|
146
|
+
- [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). Maps explicit ISO/capture-mode states to sensor readout regimes (#14), while keeping the upstream photons and shot noise unchanged. Good/Better/Best are convenience profile selectors, not rankings of real cameras.
|
|
147
|
+
- [Manual and Manual + Auto ISO exposure resolution](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-and-auto-iso-exposure-resolution). Uses the typed meter target and the resolved equipment envelope. Aperture and shutter stay under manual control. ISO quantization and limit residuals are reported explicitly.
|
|
148
|
+
- [Aperture Priority with manual ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-priority-with-manual-iso). Keeps the caller's aperture and ISO, and resolves only the shutter, using the same typed target, reference and capability contracts.
|
|
149
|
+
- [Priority modes with Auto ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#priority-modes-with-auto-iso). Adds explicit minimum-shutter and aperture-first policies for modes with two automatic axes, plus Shutter Priority with manual or automatic ISO. No new exposure equations.
|
|
150
|
+
- [Program Auto and Full Auto exposure](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#program-auto-and-full-auto-exposure). Versioned generic program lines choose aperture and shutter. ISO policy stays explicit. Full Auto covers the exposure axes only.
|
|
151
|
+
- [Bulb, Time and long-exposure control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#bulb-time-and-long-exposure-control). Turns control events into a concrete number of elapsed seconds before the existing exposure-window and charge pipeline. There is no special long-exposure physics path.
|
|
152
|
+
- [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).
|
|
153
|
+
- [Relative pre-exposure metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#relative-pre-exposure-metering). Explicit generic multi-zone, center-weighted, spot and highlight-weighted policies over the oriented active capture frame. Also: generic body metering capability/profile compatibility, and a frozen target handed to automatic exposure.
|
|
154
|
+
- [Scene-radiance-derived and explicit temporal metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-derived-and-temporal-metering). Binds relative meter samples to the scene-radiance provider, material and illumination context (#85). Time-varying illumination needs a declared time-averaging policy. No spectral-to-luminance conversion is invented.
|
|
155
|
+
- [Manual ordinary flash with front/rear sync](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-flash-and-ordinary-sync).
|
|
156
|
+
- Registers a spatial scene-light source (#85) and an explicit pulse waveform against the exposure-window timing (#12).
|
|
157
|
+
- Keeps ambient temporal illumination.
|
|
158
|
+
- Fails closed when an ordinary pulse cannot fit inside a real interval where the whole frame is open.
|
|
159
|
+
- HSS (high-speed sync) and TTL (through-the-lens) flash are not faked.
|
|
160
|
+
- [Stable meter targets and exposure compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#meter-target-and-exposure-compensation). Freezes the metering identity for AE lock, and shifts the automatic-exposure target downstream without changing the underlying meter result.
|
|
161
|
+
- [Deterministic logical release sequencing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#logical-release-sequences) for single shots, bursts, the self-timer, and exposure/focus bracket timing.
|
|
162
|
+
- [Extended-object time-varying projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#extended-object-time-varying-projection). Projects explicit metric object points under a shared rigid translation. Optionally validates fronto-parallel magnification. Binds the same geometry to the local exposure windows (#12). Does not claim visibility or a finished blur kernel.
|
|
163
|
+
- [Constant-velocity projected point motion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-subject-motion).
|
|
164
|
+
- [Spatial camera-rotation mapping over time](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#spatial-camera-rotation-mapping) for yaw, pitch and roll.
|
|
165
|
+
- [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 and end. Not a finished rolling-shutter warp.
|
|
166
|
+
- [Capture-mode-bound shutter/readout timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-bound-shutterreadout-timing). Binds timing evidence to one exact capture-mode/profile identity. Keeps sensor readout separate from exposure boundaries. Fails closed on unsupported non-uniform schedules.
|
|
167
|
+
- [Depth-aware translation/parallax temporal geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-aware-translationparallax-temporal-geometry). Requires metric scene depth. Keeps camera translation and subject translation independent. Explicitly forbids using one global homography for a translating 3D scene.
|
|
168
|
+
- [Temporal scene-radiance sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#temporal-scene-radiance-sampling). Generates deterministic provider-evaluation nodes on each point's own local exposure clock, and reduces only radiance results whose identity and time match.
|
|
169
|
+
- [Capture-local pure-rotation temporal quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-temporal-quadrature). Deterministic midpoint nodes, with separate normalized-average and seconds-valued time measures. Does not calculate radiance or blur.
|
|
170
|
+
- [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 phase within the local exposure and analytic destination-to-reference ray inversion.
|
|
171
|
+
- [Time-domain physical stabilization system](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md#time-domain-physical-stabilization-system).
|
|
172
|
+
- Generic synthetic sensor-shift, OIS (optical image stabilization) and coordinated rotational correction.
|
|
173
|
+
- Explicit latency, gain and limits, and a declared panning-axis bypass.
|
|
174
|
+
- Samples the local exposure windows (#12).
|
|
175
|
+
- Does not use tripod/support state or "stops of stabilization" ratings.
|
|
176
|
+
- [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).
|
|
124
177
|
|
|
125
178
|
### Color controls
|
|
126
179
|
|
|
127
|
-
- [
|
|
180
|
+
- [White-balance control and Auto WB](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#white-balance-and-auto-wb). Generic presets owned by the profile, manual gains, independent CCT (correlated colour temperature) plus tint, custom measurement, deterministic AWB priorities and AWB lock. Scene illumination and the RAW-like capture are never changed.
|
|
181
|
+
- [Image processing](https://github.com/Photivra/photivra/blob/main/docs/PROCESSING.md). All of these are cancellable approximations:
|
|
182
|
+
- built-in bilinear Bayer demosaic kernels with mirrored borders, and AHD demosaic;
|
|
183
|
+
- noise-optimal linear merge of a RAW HDR (high dynamic range) bracket;
|
|
184
|
+
- conversion of merged radiance to linear BT.2020 (PQ and HLG are not part of 2.0; see `THIRD_PARTY.md`);
|
|
185
|
+
- Reinhard and Durand–Dorsey tone mapping;
|
|
186
|
+
- Mertens exposure fusion;
|
|
187
|
+
- focus stacking;
|
|
188
|
+
- panorama from known rotations;
|
|
189
|
+
- bilateral and non-local-means denoise;
|
|
190
|
+
- unsharp mask;
|
|
191
|
+
- clearly synthetic film grain.
|
|
192
|
+
- [Colorimetry](https://github.com/Photivra/photivra/blob/main/docs/COLORIMETRY.md):
|
|
193
|
+
- a labelled analytic approximation of the CIE 1931 colour-matching functions (CMFs), or CMF tables you supply;
|
|
194
|
+
- spectral integration;
|
|
195
|
+
- Planckian, illuminant A and CIE daylight illuminants;
|
|
196
|
+
- CCT and Duv;
|
|
197
|
+
- Bradford and CAT16 chromatic adaptation;
|
|
198
|
+
- Kelvin + tint WB gains;
|
|
199
|
+
- CIELAB and ΔE76/94/2000;
|
|
200
|
+
- camera-matrix fitting;
|
|
201
|
+
- Display P3 and Rec.2020 matrices;
|
|
202
|
+
- sRGB, BT.709 and BT.1886 transfer functions;
|
|
203
|
+
- hue-preserving gamut mapping.
|
|
204
|
+
|
|
205
|
+
CIE and ColorChecker tables are not bundled.
|
|
128
206
|
|
|
129
207
|
### Sensor and output
|
|
130
208
|
|
|
131
|
-
- [
|
|
132
|
-
- [
|
|
133
|
-
- [
|
|
134
|
-
- [
|
|
135
|
-
- [
|
|
136
|
-
- [
|
|
137
|
-
- [
|
|
138
|
-
- [
|
|
139
|
-
- [
|
|
140
|
-
- [
|
|
141
|
-
- [
|
|
142
|
-
- [
|
|
143
|
-
- [
|
|
144
|
-
- [
|
|
145
|
-
- [
|
|
146
|
-
- [
|
|
147
|
-
- [EQE electron-rate conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#eqe-electron-rate-conversion)
|
|
148
|
-
- [A/W responsivity photocurrent conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aw-responsivity-photocurrent-conversion)
|
|
149
|
-
- [
|
|
150
|
-
- [
|
|
151
|
-
- [
|
|
152
|
-
- [
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
- [
|
|
160
|
-
- [
|
|
161
|
-
- [
|
|
162
|
-
- [
|
|
163
|
-
- explicit
|
|
164
|
-
- [
|
|
165
|
-
- [
|
|
166
|
-
- [
|
|
209
|
+
- [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).
|
|
210
|
+
- [Pixel pitch](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#pixel-pitch).
|
|
211
|
+
- [Sensor imaging area, native raster, crop factor, megapixels, and 2D sampling metrics](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-imaging-area-and-native-raster).
|
|
212
|
+
- [Sensor architecture and capability metadata, with provenance](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-architecture-metadata), including an independent, optional CMOS/CCD technology-family identity.
|
|
213
|
+
- [Exact colour-sampling topology profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#color-sampling-topology). Supports monochrome and any periodic mosaic on an abstract lattice of sampling sites anchored to the sensor. Spectral response, and binding to the raster or photodiodes, are kept separate.
|
|
214
|
+
- [Capture-mode / colour-sampling structural bindings](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-modecolor-sampling-binding). Explicitly relates one exact native effective raster to the colour-site lattice, and resolves compact source regions before reconstruction, without inventing signal weights.
|
|
215
|
+
- [Sensor optical-stack profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-optical-stack). Keeps physical stack-component metadata separate from the effective AA spatial response. Absent, unknown and unresolved are distinct states. Supports any normalized point-splitting kernel.
|
|
216
|
+
- [Sensor sampling-aperture profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-sampling-aperture). Explicitly registers colour-site centers in native sensor physical space, and resolves geometric sensitive rectangles. Pitch, fill area, QE, microlenses and radiometry are not mixed together.
|
|
217
|
+
- [Sensor spatial-sampling quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sampling-quadrature). Combines AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights.
|
|
218
|
+
- [Sensor spatial-sample reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sample-reduction). Reduces explicitly identified non-negative linear node values in relative or physical irradiance domains. Does not claim CFA spectral filtering or RAW conversion.
|
|
219
|
+
- [Sensor spectral-response profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-response). Binds reusable, wavelength-dependent channel response data to exact colour-sampling IDs. Spectra are never guessed from CFA labels.
|
|
220
|
+
- [Sensor spectral quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-quadrature). Builds wavelength plans that respect response knots, using bounded midpoints with an explicit dλ. Applying the response and integrating the source spectrum stay separate steps.
|
|
221
|
+
- [Sensor spatio-spectral irradiance reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatio-spectral-irradiance-reduction). Combines explicit W/m^2/nm source samples over spatial and wavelength quadrature into irradiance and incident-flux integrals, before any response is applied.
|
|
222
|
+
- [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 or A/W conversion.
|
|
223
|
+
- [Sensor-response operating-range assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-operating-range). Keeps the calibrated power/irradiance domain, wavelength applicability, reference conditions and nonlinearity criterion, before any instantaneous response-rate conversion.
|
|
224
|
+
- [Photon-energy wavelength basis](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photon-energy-wavelength-basis). Derives photon energy from the vacuum wavelength with exact SI constants. Air wavelengths need explicit refractive-index and atmosphere handling.
|
|
225
|
+
- [EQE electron-rate conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#eqe-electron-rate-conversion). Applies authorized effective QE at each wavelength node, converting spectral power on the geometric aperture into incident-photon and expected-electron rates. No exposure integration.
|
|
226
|
+
- [A/W responsivity photocurrent conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aw-responsivity-photocurrent-conversion). Applies calibrated spectral responsivity at each wavelength node to give the photocurrent magnitude at the detector terminal, under explicit electrical operating conditions. No transimpedance or time integration.
|
|
227
|
+
- [Dark-current charge accumulation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#dark-current-charge). Integrates an evidence-backed thermal electron rate (before compensation) over the exact local EQE exposure. No universal temperature law and no full-well assessment are invented.
|
|
228
|
+
- [Accumulated-charge completeness](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#accumulated-charge-completeness). Binds photo, dark and explicitly incremental other stored-electron contributions to one exact exposure, before a physical full-well assessment can be allowed.
|
|
229
|
+
- [Physical charge-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#physical-charge-capacity). Compares the complete expected stored electrons with an evidence-backed physical storage capacity. Not confused with camera/digital saturation. No invented blooming or clamping.
|
|
230
|
+
- [Stochastic sensor charge and RAW-code readout](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#stochastic-charge-conversion-adc-and-raw-code):
|
|
231
|
+
- deterministic, seeded photo and dark shot noise;
|
|
232
|
+
- explicit sampling policies for additional charge;
|
|
233
|
+
- separate electronic read-noise components;
|
|
234
|
+
- explicit conversion-gain regimes;
|
|
235
|
+
- black offset, saturation before the ADC, ADC quantization, and digital saturation;
|
|
236
|
+
- nothing inferred from ISO.
|
|
237
|
+
- [Capture-mode/CFA-bound RAW samples and reconstruction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#raw-capture-samples-and-reconstruction). Keeps the absolute native CFA phase. Fails closed for grouped or remosaic modes without explicit combination maths. Uses evidence-backed linear reconstruction kernels specific to the capture mode and CFA. Does not claim to model aliasing or moiré.
|
|
238
|
+
- [Camera saturation-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-saturation-capacity). Compares the expected dark-corrected photo signal (in electron equivalents) with an evidence-backed saturation capacity of the camera's response chain. Does not reuse total stored charge or guess which stage clips.
|
|
239
|
+
- [Local sensor-rate/exposure binding](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#local-sensor-rateexposure-binding). Maps one exact response-rate colour site, through an evidenced one-to-one relationship with the native effective raster, to its local shutter window. Does not yet allow rate × duration integration.
|
|
240
|
+
- [Constant-rate local-exposure integration](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#constant-rate-local-exposure-integration). Requires evidence that the rate is stationary over the exact local window before producing EQE expected counts or A/W photocurrent charge. Saturation stays unauthorized.
|
|
241
|
+
- [Processed camera output](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md). One explicit RAW-derived SDR development shared by preview, paired JPEG and committed production-plan output.
|
|
242
|
+
- [Orthogonal capture-mode profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-profiles). Keeps apart: acquisition sequence, per-frame sampling, sensor-shift sequence, reconstruction stages, processed raster and final output geometry.
|
|
243
|
+
- [Capture-specific native sensor readout scan timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-readout-timing), with total data-readout duration and rolling spatial timing skew evidenced separately.
|
|
244
|
+
- [Readout/exposure spatial linkage assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#readoutexposure-spatial-linkage), for evidence-backed same or reversed normalized phase relationships between rolling readout and electronic exposure boundaries. Does not assert absolute synchronization.
|
|
245
|
+
- [Capture exposure-window timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-exposure-window-timing), with independent opening and closing boundary schedules and validation of local duration.
|
|
246
|
+
- [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).
|
|
247
|
+
- Explicit metric coordinate transforms between the oriented physical raster and the image plane before orientation, for renderer and lens-field integration.
|
|
248
|
+
- [Centered crop and subject-height framing crop](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#centered-crop-and-subject-framing-crop).
|
|
249
|
+
- [Radiometry prerequisite/readiness assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radiometry-readiness).
|
|
250
|
+
- [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). (SNR = signal-to-noise ratio.)
|
|
167
251
|
|
|
168
252
|
### Data, validation, and composition
|
|
169
253
|
|
|
170
|
-
- [
|
|
171
|
-
- [
|
|
172
|
-
- [
|
|
173
|
-
- [
|
|
174
|
-
- [
|
|
175
|
-
- [
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
254
|
+
- [Shared spectral wavelength primitives and scene illumination-source profiles](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md). Light-source metadata is kept separate from the light leaving the scene (outgoing scene radiance). Source-specific units, approximation/calibration status, provenance and renderer-independent source identities are preserved.
|
|
255
|
+
- [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). Validates renderer/provider fidelity; exact scene, profile and sample binding; wavelength, time and direction identity; and output in W/m²/sr/nm. Provider output is not treated as calibrated sensor input.
|
|
256
|
+
- [Shared continuous spectral coverage and discrete-line composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#shared-spectral-composition). Intersects the explicit scene, optics and sensor wavelength ranges. Keeps delta-like integrated line measures separate from continuous per-nanometre quadrature.
|
|
257
|
+
- [Temporal illumination waveforms and capture-time registration](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#temporal-illumination). Evaluates flash and flicker as relative multipliers, in seconds, against the authoritative local exposure windows. Sensor readout, metering and automatic exposure policy are not mixed in.
|
|
258
|
+
- [Image-formation ownership and order contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md), including coordinate, time, renderer and reserved sensor-stage meanings.
|
|
259
|
+
- [Production image-formation plan](https://github.com/Photivra/photivra/blob/main/docs/PRODUCTION_COMPOSITION.md):
|
|
260
|
+
- separates prepared static context from immutable per-capture snapshots;
|
|
261
|
+
- binds the committed release-frame state (#105) and WB state (#108);
|
|
262
|
+
- expands stage dependencies from the authoritative graph;
|
|
263
|
+
- composes the physical optics path (#110) plus the mature timing and rotation foundations;
|
|
264
|
+
- preserves scientific assurance, evidence and uncertainty across engines;
|
|
265
|
+
- surfaces renderer and engine fidelity blockers;
|
|
266
|
+
- provides shared manifests for optimized and reference consumers, without changing the POC.
|
|
267
|
+
- [Camera and scene schemas, with runtime validation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-and-scene-schema-validation).
|
|
268
|
+
- [Provenance plus optional uncertainty/quality metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#provenance-uncertainty-and-quality-metadata).
|
|
269
|
+
- [The composed `simulatePocCamera()` proof-of-concept calculation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#composed-poc-simulation).
|
|
179
270
|
|
|
180
271
|
The package has no runtime npm dependencies.
|
|
181
272
|
|
|
182
273
|
## Sensor/capture integration status
|
|
183
274
|
|
|
184
|
-
The sensor
|
|
275
|
+
The sensor and capture foundations are deliberately **additive**: they add new APIs without changing existing ones.
|
|
185
276
|
|
|
186
|
-
The root engine
|
|
277
|
+
The root engine exposes standalone APIs for:
|
|
187
278
|
|
|
188
279
|
- physical sensor imaging area and native raster metrics;
|
|
189
|
-
- independent X
|
|
280
|
+
- independent X and Y geometric sampling pitch;
|
|
190
281
|
- active-capture rectangles and physical camera orientation;
|
|
191
|
-
- native↔oriented
|
|
192
|
-
- off-center
|
|
282
|
+
- native ↔ oriented transforms for points, vectors and rectangles;
|
|
283
|
+
- FOV for off-center and asymmetric active capture;
|
|
193
284
|
- diagonal-based 35 mm-equivalent focal length;
|
|
194
285
|
- evidence-backed sensor architecture metadata;
|
|
195
|
-
- evidence-backed
|
|
196
|
-
- evidence-backed native
|
|
197
|
-
- evidence-backed sensor optical-stack profiles
|
|
198
|
-
- evidence-backed sensor site
|
|
199
|
-
- evidence-backed sensor spectral-response profiles plus deterministic bounded spectral-quadrature plans that
|
|
200
|
-
- evidence-backed capture-mode profiles
|
|
201
|
-
- capture-specific native readout scan timing with explicit provenance and no output
|
|
202
|
-
- capture exposure-window timing with independent opening
|
|
203
|
-
- capture-local
|
|
204
|
-
- instantaneous inverse capture-scan rotation mapping at a caller-selected local
|
|
286
|
+
- evidence-backed colour-sampling topology profiles: monochrome, any periodic mosaic, and structural-only layered colour declarations;
|
|
287
|
+
- evidence-backed bindings between the native effective raster and the colour-site grid, plus capture-mode resolution of structural sources with an explicit grouped-mode phase and channel-site counts;
|
|
288
|
+
- evidence-backed sensor optical-stack profiles: ordered physical components, microlens presence, and a separately declared effective anti-aliasing spatial response;
|
|
289
|
+
- evidence-backed registration of sensor site centers, plus geometric sampling-aperture profiles (unresolved or resolved footprint) and the derived geometric sensitive-area fraction;
|
|
290
|
+
- evidence-backed sensor spectral-response profiles, plus deterministic bounded spectral-quadrature plans that keep the wavelength measure separate from applying the response and from integrating the source spectrum;
|
|
291
|
+
- evidence-backed capture-mode profiles: single, fixed or variable multi-frame acquisition; native, grouped or declared per-frame sampling; optional sensor-shift offsets; reconstruction stages; and a separate processed-image raster;
|
|
292
|
+
- capture-specific native readout scan timing, with explicit provenance and no inference from output resolution;
|
|
293
|
+
- capture exposure-window timing with independent opening and closing boundary schedules;
|
|
294
|
+
- capture-local rotation trajectories for a stationary ray, driven by exposure windows (sensor readout deliberately excluded);
|
|
295
|
+
- instantaneous inverse capture-scan rotation mapping at a caller-selected phase within the local exposure, still independent of sensor data-readout timing;
|
|
205
296
|
- radiometry prerequisite/readiness assessment.
|
|
206
297
|
|
|
207
|
-
These contracts are **not all composed into `simulatePocCamera()` yet**.
|
|
298
|
+
These contracts are **not all composed into `simulatePocCamera()` yet**.
|
|
299
|
+
|
|
300
|
+
- POC API 0.20 composes staged capture geometry through final output and viewing: orientation, active-capture rectangles, output crop/raster, active/output FOV, 35 mm-equivalent focal length of the active capture, viewing-based CoC (circle of confusion) against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling.
|
|
301
|
+
- Still not composed into the legacy POC: sensor-architecture metadata, colour-sampling topology profiles, native-effective-raster/colour-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.
|
|
302
|
+
- The separate production plan 0.7.0 runs its bounded, declared environment → sensor → RAW → output route.
|
|
303
|
+
- Readout timing stays in invariant native sensor coordinates. Physical orientation is an explicit later transform.
|
|
208
304
|
|
|
209
|
-
The POC
|
|
305
|
+
The POC reports X/Y sampling diagnostics, but still uses one representative horizontal pitch internally for several pixel-domain calculations. It therefore rejects geometry whose X and Y pitch differ by more than 1%, instead of silently producing a directional error.
|
|
210
306
|
|
|
211
|
-
Likewise, radiometry readiness does not
|
|
307
|
+
Likewise, radiometry readiness does not turn on photon/noise output in the POC. Integrating these foundations is separate future work, and should happen explicitly, not by silently changing what existing requests mean.
|
|
212
308
|
|
|
213
309
|
## Sample use case
|
|
214
310
|
|
|
215
311
|
A developer wants to model how a change in camera settings affects an image.
|
|
216
312
|
|
|
217
|
-
|
|
313
|
+
The application gives Photivra camera and scene parameters — sensor dimensions, focal length, aperture, shutter speed, focus distance, subject distance and motion. It gets back structured scientific results describing effects such as:
|
|
218
314
|
|
|
219
315
|
- field of view;
|
|
220
316
|
- projected subject size;
|
|
@@ -225,9 +321,9 @@ Using Photivra, the application can provide camera and scene parameters—such a
|
|
|
225
321
|
- pixel sampling;
|
|
226
322
|
- crop and framing;
|
|
227
323
|
- exposure relationships;
|
|
228
|
-
- basic signal and noise
|
|
324
|
+
- basic signal and noise behaviour.
|
|
229
325
|
|
|
230
|
-
Each result
|
|
326
|
+
Each result carries explicit units and model provenance. Approximations are clearly identified, not presented as exact physical measurements.
|
|
231
327
|
|
|
232
328
|
```ts
|
|
233
329
|
import {
|
|
@@ -263,70 +359,89 @@ console.log(depthOfField.value);
|
|
|
263
359
|
console.log(motion.value);
|
|
264
360
|
```
|
|
265
361
|
|
|
266
|
-
The
|
|
362
|
+
The application can then use those results, while the photography calculations themselves stay in one central, tested, reproducible place.
|
|
267
363
|
|
|
268
364
|
## Status
|
|
269
365
|
|
|
270
|
-
- Repository package version: `
|
|
271
|
-
- Engine API contract: `
|
|
366
|
+
- Repository package version: `2.0.0` (release candidate prepared October 17, 2026; publication is separate)
|
|
367
|
+
- Engine API contract: `2.0.0`
|
|
272
368
|
- Versioned generic tier reference assets: [GENERIC_TIER_PRESETS.md](https://github.com/Photivra/photivra/blob/main/docs/GENERIC_TIER_PRESETS.md).
|
|
273
|
-
- Composed POC simulation API contract: `0.
|
|
369
|
+
- Composed POC simulation API contract: `1.0.0`
|
|
274
370
|
- Stability: 1.0 root-package compatibility policy; bounded scientific models and independent POC contract
|
|
275
371
|
|
|
276
|
-
From 1.0.1, package version and `ENGINE_API_VERSION` are equal. New captures/plans record
|
|
372
|
+
From 1.0.1, the package version and `ENGINE_API_VERSION` are equal. New captures/plans record 2.0.0; existing archives keep their original creator identities. Schema, model and POC contract versions stay independent.
|
|
277
373
|
|
|
278
|
-
|
|
374
|
+
A breaking change to the root contracts now needs a new package major version. Additive and corrective changes follow [compatibility and migration](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_3_0.md). A 1.0 package is not a claim of calibrated physical accuracy.
|
|
375
|
+
|
|
376
|
+
Creating a GitHub release/tag and publishing `@photivra/engine` are separate release actions. The publish workflow, triggered by the tag, checks that the `vX.Y.Z` tag matches the package version before publishing.
|
|
279
377
|
|
|
280
378
|
## Image-formation integration boundary
|
|
281
379
|
|
|
282
|
-
The root engine
|
|
380
|
+
The root engine exports `getImageFormationContract()`. It is a descriptive public contract covering: which scientific domain owns what, coordinate spaces, stage dependencies and couplings, the time basis, renderer warp/compositing rules, and the reserved order of sensor stages.
|
|
283
381
|
|
|
284
|
-
The contract does **not** claim that every listed stage is implemented. Reserved stages
|
|
382
|
+
The contract does **not** claim that every listed stage is implemented. Reserved stages are 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).
|
|
285
383
|
|
|
286
384
|
## Important scientific limits
|
|
287
385
|
|
|
288
|
-
Photivra deliberately avoids claiming more than
|
|
289
|
-
|
|
290
|
-
- Focus-aware projection is ideal paraxial thin-lens geometry by default. A separate
|
|
291
|
-
- Generic radial distortion is a
|
|
292
|
-
- Generic illumination vignetting is a field-dependent
|
|
293
|
-
- Generic lateral CA is
|
|
294
|
-
- The legacy projected-motion primitive follows one representative point. Separate extended-object
|
|
295
|
-
- The legacy stabilization-equivalent camera-shake API
|
|
296
|
-
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
- Capture-
|
|
304
|
-
-
|
|
305
|
-
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
386
|
+
Photivra deliberately avoids claiming more than its current models support.
|
|
387
|
+
|
|
388
|
+
- **Focus-aware projection** is ideal paraxial thin-lens geometry by default. A separate focus-breathing approximation, with a declared scale, can change projection and framing for one focus state. Photivra does not infer a breathing curve or claim calibration for any named lens.
|
|
389
|
+
- **Generic radial distortion** is a field mapping parameterized by the caller, with an explicit physical normalization radius and an operating range in which it can be inverted. Decentering/tangential distortion and named-lens calibration are not modelled yet.
|
|
390
|
+
- **Generic illumination vignetting** is only a field-dependent attenuation, linear in scene light and per channel. It does not model pupil clipping, cat's-eye bokeh, PSF changes or calibrated lens radiometry.
|
|
391
|
+
- **Generic lateral CA** is an independent radial field mapping for abstract RGB renderer channels. It is not a spectral lens model, a sensor-CFA calibration, a longitudinal-CA model or a named-lens profile.
|
|
392
|
+
- **The legacy projected-motion primitive** follows one representative point. Separate extended-object and depth-direction temporal projection supports declared rigid reference geometry and constant linear motion. Visibility, deformation and radiance accumulation remain the caller's responsibility.
|
|
393
|
+
- **The legacy stabilization-equivalent camera-shake API** is still one global yaw/pitch image-plane vector. Separately:
|
|
394
|
+
- a low-level rotation-only mapping models yaw/pitch/roll image motion that depends on field position;
|
|
395
|
+
- depth-aware translation/parallax quadrature is available;
|
|
396
|
+
- generic stabilization models with response, latency and limits are available.
|
|
397
|
+
|
|
398
|
+
Neither models calibrated commercial IBIS/OIS (in-body / optical image stabilization). The bounded production environment route uses only its declared constant-axis rotation.
|
|
399
|
+
- **Native sensor readout timing** uses a caller-declared, uniform, linear, single-axis spatial phase approximation. Capture data-readout duration and rolling spatial skew are separate evidence-backed facts. The model does not treat one effective raster row or column as one physical hardware readout line, and does not yet model non-uniform or segmented readout or rolling-shutter image distortion.
|
|
400
|
+
- **Readout/exposure linkage** can assert only a normalized native spatial-phase/order relationship to an electronic exposure boundary. It does not establish absolute readout-versus-exposure timing. Equal directions or equal timing spans are never treated as proof of synchronization.
|
|
401
|
+
- **Capture exposure-window timing** models opening and closing boundaries independently, as simultaneous or uniform-linear native scans. It checks that the local duration is positive across the whole active rectangle. It does not itself model curtain acceleration, segmented or nonlinear electronic timing, shutter shock, EFCS-specific (electronic first-curtain shutter) pupil/bokeh behaviour, or automatically equate exposure boundaries with sensor readout. The separate manual-flash foundation registers a pulse against this timing without redefining the exposure-window contract (#12).
|
|
402
|
+
- **Capture rotation trajectories** evaluate a stationary reference ray at local exposure start and end under pure, constant camera rotation. The chord between the endpoints 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 pieces. Executed environment capture integrates declared radiance at its supported local shutter nodes.
|
|
403
|
+
- **Capture rotation temporal quadrature** supplies deterministic midpoint geometry samples across each local exposure. It does not sample scene radiance, output an averaged coordinate or blur radius, model shutter-transmission ramps, or claim a geometry-only error bound. Radiance integration happens later and separately.
|
|
404
|
+
- **Instantaneous capture-rotation inverse mapping** gives 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 a blur model. Reference rays may legitimately fall outside the active source frame and are not clamped.
|
|
405
|
+
- **The Airy diagnostic** stays a separately named size diagnostic for an ideal circular pupil.
|
|
406
|
+
- `calculateIdealPolygonDiffractionPsf()` adds a continuous, unit-energy density for ideal on-axis regular-polygon pupils, with explicit equal-area physical scaling. Blade geometry alone does not give a physical PSF.
|
|
407
|
+
- The real-lens framework owns explicitly profiled, combined primary-optics PSFs and complex-pupil/wavefront propagation.
|
|
408
|
+
- Do not stack polygon diffraction on top of a kernel that already includes diffraction.
|
|
409
|
+
- **Capture-mode profiles** describe acquisition, sampling and reconstruction structure only. Grouped sampling does not imply charge-domain binning unless that is separately evidenced. Processed-image resolution does not change FOV or the physical sensor identity, and does not establish the physical photosite count. Pixel-shift offsets are in units of the native effective sampling pitch and do not claim a photodiode pitch.
|
|
410
|
+
- **Colour-sampling topology** is independent from `NativeImageRaster`. Periodic mosaic phase is anchored to absolute native sensor sampling-site indices, not to crop-local coordinates. Channel IDs are labels, not spectral response curves. Layered colour uses a separate unresolved spatial reference and stays structural-only until per-layer sampling density and registration are explicit. Sparse, non-periodic exceptions such as PDAF (phase-detection autofocus), masked or defective sites are not represented by schema 0.1.0.
|
|
411
|
+
- **Native-effective-raster / colour-site binding** needs its own evidence and is tied to one exact native raster. Matching dimensions alone never prove a 1:1 CFA correspondence. Grouped capture modes also need an evidenced full-frame top-left grouping phase. The bridge reports only compact pre-reconstruction source rectangles and channel-site counts — no sum/average weights, spectral response, downstream reconstructed-pixel dependency or photodiode count. Pixel-shift offsets do not change CFA channel assignment, because the sensor and CFA move together.
|
|
412
|
+
- **Sensor optical-stack schema 0.1.0** separates physical component presence from the effective anti-aliasing response. An omitted AA response means unknown. An explicit `absent` means there is no intentional AA spatial-splitting term in this contract; it does not mean an identity whole-stack PSF or zero aliasing risk. Point-splitting kernels are normalized spatial redistribution only. They exclude throughput, spectral transmission, field/wavelength/polarization dependence, cover-glass refraction and microlens behaviour.
|
|
413
|
+
- **Sensor sampling-aperture schema 0.1.0** keeps the physical registration of colour sites separate from both `NativeImageRaster` and radiometry. Site pitch and 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 inside one lattice cell. Its derived sensitive-area fraction is a geometry diagnostic only — not QE, effective collection area, microlens behaviour, charge diffusion/crosstalk, spectral response or optical throughput.
|
|
414
|
+
- **Sensor spatial quadrature** inverse-samples the pre-AA optical field through the declared AA split and geometric aperture. The destination CFA channel stays authoritative for all nodes; pre-AA source coordinates never reassign CFA colour. Source support that falls off the imaging area is exposed, not clamped or dropped. Normalized weights stay unchanged, and square-micrometre measures stay geometric — they are not radiometric collection area.
|
|
415
|
+
- **Sensor spectral-response schema 0.1.0** treats channel IDs as labels until explicit wavelength-dependent data is supplied.
|
|
416
|
+
- Direct effective EQE, direct A/W responsivity, and explicitly separable filter × detector-QE are different representations.
|
|
417
|
+
- Response curves need reusable-data or Photivra-owned provenance.
|
|
418
|
+
- They never extrapolate outside their wavelength range, and never convert between air and vacuum wavelength coordinates implicitly.
|
|
419
|
+
- They do not model field-angle, temperature or polarization dependence, and do not integrate over wavelength, photons or electrons.
|
|
420
|
+
- **Signal/noise primitives** need photon or electron quantities supplied by the caller. The radiometry-readiness API can assess declared prerequisites, but it does not derive photons or turn on photon/noise output in the composed POC.
|
|
421
|
+
- **The composed POC** still uses one representative pixel-pitch path internally, so it rejects sensor geometry whose X/Y sample pitch differs by more than 1%. The lower-level geometry APIs already keep X and Y pitch independent.
|
|
422
|
+
- **No named commercial camera or lens performance** is claimed.
|
|
313
423
|
|
|
314
424
|
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.
|
|
315
425
|
|
|
316
426
|
## Principles
|
|
317
427
|
|
|
318
|
-
-
|
|
319
|
-
- Do not copy code, datasets, calibration tables, model weights
|
|
320
|
-
- Treat publicly viewable material as reference material only
|
|
321
|
-
- Keep calculations deterministic and testable
|
|
322
|
-
- Prefer explicit units, versioned schemas, consistent public APIs
|
|
323
|
-
- Label results by provenance: calculated, calibrated, estimated
|
|
324
|
-
- Report uncertainty
|
|
325
|
-
- Keep the repository focused on reusable scientific/business logic, validation, schemas, tests, documentation
|
|
428
|
+
- Implement established photography, optics, sensor, motion and imaging mathematics independently.
|
|
429
|
+
- Do not copy code, datasets, calibration tables, model weights or protected technical expression unless the reuse rights are explicit and compatible with Apache-2.0 distribution.
|
|
430
|
+
- Treat publicly viewable material as reference material only. Being public is not permission to copy. Independent implementation does not, by itself, resolve third-party patent rights.
|
|
431
|
+
- Keep calculations deterministic and testable wherever the model itself is deterministic.
|
|
432
|
+
- Prefer explicit units, versioned schemas, consistent public APIs and reproducible results.
|
|
433
|
+
- Label results by provenance: calculated, calibrated, estimated or approximation.
|
|
434
|
+
- Report uncertainty or accuracy metadata only when it can be defended. Never invent an aggregate confidence or error bars.
|
|
435
|
+
- Keep the repository focused on reusable scientific/business logic, validation, schemas, tests, documentation and contributor tooling.
|
|
326
436
|
|
|
327
437
|
## Runtime surfaces
|
|
328
438
|
|
|
329
|
-
The package is ESM
|
|
439
|
+
The package is ESM.
|
|
440
|
+
|
|
441
|
+
- From 2.0.0, its export map also has a `default` condition. CommonJS code on Node 22.12 or later can therefore `require("@photivra/engine")` through Node's `require(esm)` support.
|
|
442
|
+
- `@photivra/engine/package.json` is exported.
|
|
443
|
+
- The published JavaScript source maps embed their TypeScript sources.
|
|
444
|
+
- The declarations type-check with `lib: ["es2022"]` alone. DOM and `@types/node` are not required; the package declares the one minimal `AbortSignal` member it uses.
|
|
330
445
|
|
|
331
446
|
The root export is the runtime-neutral scientific surface:
|
|
332
447
|
|
|
@@ -337,15 +452,17 @@ import {
|
|
|
337
452
|
} from "@photivra/engine";
|
|
338
453
|
```
|
|
339
454
|
|
|
340
|
-
|
|
455
|
+
CI checks the root dependency graph, so Node-only modules and the repository-local HTTP POC server cannot become reachable from this browser-facing surface.
|
|
341
456
|
|
|
342
|
-
The open repository still contains a minimal Node HTTP POC server under `src/api
|
|
457
|
+
The open repository still contains a minimal Node HTTP POC server under `src/api`, for contributor integration testing. It is deliberately **not** exported by `@photivra/engine` and is left out of the published npm package. It has no authentication and is **not** a production hosting recommendation.
|
|
343
458
|
|
|
344
|
-
|
|
459
|
+
From 2.0.0, the published manifest declares no `prepare` or other install lifecycle scripts. Install the npm package. A Git checkout must be built explicitly with `npm ci && npm run build` before use.
|
|
345
460
|
|
|
346
461
|
## Development
|
|
347
462
|
|
|
348
|
-
Development and Node-only tooling support maintained Node.js 22 (minimum 22.13), maintained 24, and 26 Current.
|
|
463
|
+
Development and Node-only tooling support maintained Node.js 22 (minimum 22.13), maintained 24, and 26 Current. Patched Node 24 is preferred for builds.
|
|
464
|
+
|
|
465
|
+
CI checks the 22.13 minimum, plus the newest maintained LTS lines and the newest Current release (today: patched 22 and 24 LTS, and 26 Current), under [the runtime policy](NODE_SUPPORT.md).
|
|
349
466
|
|
|
350
467
|
The reproducible npm workflow uses the committed lockfile:
|
|
351
468
|
|
|
@@ -364,25 +481,27 @@ Coverage gates are currently:
|
|
|
364
481
|
- 90% functions;
|
|
365
482
|
- 80% branches.
|
|
366
483
|
|
|
367
|
-
The deterministic fuzz/property
|
|
484
|
+
The deterministic fuzz/property tests use fixed seeds, so failures can be reproduced.
|
|
368
485
|
|
|
369
|
-
|
|
486
|
+
You may use Yarn or pnpm for development. Release and CI dependency resolution is defined by `package-lock.json` and `npm ci`.
|
|
370
487
|
|
|
371
488
|
## Validation boundaries
|
|
372
489
|
|
|
373
|
-
TypeScript types are not
|
|
490
|
+
TypeScript types are not validation for untrusted data.
|
|
374
491
|
|
|
375
|
-
- Use `parseCameraConfiguration()`, `parseSceneDefinition()`, `parseSensorArchitectureProfile()
|
|
376
|
-
- The repository-local Node POC HTTP layer has its own structural request parser before
|
|
377
|
-
- Scientific range
|
|
492
|
+
- Use `parseCameraConfiguration()`, `parseSceneDefinition()`, `parseSensorArchitectureProfile()` and `parseRadiometryReadinessProfile()` at their external JSON/configuration boundaries.
|
|
493
|
+
- The repository-local Node POC HTTP layer has its own structural request parser, which runs before `simulatePocCamera()`.
|
|
494
|
+
- Scientific range and domain validation stays in the calculation modules.
|
|
378
495
|
- Public `CalculationResult<T>` envelopes reject non-finite numeric output.
|
|
379
496
|
|
|
380
497
|
## Citation
|
|
381
498
|
|
|
382
|
-
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
|
|
499
|
+
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.
|
|
383
500
|
|
|
384
501
|
## Licensing
|
|
385
502
|
|
|
386
503
|
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).
|
|
387
504
|
|
|
388
|
-
|
|
505
|
+
This product includes DNG technology under license by Adobe.
|
|
506
|
+
|
|
507
|
+
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.
|