@photivra/engine 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1074) hide show
  1. package/CHANGELOG.md +401 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"metering-target.js","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metering-target.js","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Meter targets: a frozen metering result that camera-control logic uses as its exposure target.\n *\n * The target copies the meter snapshot by value. Later changes to the scene or light do not change\n * it. This is what the engine provides for AE lock (auto-exposure lock).\n *\n * Exposure compensation is set as an absolute value. It is always worked out again from the base\n * target without compensation, so repeated UI updates cannot build up floating-point or control\n * drift. Positive compensation asks for more exposure.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ExposureMeteringResult\n} from \"./metering.js\";\nimport type {\n SceneRadianceTemporalExposureMeteringResult\n} from \"./metering-temporal.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport const EXPOSURE_METER_TARGET_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport type ExposureMeterTargetSourceResult =\n | ExposureMeteringResult\n | SceneRadianceTemporalExposureMeteringResult;\n\nexport type ExposureMeterTargetSourceKind =\n | \"spatial-metering-result\"\n | \"temporal-metering-result\";\n\nexport interface ExposureMeterSnapshotIdentity {\n sourceKind:\n ExposureMeterTargetSourceKind;\n measurementId: string;\n sceneStateId: string;\n meteringProfileId: string;\n}\n\ninterface ExposureMeterTargetBase {\n schemaVersion:\n typeof EXPOSURE_METER_TARGET_SCHEMA_VERSION;\n targetId: string;\n sourceMeterSnapshot:\n ExposureMeterSnapshotIdentity;\n scientificStatus: \"approximation\";\n inputDomain:\n \"relative-pre-exposure-linear-signal\";\n baseTargetRelativeSignal: number;\n meteredRelativeSignal: number;\n exposureCompensationStops: number;\n exposureCompensationApplied: boolean;\n meterMeasurementMutated: false;\n sourceMeterSnapshotPreserved: true;\n resultReusableForAeLock: true;\n automaticExposureResolved: false;\n intendedConsumer:\n \"exposure-mode-resolver\";\n}\n\nexport type ExposureMeterTarget =\n | (ExposureMeterTargetBase & {\n status: \"resolved\";\n baseRequiredExposureScaleToTarget:\n number;\n baseExposureOffsetStopsToTarget:\n number;\n requiredExposureScaleToTarget:\n number;\n exposureOffsetStopsToTarget:\n number;\n })\n | (ExposureMeterTargetBase & {\n status: \"no-signal\";\n baseRequiredExposureScaleResolved:\n false;\n baseExposureOffsetStopsResolved:\n false;\n requiredExposureScaleResolved:\n false;\n exposureOffsetStopsResolved:\n false;\n });\n\nexport interface CreateExposureMeterTargetInput {\n targetId: string;\n meterResult:\n ExposureMeterTargetSourceResult;\n}\n\nexport interface SetExposureCompensationOnMeterTargetInput {\n targetId: string;\n baseTarget: ExposureMeterTarget;\n exposureCompensationStops: number;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidScientificInputError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n const parsed = requireFinite(\n value,\n path\n );\n if (parsed <= 0) {\n throw new InvalidScientificInputError(\n path + \" must be greater than zero.\"\n );\n }\n return parsed;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n const parsed = requireFinite(\n value,\n path\n );\n if (parsed < 0) {\n throw new InvalidScientificInputError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction meterSnapshotIdentity(\n result:\n ExposureMeterTargetSourceResult\n): ExposureMeterSnapshotIdentity {\n const hasSpatialId =\n \"measurementId\" in result;\n const hasTemporalId =\n \"temporalMeasurementId\" in\n result;\n\n if (\n hasSpatialId === hasTemporalId\n ) {\n throw new InvalidScientificInputError(\n \"meterResult must identify exactly one spatial or temporal metering result.\"\n );\n }\n\n return {\n sourceKind: hasSpatialId\n ? \"spatial-metering-result\"\n : \"temporal-metering-result\",\n measurementId:\n requireNonEmptyString(\n hasSpatialId\n ? result.measurementId\n : result\n .temporalMeasurementId,\n hasSpatialId\n ? \"meterResult.measurementId\"\n : \"meterResult.temporalMeasurementId\"\n ),\n sceneStateId:\n requireNonEmptyString(\n result.sceneStateId,\n \"meterResult.sceneStateId\"\n ),\n meteringProfileId:\n requireNonEmptyString(\n result.profileId,\n \"meterResult.profileId\"\n )\n };\n}\n\nfunction validateCommonMeterResult(\n result:\n ExposureMeterTargetSourceResult\n): void {\n requireInputObject(result, \"result input\");\n if (\n result.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'meterResult.scientificStatus must be \"approximation\" for schema 0.1.0.'\n );\n }\n if (\n result.inputDomain !==\n \"relative-pre-exposure-linear-signal\"\n ) {\n throw new InvalidConfigurationError(\n 'meterResult.inputDomain must be \"relative-pre-exposure-linear-signal\".'\n );\n }\n if (\n result.exposureCompensationApplied !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"meterResult must be the uncompensated base metering result.\"\n );\n }\n if (\n result.automaticExposureResolved !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"meterResult must precede automatic exposure resolution.\"\n );\n }\n if (\n result.resultReusableForAeLock !==\n true\n ) {\n throw new InvalidScientificInputError(\n \"meterResult must preserve reusable meter-result identity.\"\n );\n }\n\n requirePositiveFinite(\n result.targetRelativeSignal,\n \"meterResult.targetRelativeSignal\"\n );\n requireNonNegativeFinite(\n result.meteredRelativeSignal,\n \"meterResult.meteredRelativeSignal\"\n );\n}\n\nfunction createBaseTargetFields(\n targetId: string,\n meterResult:\n ExposureMeterTargetSourceResult\n): ExposureMeterTargetBase {\n validateCommonMeterResult(\n meterResult\n );\n\n return {\n schemaVersion:\n EXPOSURE_METER_TARGET_SCHEMA_VERSION,\n targetId:\n requireNonEmptyString(\n targetId,\n \"targetId\"\n ),\n sourceMeterSnapshot:\n meterSnapshotIdentity(\n meterResult\n ),\n scientificStatus: \"approximation\",\n inputDomain:\n \"relative-pre-exposure-linear-signal\",\n baseTargetRelativeSignal:\n meterResult.targetRelativeSignal,\n meteredRelativeSignal:\n meterResult.meteredRelativeSignal,\n exposureCompensationStops: 0,\n exposureCompensationApplied:\n false,\n meterMeasurementMutated: false,\n sourceMeterSnapshotPreserved:\n true,\n resultReusableForAeLock: true,\n automaticExposureResolved: false,\n intendedConsumer:\n \"exposure-mode-resolver\"\n };\n}\n\n/**\n * Freezes one metering result into a stable relative exposure target, for\n * camera-control logic to use.\n *\n * The target copies the meter snapshot by value. Later changes to the scene or\n * light do not change it. This is what the engine provides for AE lock\n * (auto-exposure lock).\n */\nexport function createExposureMeterTargetFromMeteringResult(\n input:\n CreateExposureMeterTargetInput\n): ExposureMeterTarget {\n requireInputKeys(input, \"createExposureMeterTargetFromMeteringResult\", [\"targetId\", \"meterResult\"]);\n const base =\n createBaseTargetFields(\n input.targetId,\n input.meterResult\n );\n\n if (\n input.meterResult.status ===\n \"no-signal\"\n ) {\n if (\n input.meterResult\n .meteredRelativeSignal !== 0\n ) {\n throw new InvalidScientificInputError(\n \"A no-signal meter result must have meteredRelativeSignal equal to zero.\"\n );\n }\n return {\n ...base,\n status: \"no-signal\",\n baseRequiredExposureScaleResolved:\n false,\n baseExposureOffsetStopsResolved:\n false,\n requiredExposureScaleResolved:\n false,\n exposureOffsetStopsResolved:\n false\n };\n }\n\n const meteredRelativeSignal =\n requirePositiveFinite(\n input.meterResult\n .meteredRelativeSignal,\n \"meterResult.meteredRelativeSignal\"\n );\n const baseScale =\n base.baseTargetRelativeSignal /\n meteredRelativeSignal;\n if (\n !Number.isFinite(baseScale) ||\n baseScale <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Base required exposure scale must remain finite and greater than zero.\"\n );\n }\n const baseStops =\n Math.log2(baseScale);\n if (!Number.isFinite(baseStops)) {\n throw new InvalidScientificInputError(\n \"Base exposure offset must remain finite.\"\n );\n }\n\n return {\n ...base,\n status: \"resolved\",\n baseRequiredExposureScaleToTarget:\n baseScale,\n baseExposureOffsetStopsToTarget:\n baseStops,\n requiredExposureScaleToTarget:\n baseScale,\n exposureOffsetStopsToTarget:\n baseStops\n };\n}\n\nfunction validateBaseTarget(\n target: ExposureMeterTarget\n): void {\n requireInputObject(target, \"target input\");\n if (\n target.schemaVersion !==\n EXPOSURE_METER_TARGET_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'baseTarget.schemaVersion must be \"' +\n EXPOSURE_METER_TARGET_SCHEMA_VERSION +\n '\".'\n );\n }\n requireNonEmptyString(\n target.targetId,\n \"baseTarget.targetId\"\n );\n requireInputObject(target.sourceMeterSnapshot, \"baseTarget.sourceMeterSnapshot\");\n requireNonEmptyString(\n target\n .sourceMeterSnapshot\n .measurementId,\n \"baseTarget.sourceMeterSnapshot.measurementId\"\n );\n requireNonEmptyString(\n target\n .sourceMeterSnapshot\n .sceneStateId,\n \"baseTarget.sourceMeterSnapshot.sceneStateId\"\n );\n requireNonEmptyString(\n target\n .sourceMeterSnapshot\n .meteringProfileId,\n \"baseTarget.sourceMeterSnapshot.meteringProfileId\"\n );\n if (\n target\n .sourceMeterSnapshot\n .sourceKind !==\n \"spatial-metering-result\" &&\n target\n .sourceMeterSnapshot\n .sourceKind !==\n \"temporal-metering-result\"\n ) {\n throw new InvalidConfigurationError(\n \"baseTarget.sourceMeterSnapshot.sourceKind is invalid.\"\n );\n }\n if (\n target.scientificStatus !==\n \"approximation\" ||\n target.inputDomain !==\n \"relative-pre-exposure-linear-signal\" ||\n target.meterMeasurementMutated !==\n false ||\n target.sourceMeterSnapshotPreserved !==\n true ||\n target.resultReusableForAeLock !==\n true ||\n target.automaticExposureResolved !==\n false ||\n target.intendedConsumer !==\n \"exposure-mode-resolver\"\n ) {\n throw new InvalidScientificInputError(\n \"baseTarget does not satisfy the exposure-meter target boundary.\"\n );\n }\n requirePositiveFinite(\n target.baseTargetRelativeSignal,\n \"baseTarget.baseTargetRelativeSignal\"\n );\n requireNonNegativeFinite(\n target.meteredRelativeSignal,\n \"baseTarget.meteredRelativeSignal\"\n );\n\n if (target.status === \"resolved\") {\n requirePositiveFinite(\n target\n .baseRequiredExposureScaleToTarget,\n \"baseTarget.baseRequiredExposureScaleToTarget\"\n );\n requireFinite(\n target\n .baseExposureOffsetStopsToTarget,\n \"baseTarget.baseExposureOffsetStopsToTarget\"\n );\n } else if (\n target.meteredRelativeSignal !== 0\n ) {\n throw new InvalidScientificInputError(\n \"A no-signal baseTarget must preserve zero meteredRelativeSignal.\"\n );\n }\n}\n\n/**\n * Sets an absolute exposure-compensation value on a frozen meter target.\n *\n * Compensation is always worked out again from the base target without\n * compensation, so repeated UI updates cannot build up floating-point or\n * control drift. Positive compensation asks for more exposure.\n */\nexport function setExposureCompensationOnMeterTarget(\n input:\n SetExposureCompensationOnMeterTargetInput\n): ExposureMeterTarget {\n requireInputKeys(input, \"setExposureCompensationOnMeterTarget\", [\"targetId\", \"baseTarget\", \"exposureCompensationStops\"]);\n validateBaseTarget(\n input.baseTarget\n );\n const targetId =\n requireNonEmptyString(\n input.targetId,\n \"targetId\"\n );\n if (\n targetId ===\n input.baseTarget.targetId\n ) {\n throw new InvalidScientificInputError(\n \"A compensated target must use a new targetId so changed control state cannot hide behind the same identity.\"\n );\n }\n\n const compensation =\n requireFinite(\n input.exposureCompensationStops,\n \"exposureCompensationStops\"\n );\n const common = {\n ...input.baseTarget,\n targetId,\n exposureCompensationStops:\n compensation,\n exposureCompensationApplied:\n compensation !== 0,\n meterMeasurementMutated:\n false as const,\n sourceMeterSnapshotPreserved:\n true as const,\n resultReusableForAeLock:\n true as const,\n automaticExposureResolved:\n false as const\n };\n\n if (\n input.baseTarget.status ===\n \"no-signal\"\n ) {\n return {\n ...common,\n status: \"no-signal\",\n baseRequiredExposureScaleResolved:\n false,\n baseExposureOffsetStopsResolved:\n false,\n requiredExposureScaleResolved:\n false,\n exposureOffsetStopsResolved:\n false\n };\n }\n\n const compensatedStops =\n input.baseTarget\n .baseExposureOffsetStopsToTarget +\n compensation;\n const compensatedScale =\n input.baseTarget\n .baseRequiredExposureScaleToTarget *\n Math.pow(2, compensation);\n\n if (\n !Number.isFinite(\n compensatedStops\n ) ||\n !Number.isFinite(\n compensatedScale\n ) ||\n compensatedScale <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Compensated exposure target must remain finite and greater than zero.\"\n );\n }\n\n return {\n ...common,\n status: \"resolved\",\n baseRequiredExposureScaleToTarget:\n input.baseTarget\n .baseRequiredExposureScaleToTarget,\n baseExposureOffsetStopsToTarget:\n input.baseTarget\n .baseExposureOffsetStopsToTarget,\n requiredExposureScaleToTarget:\n compensatedScale,\n exposureOffsetStopsToTarget:\n compensatedStops\n };\n}\n"]}
@@ -1,11 +1,13 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Meters a declared weighted time-average of scene-radiance-derived relative pre-exposure samples.
4
- * Every temporal sample must already be explicitly bound to one #85 temporal illumination profile and
5
- * one capture time in the first-opening-boundary-phase reference. Spatial metering is performed first
6
- * in the same declared profile, then those scalar pre-exposure measurements are combined linearly by
7
- * caller-declared normalized time weights.
8
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
2
+ * Metering over time: a declared weighted time average of relative meter samples taken before the
3
+ * exposure (pre-exposure) and derived from scene radiance. Useful for flickering light.
4
+ *
5
+ * Each time sample must already be bound to one temporal illumination profile and one capture time.
6
+ * Times are measured from the first opening-boundary phase (when the shutter starts to open). Each
7
+ * time sample is metered spatially first, with the same declared profile. The resulting single
8
+ * values are then combined linearly using normalized time weights that the caller declares.
9
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
10
+ * limits.
9
11
  */
10
12
  import { type CalculationResult } from "../core/calculation-result.js";
11
13
  import { type ExposureMeteringPolicy, type ExposureMeteringProfile } from "./metering.js";
@@ -62,15 +64,14 @@ export type SceneRadianceTemporalExposureMeteringResult = (SceneRadianceTemporal
62
64
  exposureOffsetStopsResolved: false;
63
65
  });
64
66
  /**
65
- * Meters a declared weighted time-average of scene-radiance-derived relative
66
- * pre-exposure samples.
67
+ * Meters a declared weighted time average of relative pre-exposure samples
68
+ * derived from scene radiance.
67
69
  *
68
- * Every temporal sample must already be explicitly bound to one #85 temporal
69
- * illumination profile and one capture time in the
70
- * first-opening-boundary-phase reference. Spatial metering is performed first
71
- * in the same declared profile, then those scalar pre-exposure measurements are
72
- * combined linearly by caller-declared normalized time weights.
70
+ * Each time sample must already be bound to one temporal illumination profile
71
+ * and one capture time, measured from the first opening-boundary phase. Each
72
+ * time sample is metered spatially first, with the same declared profile. The
73
+ * resulting single values are then combined linearly using normalized time
74
+ * weights that the caller declares.
73
75
  */
74
76
  export declare function meterSceneRadianceTemporalExposure(input: MeterSceneRadianceTemporalExposureInput): CalculationResult<SceneRadianceTemporalExposureMeteringResult>;
75
77
  export {};
76
- //# sourceMappingURL=metering-temporal.d.ts.map
@@ -1,21 +1,25 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Meters a declared weighted time-average of scene-radiance-derived relative pre-exposure samples.
5
- * Every temporal sample must already be explicitly bound to one #85 temporal illumination profile and
6
- * one capture time in the first-opening-boundary-phase reference. Spatial metering is performed first
7
- * in the same declared profile, then those scalar pre-exposure measurements are combined linearly by
8
- * caller-declared normalized time weights.
9
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
3
+ * Metering over time: a declared weighted time average of relative meter samples taken before the
4
+ * exposure (pre-exposure) and derived from scene radiance. Useful for flickering light.
5
+ *
6
+ * Each time sample must already be bound to one temporal illumination profile and one capture time.
7
+ * Times are measured from the first opening-boundary phase (when the shutter starts to open). Each
8
+ * time sample is metered spatially first, with the same declared profile. The resulting single
9
+ * values are then combined linearly using normalized time weights that the caller declares.
10
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
11
+ * limits.
10
12
  */
11
13
  import { approximationResult } from "../core/calculation-result.js";
12
14
  import { InvalidScientificInputError } from "../core/validation.js";
13
15
  import { meterRelativeExposure, parseExposureMeteringProfile } from "./metering.js";
16
+ import { requireInputKeys, requireInputObject } from "../core/record-validation.js";
17
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
14
18
  const NORMALIZED_WEIGHT_TOLERANCE = 1e-9;
15
19
  function requireNonEmptyString(value, path) {
16
20
  if (typeof value !== "string" ||
17
21
  value.trim().length === 0) {
18
- throw new InvalidScientificInputError(path + " must be a non-empty string.");
22
+ throw new InvalidConfigurationError(path + " must be a non-empty string.");
19
23
  }
20
24
  return value.trim();
21
25
  }
@@ -49,30 +53,48 @@ function contextKey(sampleSet) {
49
53
  });
50
54
  }
51
55
  /**
52
- * Meters a declared weighted time-average of scene-radiance-derived relative
53
- * pre-exposure samples.
56
+ * Meters a declared weighted time average of relative pre-exposure samples
57
+ * derived from scene radiance.
54
58
  *
55
- * Every temporal sample must already be explicitly bound to one #85 temporal
56
- * illumination profile and one capture time in the
57
- * first-opening-boundary-phase reference. Spatial metering is performed first
58
- * in the same declared profile, then those scalar pre-exposure measurements are
59
- * combined linearly by caller-declared normalized time weights.
59
+ * Each time sample must already be bound to one temporal illumination profile
60
+ * and one capture time, measured from the first opening-boundary phase. Each
61
+ * time sample is metered spatially first, with the same declared profile. The
62
+ * resulting single values are then combined linearly using normalized time
63
+ * weights that the caller declares.
60
64
  */
61
65
  export function meterSceneRadianceTemporalExposure(input) {
66
+ requireInputKeys(input, "meterSceneRadianceTemporalExposure", ["temporalMeasurementId", "profile", "policy", "temporalSamples"]);
62
67
  const temporalMeasurementId = requireNonEmptyString(input.temporalMeasurementId, "temporalMeasurementId");
63
68
  const profile = parseExposureMeteringProfile(input.profile);
69
+ if (profile.policy.kind ===
70
+ "highlight-priority") {
71
+ // A time average of per-snapshot quantiles is not the quantile of the time-averaged signal.
72
+ throw new InvalidScientificInputError("highlight-priority is a spatial quantile, not a linear signal mean; temporal averaging of snapshot quantiles is not defined by this model.");
73
+ }
74
+ requireInputObject(input.policy, "policy");
64
75
  if (input.policy.kind !==
65
76
  "weighted-time-average") {
66
- throw new InvalidScientificInputError('policy.kind must be "weighted-time-average".');
77
+ throw new InvalidConfigurationError('policy.kind must be "weighted-time-average".');
67
78
  }
68
79
  if (input.policy.timeReference !==
69
80
  "first-opening-boundary-phase") {
70
- throw new InvalidScientificInputError('policy.timeReference must be "first-opening-boundary-phase".');
81
+ throw new InvalidConfigurationError('policy.timeReference must be "first-opening-boundary-phase".');
71
82
  }
72
83
  if (!Array.isArray(input.temporalSamples) ||
73
84
  input.temporalSamples.length === 0) {
74
- throw new InvalidScientificInputError("temporalSamples must be a non-empty array.");
85
+ throw new InvalidConfigurationError("temporalSamples must be a non-empty array.");
75
86
  }
87
+ input.temporalSamples.forEach((entry, index) => {
88
+ const path = "temporalSamples[" + index + "]";
89
+ requireInputObject(entry, path);
90
+ const sampleSet = entry.sampleSet;
91
+ requireInputObject(sampleSet, path + ".sampleSet");
92
+ requireInputObject(sampleSet.sourceContext, path + ".sampleSet.sourceContext");
93
+ requireInputObject(sampleSet.sourceContext.temporal, path + ".sampleSet.sourceContext.temporal");
94
+ requireInputObject(sampleSet.captureGeometry, path + ".sampleSet.captureGeometry");
95
+ requireInputObject(sampleSet.captureGeometry.orientedCapture, path + ".sampleSet.captureGeometry.orientedCapture");
96
+ requireInputObject(sampleSet.captureGeometry.activeCapture, path + ".sampleSet.captureGeometry.activeCapture");
97
+ });
76
98
  const firstSampleSet = input.temporalSamples[0]
77
99
  .sampleSet;
78
100
  const firstContext = firstSampleSet.sourceContext;
@@ -198,7 +220,7 @@ export function meterSceneRadianceTemporalExposure(input) {
198
220
  meteredRelativeSignal)
199
221
  };
200
222
  return approximationResult(result, "scene-radiance-relative-temporal-metering", "1.0.0", [
201
- "Each temporal sample is a renderer/provider-supplied relative pre-exposure reduction bound to the same #85 scene-radiance context.",
223
+ "Each temporal sample is a renderer/provider-supplied relative pre-exposure reduction bound to the same scene-radiance provider context.",
202
224
  "Spectral radiance is not converted to calibrated luminance or a camera spectral-meter response by this model.",
203
225
  "Time averaging is explicit and linear in the declared relative pre-exposure signal domain.",
204
226
  "Temporal sample weights are caller-declared, positive, normalized to one, and are not inferred from source waveform frequency or sensor readout timing.",
@@ -1 +1 @@
1
- {"version":3,"file":"metering-temporal.js","sourceRoot":"","sources":["../../src/exposure/metering-temporal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metering-temporal.js","sourceRoot":"","sources":["../../src/exposure/metering-temporal.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Metering over time: a declared weighted time average of relative meter samples taken before the\n * exposure (pre-exposure) and derived from scene radiance. Useful for flickering light.\n *\n * Each time sample must already be bound to one temporal illumination profile and one capture time.\n * Times are measured from the first opening-boundary phase (when the shutter starts to open). Each\n * time sample is metered spatially first, with the same declared profile. The resulting single\n * values are then combined linearly using normalized time weights that the caller declares.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n meterRelativeExposure,\n parseExposureMeteringProfile,\n type ExposureMeteringPolicy,\n type ExposureMeteringProfile\n} from \"./metering.js\";\nimport type {\n SceneRadianceDerivedExposureMeteringSampleSet\n} from \"./metering-scene-radiance.js\";\nimport { requireInputKeys, requireInputObject } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nconst NORMALIZED_WEIGHT_TOLERANCE =\n 1e-9;\n\nexport interface SceneRadianceTemporalMeteringSample {\n normalizedTimeWeight: number;\n sampleSet:\n SceneRadianceDerivedExposureMeteringSampleSet;\n}\n\nexport interface MeterSceneRadianceTemporalExposureInput {\n temporalMeasurementId: string;\n profile: ExposureMeteringProfile;\n policy: {\n kind: \"weighted-time-average\";\n timeReference:\n \"first-opening-boundary-phase\";\n };\n temporalSamples:\n readonly SceneRadianceTemporalMeteringSample[];\n}\n\ninterface SceneRadianceTemporalExposureMeteringResultBase {\n temporalMeasurementId: string;\n sceneStateId: string;\n profileId: string;\n scientificStatus: \"approximation\";\n inputDomain:\n \"relative-pre-exposure-linear-signal\";\n captureRegion:\n \"oriented-active-capture\";\n spatialPolicyKind:\n ExposureMeteringPolicy[\"kind\"];\n temporalPolicyKind:\n \"weighted-time-average\";\n timeReference:\n \"first-opening-boundary-phase\";\n temporalSampleCount: number;\n normalizedTimeWeightSum: number;\n captureTimeRangeSecondsFromReference: {\n minimum: number;\n maximum: number;\n };\n targetRelativeSignal: number;\n meteredRelativeSignal: number;\n outputCropUsedForMetering: false;\n exposureCompensationApplied: false;\n finalToneMappingUsed: false;\n displayGammaUsed: false;\n calibratedLuminanceClaimAuthorized:\n false;\n calibratedSceneRadianceClaimAuthorized:\n false;\n automaticExposureResolved: false;\n resultReusableForAeLock: true;\n temporalAveragingExplicit: true;\n flashTtlMeteringPerformed: false;\n}\n\nexport type SceneRadianceTemporalExposureMeteringResult =\n | (SceneRadianceTemporalExposureMeteringResultBase & {\n status: \"resolved\";\n requiredExposureScaleToTarget:\n number;\n exposureOffsetStopsToTarget:\n number;\n })\n | (SceneRadianceTemporalExposureMeteringResultBase & {\n status: \"no-signal\";\n requiredExposureScaleResolved:\n false;\n exposureOffsetStopsResolved:\n false;\n });\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireNormalizedWeight(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0 ||\n value > 1\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be finite and in (0, 1].\"\n );\n }\n return value;\n}\n\nfunction contextKey(\n sampleSet:\n SceneRadianceDerivedExposureMeteringSampleSet\n): string {\n const context =\n sampleSet.sourceContext;\n const geometry =\n sampleSet.captureGeometry;\n return JSON.stringify({\n sceneId: context.sceneId,\n sceneStateId:\n context.sceneStateId,\n providerProfileId:\n context.providerProfileId,\n illuminationProfileId:\n context.illuminationProfileId,\n materialResponseProfileId:\n context.materialResponseProfileId,\n derivationProfileId:\n context.derivationProfileId,\n materialResponseFidelity:\n context.materialResponseFidelity,\n orientation:\n geometry.orientedCapture\n .orientation,\n activeNativeRect:\n geometry.activeCapture.nativeRect,\n activeImagingArea:\n geometry.activeCapture.imagingArea,\n orientedImagingArea:\n geometry.orientedCapture\n .imagingArea\n });\n}\n\n/**\n * Meters a declared weighted time average of relative pre-exposure samples\n * derived from scene radiance.\n *\n * Each time sample must already be bound to one temporal illumination profile\n * and one capture time, measured from the first opening-boundary phase. Each\n * time sample is metered spatially first, with the same declared profile. The\n * resulting single values are then combined linearly using normalized time\n * weights that the caller declares.\n */\nexport function meterSceneRadianceTemporalExposure(\n input:\n MeterSceneRadianceTemporalExposureInput\n): CalculationResult<\n SceneRadianceTemporalExposureMeteringResult\n> {\n requireInputKeys(input, \"meterSceneRadianceTemporalExposure\", [\"temporalMeasurementId\", \"profile\", \"policy\", \"temporalSamples\"]);\n const temporalMeasurementId =\n requireNonEmptyString(\n input.temporalMeasurementId,\n \"temporalMeasurementId\"\n );\n\n const profile =\n parseExposureMeteringProfile(\n input.profile\n );\n\n if (\n profile.policy.kind ===\n \"highlight-priority\"\n ) {\n // A time average of per-snapshot quantiles is not the quantile of the time-averaged signal.\n throw new InvalidScientificInputError(\n \"highlight-priority is a spatial quantile, not a linear signal mean; temporal averaging of snapshot quantiles is not defined by this model.\"\n );\n }\n requireInputObject(input.policy, \"policy\");\n if (\n input.policy.kind !==\n \"weighted-time-average\"\n ) {\n throw new InvalidConfigurationError(\n 'policy.kind must be \"weighted-time-average\".'\n );\n }\n if (\n input.policy.timeReference !==\n \"first-opening-boundary-phase\"\n ) {\n throw new InvalidConfigurationError(\n 'policy.timeReference must be \"first-opening-boundary-phase\".'\n );\n }\n if (\n !Array.isArray(\n input.temporalSamples\n ) ||\n input.temporalSamples.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"temporalSamples must be a non-empty array.\"\n );\n }\n\n input.temporalSamples.forEach((entry, index) => {\n const path = \"temporalSamples[\" + index + \"]\";\n requireInputObject(entry, path);\n const sampleSet = entry.sampleSet;\n requireInputObject(sampleSet, path + \".sampleSet\");\n requireInputObject(sampleSet.sourceContext, path + \".sampleSet.sourceContext\");\n requireInputObject(sampleSet.sourceContext.temporal, path + \".sampleSet.sourceContext.temporal\");\n requireInputObject(sampleSet.captureGeometry, path + \".sampleSet.captureGeometry\");\n requireInputObject(sampleSet.captureGeometry.orientedCapture, path + \".sampleSet.captureGeometry.orientedCapture\");\n requireInputObject(sampleSet.captureGeometry.activeCapture, path + \".sampleSet.captureGeometry.activeCapture\");\n });\n const firstSampleSet =\n input.temporalSamples[0]!\n .sampleSet;\n const firstContext =\n firstSampleSet.sourceContext;\n if (\n firstContext.temporal.kind !==\n \"registered-time-varying\"\n ) {\n throw new InvalidScientificInputError(\n \"Temporal metering requires scene-radiance sample sets with registered-time-varying source context.\"\n );\n }\n\n const expectedContextKey =\n contextKey(firstSampleSet);\n const sceneStateId =\n firstSampleSet.sceneStateId;\n const temporalProfileId =\n firstContext.temporal\n .illuminationTemporalProfileId;\n\n let weightSum = 0;\n let meteredRelativeSignal = 0;\n let previousTime =\n Number.NEGATIVE_INFINITY;\n let minimumTime =\n Number.POSITIVE_INFINITY;\n let maximumTime =\n Number.NEGATIVE_INFINITY;\n\n for (\n let index = 0;\n index <\n input.temporalSamples.length;\n index += 1\n ) {\n const entry =\n input.temporalSamples[index]!;\n const path =\n \"temporalSamples[\" +\n index +\n \"]\";\n const weight =\n requireNormalizedWeight(\n entry.normalizedTimeWeight,\n path +\n \".normalizedTimeWeight\"\n );\n const sampleSet =\n entry.sampleSet;\n const context =\n sampleSet.sourceContext;\n\n if (\n context.temporal.kind !==\n \"registered-time-varying\"\n ) {\n throw new InvalidScientificInputError(\n path +\n \".sampleSet must use registered-time-varying source context.\"\n );\n }\n if (\n context.temporal\n .illuminationTemporalProfileId !==\n temporalProfileId\n ) {\n throw new InvalidScientificInputError(\n \"All temporal metering samples must bind the same illuminationTemporalProfileId.\"\n );\n }\n if (\n sampleSet.sceneStateId !==\n sceneStateId ||\n context.sceneStateId !==\n sceneStateId\n ) {\n throw new InvalidScientificInputError(\n \"All temporal metering samples must bind the same sceneStateId.\"\n );\n }\n if (\n contextKey(sampleSet) !==\n expectedContextKey\n ) {\n throw new InvalidScientificInputError(\n \"All temporal metering samples must share the same scene/provider/material/derivation/capture-geometry context.\"\n );\n }\n\n const captureTime =\n context.temporal\n .captureTimeSecondsFromReference;\n if (\n !Number.isFinite(captureTime)\n ) {\n throw new InvalidScientificInputError(\n path +\n \" capture time must be finite.\"\n );\n }\n if (\n captureTime <= previousTime\n ) {\n throw new InvalidScientificInputError(\n \"Temporal metering capture times must be strictly increasing.\"\n );\n }\n previousTime = captureTime;\n minimumTime = Math.min(\n minimumTime,\n captureTime\n );\n maximumTime = Math.max(\n maximumTime,\n captureTime\n );\n\n const spatialMeter =\n meterRelativeExposure({\n profile,\n sampleSet\n });\n meteredRelativeSignal +=\n spatialMeter.value\n .meteredRelativeSignal *\n weight;\n weightSum += weight;\n }\n\n if (\n !Number.isFinite(weightSum) ||\n Math.abs(weightSum - 1) >\n NORMALIZED_WEIGHT_TOLERANCE\n ) {\n throw new InvalidScientificInputError(\n \"temporalSamples normalizedTimeWeight values must sum to 1.\"\n );\n }\n if (\n !Number.isFinite(\n meteredRelativeSignal\n ) ||\n meteredRelativeSignal < 0\n ) {\n throw new InvalidScientificInputError(\n \"Temporal metered relative signal must remain finite and non-negative.\"\n );\n }\n\n const base = {\n temporalMeasurementId,\n sceneStateId,\n profileId:\n profile.profileId,\n scientificStatus:\n \"approximation\" as const,\n inputDomain:\n \"relative-pre-exposure-linear-signal\" as const,\n captureRegion:\n \"oriented-active-capture\" as const,\n spatialPolicyKind:\n profile.policy.kind,\n temporalPolicyKind:\n \"weighted-time-average\" as const,\n timeReference:\n \"first-opening-boundary-phase\" as const,\n temporalSampleCount:\n input.temporalSamples.length,\n normalizedTimeWeightSum: 1,\n captureTimeRangeSecondsFromReference: {\n minimum: minimumTime,\n maximum: maximumTime\n },\n targetRelativeSignal:\n profile.target\n .targetRelativeSignal,\n meteredRelativeSignal,\n outputCropUsedForMetering:\n false as const,\n exposureCompensationApplied:\n false as const,\n finalToneMappingUsed:\n false as const,\n displayGammaUsed:\n false as const,\n calibratedLuminanceClaimAuthorized:\n false as const,\n calibratedSceneRadianceClaimAuthorized:\n false as const,\n automaticExposureResolved:\n false as const,\n resultReusableForAeLock:\n true as const,\n temporalAveragingExplicit:\n true as const,\n flashTtlMeteringPerformed:\n false as const\n };\n\n const result:\n SceneRadianceTemporalExposureMeteringResult =\n meteredRelativeSignal === 0\n ? {\n ...base,\n status: \"no-signal\",\n requiredExposureScaleResolved:\n false,\n exposureOffsetStopsResolved:\n false\n }\n : {\n ...base,\n status: \"resolved\",\n requiredExposureScaleToTarget:\n profile.target\n .targetRelativeSignal /\n meteredRelativeSignal,\n exposureOffsetStopsToTarget:\n Math.log2(\n profile.target\n .targetRelativeSignal /\n meteredRelativeSignal\n )\n };\n\n return approximationResult(\n result,\n \"scene-radiance-relative-temporal-metering\",\n \"1.0.0\",\n [\n \"Each temporal sample is a renderer/provider-supplied relative pre-exposure reduction bound to the same scene-radiance provider context.\",\n \"Spectral radiance is not converted to calibrated luminance or a camera spectral-meter response by this model.\",\n \"Time averaging is explicit and linear in the declared relative pre-exposure signal domain.\",\n \"Temporal sample weights are caller-declared, positive, normalized to one, and are not inferred from source waveform frequency or sensor readout timing.\",\n \"All temporal samples share one committed sceneStateId and one provider/material/derivation/capture-geometry context.\",\n \"Exposure compensation and automatic aperture/shutter/ISO resolution remain downstream.\",\n \"This ambient meter does not implement flash/TTL metering.\"\n ]\n );\n}\n"]}
@@ -1,12 +1,15 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Parses one generic relative exposure-metering profile. Schema 0.1.0 is approximation-only and
4
- * consumes relative pre-exposure linear signal. It deliberately does not claim luminance, spectral
5
- * radiance, sensor-plane irradiance, or a specific manufacturer's meter calibration.
6
- * Meters relative pre-exposure linear signal over the actual oriented active capture frame. The first
7
- * contract is an educational/relative approximation. It is intentionally independent of final output
8
- * crop, display/tone mapping, exposure compensation, and automatic exposure setting resolution.
9
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
2
+ * Generic relative exposure metering.
3
+ *
4
+ * The profile parser reads one metering profile. Schema 0.1.0 is an approximation only. It works on
5
+ * relative linear signal measured before the exposure (pre-exposure). It deliberately does not claim
6
+ * luminance, spectral radiance, sensor-plane irradiance or any manufacturer's meter calibration.
7
+ *
8
+ * The meter works over the actual active capture frame, in its capture orientation. This first
9
+ * contract is an educational, relative approximation. It deliberately ignores the final output crop,
10
+ * display and tone mapping, exposure compensation and the choice of automatic exposure settings.
11
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
12
+ * limits.
10
13
  */
11
14
  import { type CalculationResult } from "../core/calculation-result.js";
12
15
  import { type EvidenceProvenance } from "../core/evidence-provenance.js";
@@ -23,10 +26,47 @@ export type ExposureMeteringPolicy = {
23
26
  centerOrientedCaptureUv: NormalizedRasterUv;
24
27
  radiusFractionOfCaptureDiagonal: number;
25
28
  } | {
29
+ /**
30
+ * Weighted average that emphasises highlights (unchanged since 1.x).
31
+ * Brighter samples get the weight `minimumWeightFraction + (1 -
32
+ * minimumWeightFraction) * (signal / maximum)^exponent`. The weighted mean
33
+ * is then placed at the profile target.
34
+ *
35
+ * This is NOT highlight protection. No sample is placed relative to
36
+ * saturation. In a mostly mid-grey scene with a small bright area, it
37
+ * underexposes the mid-tones compared with uniform metering, yet does not
38
+ * guarantee headroom. Use `highlight-priority` to keep highlights below
39
+ * saturation.
40
+ */
26
41
  kind: "highlight-weighted";
27
42
  minimumWeightFraction: number;
28
43
  exponent: number;
44
+ } | {
45
+ /**
46
+ * Highlight-priority placement. The area-weighted `highlightPercentile`
47
+ * quantile of the relative pre-exposure signal is placed `headroomStops`
48
+ * below `saturationRelativeSignal`. The profile target must state that
49
+ * placement exactly: `targetRelativeSignal = saturationRelativeSignal *
50
+ * 2^-headroomStops` (see {@link calculateHighlightPriorityPlacementSignal}).
51
+ */
52
+ kind: "highlight-priority";
53
+ /** Area-weighted quantile in (0, 1]; 1 places the brightest sample. */
54
+ highlightPercentile: number;
55
+ /** Relative pre-exposure signal at which the declared output saturates. */
56
+ saturationRelativeSignal: number;
57
+ /** Non-negative headroom in stops between the placed highlight and saturation. */
58
+ headroomStops: number;
29
59
  };
60
+ /** Diagnostics reported only for the highlight-priority policy. */
61
+ export interface HighlightPriorityMeteringDiagnostics {
62
+ highlightPercentile: number;
63
+ /** Lower area-weighted quantile (inverse empirical CDF) of the samples. */
64
+ percentileRelativeSignal: number;
65
+ saturationRelativeSignal: number;
66
+ headroomStops: number;
67
+ placementRelativeSignal: number;
68
+ quantileDefinition: "area-weighted-lower-quantile-inverse-empirical-cdf";
69
+ }
30
70
  export interface ExposureMeteringProfile {
31
71
  schemaVersion: typeof EXPOSURE_METERING_PROFILE_SCHEMA_VERSION;
32
72
  profileId: string;
@@ -89,6 +129,8 @@ interface ExposureMeteringResultBase {
89
129
  calibratedSceneRadianceClaimAuthorized: false;
90
130
  automaticExposureResolved: false;
91
131
  resultReusableForAeLock: true;
132
+ /** Present only for the highlight-priority policy. */
133
+ highlightPriority?: HighlightPriorityMeteringDiagnostics;
92
134
  }
93
135
  export type ExposureMeteringResult = (ExposureMeteringResultBase & {
94
136
  status: "resolved";
@@ -103,22 +145,27 @@ export interface MeterRelativeExposureInput {
103
145
  profile: ExposureMeteringProfile;
104
146
  sampleSet: ExposureMeteringSampleSet;
105
147
  }
148
+ /**
149
+ * Relative signal at which a highlight-priority profile places its highlight
150
+ * percentile: `saturationRelativeSignal * 2^-headroomStops`.
151
+ */
152
+ export declare function calculateHighlightPriorityPlacementSignal(saturationRelativeSignal: number, headroomStops: number): number;
106
153
  /**
107
154
  * Parses one generic relative exposure-metering profile.
108
155
  *
109
- * Schema 0.1.0 is approximation-only and consumes relative pre-exposure
110
- * linear signal. It deliberately does not claim luminance, spectral radiance,
111
- * sensor-plane irradiance, or a specific manufacturer's meter calibration.
156
+ * Schema 0.1.0 is an approximation only. It works on relative linear signal
157
+ * measured before the exposure. It deliberately does not claim luminance,
158
+ * spectral radiance, sensor-plane irradiance or any manufacturer's meter
159
+ * calibration.
112
160
  */
113
161
  export declare function parseExposureMeteringProfile(value: unknown): ExposureMeteringProfile;
114
162
  /**
115
- * Meters relative pre-exposure linear signal over the actual oriented active
116
- * capture frame.
163
+ * Meters relative pre-exposure linear signal over the actual active capture
164
+ * frame, in its capture orientation.
117
165
  *
118
- * The first contract is an educational/relative approximation. It is
119
- * intentionally independent of final output crop, display/tone mapping,
120
- * exposure compensation, and automatic exposure setting resolution.
166
+ * This first contract is an educational, relative approximation. It
167
+ * deliberately ignores the final output crop, display and tone mapping,
168
+ * exposure compensation and the choice of automatic exposure settings.
121
169
  */
122
170
  export declare function meterRelativeExposure(input: MeterRelativeExposureInput): CalculationResult<ExposureMeteringResult>;
123
171
  export {};
124
- //# sourceMappingURL=metering.d.ts.map