@photivra/engine 1.5.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 +393 -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 +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- 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 +65 -12
- package/dist/capture/native-raw.js +81 -19
- 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 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- 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/DENSE_PUPIL_QUALIFICATION.md +0 -121
- 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 -54
- 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_1_5_0.md +0 -105
- 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/SEPARABLE_EMISSION_DRAFT.md +0 -103
- 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/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- 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/docs/POC_API.md
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
# Local POC Simulation API
|
|
2
|
-
|
|
3
|
-
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
|
-
|
|
5
|
-
Photivra includes a minimal Node HTTP transport for proof-of-concept development and integration testing.
|
|
6
|
-
|
|
7
|
-
It is **not** the recommended production runtime. Browser applications can consume the root `@photivra/engine` scientific surface directly; the production Photivra architecture is intended to keep the simulation math client-side rather than expose this unauthenticated POC server to the public internet.
|
|
8
|
-
|
|
9
|
-
## Repository and package boundary
|
|
10
|
-
|
|
11
|
-
`@photivra/engine` publishes only the runtime-neutral scientific/calculation surface.
|
|
12
|
-
|
|
13
|
-
The Node HTTP transport remains in this GitHub repository under `src/api` as contributor/development tooling. It is **not** exported by the package and `dist/api` is explicitly excluded from the npm tarball.
|
|
14
|
-
|
|
15
|
-
The HTTP layer adds request parsing, CORS response headers, routing, and serialization. It does not add camera-science equations.
|
|
16
|
-
|
|
17
|
-
## Build and run from a repository checkout
|
|
18
|
-
|
|
19
|
-
```sh
|
|
20
|
-
npm ci
|
|
21
|
-
npm run build
|
|
22
|
-
node dist/api/poc-api-cli.js
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
This command is a repository-development workflow. Installing `@photivra/engine` from npm does not install or expose the POC HTTP server.
|
|
26
|
-
|
|
27
|
-
Defaults:
|
|
28
|
-
|
|
29
|
-
- bind host: `localhost` (loopback only);
|
|
30
|
-
- API URL: `http://localhost:8787`;
|
|
31
|
-
- CORS allowed origin value: `http://localhost:5173`.
|
|
32
|
-
|
|
33
|
-
Overrides:
|
|
34
|
-
|
|
35
|
-
- `PHOTIVRA_API_HOST`;
|
|
36
|
-
- `PHOTIVRA_API_PORT`;
|
|
37
|
-
- `PHOTIVRA_ALLOWED_ORIGIN`.
|
|
38
|
-
|
|
39
|
-
The server is unauthenticated and therefore binds only to loopback by default. Setting `PHOTIVRA_API_HOST` to a non-loopback address exposes it beyond the local machine and is outside the security model supplied by this repository.
|
|
40
|
-
|
|
41
|
-
CORS is a browser policy, **not** authentication or authorization. Non-browser clients can call an exposed endpoint regardless of its CORS header.
|
|
42
|
-
|
|
43
|
-
The server accepts request bodies up to 64 KiB. It does not provide production rate limiting, authentication, quotas, reverse-proxy hardening, or abuse controls.
|
|
44
|
-
|
|
45
|
-
## Health
|
|
46
|
-
|
|
47
|
-
`GET /health`
|
|
48
|
-
|
|
49
|
-
Example:
|
|
50
|
-
|
|
51
|
-
```json
|
|
52
|
-
{
|
|
53
|
-
"ok": true,
|
|
54
|
-
"service": "photivra-engine",
|
|
55
|
-
"apiVersion": "0.20.0"
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Simulate
|
|
60
|
-
|
|
61
|
-
`POST /v1/poc/simulate`
|
|
62
|
-
|
|
63
|
-
Requests must use `Content-Type: application/json`.
|
|
64
|
-
|
|
65
|
-
All physical quantities use explicit units in their property names.
|
|
66
|
-
|
|
67
|
-
The POC transport reports the composed simulation contract version, not the root library `ENGINE_API_VERSION`. The current composed contract is exposed as `POC_SIMULATION_API_VERSION`.
|
|
68
|
-
|
|
69
|
-
POC simulation API 0.20 composes projection using the selected focus plane. The response includes a `projection` block with ideal thin-lens image distance, scale relative to the infinity-focus approximation, and model provenance. Full-sensor field of view, crop field of view, object sampling, subject motion, and camera-shake projection use that same selected projection plane.
|
|
70
|
-
|
|
71
|
-
### Sensor/capture composition in POC API 0.20
|
|
72
|
-
|
|
73
|
-
POC simulation API 0.20 begins composing the standalone sensor/capture foundation **additively**.
|
|
74
|
-
|
|
75
|
-
The existing request remains valid. New callers may opt into staged capture geometry with a `capture` object containing:
|
|
76
|
-
|
|
77
|
-
- physical `orientation`;
|
|
78
|
-
- optional native `activeCaptureRect`;
|
|
79
|
-
- optional oriented `outputCropRect`;
|
|
80
|
-
- optional final `outputRaster`.
|
|
81
|
-
|
|
82
|
-
Compatibility rules are intentionally strict:
|
|
83
|
-
|
|
84
|
-
- legacy `crop.factor` remains available for existing callers;
|
|
85
|
-
- when `capture` is supplied, legacy `crop.factor` must be `1` so two crop models are not silently stacked;
|
|
86
|
-
- legacy top-level `subjectCrop` response semantics remain unchanged when staged capture is absent;
|
|
87
|
-
- with staged capture, subject framing is reported under `capture.subjectFraming` and is applied after declared output crop/resampling;
|
|
88
|
-
- equivalent-viewing CoC in staged capture is based on the final retained physical image region used for viewing, including subject framing when present; output pixel count alone does not change it.
|
|
89
|
-
|
|
90
|
-
The response keeps existing full-sensor/native-vector fields intact and adds an optional `capture` block with:
|
|
91
|
-
|
|
92
|
-
- resolved native/active/oriented/output geometry, including final retained physical bounds;
|
|
93
|
-
- active-capture and final-output FOV, including asymmetric bounds for off-center capture/output crop;
|
|
94
|
-
- physical actual focal length plus active-capture diagonal-based 35 mm equivalence;
|
|
95
|
-
- explicit oriented-capture→output pixel scaling;
|
|
96
|
-
- optional capture-specific subject framing with final retained physical area and effective FOV;
|
|
97
|
-
- explicit native-raster, oriented-capture, and final-output motion-vector diagnostics;
|
|
98
|
-
- corresponding native-raster/oriented/output camera-shake vectors when camera shake is requested.
|
|
99
|
-
|
|
100
|
-
Final digital/output crop does not redefine physical focal length or active-capture 35 mm equivalence. Physical `lens.focalLengthMm` remains the optical input.
|
|
101
|
-
|
|
102
|
-
Sensor architecture metadata and radiometry-readiness profiles remain standalone foundations and are not yet composed into the POC.
|
|
103
|
-
|
|
104
|
-
### Required request groups
|
|
105
|
-
|
|
106
|
-
The request includes:
|
|
107
|
-
|
|
108
|
-
- sensor physical imaging dimensions and native effective raster;
|
|
109
|
-
- focal length and aperture;
|
|
110
|
-
- shutter duration and ISO;
|
|
111
|
-
- focus distance;
|
|
112
|
-
- exactly one circle-of-confusion criterion:
|
|
113
|
-
- explicit target `circleOfConfusionMm`, or
|
|
114
|
-
- an equivalent-viewing reference sensor/CoC convention;
|
|
115
|
-
- crop factor;
|
|
116
|
-
- diffraction wavelength;
|
|
117
|
-
- one representative object position and velocity.
|
|
118
|
-
|
|
119
|
-
### Optional request groups
|
|
120
|
-
|
|
121
|
-
The request may also include:
|
|
122
|
-
|
|
123
|
-
- physical subject dimensions/distance for pixels-on-subject calculation;
|
|
124
|
-
- named scene-plane distances for defocus sampling;
|
|
125
|
-
- named physical objects for projected pixel sampling;
|
|
126
|
-
- named object motion samples with explicit position/velocity vectors;
|
|
127
|
-
- target subject-height fraction for framing crop;
|
|
128
|
-
- controlled yaw/pitch camera-shake profile plus equivalent stabilization-stop attenuation;
|
|
129
|
-
- ideal regular-polygon aperture blade count/orientation;
|
|
130
|
-
- primary-subject diagnostics selecting a named motion sample.
|
|
131
|
-
|
|
132
|
-
Named sample IDs must be non-empty and unique within their respective arrays.
|
|
133
|
-
|
|
134
|
-
## Response semantics
|
|
135
|
-
|
|
136
|
-
### Projection and field of view
|
|
137
|
-
|
|
138
|
-
The top-level `fieldOfView` always describes the full sensor before digital cropping.
|
|
139
|
-
|
|
140
|
-
`projection` reports:
|
|
141
|
-
|
|
142
|
-
- selected focus distance;
|
|
143
|
-
- ideal Gaussian thin-lens image distance;
|
|
144
|
-
- scale relative to the infinity-focus `f` projection;
|
|
145
|
-
- calculated model provenance.
|
|
146
|
-
|
|
147
|
-
This remains ideal paraxial geometry, not a real-lens focus-breathing calibration.
|
|
148
|
-
|
|
149
|
-
### Sensor and staged capture geometry
|
|
150
|
-
|
|
151
|
-
The `sensor` response now includes the shared `SensorGeometryMetrics` result in addition to the backwards-compatible representative pitch fields. This exposes physical imaging-area crop factor, exact native-raster megapixels, and independent X/Y geometric sample pitch without treating sample pitch as photosite collection area.
|
|
152
|
-
|
|
153
|
-
When the opt-in `capture` request is present, the response additionally exposes the staged geometry pipeline:
|
|
154
|
-
|
|
155
|
-
```text
|
|
156
|
-
native physical imaging area + native raster
|
|
157
|
-
↓
|
|
158
|
-
native active-capture rectangle
|
|
159
|
-
↓
|
|
160
|
-
physical camera orientation
|
|
161
|
-
↓
|
|
162
|
-
oriented active capture
|
|
163
|
-
↓
|
|
164
|
-
digital/output crop
|
|
165
|
-
↓
|
|
166
|
-
final output raster
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Native sensor coordinates remain invariant under orientation. Active-capture FOV is calculated from the physical retained area, including off-center asymmetric angular bounds.
|
|
170
|
-
|
|
171
|
-
Legacy projected-motion/camera-shake X/Y values use the existing image-plane basis (+X right, +Y up). Capture raster coordinates use +X right, +Y down. The capture diagnostics therefore expose the explicit conversion to `nativeRasterDeltaPixels` before rotating to `orientedCaptureDeltaPixels` and scaling to `outputDeltaPixels`; legacy fields remain unchanged.
|
|
172
|
-
|
|
173
|
-
### Legacy crop
|
|
174
|
-
|
|
175
|
-
`crop` reports the requested legacy centered crop factor, retained pixel dimensions/area, megapixels, and its effective field of view.
|
|
176
|
-
|
|
177
|
-
If `subjectCrop` is requested, subject framing is composed **after** the fixed crop. The response distinguishes:
|
|
178
|
-
|
|
179
|
-
- `additionalCropFactor`: framing crop relative to the fixed crop;
|
|
180
|
-
- `totalCropFactor`: total linear crop relative to the full sensor.
|
|
181
|
-
|
|
182
|
-
`subjectHeightFraction` is not clamped to 1. A value above 1 with `subjectClipped: true` means the projected subject is taller than the output frame.
|
|
183
|
-
|
|
184
|
-
The framing calculation assumes the crop can be positioned around the subject; it does not validate subject position against source-image edges.
|
|
185
|
-
|
|
186
|
-
### Sensor sampling
|
|
187
|
-
|
|
188
|
-
The response exposes horizontal and vertical geometric sampling pitch plus their relative difference. The composed POC still uses the backwards-compatible horizontal pitch as its representative scalar for blur/sampling calculations and therefore rejects sensor geometry whose X/Y pitch differs by more than 1%. This prevents silent directional error until the composed POC becomes fully axis-aware.
|
|
189
|
-
|
|
190
|
-
### Subject/object sampling
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
When physical subject/object dimensions are supplied, projected dimensions are returned in sensor millimetres and pixels using the focus-aware projection plane.
|
|
194
|
-
|
|
195
|
-
These values can drive pre-authored asset/detail selection without moving projection math into a renderer.
|
|
196
|
-
|
|
197
|
-
### Defocus
|
|
198
|
-
|
|
199
|
-
Named defocus samples return ideal geometric blur-circle diameters in sensor millimetres and pixels.
|
|
200
|
-
|
|
201
|
-
### Subject motion
|
|
202
|
-
|
|
203
|
-
Primary and named motion samples return representative-point sensor-plane displacement in millimetres and pixels, including signed x/y components.
|
|
204
|
-
|
|
205
|
-
The model assumes constant world-space linear velocity. It can represent depth-direction motion of the representative point but does not model extended-object scale blur, rotation, acceleration, deformation, or occlusion changes.
|
|
206
|
-
|
|
207
|
-
### Camera shake
|
|
208
|
-
|
|
209
|
-
When supplied, camera shake returns unstabilized and stabilized global image-plane vectors.
|
|
210
|
-
|
|
211
|
-
Yaw/pitch projection uses the selected focus-aware projection distance. Equivalent stabilization stops attenuate angular displacement by `2^-stops` and are explicitly labeled an approximation.
|
|
212
|
-
|
|
213
|
-
The result is not a CIPA DC-011 measurement, real-camera stabilization rating, or spatially varying rotational optical-flow model.
|
|
214
|
-
|
|
215
|
-
### Aperture and diffraction
|
|
216
|
-
|
|
217
|
-
The optional aperture-shape response contains regular-polygon vertices plus idealized sunstar direction symmetry. Blade count is bounded to 1024.
|
|
218
|
-
|
|
219
|
-
The separate diffraction result remains the ideal **circular-pupil** first-zero Airy diagnostic and reports `pupilModel: "ideal-circular"`.
|
|
220
|
-
|
|
221
|
-
Polygon aperture geometry does not convert the circular Airy result into a polygon-aperture diffraction PSF.
|
|
222
|
-
|
|
223
|
-
### Focus criterion
|
|
224
|
-
|
|
225
|
-
For cross-format comparisons, the equivalent-viewing helper scales a caller-supplied reference CoC by the diagonal of the physical image region assumed to be enlarged to the final viewing size.
|
|
226
|
-
|
|
227
|
-
Legacy requests continue to use the full physical sensor. In staged capture mode the target is the final physical region retained by active capture + output crop and, when requested, centered subject framing. Changing only the encoded output raster does not change this viewing criterion.
|
|
228
|
-
|
|
229
|
-
This remains explicitly a viewing approximation, not a physical lens/sensor blur threshold. An explicit caller-supplied `circleOfConfusionMm` is never changed by crop or output geometry.
|
|
230
|
-
|
|
231
|
-
### Primary-subject diagnostics
|
|
232
|
-
|
|
233
|
-
When requested with the needed subject inputs, diagnostics report sampling, defocus, circular-pupil diffraction, optional named subject-motion path, and optional stabilized camera-shake path side by side.
|
|
234
|
-
|
|
235
|
-
They are intentionally **not** collapsed into one sharpness score because these quantities describe different physical effects.
|
|
236
|
-
|
|
237
|
-
### Provenance
|
|
238
|
-
|
|
239
|
-
Aggregate response provenance is:
|
|
240
|
-
|
|
241
|
-
- `calculated` when all included components are calculated models;
|
|
242
|
-
- `mixed` when an equivalent-viewing focus criterion and/or camera-shake approximation is present.
|
|
243
|
-
|
|
244
|
-
Component provenance identifies which parts are calculated versus approximate.
|
|
245
|
-
|
|
246
|
-
## Validation and errors
|
|
247
|
-
|
|
248
|
-
Decoded HTTP JSON is structurally checked for required object/array/string/finite-number/vector shapes before simulation.
|
|
249
|
-
|
|
250
|
-
That parser does not duplicate every scientific domain/range rule. Scientific modules remain responsible for constraints such as positive dimensions, physically valid distances, blade-count bounds, and crop limits.
|
|
251
|
-
|
|
252
|
-
Current transport responses include:
|
|
253
|
-
|
|
254
|
-
- `200`: successful simulation;
|
|
255
|
-
- `204`: CORS preflight;
|
|
256
|
-
- `400`: malformed JSON/shape or invalid scientific request;
|
|
257
|
-
- `404`: unknown route;
|
|
258
|
-
- `415`: simulation POST without `application/json`.
|
|
259
|
-
|
|
260
|
-
Error messages are intended for local development diagnostics and should not be treated as a hardened public error contract.
|
|
261
|
-
|
|
262
|
-
## Reusable repository module
|
|
263
|
-
|
|
264
|
-
Within this repository, `src/api/server.ts` exports an unbound `createPocApiServer` constructor for tests and trusted development composition.
|
|
265
|
-
|
|
266
|
-
It is repository-internal development tooling rather than a supported npm subpath. Importing the module in repository tests does not start a listener; the CLI entrypoint is responsible for binding the configured host/port.
|
|
267
|
-
|
|
268
|
-
## Important limitations
|
|
269
|
-
|
|
270
|
-
- Local POC transport only.
|
|
271
|
-
- No authentication or authorization.
|
|
272
|
-
- No rate limiting or public-service abuse protection.
|
|
273
|
-
- No persistence.
|
|
274
|
-
- No scene uploads.
|
|
275
|
-
- No calibration database.
|
|
276
|
-
- No real-camera/lens claims.
|
|
277
|
-
- ISO is an exposure/gain setting, not a noise shortcut.
|
|
278
|
-
- Photon/noise primitives exist in the root library, but calibrated photon/noise output is intentionally absent from the composed POC until the radiometric/spectral/optical/sensor prerequisites are defensible.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# POC projection reference on macOS ARM64
|
|
2
|
-
|
|
3
|
-
The unchanged historical 64-case response-hash corpus has one mismatch on macOS ARM64 with Node 24.19.0 and 26.8.1: `equivalence-38`. This mismatch also occurs when executing the original pre-optimization source at `c1374c31473f893310d1ce4f0d5a737aaba43ab5`. All 64 serialized responses are byte-for-byte identical between that original source, the released 1.0.1 baseline `c89e6e83eb7d4b625e12d496bcd51c58d6c7447b`, and the Print candidate `12f304f087d5cbe41266e2a81be2d6a1d521e692` on the verified host. The difference is therefore present in the archived reference on this platform; it is not introduced by projection reuse or the Print changes. The specific floating-point operation responsible has not been isolated.
|
|
4
|
-
|
|
5
|
-
The separate `test/fixtures/poc-projection-reuse-darwin-arm64-reference.json` records the original executable's one differing SHA-256. The test selects this exact reference only for darwin/arm64 on the verified Node major lines 24 and 26. All other cases and environments retain the historical hashes. No tolerance, ignored field, regenerated candidate oracle, scientific implementation change, or historical fixture edit is introduced. A new mismatch still fails the test.
|
|
6
|
-
|
|
7
|
-
To independently reproduce the reference, check out the original commit in an isolated directory, compile its original source with TypeScript 6.0.3, and run its built `simulatePocCamera()` over the unchanged inputs in `test/fixtures/poc-projection-reuse-reference.json` under each recorded Node runtime. Compute SHA-256 over `JSON.stringify(response)` using Node crypto. Compare all outputs with the baseline and candidate on the same host. The original build used the reviewed 1.0.1 development dependency set; no runtime dependencies are added. Only `equivalence-38` differs from the historical corpus:
|
|
8
|
-
|
|
9
|
-
- Historical hash: `1135d7b57b528cbba1c1af98cd09de94d3b2dc3251ed66dcb62ea7ea8d3d32af`.
|
|
10
|
-
- Original-source macOS hash: `02688bd713afea5ae82da9d53675a4e63738aa45bb5f33abca1b2cfeade3d52c`.
|
|
11
|
-
|
|
12
|
-
This is test equivalence evidence, not renewed optical calibration or physical accuracy evidence. Other macOS architectures and Node lines have not been qualified by this record. Human source/scientific review and DCO certification remain pending for this AI-assisted corrective draft.
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# Request-local defocus projection reuse: #45
|
|
2
|
-
|
|
3
|
-
Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
|
|
4
|
-
|
|
5
|
-
The measured candidate reuses the focus-plane image distance already calculated
|
|
6
|
-
inside `simulatePocCamera()` for its subject and defocus sweep. It is a small
|
|
7
|
-
private optimization against merged main
|
|
8
|
-
`c1374c31473f893310d1ce4f0d5a737aaba43ab5`. It consumes no pending tier/export draft.
|
|
9
|
-
Root API 0.103.0, POC API 0.20.0 and public scalar signatures/semantics stay unchanged.
|
|
10
|
-
|
|
11
|
-
## Measurement and decision
|
|
12
|
-
|
|
13
|
-
[Recorded evidence](benchmarks/2026-10-02-poc-projection-reuse.json) contains two
|
|
14
|
-
independent ordinary paired runs and one GC-assisted paired run, all built with
|
|
15
|
-
`tsc`. Each path/scenario has 500 warmup calls and nine blocks of 1,000 whole
|
|
16
|
-
requests. Reference/candidate order alternates, scenario order rotates, and the
|
|
17
|
-
final recorded runs were performed after local tests finished, without concurrent
|
|
18
|
-
task benchmarks. Shared host activity remains uncontrolled.
|
|
19
|
-
|
|
20
|
-
Runtime was Node 24.19.0/V8 13.6.233.17-node.51 on Linux x64, reporting AMD EPYC 9V74
|
|
21
|
-
and 9 logical CPUs. Every run records runtime/hardware, baseline commit and SHA-256
|
|
22
|
-
fingerprints of both candidate runtime source files. The source identity is
|
|
23
|
-
operator-attested; fingerprints allow verification after commit. These are
|
|
24
|
-
public POC developer-consumer request shapes, not observed product traffic or
|
|
25
|
-
browser frame-time evidence.
|
|
26
|
-
|
|
27
|
-
| Whole request | Ordinary reference µs, run 1 | Candidate µs, run 1 | Candidate/reference, run 1 | Ratio, run 2 | GC-assisted ratio |
|
|
28
|
-
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
29
|
-
| Base, no sweep | 11.11 | 11.29 | 1.017 | 1.014 | 0.989 |
|
|
30
|
-
| 1 defocus sample | 12.16 | 11.89 | 0.978 | 0.942 | 0.974 |
|
|
31
|
-
| 2 defocus samples | 13.20 | 11.85 | 0.897 | 0.950 | 0.980 |
|
|
32
|
-
| 4 defocus samples | 14.69 | 13.50 | 0.919 | 0.906 | 0.941 |
|
|
33
|
-
| 8 defocus samples | 18.37 | 16.67 | 0.907 | 0.856 | 0.952 |
|
|
34
|
-
| 16 defocus samples | 27.10 | 19.97 | 0.737 | 0.819 | 0.857 |
|
|
35
|
-
| 16 each defocus/size/motion | 56.33 | 50.52 | 0.897 | 0.902 | 0.880 |
|
|
36
|
-
| Portrait/off-center staged mixed | 95.54 | 90.79 | 0.950 | 0.924 | 0.970 |
|
|
37
|
-
|
|
38
|
-
A ratio below one means a shorter measured request. The two ordinary runs show
|
|
39
|
-
18–26% improvement on the 16-defocus shape, about 10% on mixed samples and 5–8%
|
|
40
|
-
on staged capture. The base shape is about 0.16–0.18 µs slower (1.4–1.7%) in those
|
|
41
|
-
runs; no universal speedup or zero overhead is claimed. GC-assisted timings are
|
|
42
|
-
separate distributions and do not establish ordinary-vs-GC causality. Earlier
|
|
43
|
-
exploratory runs are excluded from the final evidence.
|
|
44
|
-
|
|
45
|
-
The decision is to retain this bounded private reuse candidate for human review.
|
|
46
|
-
The repeatable sweep/mixed improvement justifies it, with the small base-path
|
|
47
|
-
tradeoff explicitly visible. Further FOV/motion/sampling reuse or a generic
|
|
48
|
-
prepared public API is not justified by this experiment. #43 retains its separate
|
|
49
|
-
measurement/decision gate; this result does not establish its conclusion.
|
|
50
|
-
|
|
51
|
-
## Preparation and memory
|
|
52
|
-
|
|
53
|
-
Context creation copies three scalar numbers into a frozen object only when a
|
|
54
|
-
non-empty defocus sweep is present. It adds no new thin-lens resolution: it borrows
|
|
55
|
-
the same request's existing calculated projection. It cannot survive the request,
|
|
56
|
-
is not returned in the response and has no global cache or cross-input lifetime.
|
|
57
|
-
No-sweep requests allocate no context. An isolated object/freeze probe measured
|
|
58
|
-
about 42–46 ns per preparation; its JIT/escape behavior can differ inside the
|
|
59
|
-
whole call, so it is not an independent cost/error bound.
|
|
60
|
-
|
|
61
|
-
Short sweeps are explicitly measured above; benefits increase enough at 16
|
|
62
|
-
samples to amortize the context in these workloads. A single sample is close to
|
|
63
|
-
noise, so no portable break-even count is asserted. Raw net retained-heap deltas
|
|
64
|
-
are preserved but are not allocation counts or persistent-context size estimates.
|
|
65
|
-
|
|
66
|
-
A separate V8 Inspector allocation-sampling pass measured 2,000 staged requests
|
|
67
|
-
per path at 32 KiB sampling intervals, requesting inclusion of objects collected
|
|
68
|
-
by both major and minor GC. Estimated sampled bytes were 593,837,880 for reference
|
|
69
|
-
and 551,945,312 for candidate (about 7% lower); inclusive thin-lens sampled bytes
|
|
70
|
-
were 177,301,960 and 138,224,096 (about 22% lower). These are statistical sampling
|
|
71
|
-
estimates, not exact allocation counters, GC-pause measurements or latency
|
|
72
|
-
attribution. Instrumented allocations are separate from all timing comparisons.
|
|
73
|
-
No raw inspector profile/private path is stored.
|
|
74
|
-
|
|
75
|
-
The sensor dimensions are an explicit 36×24 mm, 6000×4000 raster. This POC computes
|
|
76
|
-
analytical diagnostics; it does not execute 24 million image samples. Raster
|
|
77
|
-
size is therefore context, not a claim of full image-rendering throughput. The
|
|
78
|
-
canonical tiny #130 fixture is used only for correctness, never as the runtime
|
|
79
|
-
performance basis.
|
|
80
|
-
|
|
81
|
-
## Correctness and boundary
|
|
82
|
-
|
|
83
|
-
The public scalar `calculateDefocusCircle()` uses the same shared implementation
|
|
84
|
-
without a borrowed projection. Its validation, arithmetic, result model,
|
|
85
|
-
assumptions and provenance remain authoritative. The internal borrowed context
|
|
86
|
-
requires exact physical focal/focus identity and positive finite projection.
|
|
87
|
-
The POC constructs it from its already validated thin-lens result, never from
|
|
88
|
-
serialized user projection values. Subject-plane projection still uses the
|
|
89
|
-
ordinary thin-lens calculation; no equation or scientific stage is replaced.
|
|
90
|
-
|
|
91
|
-
`test/fixtures/poc-projection-reuse-reference.json` stores 64 owned deterministic
|
|
92
|
-
inputs and complete response/provenance SHA-256 commitments generated from the
|
|
93
|
-
unchanged main reference build. The corpus includes all four orientations,
|
|
94
|
-
off-center captures, legacy crops, varied focal/focus/aperture state and sample
|
|
95
|
-
counts. Seed is `0x45c1374c`. Do not regenerate expectations from the candidate to
|
|
96
|
-
hide drift. #130 remains unchanged. Additional tests compare the scalar oracle,
|
|
97
|
-
invalid-input errors, stale context rejection and alternating request identities.
|
|
98
|
-
|
|
99
|
-
Browser-surface and package gates remain required. This is a Node-measured POC
|
|
100
|
-
optimization, not a browser-motivated public API; no browser performance or private
|
|
101
|
-
application claim is made. It does not activate production rendering/radiometry
|
|
102
|
-
or change capture/output/version contracts. Scientific/provenance review and
|
|
103
|
-
contribution-specific DCO certification remain required before merge.
|
|
104
|
-
|
|
105
|
-
## Reproduction
|
|
106
|
-
|
|
107
|
-
Create an independent checkout of the recorded reference commit and build it with
|
|
108
|
-
`npm ci` / `npm run build`. Build the candidate checkout too. Run only the
|
|
109
|
-
benchmark during timing; replace the example reference-root with that checkout.
|
|
110
|
-
The tooling consumes the reference's `dist/index.js` and first verifies complete
|
|
111
|
-
response equivalence for every measured scenario.
|
|
112
|
-
|
|
113
|
-
```sh
|
|
114
|
-
node scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5
|
|
115
|
-
node --expose-gc scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5 --allocation=sample
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Repeat ordinary runs separately. Build labels are not independently attested by
|
|
119
|
-
the script. There is no timing CI threshold, paid service, runtime dependency or
|
|
120
|
-
new third-party material. This tooling is Node-only and outside the public root.
|
|
121
|
-
|
|
122
|
-
## Final V1 remeasurement
|
|
123
|
-
|
|
124
|
-
[Final V1 performance disposition](V1_PERFORMANCE_DISPOSITION.md) records current main #204, fresh paired timing/equivalence, preparation/memory profiles and dense executed environment-to-RAW evidence. PR #205 merged the final reviewed/signed no-further-change disposition; PR #206 merged final conformance. The measured engine commit remains the historical benchmark identity. Earlier candidate and pending-remeasurement statements above are historical.
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Print #195 / #196 candidate evidence and release review
|
|
2
|
-
|
|
3
|
-
Historical candidate record, retained without relabeling its original evidence. PR #217 subsequently received owner approval and was merged; see the [current engine acceptance audit](PRINT_196_ENGINE_ACCEPTANCE.md) for approval identity, additional native-capture evidence and engine/app gate ownership.
|
|
4
|
-
|
|
5
|
-
This record accompanies the 1.2.0 candidate. It preserves the full #196 acceptance gate: bounded computational conformance does not close the device/backend, proof UI or natural-image perception obligations of the full new-UI release. Engine publication precedes dependent app integration; app acceptance is not treated as an engine dependency cycle. No tag or distribution is created. Historical 1.1.0 diagnostic ledgers and JPEG artifacts remain unchanged.
|
|
6
|
-
|
|
7
|
-
## Planning acceptance (#195)
|
|
8
|
-
|
|
9
|
-
The existing public planner is tested against an independent exhaustive sample-count search for stamp, book, home, gallery, billboard and distant large-sign conditions on one immutable retained source. Heavy off-center crops expose insufficient native sampling. Smaller-size alternatives recover only within the original exact integer aspect family. Zero physical dimensions are rejected and a corrected request recovers. Enlarged delivery dimensions do not create native sampling. These are planning checks, not source-quality claims. See `test/print-plan-acceptance.test.ts` and [the planning contract](PRINT_PLANNING.md).
|
|
10
|
-
|
|
11
|
-
## New diagnostics and independent references
|
|
12
|
-
|
|
13
|
-
The [linear statistics protocol](PRINT_REGION_STATISTICS.md) separates paired processing changes from independent-repeat temporal sample variance. The [contrast reference](PRINT_CONTRAST_REFERENCE.md) exposes a restricted static neutral D65 Gabor model estimate with explicit luminance and reference-observer conditions. It does not label a photograph visible, sharp or printable.
|
|
14
|
-
|
|
15
|
-
| Experiment | Executed backend | Independent reference | Supported meaning |
|
|
16
|
-
| --- | --- | --- | --- |
|
|
17
|
-
| Registered differences and repeats | New bounded scalar statistics | Exact binary64 rational arithmetic / high precision RMS | Finite arithmetic and sample statistics, not acquisition calibration |
|
|
18
|
-
| PSF/aperture detail | Public local PSF + spatial/spectral quadrature | Sparse complex transfer, midpoint aperture sum and continuous sinc | Owned neutral periodic signal; finite kernels; all orientations; off-center ROIs |
|
|
19
|
-
| Photocharge noise | Public accumulated-charge / seeded realization | Poisson mean and variance-of-sample-variance moments | Independent seeded ideal photocharge, 4 sites, 32–256 repeats; no ADC/read noise |
|
|
20
|
-
| Electronic noise and clipping stages | Public native RAW producer, including dark/photo Poisson, storage capacity, read noise and 12-bit ADC | Exact rational charge-injection stage predictions; compound Poisson/Gaussian moments; deterministic half-code error bound | Owned 2×2 electronic reference; independent repeats at 32–256 counts; signed pre-ADC signal and unsigned code clamp; no source radiometry or device calibration |
|
|
21
|
-
| Source-to-capture handoff | Public production environment capture + native RAW + processed-output path | Independent 80-digit SI radiance-to-photoelectron arithmetic | Owned uniform 540–560 nm band; QE 0.4; transmission 0.85; 8 ms; 2×2 native; four radiance scales; no real source/device calibration |
|
|
22
|
-
| JPEG processing changes | Public SDR/JPEG exporter, archived independent Pillow/libjpeg decode | Exact decoded neutral scalar paired differences | Exact preserved JPEG bytes, orientation, stage and source hashes; no automatic artifact classifier |
|
|
23
|
-
| Subject depth / intentional defocus | Shared thin-lens geometry + public complex-pupil propagation + owned visible-plane provider | Separate finite complex DFT and ray-plane reference | 2/5/10 m overlapping static planes; 5 m focus; f/8,16,32; 500 nm; 9×9 ideal pupil; interior ROIs |
|
|
24
|
-
| Pupil sampling pilot | Public finite complex-pupil propagation with separately varied pupil resolution and padding | Independently factored finite DFT; continuous shifted-pupil overlap integral; analytic focused circular-pupil transfer | 25 cycles/mm; 500 nm; 2/5/10 m; f/8,16,32; final padded 61×61 grid below 0.01 absolute transfer error; no all-frequency or device certificate |
|
|
25
|
-
| Translation motion | Public local exposure timing + translation/parallax nodes + owned periodic plane accumulation | Closed finite geometric transfer and continuous exposure sinc | Constant depth/visibility; 2/5/10 m; camera/subject velocity 0/1 m/s; 20 ms; 2–32 nodes |
|
|
26
|
-
| Changing source visibility | Public production environment capture + native RAW + processed-output path, with owned moving two-plane provider | Exact rational ray/interval occupancy and continuous-exposure visibility fraction | Foreground 2 m / background 10 m; static camera; point optics; 8 ms; native X/Y motion; 2–128 midpoint nodes; no PSF/depth-edge blur or device qualification |
|
|
27
|
-
| Physical proof reference | Owned PDF wrapper around exact archived JPEG streams; existing public Print planner | Exact Fraction physical-unit/ROI reference; separate pypdf graphics-state/DCT inspection; rendered visual inspection | Same retained crop at two enlargements and same-scale q1/q32 comparison; nominal A4 geometry/ruler only; no actual printer/UI/device or perception qualification |
|
|
28
|
-
| Static contrast reference | Restricted castleCSF equation adapter | Independent 80-digit Decimal arithmetic | Numerical model conformance only; no new psychophysics or individual observer calibration |
|
|
29
|
-
|
|
30
|
-
All generator inputs and JSON expected outputs are committed under `test/fixtures/print-detail/`; tests pin reference SHA-256. References never import the engine or derive expected values from its output. Every new scene/provider is owned draft material, not a private app fixture or camera dataset. These test adapters execute the named public backend; they do not qualify an unnamed renderer or device by association.
|
|
31
|
-
|
|
32
|
-
## Finite-focus propagation correction
|
|
33
|
-
|
|
34
|
-
The depth experiment exposed that the complex-pupil reference used nominal focal length for image sample pitch even when finite focus metadata was present. Model 1.1.0 adds explicit `propagationDistanceMm` and returns the distance/source. Omission preserves all legacy kernel values. The owned principal-plane fixture explicitly passes the shared thin-lens image distance. Real exit-pupil geometry needs separate evidence. No blur-diameter-to-PSF approximation or duplicate camera equation is introduced. See [PSF foundation](PSF_FOUNDATION.md).
|
|
35
|
-
|
|
36
|
-
The new depth test is a finite scalar pupil conformance test. Its 9×9 pupil grid is **not** a continuum convergence certificate. The new independent pilot demonstrates intensity aliasing in that unpadded reference, including absolute transfer errors above 0.14 at f/32. A separately padded 61×61 grid satisfies a candidate 0.01 transfer-error criterion only at the declared 25 cycles/mm frequency and nine depth/aperture combinations; see [the pupil sampling pilot](PSF_FOUNDATION.md). Existing 9×9 outputs are not retrospectively certified. All finite taps for every selected ROI must hit the same visible surface. Depth-edge diffraction/occlusion composition, moving visibility, lens distortion and corrections are unsupported by that experiment. A background explicitly marked intentional defocus never becomes failed source quality.
|
|
37
|
-
|
|
38
|
-
The motion reference checks continuous-exposure convergence and separately composes camera and subject velocities. It does not use an endpoint chord as a PSF, change exposure from readout duration, or authorize one homography across depths. PSF/aperture tests independently check spatial quadrature convergence. Stochastic repeat-count checks use predeclared broad moment bands; random sample estimates need not converge monotonically and these bands are not confidence intervals for a photograph.
|
|
39
|
-
|
|
40
|
-
### Linear/high-bit electronic readout qualification
|
|
41
|
-
|
|
42
|
-
`test/print-region-readout-backend.test.ts` invokes `simulateSensorRawFrame()` with an owned 2×2 native reference and 12-bit ADC in the existing 16-bit container. Exact deterministic charge-injection experiments independently isolate storage saturation, pre-ADC upper saturation, final digital saturation and rounding without clipping. The Python rational oracle includes threshold contact and half-code ties; successful output at a boundary alone is not interpreted as an unknown clipping mechanism. Backend flags and exact stage values must match the independent declared experiment. Source radiometry stays explicitly unverified.
|
|
43
|
-
|
|
44
|
-
The stochastic experiment uses photo mean 200 electrons, dark mean 8 electrons and read-noise RMS 0 or 2 electrons, with predeclared 32/64/128/256 repeats and independent capture/representation/realization IDs. For unclipped pre-ADC signal, the independent compound variance is `photoMean + darkMean + readRms²`; the fourth central moment is `photoMean + darkMean + 3 variance²`. Those moments determine the broad sample-mean/sample-variance conformance bands. After the 12-bit ADC, each decoded sample's rounding error is bounded by half a code times the declared gain; the RMS change is bounded deterministically without assuming independent uniform quantization noise. All observed upper/lower clipping flags must be false for that unclipped experiment.
|
|
45
|
-
|
|
46
|
-
A separate zero-photo/zero-dark, 8-electron read-noise experiment verifies that negative electronic signal survives the pre-ADC stage. With zero black pedestal, the final unsigned code clamp produces a positive bias consistent with independent rectified-normal mean `sigma/sqrt(2 pi)`. The before/after comparison uses the same immutable capture and noise realization. Changing draws cannot stand in for a processing effect.
|
|
47
|
-
|
|
48
|
-
The scalar diagnostic encoding is an explicit ideal neutral relative signal scaled by electrons per reference unit. It is conditional electronic model conformance, not a calibrated radiance/luminance transform or a claim that charge injection photographed a scene. Spatial texture, CFA color interpretation, real sensor read noise, temporal correlations, actual photo-source transport and display/render clipping remain separately unassessed. The native RAW producer's `upstreamRadiometryVerified: false` is preserved. This extends the public model evidence; it does not close actual capture/device qualification or certify the private app noise fixture.
|
|
49
|
-
|
|
50
|
-
### Source-to-capture qualification and artifact identity
|
|
51
|
-
|
|
52
|
-
`test/print-region-capture-backend.test.ts` executes the actual public production environment-capture plan, rather than injecting all photocharge directly. An owned uniform-radiance variant of the existing basic reference supplies a constant 540–560 nm spectral band. The independent Decimal SI oracle predicts generated photoelectrons from declared radiance, working f-number, transmission, native geometric aperture, wavelength, QE and duration at four radiance scales. The plan executes 32 frozen provider queries, binds actual RAW to processed output, preserves source transport/radiometry as unverified, and deterministically replays the same capture. A paired pre-ADC/decoded-16-bit diagnostic checks the half-code rounding bound with the same noise realization. Changing physical print dimensions leaves captured samples unchanged. This is bounded public computational backend qualification; it does not establish physical calibration, a megapixel producer, source headroom, or actual visibility transport.
|
|
53
|
-
|
|
54
|
-
The PSF orientation references now hash the complete actual oriented scalar raster and give each orientation a distinct representation identity. Depth references hash a complete 200×200 Float64LE scalar artifact and extract the tested ROI from it. That artifact continues the selected ideal plane outside its qualified interior region; no depth-edge or other-surface rendering claim is made for those pixels. Every finite PSF tap for the selected ROI must still resolve to its declared visible surface. The ideal field-invariant pupil records the selected field coordinate explicitly. These are owned analytic references, not a reconstructed full 3D photograph or an actual-device calibration.
|
|
55
|
-
|
|
56
|
-
### Changing-visibility source qualification
|
|
57
|
-
|
|
58
|
-
`test/print-region-visibility-backend.test.ts` drives the actual public production capture path with an owned nearest-surface provider. A foreground half-plane at 2 m translates along world X or Y; its edge starts at −0.5 m and moves at 125 m/s during the 8 ms exposure. A uniform farther plane at 10 m supplies radiance wherever the near plane is absent. The two spectral radiance levels are 0.5 and 1.5 times the previously independently predicted flat-band source. Engine-owned outgoing rays drive metric near-plane intersections; the provider does not introduce a second camera projection or an endpoint blur kernel.
|
|
59
|
-
|
|
60
|
-
A separate exact Fraction oracle derives source-aperture ray slopes, native-Y inversion, visibility transition times, finite midpoint occupancies and continuous-exposure source means. Tests use 2/4/8/16/32/64/128 time nodes and both motion axes. The 128-node cases exposed a Node 24 coverage timeout. Every query is checked with direct fail-fast conditions, and replay compares a SHA-256 digest of all finite serializable scientific results. After those harness improvements, both full capture/replay cases still took 6.5–6.7 seconds in CI coverage; the fixture therefore has an explicit 15-second deadline. It is a numerical qualification fixture, not a performance gate. All cases, independent bounds and replay checks remain; the regular suite retains its default five-second deadline. The finite/continuous source-scale error is bounded by the unit radiance step divided by node count; it need not decrease monotonically for a discontinuous edge. All 16N callbacks per complete native 2×2 capture must execute. Actual photoelectron expectations, RAW/processed-output binding and deterministic replay are checked. Each execution has an explicit capture identity, and its snapshot commits the selected time-node count.
|
|
61
|
-
|
|
62
|
-
This qualifies only this owned moving-source provider and the named public integration path. The engine's `sceneVisibilityCalculated: false`, `providerTransportVerified: false` and `upstreamRadiometryVerified: false` remain unchanged: the engine has not acquired a general scene/transport solver. Point optics and the stated rectangular aperture are explicit. PSF/defocus at moving depth edges, rolling readout, camera translation/rotation, corrections, edge-grazing semantics, other geometry, source calibration and private renderer/device behavior require separate evidence. It does not certify full #196 or a printable depth proof.
|
|
63
|
-
|
|
64
|
-
### Physical proof artifact and independent inspection
|
|
65
|
-
|
|
66
|
-
The committed [two-page physical proof reference](../output/pdf/print-proof-reference.pdf) reuses the exact existing post-encoding JPEG streams and selected native 16×8 crop. Page 1 prints the same JPEG/crop at full-source widths of 1 and 4 inches. Page 2 compares quantizer-step 1 and 32 representations of the same capture and crop at identical physical scale. No fixture family, new source per print size, resampling or interpolation uplift is introduced. The older JPEG bytes, hashes, capture IDs and 1.1.0 creator identity remain unchanged.
|
|
67
|
-
|
|
68
|
-
An offline ReportLab generator derives millimeters/PDF points using exact Fraction arithmetic. A separate pypdf inspector reads actual MediaBox, graphics transforms, clip rectangles, embedded image dimensions, original DCT bytes, default interpolation policy and the nominal 100 mm calibration line. It maps native top-down ROI corners through the actual PDF transform and compares independent physical-unit expectations at less than 0.0001 PDF point serialization tolerance. Public-root tests bind the pinned PDF/inspection/manifest hashes and compare the existing Print planner's retained raster, crop geometry and PPI to the independently inspected reference. The 16×8 crop remains 16×8 at both enlargements. Generator reproduction is deterministic, with image resources based on byte content rather than checkout paths. Both final pages were rendered and visually inspected.
|
|
69
|
-
|
|
70
|
-
This is public artifact/geometry evidence, not a new runtime PDF exporter or a qualified product proof workflow. The source is the existing owned post-ADC grating, not physical source/optics qualification. PDF DeviceRGB appearance, viewing luminance, substrate, actual printer scale and user/device handling remain unqualified. The calibration line's actual printed length must be measured. There is no embedded font program, added runtime dependency or private code/asset. The independent inspector is an optional offline pypdf tool; normal Node CI verifies committed artifact/record integrity and engine geometry without requiring Python packages. Human/source review and full #196/#307 physical proof integration remain open.
|
|
71
|
-
|
|
72
|
-
## Source and reuse review
|
|
73
|
-
|
|
74
|
-
The castleCSF numeric model material is pinned to upstream `f4b0b722af83001d7af979281e06ca642d36e4e8`. MIT notices are retained in [the license](licenses/castleCSF-MIT.txt), `NOTICE` and `THIRD_PARTY.md`. No observational CSV or separately licensed dataset is incorporated. The public [primary paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC10996938/) supplies scientific context; upstream numerical conformance does not supply a new observer experiment. Quadratic paraxial pupil phase and finite propagation are consistent with the scalar diffraction framework described by [Braat and colleagues](https://nijboerzernike.nl/_PDF/BraatProgOpt2007OwnVersion20080515.pdf); no text, figures, tables or implementation from that source are copied.
|
|
75
|
-
|
|
76
|
-
Substantive human scientific/source and contribution-specific DCO review remains pending for this new change. Approval of PR #216 does not certify these new coefficients, adapter, protocols or owned test material.
|
|
77
|
-
|
|
78
|
-
## Candidate checks
|
|
79
|
-
|
|
80
|
-
On Node 26.8.1, all 2,065 tests in 159 files pass; the full suite also passes with coverage on Node 24.19.0. Coverage is 92.04% statements, 88.55% branches, 99.63% functions and 92.04% lines. Build, static/license/SPDX/identity/browser checks, generated references, documentation links, 67 strict packed documentation consumers and the 810-file package surface pass. The [evidence inventory](validation/print-196-candidate-evidence.json) pins generator/artifact and reviewed upstream source hashes. These observations do not replace supported Node CI or substantive human review of the exact candidate commit.
|
|
81
|
-
|
|
82
|
-
## Engine and full new-UI release gates
|
|
83
|
-
|
|
84
|
-
The [candidate capability ledger](validation/print-196-candidate-capabilities.json) records bounded support and missing qualification separately. The engine owns the bounded interpretation contract and publicly runnable qualification. The app owns production capture, physical proof, accessibility and device integration and consumes published engine APIs. The full new-UI acceptance below remains in scope, but cannot logically precede publication of its required engine contract. The requested release after completion still requires resolving the engine acceptance and human review gates; product gates remain explicitly outstanding:
|
|
85
|
-
|
|
86
|
-
- Independently qualified active capture/backend evidence for the claimed source detail domain, including lens/field, source headroom and continuum/support convergence. Owned finite reference execution cannot certify a private production renderer or actual capture device.
|
|
87
|
-
- Qualified actual-source high-bit/linear evidence for the claimed physical noise and tonal domain. The public electronic reference now covers modeled photo/dark/read noise, storage/pre-ADC/digital saturation, signed shadows and 12-bit rounding. Actual source transport, physical calibration and display/render clipping remain unassessed.
|
|
88
|
-
- Backend evidence for subject/depth/occlusion across the actual supported coordinate/correction/viewpoint domain, and temporal visibility changes where claimed. Interior finite-plane references exclude depth-boundary composition.
|
|
89
|
-
- A perception application whose actual stimulus, luminance, contrast, area and observer conditions match the supported model. A rectangular coherent grating or natural-image ROI is not automatically a Gaussian-envelope Gabor stimulus. Color, aliasing, halos and natural-image visibility remain independently unassessed.
|
|
90
|
-
- Exact physical proof/comparison scale and immutable capture/region/output binding in the product integration required by #196/#307. The standalone engine tests cannot certify private UI scale, accessibility or device rendering.
|
|
91
|
-
- Human scientific/source review, contribution DCO certification, exact-head CI, final-main release gates and explicit publication approval.
|
|
92
|
-
|
|
93
|
-
Do not close #196, downgrade these gates, or describe the release as ready because computational tests pass. #195 can be closed on acceptance of its planning audit. #215 remains open until the approved distribution is published.
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Engine #196 acceptance audit
|
|
2
|
-
|
|
3
|
-
This audit follows merged [PR #217](https://github.com/Photivra/photivra/pull/217), commit `c58d9eb9dcba807f020df45be1ed5ec4f6c081e4`. Owner approval of that contribution's scientific/source and DCO gate is recorded in its squash commit and PR. The old candidate ledgers retain their historical pending-review observations; they are not current approval records. The additional patterned-source reference below requires its own substantive human review and contribution-specific DCO certification.
|
|
4
|
-
|
|
5
|
-
## Engine contract and full product scope
|
|
6
|
-
|
|
7
|
-
[Engine #196](https://github.com/Photivra/photivra/issues/196) requires documented, independently supported bounded assessment, with other dimensions explicitly qualified or unassessed. It does not require a universal quality score, automatic natural-image visibility verdict, named-device calibration or printer ICC/substrate simulation. The engine APIs preserve those exclusions. Their scientific meaning remains conditional on a declared source, registration, model and stage; successful parsing never authenticates a supplied artifact.
|
|
8
|
-
|
|
9
|
-
The issue also requires the full new-UI print feature. Its app acquisition, proof workflow, accessibility and actual-device gates remain required under [app #307](https://github.com/Photivra/photivra-apps/issues/307) and its linked owners. They consume the published engine contract. They cannot be prerequisites for publishing that same prerequisite contract. Engine acceptance does not close those tickets, certify a private renderer, or make the complete new-UI release ready. The earlier candidate's combined `fullAssessmentAcceptance: blocked` remains true for that complete product scope; it must not be mistaken for proof that every engine requirement lacks evidence.
|
|
10
|
-
|
|
11
|
-
## Requirement-to-evidence audit
|
|
12
|
-
|
|
13
|
-
| Engine requirement | Authoritative evidence | Qualified scope / retained limit |
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| Model, supported domain, independent protocol and reuse review before implementation | `PRINT_DETAIL_ASSESSMENT.md`, `PRINT_DETAIL_VALIDATION.md`, `PRINT_REGION_STATISTICS.md`, `PRINT_CONTRAST_REFERENCE.md`, retained MIT license/NOTICE/THIRD_PARTY, #217 owner review | Bounded coherent scalar and linear-statistic models; separate population contrast reference; no general photograph classifier |
|
|
16
|
-
| Reuse optics, sampling and processing; no second diffraction/defocus/motion stack | `print-detail-psf-backend.test.ts`, `print-detail-depth-backend.test.ts`, `print-depth-pupil-convergence.test.ts`, `print-detail-motion-backend.test.ts`; shared public functions | Finite local kernels, declared pupil grid and support, supported temporal nodes; no blur-diameter-to-PSF conversion or named-lens calibration |
|
|
17
|
-
| Exact source stage, region, field, subject/focus, print/viewing geometry and contrast assumptions | `print-detail.test.ts`, `print-region-statistics.test.ts`, model/input contracts | Explicit selected ROI, orientation/crop and relative-linear domain; absolute print luminance is not inferred; unqualified correction/warp blocked |
|
|
18
|
-
| Directional versus isotropic blur and equal-PPI/different-detail sources | `print-detail.test.ts`, `print-detail-psf-backend.test.ts`, new `print-detail-native-capture.test.ts` | Owned periodic sources and named public backend; no universal MTF or real-camera claim |
|
|
19
|
-
| Actual capture backend, target truth and independently predicted source response | New `print-detail-native-capture.test.ts` and `native-detail-reference.json`; existing `print-region-capture-backend.test.ts` | Complete 4×4 native provider→optics→EQE→photo/dark/noise→ADC execution, two axes/phases and four aperture node counts; declared angular source, point optics, no private renderer/device calibration |
|
|
20
|
-
| Selected subject, intentional background defocus, visible depth/occlusion | `print-detail-depth-backend.test.ts`, `print-region-visibility-backend.test.ts` | Known metric nearest-surface provider; finite PSF support restricted to one visible plane; point-optics changing visibility; depth-edge PSF and unqualified viewpoint/corrections unsupported |
|
|
21
|
-
| Directional subject/camera motion | `print-detail-motion-backend.test.ts`, `print-region-visibility-backend.test.ts` | Independently predicted finite/continuous exposure on declared trajectories; no single homography across depths or endpoint chord substituted for a PSF |
|
|
22
|
-
| Noise, clipping and processing halos tested separately | `print-region-statistics.test.ts`, `print-region-noise-backend.test.ts`, `print-region-readout-backend.test.ts`, new native-capture test | Same-realization paired differences versus independent-repeat temporal variance; known range overshoot/undershoot; explicit electronic clipping stages; no automatic halo attribution or physical sensor calibration |
|
|
23
|
-
| Post-encode assessment bound to exact representation | `print-detail-jpeg-integration.test.ts`, committed JPEG/decoder manifests and independent references | Actual archived JPEG bytes, independent decoded neutral samples and exact capture/ROI identity; pre-encode does not certify post-encode; no automatic compression-quality verdict |
|
|
24
|
-
| Physical enlargement distinct from resampling; same-scale proof binding | `print-proof-reference.test.ts`, separate pypdf inspection and committed PDF; native-capture enlargement check | Actual PDF operators, original DCT streams, retained crop, physical-unit reference and nominal ruler; actual printer and product proof workflow remain app gates |
|
|
25
|
-
| Contrast/perception only through an evidence-backed model | `print-contrast-reference.test.ts`, 80-digit independent reference, pinned castleCSF revision and exact MIT terms | Declared static D65 Gabor population-model estimate only; measured rectangular ROI is not a matched Gabor; natural-image visibility, individual observer, physical print stimulus and uncertainty remain unassessed |
|
|
26
|
-
| Aliasing, halos, compression and color independently inspectable; no overall score | Public result contracts and unsupported/unknown-state tests | These dimensions are unassessed unless an explicit bounded protocol supplies a numerical quantity; no combined quality uplift, pass/fail or interpolation claim |
|
|
27
|
-
| Identity/version compatibility and independent public usefulness | Source/ROI/hash tests; historical JPEG replay; root-only browser/package/docs/packed consumers | Explicit engine/model/protocol identity; no private scene, device dataset, runtime dependency or changed historical creator identity |
|
|
28
|
-
|
|
29
|
-
## Patterned-source native capture qualification
|
|
30
|
-
|
|
31
|
-
The additional reference extends the existing owned flat-band scene variant; it adds no chart family or target per print size. A declared angular neutral sinusoid has modulation 0.5 and one cycle across the native 4×4 raster. At the stipulated ideal image distance, the two angular periods are `36 × 0.0198` and `24 × 0.0198` in look-ray slope. The source definition consumes engine-generated outgoing rays. It does not calculate a replacement camera projection. All sites use the explicit existing 800×600 µm geometric aperture, 540–560 nm band, equal effective QE 0.4, f/4 transmission 0.85 and 8 ms exposure.
|
|
32
|
-
|
|
33
|
-
An independently authored 80-digit Decimal cosine series predicts every native photo expectation, fundamental modulation and continuous rectangular-aperture response for both axes, phases 0 and 0.37, and 1/2/4/8 midpoint aperture nodes. The midpoint-rule absolute modulation error bound is `0.5 (2 pi apertureWidth / imageExtent)^2 / (24 nodeCount^2)`, declared from the second-derivative bound before evaluating runtime output. Expected photoelectron units reuse the independently derived SI reference from `generate_capture_reference.py`. Neither generator imports the engine or reads observed samples. Tests pin both source artifact hashes and require every expected provider callback.
|
|
34
|
-
|
|
35
|
-
The named `simulateEnvironmentSensorRawFrame()` path executes the complete native raster, including source optics/EQE, actual seeded noise and ADC. The reference first qualifies expected photo transfer, then separately binds and assesses the actual noisy, quantized relative scalar representation. Same-realization pre/post-ADC differences must satisfy half-code rounding bounds. A photo expectation is never relabeled as measured noisy captured-system MTF. Complete scalar artifacts are hashed, and physical enlargement changes print geometry without changing captured measurements.
|
|
36
|
-
|
|
37
|
-
This is conditional modeled neutral signal, not measured cd/m², a photographic observer experiment, CFA color calibration, private renderer qualification or actual hardware evidence. Existing transport/radiometry verification flags remain false. The reference's point-optics domain is explicit. The older finite-pupil pilot's one-frequency convergence limits remain unchanged.
|
|
38
|
-
|
|
39
|
-
The [new evidence record](validation/print-196-engine-acceptance.json) pins these additional artifacts and records local test/package observations separately from scientific approval. The generator was replayed against its pinned SHA-256; normal CI uses the committed reference without requiring Python.
|
|
40
|
-
|
|
41
|
-
## Acceptance decision and remaining gates
|
|
42
|
-
|
|
43
|
-
The requirement audit is review material, not self-issued scientific certification. The existing #217 contribution was approved and merged. The new generator, artifact, tests and this ownership audit must receive substantive human scientific/source review and DCO certification, with green exact-head checks, before engine #196 is accepted. Acceptance must explicitly retain the supported domains above and the complete new-UI obligations; it must not be described as natural-image or device calibration.
|
|
44
|
-
|
|
45
|
-
After engine acceptance, the requested engine release still requires final-main checks, version/distribution availability checks, configured publishing protections and explicit tagging/publication approval. No tag or package is created by this work. Full new-UI release readiness remains blocked until its acquisition, source/target headroom, physical proof, accessibility and device gates have qualified evidence in the app owners. This audit neither defers nor removes them.
|