@photivra/engine 1.5.0 → 2.1.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 (1085) hide show
  1. package/CHANGELOG.md +414 -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 +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  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 +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  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/diffraction-provider.d.ts +30 -0
  236. package/dist/facade/diffraction-provider.js +127 -0
  237. package/dist/facade/diffraction-provider.js.map +1 -0
  238. package/dist/facade/host-yield.d.ts +7 -0
  239. package/dist/facade/host-yield.js +19 -0
  240. package/dist/facade/host-yield.js.map +1 -0
  241. package/dist/facade/scene-radiance.d.ts +117 -0
  242. package/dist/facade/scene-radiance.js +205 -0
  243. package/dist/facade/scene-radiance.js.map +1 -0
  244. package/dist/facade/simulate-capture.d.ts +363 -0
  245. package/dist/facade/simulate-capture.js +1281 -0
  246. package/dist/facade/simulate-capture.js.map +1 -0
  247. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  248. package/dist/gpu/chart-radiance-gpu.js +176 -0
  249. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  250. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  251. package/dist/gpu/image-kernel-accelerator.js +720 -0
  252. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  253. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  254. package/dist/gpu/image-kernel-execution.js +84 -0
  255. package/dist/gpu/image-kernel-execution.js.map +1 -0
  256. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  257. package/dist/gpu/sensor-stage-gpu.js +317 -0
  258. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  259. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  260. package/dist/gpu/temporal-sum-gpu.js +150 -0
  261. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  262. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  263. package/dist/gpu/webgpu-runtime.js +215 -0
  264. package/dist/gpu/webgpu-runtime.js.map +1 -0
  265. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  266. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  267. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  268. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  269. package/dist/gpu/wgsl-kernels.js +365 -0
  270. package/dist/gpu/wgsl-kernels.js.map +1 -0
  271. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  272. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  273. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  274. package/dist/index.d.ts +91 -25
  275. package/dist/index.js +60 -15
  276. package/dist/index.js.map +1 -1
  277. package/dist/motion/camera-rotation.d.ts +92 -40
  278. package/dist/motion/camera-rotation.js +84 -47
  279. package/dist/motion/camera-rotation.js.map +1 -1
  280. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  281. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  282. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  283. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  284. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  285. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  286. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  287. package/dist/motion/capture-rotation-trajectory.js +36 -26
  288. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  289. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  290. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  291. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  292. package/dist/motion/extended-object-projection.d.ts +19 -16
  293. package/dist/motion/extended-object-projection.js +38 -18
  294. package/dist/motion/extended-object-projection.js.map +1 -1
  295. package/dist/motion/projected-motion.d.ts +18 -17
  296. package/dist/motion/projected-motion.js +25 -17
  297. package/dist/motion/projected-motion.js.map +1 -1
  298. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  299. package/dist/motion/temporal-exposure-sum.js +141 -0
  300. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  301. package/dist/motion/video-sequence.d.ts +111 -0
  302. package/dist/motion/video-sequence.js +179 -0
  303. package/dist/motion/video-sequence.js.map +1 -0
  304. package/dist/optics/aperture.d.ts +14 -15
  305. package/dist/optics/aperture.js +13 -11
  306. package/dist/optics/aperture.js.map +1 -1
  307. package/dist/optics/atmospheric-haze.d.ts +83 -0
  308. package/dist/optics/atmospheric-haze.js +113 -0
  309. package/dist/optics/atmospheric-haze.js.map +1 -0
  310. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  311. package/dist/optics/brown-conrady-distortion.js +291 -0
  312. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  313. package/dist/optics/circle-of-confusion.d.ts +10 -10
  314. package/dist/optics/circle-of-confusion.js +15 -11
  315. package/dist/optics/circle-of-confusion.js.map +1 -1
  316. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  317. package/dist/optics/complex-pupil-psf.js +190 -98
  318. package/dist/optics/complex-pupil-psf.js.map +1 -1
  319. package/dist/optics/depth-of-field.d.ts +25 -15
  320. package/dist/optics/depth-of-field.js +67 -27
  321. package/dist/optics/depth-of-field.js.map +1 -1
  322. package/dist/optics/diffraction-psf-profile.d.ts +118 -0
  323. package/dist/optics/diffraction-psf-profile.js +252 -0
  324. package/dist/optics/diffraction-psf-profile.js.map +1 -0
  325. package/dist/optics/diffraction.d.ts +14 -13
  326. package/dist/optics/diffraction.js +14 -10
  327. package/dist/optics/diffraction.js.map +1 -1
  328. package/dist/optics/focus-breathing.d.ts +88 -27
  329. package/dist/optics/focus-breathing.js +114 -23
  330. package/dist/optics/focus-breathing.js.map +1 -1
  331. package/dist/optics/focus-state.d.ts +18 -18
  332. package/dist/optics/focus-state.js +21 -15
  333. package/dist/optics/focus-state.js.map +1 -1
  334. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  335. package/dist/optics/front-of-lens-filter.js +259 -88
  336. package/dist/optics/front-of-lens-filter.js.map +1 -1
  337. package/dist/optics/illumination-vignetting.d.ts +16 -17
  338. package/dist/optics/illumination-vignetting.js +40 -17
  339. package/dist/optics/illumination-vignetting.js.map +1 -1
  340. package/dist/optics/irradiance-convolution.d.ts +59 -0
  341. package/dist/optics/irradiance-convolution.js +138 -0
  342. package/dist/optics/irradiance-convolution.js.map +1 -0
  343. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  344. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  345. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  346. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  347. package/dist/optics/lens-psf-kernels.js +175 -0
  348. package/dist/optics/lens-psf-kernels.js.map +1 -0
  349. package/dist/optics/lens-psf-profile.d.ts +78 -46
  350. package/dist/optics/lens-psf-profile.js +335 -124
  351. package/dist/optics/lens-psf-profile.js.map +1 -1
  352. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  353. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  354. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  355. package/dist/optics/polygon-diffraction.d.ts +80 -23
  356. package/dist/optics/polygon-diffraction.js +130 -25
  357. package/dist/optics/polygon-diffraction.js.map +1 -1
  358. package/dist/optics/profile-contract.d.ts +5 -6
  359. package/dist/optics/profile-contract.js +14 -11
  360. package/dist/optics/profile-contract.js.map +1 -1
  361. package/dist/optics/psf-foundation.d.ts +23 -23
  362. package/dist/optics/psf-foundation.js +24 -21
  363. package/dist/optics/psf-foundation.js.map +1 -1
  364. package/dist/optics/pupil-vignetting.d.ts +118 -0
  365. package/dist/optics/pupil-vignetting.js +264 -0
  366. package/dist/optics/pupil-vignetting.js.map +1 -0
  367. package/dist/optics/radial-distortion.d.ts +34 -33
  368. package/dist/optics/radial-distortion.js +37 -30
  369. package/dist/optics/radial-distortion.js.map +1 -1
  370. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  371. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  372. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  373. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  374. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  375. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  376. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  377. package/dist/optics/sensor-aperture-rays.js +32 -14
  378. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  379. package/dist/optics/sensor-environment-query.d.ts +81 -16
  380. package/dist/optics/sensor-environment-query.js +145 -12
  381. package/dist/optics/sensor-environment-query.js.map +1 -1
  382. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  383. package/dist/optics/sensor-psf-quadrature.js +18 -11
  384. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  385. package/dist/optics/sensor-psf-support.d.ts +8 -6
  386. package/dist/optics/sensor-psf-support.js +8 -5
  387. package/dist/optics/sensor-psf-support.js.map +1 -1
  388. package/dist/optics/stray-light.d.ts +22 -19
  389. package/dist/optics/stray-light.js +18 -12
  390. package/dist/optics/stray-light.js.map +1 -1
  391. package/dist/optics/thin-lens.d.ts +10 -9
  392. package/dist/optics/thin-lens.js +12 -8
  393. package/dist/optics/thin-lens.js.map +1 -1
  394. package/dist/optics/zernike-wavefront.d.ts +154 -0
  395. package/dist/optics/zernike-wavefront.js +352 -0
  396. package/dist/optics/zernike-wavefront.js.map +1 -0
  397. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  398. package/dist/output/capture-corrected-sdr.js +16 -8
  399. package/dist/output/capture-corrected-sdr.js.map +1 -1
  400. package/dist/output/capture-geometry.d.ts +34 -36
  401. package/dist/output/capture-geometry.js +52 -32
  402. package/dist/output/capture-geometry.js.map +1 -1
  403. package/dist/output/capture-sdr.d.ts +7 -6
  404. package/dist/output/capture-sdr.js +11 -8
  405. package/dist/output/capture-sdr.js.map +1 -1
  406. package/dist/output/crop.d.ts +22 -6
  407. package/dist/output/crop.js +40 -6
  408. package/dist/output/crop.js.map +1 -1
  409. package/dist/output/geometric-transforms.d.ts +60 -23
  410. package/dist/output/geometric-transforms.js +111 -24
  411. package/dist/output/geometric-transforms.js.map +1 -1
  412. package/dist/output/lens-corrections.d.ts +27 -19
  413. package/dist/output/lens-corrections.js +29 -13
  414. package/dist/output/lens-corrections.js.map +1 -1
  415. package/dist/output/native-capture-sdr.d.ts +71 -16
  416. package/dist/output/native-capture-sdr.js +190 -33
  417. package/dist/output/native-capture-sdr.js.map +1 -1
  418. package/dist/output/png-encoder.d.ts +65 -0
  419. package/dist/output/png-encoder.js +461 -0
  420. package/dist/output/png-encoder.js.map +1 -0
  421. package/dist/output/print-contrast-reference.d.ts +10 -9
  422. package/dist/output/print-contrast-reference.js +10 -8
  423. package/dist/output/print-contrast-reference.js.map +1 -1
  424. package/dist/output/print-detail.d.ts +18 -17
  425. package/dist/output/print-detail.js +12 -10
  426. package/dist/output/print-detail.js.map +1 -1
  427. package/dist/output/print-jpeg.d.ts +26 -5
  428. package/dist/output/print-jpeg.js +117 -50
  429. package/dist/output/print-jpeg.js.map +1 -1
  430. package/dist/output/print-plan.d.ts +19 -19
  431. package/dist/output/print-plan.js +11 -10
  432. package/dist/output/print-plan.js.map +1 -1
  433. package/dist/output/print-region-statistics.d.ts +14 -15
  434. package/dist/output/print-region-statistics.js +11 -11
  435. package/dist/output/print-region-statistics.js.map +1 -1
  436. package/dist/output/sdr-rendering.d.ts +48 -10
  437. package/dist/output/sdr-rendering.js +114 -25
  438. package/dist/output/sdr-rendering.js.map +1 -1
  439. package/dist/output/subject-framing-crop.d.ts +6 -10
  440. package/dist/output/subject-framing-crop.js +23 -13
  441. package/dist/output/subject-framing-crop.js.map +1 -1
  442. package/dist/processing/demosaic.d.ts +90 -0
  443. package/dist/processing/demosaic.js +275 -0
  444. package/dist/processing/demosaic.js.map +1 -0
  445. package/dist/processing/denoise.d.ts +68 -0
  446. package/dist/processing/denoise.js +214 -0
  447. package/dist/processing/denoise.js.map +1 -0
  448. package/dist/processing/focus-stacking.d.ts +17 -0
  449. package/dist/processing/focus-stacking.js +80 -0
  450. package/dist/processing/focus-stacking.js.map +1 -0
  451. package/dist/processing/hdr.d.ts +54 -0
  452. package/dist/processing/hdr.js +172 -0
  453. package/dist/processing/hdr.js.map +1 -0
  454. package/dist/processing/image-ops.d.ts +66 -0
  455. package/dist/processing/image-ops.js +192 -0
  456. package/dist/processing/image-ops.js.map +1 -0
  457. package/dist/processing/panorama.d.ts +51 -0
  458. package/dist/processing/panorama.js +305 -0
  459. package/dist/processing/panorama.js.map +1 -0
  460. package/dist/processing/processing-task.d.ts +85 -0
  461. package/dist/processing/processing-task.js +164 -0
  462. package/dist/processing/processing-task.js.map +1 -0
  463. package/dist/processing/tone-mapping.d.ts +69 -0
  464. package/dist/processing/tone-mapping.js +310 -0
  465. package/dist/processing/tone-mapping.js.map +1 -0
  466. package/dist/schema/camera.d.ts +5 -4
  467. package/dist/schema/illumination-spectral.d.ts +13 -19
  468. package/dist/schema/illumination-spectral.js +23 -19
  469. package/dist/schema/illumination-spectral.js.map +1 -1
  470. package/dist/schema/illumination-temporal.d.ts +12 -15
  471. package/dist/schema/illumination-temporal.js +43 -28
  472. package/dist/schema/illumination-temporal.js.map +1 -1
  473. package/dist/schema/illumination.d.ts +5 -4
  474. package/dist/schema/illumination.js +55 -20
  475. package/dist/schema/illumination.js.map +1 -1
  476. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  477. package/dist/schema/scene-radiance-temporal.js +26 -23
  478. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  479. package/dist/schema/scene-radiance.d.ts +17 -17
  480. package/dist/schema/scene-radiance.js +56 -34
  481. package/dist/schema/scene-radiance.js.map +1 -1
  482. package/dist/schema/scene.d.ts +14 -13
  483. package/dist/schema/validation.d.ts +0 -1
  484. package/dist/schema/validation.js +17 -15
  485. package/dist/schema/validation.js.map +1 -1
  486. package/dist/sensor/accumulated-charge.d.ts +45 -64
  487. package/dist/sensor/accumulated-charge.js +41 -47
  488. package/dist/sensor/accumulated-charge.js.map +1 -1
  489. package/dist/sensor/architecture.d.ts +22 -25
  490. package/dist/sensor/architecture.js +17 -16
  491. package/dist/sensor/architecture.js.map +1 -1
  492. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  493. package/dist/sensor/camera-saturation-capacity.js +36 -34
  494. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  495. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  496. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  497. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  498. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  499. package/dist/sensor/capture-mode-timing.js +24 -21
  500. package/dist/sensor/capture-mode-timing.js.map +1 -1
  501. package/dist/sensor/capture-mode.d.ts +28 -30
  502. package/dist/sensor/capture-mode.js +33 -31
  503. package/dist/sensor/capture-mode.js.map +1 -1
  504. package/dist/sensor/color-sampling.d.ts +30 -33
  505. package/dist/sensor/color-sampling.js +32 -37
  506. package/dist/sensor/color-sampling.js.map +1 -1
  507. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  508. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  509. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  510. package/dist/sensor/dark-current.d.ts +53 -49
  511. package/dist/sensor/dark-current.js +87 -46
  512. package/dist/sensor/dark-current.js.map +1 -1
  513. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  514. package/dist/sensor/environment-photo-signal.js +127 -46
  515. package/dist/sensor/environment-photo-signal.js.map +1 -1
  516. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  517. package/dist/sensor/eqe-electron-rate.js +34 -14
  518. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  519. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  520. package/dist/sensor/eqe-local-exposure.js +15 -11
  521. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  522. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  523. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  524. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  525. package/dist/sensor/exposure-window.d.ts +48 -34
  526. package/dist/sensor/exposure-window.js +77 -36
  527. package/dist/sensor/exposure-window.js.map +1 -1
  528. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  529. package/dist/sensor/fixed-pattern-noise.js +166 -0
  530. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  531. package/dist/sensor/iso-gain.d.ts +44 -0
  532. package/dist/sensor/iso-gain.js +119 -0
  533. package/dist/sensor/iso-gain.js.map +1 -0
  534. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  535. package/dist/sensor/iso-signal-chain.js +52 -66
  536. package/dist/sensor/iso-signal-chain.js.map +1 -1
  537. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  538. package/dist/sensor/local-exposure-binding.js +22 -18
  539. package/dist/sensor/local-exposure-binding.js.map +1 -1
  540. package/dist/sensor/optical-stack.d.ts +36 -40
  541. package/dist/sensor/optical-stack.js +34 -37
  542. package/dist/sensor/optical-stack.js.map +1 -1
  543. package/dist/sensor/photon-energy.d.ts +22 -28
  544. package/dist/sensor/photon-energy.js +42 -34
  545. package/dist/sensor/photon-energy.js.map +1 -1
  546. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  547. package/dist/sensor/physical-charge-capacity.js +35 -36
  548. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  549. package/dist/sensor/pixel-pitch.d.ts +2 -3
  550. package/dist/sensor/pixel-pitch.js +4 -2
  551. package/dist/sensor/pixel-pitch.js.map +1 -1
  552. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  553. package/dist/sensor/radiometry-readiness.js +20 -17
  554. package/dist/sensor/radiometry-readiness.js.map +1 -1
  555. package/dist/sensor/raw-readout.d.ts +173 -83
  556. package/dist/sensor/raw-readout.js +425 -160
  557. package/dist/sensor/raw-readout.js.map +1 -1
  558. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  559. package/dist/sensor/raw-reconstruction.js +200 -47
  560. package/dist/sensor/raw-reconstruction.js.map +1 -1
  561. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  562. package/dist/sensor/readout-exposure-linkage.js +125 -27
  563. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  564. package/dist/sensor/readout-timing.d.ts +43 -44
  565. package/dist/sensor/readout-timing.js +38 -30
  566. package/dist/sensor/readout-timing.js.map +1 -1
  567. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  568. package/dist/sensor/response-application-compatibility.js +35 -34
  569. package/dist/sensor/response-application-compatibility.js.map +1 -1
  570. package/dist/sensor/response-operating-range.d.ts +26 -35
  571. package/dist/sensor/response-operating-range.js +40 -39
  572. package/dist/sensor/response-operating-range.js.map +1 -1
  573. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  574. package/dist/sensor/responsivity-photocurrent.js +57 -40
  575. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  576. package/dist/sensor/sampling-aperture.d.ts +21 -25
  577. package/dist/sensor/sampling-aperture.js +29 -28
  578. package/dist/sensor/sampling-aperture.js.map +1 -1
  579. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  580. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  581. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  582. package/dist/sensor/sensor-geometry.d.ts +28 -32
  583. package/dist/sensor/sensor-geometry.js +35 -20
  584. package/dist/sensor/sensor-geometry.js.map +1 -1
  585. package/dist/sensor/signal-noise.d.ts +14 -16
  586. package/dist/sensor/signal-noise.js +15 -13
  587. package/dist/sensor/signal-noise.js.map +1 -1
  588. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  589. package/dist/sensor/spatial-sample-reduction.js +39 -48
  590. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  591. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  592. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  593. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  594. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  595. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  596. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  597. package/dist/sensor/spectral-coverage.d.ts +6 -9
  598. package/dist/sensor/spectral-coverage.js +9 -6
  599. package/dist/sensor/spectral-coverage.js.map +1 -1
  600. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  601. package/dist/sensor/spectral-quadrature.js +38 -48
  602. package/dist/sensor/spectral-quadrature.js.map +1 -1
  603. package/dist/sensor/spectral-response.d.ts +53 -41
  604. package/dist/sensor/spectral-response.js +80 -47
  605. package/dist/sensor/spectral-response.js.map +1 -1
  606. package/dist/sensor/stochastic-seed.d.ts +50 -0
  607. package/dist/sensor/stochastic-seed.js +123 -0
  608. package/dist/sensor/stochastic-seed.js.map +1 -0
  609. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  610. package/dist/sensor/temporal-eqe-sum.js +5 -6
  611. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  612. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  613. package/dist/sensor/temporal-photo-signal.js +11 -10
  614. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  615. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  616. package/dist/sensor/temporal-sample-binding.js +3 -3
  617. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  618. package/dist/simulation/poc-simulation.d.ts +16 -16
  619. package/dist/simulation/poc-simulation.js +20 -15
  620. package/dist/simulation/poc-simulation.js.map +1 -1
  621. package/dist/stabilization/camera-shake.d.ts +42 -18
  622. package/dist/stabilization/camera-shake.js +43 -20
  623. package/dist/stabilization/camera-shake.js.map +1 -1
  624. package/dist/stabilization/system.d.ts +44 -41
  625. package/dist/stabilization/system.js +196 -108
  626. package/dist/stabilization/system.js.map +1 -1
  627. package/docs/AGENT_GUIDE.md +183 -0
  628. package/docs/API_REFERENCE.md +777 -2
  629. package/docs/QUICK_START.md +663 -0
  630. package/docs/USAGE.md +1719 -714
  631. package/docs/api/camera-equivalent-focal-length.md +6 -7
  632. package/docs/api/camera-field-of-view.md +16 -8
  633. package/docs/api/camera-lens-projection.md +246 -0
  634. package/docs/api/camera-projected-object-size.md +6 -5
  635. package/docs/api/capture-capture-export-metadata.md +10 -10
  636. package/docs/api/capture-dng-import.md +134 -0
  637. package/docs/api/capture-environment-raw-producer.md +17 -11
  638. package/docs/api/capture-export-jpeg.md +16 -0
  639. package/docs/api/capture-focus-control.md +25 -47
  640. package/docs/api/capture-linear-encoding.md +21 -12
  641. package/docs/api/capture-lossless-jpeg.md +49 -0
  642. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  643. package/docs/api/capture-native-environment-raw.md +161 -4
  644. package/docs/api/capture-native-raw-development.md +69 -8
  645. package/docs/api/capture-native-raw-dng.md +84 -0
  646. package/docs/api/capture-native-raw.md +21 -10
  647. package/docs/api/capture-packed-sensor-raw.md +156 -0
  648. package/docs/api/capture-photographic-export.md +69 -31
  649. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  650. package/docs/api/capture-raw-white-level.md +37 -0
  651. package/docs/api/capture-release-sequence.md +6 -7
  652. package/docs/api/capture-sensor-raw-frame.md +6 -6
  653. package/docs/api/capture-sensor-raw-producer.md +17 -11
  654. package/docs/api/capture-simulated-capture.md +15 -15
  655. package/docs/api/color-camera-color-matrix.md +103 -0
  656. package/docs/api/color-capture-color.md +22 -11
  657. package/docs/api/color-chromatic-adaptation.md +82 -0
  658. package/docs/api/color-color-difference.md +134 -0
  659. package/docs/api/color-color-matching-functions.md +259 -0
  660. package/docs/api/color-colorimetry-math.md +54 -0
  661. package/docs/api/color-gamut-mapping.md +72 -0
  662. package/docs/api/color-illuminants.md +280 -0
  663. package/docs/api/color-rgb-color-spaces.md +151 -0
  664. package/docs/api/color-sensor-color-development.md +27 -0
  665. package/docs/api/color-srgb-icc.md +2 -4
  666. package/docs/api/color-white-balance.md +95 -19
  667. package/docs/api/composition-image-formation-plan.md +124 -95
  668. package/docs/api/composition-plan-consumer.md +7 -7
  669. package/docs/api/core-calculation-result.md +18 -14
  670. package/docs/api/core-configuration-error.md +1 -1
  671. package/docs/api/core-image-formation.md +7 -7
  672. package/docs/api/core-scientific-assurance.md +12 -10
  673. package/docs/api/core-spectral-composition.md +14 -14
  674. package/docs/api/core-spectral.md +6 -6
  675. package/docs/api/core-validation.md +3 -3
  676. package/docs/api/core-version.md +7 -6
  677. package/docs/api/equipment-exposure-capabilities.md +11 -10
  678. package/docs/api/equipment-generic-tier-assets.md +7 -2
  679. package/docs/api/equipment-generic-tier-presets.md +6 -6
  680. package/docs/api/equipment-iso-capabilities.md +18 -18
  681. package/docs/api/equipment-metering-capabilities.md +6 -6
  682. package/docs/api/equipment-release-capabilities.md +4 -4
  683. package/docs/api/exports.json +2253 -3
  684. package/docs/api/exposure-exposure-duration-control.md +9 -9
  685. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  686. package/docs/api/exposure-exposure.md +10 -10
  687. package/docs/api/exposure-flash-ttl.md +182 -0
  688. package/docs/api/exposure-flash.md +183 -28
  689. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  690. package/docs/api/exposure-metering-target.md +9 -8
  691. package/docs/api/exposure-metering-temporal.md +8 -8
  692. package/docs/api/exposure-metering.md +69 -9
  693. package/docs/api/exposure-program-line.md +6 -5
  694. package/docs/api/facade-chart-radiance-batch.md +96 -0
  695. package/docs/api/facade-chart-scenes.md +240 -0
  696. package/docs/api/facade-scene-radiance.md +122 -0
  697. package/docs/api/facade-simulate-capture.md +397 -0
  698. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  699. package/docs/api/gpu-image-kernel-execution.md +152 -0
  700. package/docs/api/motion-camera-rotation.md +43 -26
  701. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  702. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  703. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  704. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  705. package/docs/api/motion-extended-object-projection.md +10 -8
  706. package/docs/api/motion-projected-motion.md +8 -8
  707. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  708. package/docs/api/motion-video-sequence.md +159 -0
  709. package/docs/api/optics-aperture.md +8 -8
  710. package/docs/api/optics-atmospheric-haze.md +104 -0
  711. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  712. package/docs/api/optics-circle-of-confusion.md +5 -4
  713. package/docs/api/optics-complex-pupil-psf.md +57 -16
  714. package/docs/api/optics-depth-of-field.md +12 -6
  715. package/docs/api/optics-diffraction-psf-profile.md +96 -0
  716. package/docs/api/optics-diffraction.md +8 -7
  717. package/docs/api/optics-focus-breathing.md +104 -16
  718. package/docs/api/optics-focus-state.md +9 -10
  719. package/docs/api/optics-front-of-lens-filter.md +72 -14
  720. package/docs/api/optics-illumination-vignetting.md +10 -10
  721. package/docs/api/optics-irradiance-convolution.md +95 -0
  722. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  723. package/docs/api/optics-lens-psf-kernels.md +72 -0
  724. package/docs/api/optics-lens-psf-profile.md +48 -26
  725. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  726. package/docs/api/optics-polygon-diffraction.md +78 -13
  727. package/docs/api/optics-profile-contract.md +4 -4
  728. package/docs/api/optics-psf-foundation.md +12 -12
  729. package/docs/api/optics-pupil-vignetting.md +132 -0
  730. package/docs/api/optics-radial-distortion.md +12 -12
  731. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  732. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  733. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  734. package/docs/api/optics-sensor-environment-query.md +52 -9
  735. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  736. package/docs/api/optics-stray-light.md +12 -11
  737. package/docs/api/optics-thin-lens.md +4 -3
  738. package/docs/api/optics-zernike-wavefront.md +229 -0
  739. package/docs/api/output-capture-corrected-sdr.md +10 -7
  740. package/docs/api/output-capture-geometry.md +35 -36
  741. package/docs/api/output-capture-sdr.md +4 -4
  742. package/docs/api/output-crop.md +7 -4
  743. package/docs/api/output-geometric-transforms.md +65 -19
  744. package/docs/api/output-lens-corrections.md +17 -15
  745. package/docs/api/output-native-capture-sdr.md +26 -13
  746. package/docs/api/output-png-encoder.md +105 -0
  747. package/docs/api/output-print-contrast-reference.md +8 -8
  748. package/docs/api/output-print-detail.md +14 -14
  749. package/docs/api/output-print-jpeg.md +22 -5
  750. package/docs/api/output-print-plan.md +18 -18
  751. package/docs/api/output-print-region-statistics.md +14 -14
  752. package/docs/api/output-sdr-rendering.md +52 -10
  753. package/docs/api/output-subject-framing-crop.md +5 -6
  754. package/docs/api/processing-demosaic.md +120 -0
  755. package/docs/api/processing-denoise.md +148 -0
  756. package/docs/api/processing-focus-stacking.md +41 -0
  757. package/docs/api/processing-hdr.md +113 -0
  758. package/docs/api/processing-panorama.md +82 -0
  759. package/docs/api/processing-processing-task.md +107 -0
  760. package/docs/api/processing-tone-mapping.md +142 -0
  761. package/docs/api/schema-camera.md +6 -4
  762. package/docs/api/schema-illumination-spectral.md +10 -11
  763. package/docs/api/schema-illumination-temporal.md +13 -15
  764. package/docs/api/schema-illumination.md +4 -4
  765. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  766. package/docs/api/schema-scene-radiance.md +18 -17
  767. package/docs/api/schema-scene.md +9 -9
  768. package/docs/api/schema-validation.md +1 -1
  769. package/docs/api/sensor-accumulated-charge.md +12 -20
  770. package/docs/api/sensor-architecture.md +15 -16
  771. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  772. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  773. package/docs/api/sensor-capture-mode-timing.md +9 -9
  774. package/docs/api/sensor-capture-mode.md +29 -30
  775. package/docs/api/sensor-color-sampling.md +31 -33
  776. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  777. package/docs/api/sensor-dark-current.md +30 -14
  778. package/docs/api/sensor-environment-photo-signal.md +13 -6
  779. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  780. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  781. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  782. package/docs/api/sensor-exposure-window.md +24 -24
  783. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  784. package/docs/api/sensor-iso-gain.md +63 -0
  785. package/docs/api/sensor-iso-signal-chain.md +13 -22
  786. package/docs/api/sensor-local-exposure-binding.md +12 -13
  787. package/docs/api/sensor-optical-stack.md +37 -40
  788. package/docs/api/sensor-photon-energy.md +10 -11
  789. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  790. package/docs/api/sensor-pixel-pitch.md +1 -1
  791. package/docs/api/sensor-radiometry-readiness.md +9 -9
  792. package/docs/api/sensor-raw-readout.md +118 -52
  793. package/docs/api/sensor-raw-reconstruction.md +97 -20
  794. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  795. package/docs/api/sensor-readout-timing.md +33 -35
  796. package/docs/api/sensor-response-application-compatibility.md +9 -11
  797. package/docs/api/sensor-response-operating-range.md +14 -18
  798. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  799. package/docs/api/sensor-sampling-aperture.md +22 -25
  800. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  801. package/docs/api/sensor-sensor-geometry.md +23 -24
  802. package/docs/api/sensor-signal-noise.md +10 -10
  803. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  804. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  805. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  806. package/docs/api/sensor-spectral-coverage.md +5 -5
  807. package/docs/api/sensor-spectral-quadrature.md +33 -35
  808. package/docs/api/sensor-spectral-response.md +28 -16
  809. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  810. package/docs/api/simulation-poc-simulation.md +17 -16
  811. package/docs/api/stabilization-camera-shake.md +29 -10
  812. package/docs/api/stabilization-system.md +25 -21
  813. package/docs/examples/production-request.json +3821 -2157
  814. package/docs/examples/simulate-capture.mjs +14 -0
  815. package/llms.txt +35 -0
  816. package/package.json +32 -11
  817. package/AGENTS.md +0 -674
  818. package/CONTRIBUTING.md +0 -76
  819. package/DCO +0 -33
  820. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  821. package/dist/camera/field-of-view.d.ts.map +0 -1
  822. package/dist/camera/projected-object-size.d.ts.map +0 -1
  823. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  824. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  825. package/dist/capture/export-jpeg.d.ts.map +0 -1
  826. package/dist/capture/export-tiff.d.ts.map +0 -1
  827. package/dist/capture/focus-control.d.ts.map +0 -1
  828. package/dist/capture/linear-encoding.d.ts.map +0 -1
  829. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  830. package/dist/capture/native-raw-development.d.ts.map +0 -1
  831. package/dist/capture/native-raw.d.ts.map +0 -1
  832. package/dist/capture/photographic-export.d.ts.map +0 -1
  833. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  834. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  835. package/dist/capture/release-sequence.d.ts.map +0 -1
  836. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  837. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  838. package/dist/capture/simulated-capture.d.ts.map +0 -1
  839. package/dist/color/capture-color.d.ts.map +0 -1
  840. package/dist/color/sensor-color-development.d.ts.map +0 -1
  841. package/dist/color/srgb-icc.d.ts.map +0 -1
  842. package/dist/color/srgb-transfer.d.ts.map +0 -1
  843. package/dist/color/white-balance.d.ts.map +0 -1
  844. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  845. package/dist/composition/plan-consumer.d.ts.map +0 -1
  846. package/dist/core/calculation-result.d.ts.map +0 -1
  847. package/dist/core/canonical-json.d.ts.map +0 -1
  848. package/dist/core/configuration-error.d.ts.map +0 -1
  849. package/dist/core/evidence-provenance.d.ts.map +0 -1
  850. package/dist/core/image-formation.d.ts.map +0 -1
  851. package/dist/core/owned-data.d.ts.map +0 -1
  852. package/dist/core/record-validation.d.ts.map +0 -1
  853. package/dist/core/scientific-assurance.d.ts.map +0 -1
  854. package/dist/core/spectral-composition.d.ts.map +0 -1
  855. package/dist/core/spectral.d.ts.map +0 -1
  856. package/dist/core/validation.d.ts.map +0 -1
  857. package/dist/core/version.d.ts.map +0 -1
  858. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  859. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  860. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  861. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  862. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  863. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  864. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  865. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  866. package/dist/exposure/exposure.d.ts.map +0 -1
  867. package/dist/exposure/flash.d.ts.map +0 -1
  868. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  869. package/dist/exposure/metering-target.d.ts.map +0 -1
  870. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  871. package/dist/exposure/metering.d.ts.map +0 -1
  872. package/dist/exposure/program-line.d.ts.map +0 -1
  873. package/dist/index.d.ts.map +0 -1
  874. package/dist/motion/camera-rotation.d.ts.map +0 -1
  875. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  876. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  877. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  878. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  879. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  880. package/dist/motion/projected-motion.d.ts.map +0 -1
  881. package/dist/optics/aperture.d.ts.map +0 -1
  882. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  883. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  884. package/dist/optics/depth-of-field.d.ts.map +0 -1
  885. package/dist/optics/diffraction.d.ts.map +0 -1
  886. package/dist/optics/focus-breathing.d.ts.map +0 -1
  887. package/dist/optics/focus-state.d.ts.map +0 -1
  888. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  889. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  890. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  891. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  892. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  893. package/dist/optics/profile-contract.d.ts.map +0 -1
  894. package/dist/optics/psf-foundation.d.ts.map +0 -1
  895. package/dist/optics/radial-distortion.d.ts.map +0 -1
  896. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  897. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  898. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  899. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  900. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  901. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  902. package/dist/optics/stray-light.d.ts.map +0 -1
  903. package/dist/optics/thin-lens.d.ts.map +0 -1
  904. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  905. package/dist/output/capture-geometry.d.ts.map +0 -1
  906. package/dist/output/capture-sdr.d.ts.map +0 -1
  907. package/dist/output/crop.d.ts.map +0 -1
  908. package/dist/output/geometric-transforms.d.ts.map +0 -1
  909. package/dist/output/lens-corrections.d.ts.map +0 -1
  910. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  911. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  912. package/dist/output/print-detail.d.ts.map +0 -1
  913. package/dist/output/print-jpeg.d.ts.map +0 -1
  914. package/dist/output/print-plan.d.ts.map +0 -1
  915. package/dist/output/print-region-statistics.d.ts.map +0 -1
  916. package/dist/output/sdr-rendering.d.ts.map +0 -1
  917. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  918. package/dist/schema/camera.d.ts.map +0 -1
  919. package/dist/schema/camera.js +0 -3
  920. package/dist/schema/camera.js.map +0 -1
  921. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  922. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  923. package/dist/schema/illumination.d.ts.map +0 -1
  924. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  925. package/dist/schema/scene-radiance.d.ts.map +0 -1
  926. package/dist/schema/scene.d.ts.map +0 -1
  927. package/dist/schema/scene.js +0 -3
  928. package/dist/schema/scene.js.map +0 -1
  929. package/dist/schema/validation.d.ts.map +0 -1
  930. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  931. package/dist/sensor/architecture.d.ts.map +0 -1
  932. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  933. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  934. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  935. package/dist/sensor/capture-mode.d.ts.map +0 -1
  936. package/dist/sensor/color-sampling.d.ts.map +0 -1
  937. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  938. package/dist/sensor/dark-current.d.ts.map +0 -1
  939. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  940. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  941. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  942. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  943. package/dist/sensor/exposure-window.d.ts.map +0 -1
  944. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  945. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  946. package/dist/sensor/optical-stack.d.ts.map +0 -1
  947. package/dist/sensor/photon-energy.d.ts.map +0 -1
  948. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  949. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  950. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  951. package/dist/sensor/raw-readout.d.ts.map +0 -1
  952. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  953. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  954. package/dist/sensor/readout-timing.d.ts.map +0 -1
  955. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  956. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  957. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  958. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  959. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  960. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  961. package/dist/sensor/signal-noise.d.ts.map +0 -1
  962. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  963. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  964. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  965. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  966. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  967. package/dist/sensor/spectral-response.d.ts.map +0 -1
  968. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  969. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  970. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  971. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  972. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  973. package/dist/stabilization/system.d.ts.map +0 -1
  974. package/docs/API_STYLE.md +0 -235
  975. package/docs/ARCHITECTURE.md +0 -356
  976. package/docs/AUTOMATION_COORDINATION.md +0 -190
  977. package/docs/CAPTURE_COLOR.md +0 -25
  978. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  979. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  980. package/docs/CAPTURE_SDR.md +0 -22
  981. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  982. package/docs/DEVELOPERS.md +0 -68
  983. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  984. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  985. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  986. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  987. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  988. package/docs/IMAGE_FORMATION.md +0 -247
  989. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  990. package/docs/MOTION_AND_SIGNAL.md +0 -250
  991. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  992. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  993. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  994. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  995. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  996. package/docs/PERFORMANCE_BASELINE.md +0 -56
  997. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  998. package/docs/PHYSICS_FOUNDATION.md +0 -426
  999. package/docs/POC_API.md +0 -278
  1000. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  1001. package/docs/POC_PROJECTION_REUSE.md +0 -124
  1002. package/docs/PRINT_195_196_REVIEW.md +0 -93
  1003. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  1004. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  1005. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  1006. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1007. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1008. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1009. package/docs/PRINT_PLANNING.md +0 -75
  1010. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1011. package/docs/PROCESSED_OUTPUT.md +0 -157
  1012. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1013. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1014. package/docs/PROVENANCE.md +0 -115
  1015. package/docs/PSF_FOUNDATION.md +0 -165
  1016. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1017. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1018. package/docs/RELEASE_1_0.md +0 -66
  1019. package/docs/RELEASE_1_0_1.md +0 -61
  1020. package/docs/RELEASE_1_1_0.md +0 -25
  1021. package/docs/RELEASE_1_2_0.md +0 -51
  1022. package/docs/RELEASE_1_3_0.md +0 -15
  1023. package/docs/RELEASE_1_4_0.md +0 -23
  1024. package/docs/RELEASE_1_5_0.md +0 -105
  1025. package/docs/RELEASE_AUDIT.md +0 -39
  1026. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1027. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1028. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1029. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1030. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1031. package/docs/SDR_RENDERING.md +0 -33
  1032. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1033. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1034. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1035. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1036. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1037. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1038. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1039. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1040. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1041. package/docs/SIMULATED_CAPTURE.md +0 -65
  1042. package/docs/STABILIZATION.md +0 -234
  1043. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1044. package/docs/TIER_ACCEPTANCE.md +0 -129
  1045. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1046. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1047. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1048. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1049. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1050. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1051. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1052. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1053. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1054. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1055. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1056. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1057. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1058. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1059. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1060. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1061. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1062. package/docs/validation/documentation-fragments.json +0 -212
  1063. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1064. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1065. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1069. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1071. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1072. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1073. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1074. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1075. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1076. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1077. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1078. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1079. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1080. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1081. package/docs/validation/print-detail-capabilities.json +0 -103
  1082. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1083. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1084. package/docs/validation/release-audit-inventory.json +0 -1306
  1085. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,8 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Strict boundary; execution also checks capture optics, native raster binding and source history.
5
- * Internal shared validation for capture-derived exporters; does not create or validate pixel values.
3
+ * SDR (standard dynamic range) output from a simulated capture with lens corrections applied.
4
+ *
5
+ * Pipeline: committed capture → colour and white balance (WB) → lens correction in native sensor
6
+ * coordinates → oriented output view → SDR rendering. It produces a derived view only; the
7
+ * capture's physical geometry is unchanged.
6
8
  * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support
7
9
  * limits.
8
10
  */
@@ -20,13 +22,16 @@ export const CAPTURE_CORRECTED_SDR_SCHEMA_VERSION = "0.1.0";
20
22
  function fields(value, allowed) {
21
23
  return requireAllowlistedRecord(value, allowed, "Invalid capture correction fields.");
22
24
  }
23
- /** Strict boundary; execution also checks capture optics, native raster binding and source history. */
25
+ /**
26
+ * Strictly parses untrusted input. Running the calculation also checks the capture's optics,
27
+ * native pixel-grid binding and source history.
28
+ */
24
29
  export function parseCaptureCorrectedSdrInput(input) {
25
30
  const r = fields(input, ["capture", "sourcePlaneId", "color", "profile", "correction"]);
26
31
  const base = parseCaptureSdrInput({ capture: r.capture, sourcePlaneId: r.sourcePlaneId, color: r.color, profile: r.profile });
27
32
  return { ...base, correction: parseCaptureCorrectionChoice(r.correction, base.capture, base.color.kind === "transform" ? [base.color.outputImageStateId] : []) };
28
33
  }
29
- /** Internal shared validation for capture-derived exporters; does not create or validate pixel values. */
34
+ /** Internal: validates the correction choice for exporters that start from a capture. It neither creates nor checks pixel values. */
30
35
  export function parseCaptureCorrectionChoice(input, capture, forbiddenImageStateIds = []) {
31
36
  const c = fields(input, ["profile", "state", "coordinateFrame", "selections", "selectionKind", "frameTimeSeconds",
32
37
  "resampler", "clippingLevel", "invalidSupport", "outputImageStateId"]);
@@ -69,7 +74,7 @@ function nativeRaster(bounds, width, height, orientation) {
69
74
  return { width: w, height: h, pitchMm: pitchX,
70
75
  centerMm: { x: (Math.min(...x) + Math.max(...x)) / 2, y: (Math.min(...y) + Math.max(...y)) / 2 } };
71
76
  }
72
- /** Exact quarter-turn index permutation through the capture geometry contract, not another resampling pass. */
77
+ /** Reorders pixel indices for a quarter-turn orientation, using the capture geometry functions. This is an exact reorder, not another resampling pass. */
73
78
  function orientedIndices(raster, orientation, orientedWidth) {
74
79
  return Array.from({ length: raster.width * raster.height }, (_, i) => {
75
80
  const p = transformNativeRasterPointToOriented({ point: { x: i % raster.width + .5, y: Math.floor(i / raster.width) + .5 },
@@ -77,7 +82,10 @@ function orientedIndices(raster, orientation, orientedWidth) {
77
82
  return Math.floor(p.y) * orientedWidth + Math.floor(p.x);
78
83
  });
79
84
  }
80
- /** Bounded committed capture → color/WB → native correction → oriented output view → SDR. No physical stage activation. */
85
+ /**
86
+ * Runs a bounded committed capture through colour/WB → native lens correction → oriented output
87
+ * view → SDR. No physical simulation stage is run.
88
+ */
81
89
  export function calculateCaptureCorrectedSdr(input) {
82
90
  const v = parseCaptureCorrectedSdrInput(input), c = v.correction;
83
91
  const { value, source, plane, color, applied } = prepareCaptureSdrSource({
@@ -101,7 +109,7 @@ export function calculateCaptureCorrectedSdr(input) {
101
109
  const samples = plane.storage.samples, sourceIndices = orientedIndices(src, orientation, plane.pixelWidth);
102
110
  const channels = { red: sourceIndices.map((i) => samples[3 * i]), green: sourceIndices.map((i) => samples[3 * i + 1]),
103
111
  blue: sourceIndices.map((i) => samples[3 * i + 2]) };
104
- // Existing engine projection owns finite-focus distance; never substitute scene-clock time or focal length.
112
+ // The engine's projection model supplies the finite focus distance. Never substitute scene-clock time or focal length for it.
105
113
  const projection = calculateFieldOfView({ focalLengthMm: capture.exposure.focalLengthMm,
106
114
  sensorDimensionMm: g.activeCapture.imagingArea.widthMm, focusDistanceM: c.state.focusDistanceM });
107
115
  const correction = calculateLensCorrectedCapture({ plan: plan.value, capture: { state: c.state,
@@ -1 +1 @@
1
- {"version":3,"file":"capture-corrected-sdr.js","sourceRoot":"","sources":["../../src/output/capture-corrected-sdr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-corrected-sdr.js","sourceRoot":"","sources":["../../src/output/capture-corrected-sdr.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * SDR (standard dynamic range) output from a simulated capture with lens corrections applied.\n *\n * Pipeline: committed capture → colour and white balance (WB) → lens correction in native sensor\n * coordinates → oriented output view → SDR rendering. It produces a derived view only; the\n * capture's physical geometry is unchanged.\n * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord, isPublicOpaqueId } from \"../core/record-validation.js\";\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { calculateFieldOfView } from \"../camera/field-of-view.js\";\nimport { parseOpticalProfileState, type OpticalProfileState } from \"../optics/profile-contract.js\";\nimport { prepareCaptureSdrSource, parseCaptureSdrInput, type CaptureSdrInput, type CaptureSdrResult } from \"./capture-sdr.js\";\nimport { resolveLensCorrectionPlan, calculateLensCorrectedCapture, parseGenericLensCorrectionProfile,\n type GenericLensCorrectionProfile, type ResolvedLensCorrectionPlan } from \"./lens-corrections.js\";\nimport { calculateValidSourceCrop, type GeometricRaster, type GeometricResampler } from \"./geometric-transforms.js\";\nimport { mapOrientedPhysicalUvToImagePlanePoint, transformNativeRasterPointToOriented,\n type PhysicalBoundsFromOpticalAxisMm, type RasterRect, type CaptureOrientation } from \"./capture-geometry.js\";\nimport { calculateSdrRendering } from \"./sdr-rendering.js\";\n\nexport const CAPTURE_CORRECTED_SDR_SCHEMA_VERSION = \"0.1.0\" as const;\n/**\n * Input: a capture plus an explicit lens-correction choice in native optical coordinates. Camera\n * body, lens and mode identities are taken as the capture producer declared them.\n */\nexport interface CaptureCorrectedSdrInput extends CaptureSdrInput {\n correction: {\n profile: GenericLensCorrectionProfile;\n state: OpticalProfileState;\n /** Native optical coordinates (+X right, +Y up), in the RGB space after the selected colour/WB step. */\n coordinateFrame: \"native-optical-linear-srgb-d65\";\n selections: Readonly<Record<string, \"on\" | \"off\" | \"auto\">>;\n selectionKind: ResolvedLensCorrectionPlan[\"selectionKind\"];\n /** Seconds from exposure start, not the capture's scene-clock time. */\n frameTimeSeconds: number;\n resampler: GeometricResampler;\n clippingLevel: number;\n invalidSupport: \"reject\" | \"joint-valid-crop\";\n outputImageStateId: string;\n };\n}\n/** A derived output view. It never replaces the committed capture's physical geometry. */\nexport interface CaptureCorrectedSdrResult extends Omit<CaptureSdrResult, \"schemaVersion\"> {\n schemaVersion: typeof CAPTURE_CORRECTED_SDR_SCHEMA_VERSION;\n sceneTimeSeconds: number;\n plan: CalculationResult<ResolvedLensCorrectionPlan>;\n correction: ReturnType<typeof calculateLensCorrectedCapture>;\n projection: ReturnType<typeof calculateFieldOfView>;\n /** Valid-source mask over the full oriented output. The nested correction plans still use native optical coordinates. */\n validSourceMask: readonly boolean[];\n outputView: { imageStateId: string; rect: RasterRect; pixelWidth: number; pixelHeight: number; samples: readonly number[] };\n}\nfunction fields(value: unknown, allowed: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, allowed, \"Invalid capture correction fields.\");\n}\n/**\n * Strictly parses untrusted input. Running the calculation also checks the capture's optics,\n * native pixel-grid binding and source history.\n */\nexport function parseCaptureCorrectedSdrInput(input: unknown): CaptureCorrectedSdrInput {\n const r = fields(input, [\"capture\", \"sourcePlaneId\", \"color\", \"profile\", \"correction\"]);\n const base = parseCaptureSdrInput({ capture: r.capture, sourcePlaneId: r.sourcePlaneId, color: r.color, profile: r.profile });\n return { ...base, correction: parseCaptureCorrectionChoice(r.correction, base.capture,\n base.color.kind === \"transform\" ? [base.color.outputImageStateId] : []) };\n}\n/** Internal: validates the correction choice for exporters that start from a capture. It neither creates nor checks pixel values. */\nexport function parseCaptureCorrectionChoice(input: unknown, capture: CaptureSdrInput[\"capture\"],\n forbiddenImageStateIds: readonly string[] = []): CaptureCorrectedSdrInput[\"correction\"] {\n const c = fields(input, [\"profile\", \"state\", \"coordinateFrame\", \"selections\", \"selectionKind\", \"frameTimeSeconds\",\n \"resampler\", \"clippingLevel\", \"invalidSupport\", \"outputImageStateId\"]);\n const profile = parseGenericLensCorrectionProfile(c.profile), state = parseOpticalProfileState(c.state);\n const selections = fields(c.selections, profile.components.map((v) => v.id));\n if (Object.values(selections).some((v) => v !== \"on\" && v !== \"off\" && v !== \"auto\") ||\n c.coordinateFrame !== \"native-optical-linear-srgb-d65\" ||\n (c.selectionKind !== \"camera-selectable\" && c.selectionKind !== \"reference-bypass\") ||\n (c.invalidSupport !== \"reject\" && c.invalidSupport !== \"joint-valid-crop\") ||\n typeof c.frameTimeSeconds !== \"number\" || !Number.isFinite(c.frameTimeSeconds) || c.frameTimeSeconds < 0 ||\n typeof c.clippingLevel !== \"number\" || !Number.isFinite(c.clippingLevel) || c.clippingLevel <= 0 ||\n !isPublicOpaqueId(c.outputImageStateId) ||\n capture.planes.some((p) => p.imageStateId === c.outputImageStateId) ||\n forbiddenImageStateIds.includes(c.outputImageStateId)) {\n throw new InvalidConfigurationError(\"Invalid correction choice, clock, threshold or derived state identity.\");\n }\n const s = fields(c.resampler, [\"id\", \"version\", \"filter\", \"antialias\"]);\n if (typeof s.id !== \"string\" || !s.id.trim() || typeof s.version !== \"string\" || !s.version.trim() ||\n (s.filter !== \"nearest\" && s.filter !== \"bilinear\") || (s.antialias !== \"none\" && s.antialias !== \"source-prefiltered\")) {\n throw new InvalidConfigurationError(\"Invalid correction resampler.\");\n }\n resolveLensCorrectionPlan({ profile, state, selections: selections as CaptureCorrectedSdrInput[\"correction\"][\"selections\"],\n outputKind: \"processed\", selectionKind: c.selectionKind });\n return { profile, state, coordinateFrame: c.coordinateFrame,\n selections: selections as CaptureCorrectedSdrInput[\"correction\"][\"selections\"], selectionKind: c.selectionKind,\n frameTimeSeconds: c.frameTimeSeconds, clippingLevel: c.clippingLevel, invalidSupport: c.invalidSupport,\n outputImageStateId: c.outputImageStateId, resampler: { id: s.id, version: s.version, filter: s.filter, antialias: s.antialias } };\n}\nfunction nativeRaster(bounds: PhysicalBoundsFromOpticalAxisMm, width: number, height: number,\n orientation: CaptureOrientation): GeometricRaster {\n const corners = [0, 1].flatMap((u) => [0, 1].map((v) => mapOrientedPhysicalUvToImagePlanePoint({\n uv: { u, v }, orientation, orientedPhysicalBoundsFromOpticalAxisMm: bounds })));\n const x = corners.map((p) => p.x), y = corners.map((p) => p.y);\n const quarter = orientation === \"portrait-clockwise\" || orientation === \"portrait-counter-clockwise\";\n const w = quarter ? height : width, h = quarter ? width : height;\n const pitchX = (Math.max(...x)-Math.min(...x))/w, pitchY = (Math.max(...y)-Math.min(...y))/h;\n if (Math.abs(pitchX-pitchY) > 1e-12*Math.max(pitchX, pitchY)) {\n throw new InvalidConfigurationError(\"Correction executor requires square physical pixel pitch; no implicit stretching.\");\n }\n return { width: w, height: h, pitchMm: pitchX,\n centerMm: { x: (Math.min(...x)+Math.max(...x))/2, y: (Math.min(...y)+Math.max(...y))/2 } };\n}\n/** Reorders pixel indices for a quarter-turn orientation, using the capture geometry functions. This is an exact reorder, not another resampling pass. */\nfunction orientedIndices(raster: GeometricRaster, orientation: CaptureOrientation, orientedWidth: number): number[] {\n return Array.from({ length: raster.width*raster.height }, (_, i): number => {\n const p = transformNativeRasterPointToOriented({ point: { x: i%raster.width+.5, y: Math.floor(i/raster.width)+.5 },\n nativeRaster: { pixelWidth: raster.width, pixelHeight: raster.height }, orientation });\n return Math.floor(p.y)*orientedWidth+Math.floor(p.x);\n });\n}\n/**\n * Runs a bounded committed capture through colour/WB → native lens correction → oriented output\n * view → SDR. No physical simulation stage is run.\n */\nexport function calculateCaptureCorrectedSdr(input: CaptureCorrectedSdrInput): CalculationResult<CaptureCorrectedSdrResult> {\n const v = parseCaptureCorrectedSdrInput(input), c = v.correction;\n const { value, source, plane, color, applied } = prepareCaptureSdrSource({\n capture: v.capture, sourcePlaneId: v.sourcePlaneId, color: v.color, profile: v.profile });\n if (plane.storage.kind !== \"inline-float64\" || plane.pixelWidth*plane.pixelHeight > 65536 ||\n plane.appliedTransforms.some((t) => t.kind === \"digital-lens-correction\")) {\n throw new InvalidConfigurationError(\"Requires bounded inline RGB without prior digital lens correction; no implicit loading or double correction.\");\n }\n const capture = value.capture, g = capture.resolvedGeometry, orientation = g.orientedCapture.orientation;\n const sourceBounds = plane.rasterBinding === \"output\" ? g.output.physicalBoundsFromOpticalAxisMm : g.orientedCapture.physicalBoundsFromOpticalAxisMm;\n const src = nativeRaster(sourceBounds, plane.pixelWidth, plane.pixelHeight, orientation);\n const dst = nativeRaster(g.output.physicalBoundsFromOpticalAxisMm, g.output.raster.pixelWidth, g.output.raster.pixelHeight, orientation);\n if (c.state.focalLengthMm !== capture.exposure.focalLengthMm || c.state.aperture !== capture.exposure.aperture ||\n capture.focus.kind !== \"finite\" || c.state.focusDistanceM !== capture.focus.distanceM ||\n c.state.outputWidth !== dst.width || c.state.outputHeight !== dst.height || c.frameTimeSeconds > capture.exposure.shutterSeconds) {\n throw new InvalidConfigurationError(\"Correction state differs from committed optics/native output raster or local exposure interval.\");\n }\n const plan = resolveLensCorrectionPlan({ profile: c.profile, state: c.state, selections: c.selections,\n selectionKind: c.selectionKind, outputKind: \"processed\" });\n const samples = plane.storage.samples, sourceIndices = orientedIndices(src, orientation, plane.pixelWidth);\n const channels = { red: sourceIndices.map((i) => samples[3*i]!), green: sourceIndices.map((i) => samples[3*i+1]!),\n blue: sourceIndices.map((i) => samples[3*i+2]!) };\n // The engine's projection model supplies the finite focus distance. Never substitute scene-clock time or focal length for it.\n const projection = calculateFieldOfView({ focalLengthMm: capture.exposure.focalLengthMm,\n sensorDimensionMm: g.activeCapture.imagingArea.widthMm, focusDistanceM: c.state.focusDistanceM });\n const correction = calculateLensCorrectedCapture({ plan: plan.value, capture: { state: c.state,\n captureId: capture.captureId, noiseRealizationId: capture.noise.realizationId, timeSeconds: c.frameTimeSeconds, raster: src, channels },\n destinationRaster: dst, resampler: c.resampler, clippingLevel: c.clippingLevel,\n physicalProjectionDistanceMm: projection.value.projectionDistanceMm });\n const width = g.output.raster.pixelWidth, height = g.output.raster.pixelHeight;\n const indices = orientedIndices(dst, orientation, width), mask = Array<boolean>(width*height).fill(false);\n const rgb = Array<number | null>(width*height*3).fill(null);\n indices.forEach((index, i) => {\n mask[index] = correction.value.validSourceMask[i]!;\n rgb[3*index] = correction.value.channels.red[i]!;\n rgb[3*index+1] = correction.value.channels.green[i]!;\n rgb[3*index+2] = correction.value.channels.blue[i]!;\n });\n if (c.invalidSupport === \"reject\" && mask.some((valid) => !valid)) throw new InvalidConfigurationError(\"Corrected output has unavailable channel support.\");\n const rect = c.invalidSupport === \"reject\" ? { x: 0, y: 0, width, height } : calculateValidSourceCrop(mask, width, height);\n if (rect === null) throw new InvalidConfigurationError(\"No joint-valid corrected output crop.\");\n const outputSamples: number[] = [];\n for (let y = rect.y; y < rect.y+rect.height; y++) for (let x = rect.x; x < rect.x+rect.width; x++) {\n const offset = 3*(y*width+x);\n outputSamples.push(rgb[offset]!, rgb[offset+1]!, rgb[offset+2]!);\n }\n const rendering = calculateSdrRendering({ sourceImageStateId: c.outputImageStateId,\n inputImageState: \"color-transformed-linear-rgb\", inputColorSpace: \"linear-srgb-d65\",\n whiteBalanceHandling: applied ? \"already-applied-upstream\" : \"not-required\", pixelWidth: rect.width, pixelHeight: rect.height,\n referenceWhiteValue: plane.referenceWhiteValue, samples: outputSamples, profile: value.profile });\n return approximationResult({ schemaVersion: CAPTURE_CORRECTED_SDR_SCHEMA_VERSION, captureId: capture.captureId,\n sourcePlaneId: source.id, sourceImageStateId: source.imageStateId, rasterBinding: source.rasterBinding,\n sourceCaptureSaturation: source.captureSaturation, sourceDynamicRangeHistory: capture.source.dynamicRangeHistory,\n noiseRealizationId: capture.noise.realizationId, sceneTimeSeconds: capture.sceneTimeSeconds,\n whiteBalance: applied ? color ? \"applied-here\" : \"already-applied-upstream\" : \"not-required\",\n color, plan, correction, projection, validSourceMask: mask,\n outputView: { imageStateId: c.outputImageStateId, rect, pixelWidth: rect.width, pixelHeight: rect.height, samples: outputSamples }, rendering },\n \"capture-corrected-sdr-adapter\", CAPTURE_CORRECTED_SDR_SCHEMA_VERSION, [\n \"Generic corrections are explicitly declared for native optical coordinates and the post-color/WB linear-sRGB basis\",\n \"Body/lens identity, acquisition mode, stabilization and prefilter adequacy remain producer declarations, not verified calibration\",\n \"Quarter-turn permutations reuse capture geometry; crop never rewrites physical capture or focal equivalence\",\n \"Gain clipping events, upstream saturation and SDR gamut clipping remain distinct; no covariance/noise regeneration\",\n \"Bounded reference integration only; no production-plan activation, RAW correction bake, streaming or external IO\"]);\n}\n"]}
@@ -34,9 +34,9 @@ export interface NormalizedRasterUv {
34
34
  v: number;
35
35
  }
36
36
  /**
37
- * Pre-orientation optical image-plane coordinate in millimetres.
37
+ * A point on the optical image plane, in millimetres, before camera orientation is applied.
38
38
  *
39
- * Origin is the optical axis; +X points right and +Y points up.
39
+ * The origin is the optical axis. +X points right and +Y points up.
40
40
  */
41
41
  export interface ImagePlaneMetricPointMm {
42
42
  x: number;
@@ -71,16 +71,16 @@ export interface ResolveCaptureGeometryInput {
71
71
  */
72
72
  activeCaptureRect?: RasterRect;
73
73
  /**
74
- * Final digital/output crop in oriented active-capture raster coordinates.
74
+ * Final digital (output) crop, in oriented active-capture pixel coordinates.
75
75
  *
76
76
  * Defaults to the full oriented active capture.
77
77
  */
78
78
  outputCropRect?: RasterRect;
79
79
  /**
80
- * Final output raster after optional digital crop/resampling.
80
+ * Final output image size after the optional digital crop and resampling.
81
81
  *
82
- * Defaults to the output-crop dimensions. The output raster must preserve
83
- * the crop aspect ratio within a small integer-rounding tolerance.
82
+ * Defaults to the output-crop size. The output must keep the crop's aspect
83
+ * ratio, allowing only a small tolerance for integer rounding.
84
84
  */
85
85
  outputRaster?: RasterDimensions;
86
86
  }
@@ -104,7 +104,7 @@ export interface ResolvedCaptureGeometry {
104
104
  /** Native physical bounds relative to the optical axis. */
105
105
  physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;
106
106
  /**
107
- * Current generic model assumes native image samples uniformly span the
107
+ * The current generic model assumes the native pixels evenly cover the
108
108
  * declared physical imaging area.
109
109
  */
110
110
  imagingAreaDerivation: "uniform-native-raster";
@@ -119,9 +119,9 @@ export interface ResolvedCaptureGeometry {
119
119
  };
120
120
  output: {
121
121
  /**
122
- * Digital/output crop expressed in oriented active-capture coordinates.
122
+ * Digital (output) crop, in oriented active-capture coordinates.
123
123
  *
124
- * This crop does not mutate physical sensor identity or active-capture
124
+ * This crop does not change the physical sensor or the active-capture
125
125
  * geometry.
126
126
  */
127
127
  cropRect: RasterRect;
@@ -131,7 +131,7 @@ export interface ResolvedCaptureGeometry {
131
131
  physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;
132
132
  centerOffsetFromOpticalAxisMm: RasterVector;
133
133
  sourceRetainedAreaFraction: number;
134
- /** Pixel-domain resampling from oriented active capture into output. */
134
+ /** Pixel resampling from the oriented active capture to the output image. */
135
135
  orientedCaptureToOutputScale: {
136
136
  x: number;
137
137
  y: number;
@@ -175,8 +175,8 @@ export interface ActiveCaptureFieldOfView {
175
175
  horizontalDegrees: number;
176
176
  verticalDegrees: number;
177
177
  /**
178
- * Larger of the two opposite-corner diagonal angular spans. For centered
179
- * crops both diagonal spans are equal.
178
+ * The larger of the two corner-to-corner diagonal angles. For a centred
179
+ * crop the two diagonals are equal.
180
180
  */
181
181
  diagonalDegrees: number;
182
182
  horizontalBoundsDegrees: {
@@ -223,34 +223,33 @@ export interface OutputFieldOfView {
223
223
  };
224
224
  }
225
225
  /**
226
- * Transforms a continuous native raster edge-coordinate point into oriented
227
- * capture coordinates. Pixel centers can be represented with +0.5 offsets.
226
+ * Converts a point in native pixel coordinates to oriented capture coordinates.
227
+ * Coordinates are continuous and measured from pixel edges, so a pixel centre is at +0.5.
228
228
  */
229
229
  export declare function transformNativeRasterPointToOriented(input: TransformRasterPointInput): RasterPoint;
230
- /** Transforms an oriented raster edge-coordinate point back to native coordinates. */
230
+ /** Converts a point in oriented pixel coordinates (measured from pixel edges) back to native coordinates. */
231
231
  export declare function transformOrientedRasterPointToNative(input: TransformRasterPointInput): RasterPoint;
232
232
  /** Rotates a native raster vector into oriented coordinates. */
233
233
  export declare function transformNativeRasterVectorToOriented(input: TransformRasterVectorInput): RasterVector;
234
234
  /** Rotates an oriented raster vector back into native coordinates. */
235
235
  export declare function transformOrientedRasterVectorToNative(input: TransformRasterVectorInput): RasterVector;
236
236
  /**
237
- * Maps normalized coordinates in an oriented physical raster region into the
238
- * pre-orientation optical image plane used by lens-field and camera-mapping
239
- * APIs.
237
+ * Maps normalized (0–1) coordinates in an oriented physical image region to the
238
+ * optical image plane used by the lens-field and camera-mapping APIs, before
239
+ * camera orientation.
240
240
  *
241
- * The supplied physical bounds use the capture contract's +Y-down basis after
242
- * physical camera orientation. The returned image-plane point uses optical-axis
243
- * origin, +X right and +Y up. No lens or projection equation is applied.
241
+ * The input bounds are after camera orientation and use +Y down. The returned
242
+ * point has its origin on the optical axis, with +X right and +Y up. No lens or
243
+ * projection equation is applied.
244
244
  */
245
245
  export declare function mapOrientedPhysicalUvToImagePlanePoint(input: MapOrientedPhysicalUvToImagePlaneInput): ImagePlaneMetricPointMm;
246
246
  /**
247
- * Maps a pre-orientation optical image-plane point into normalized coordinates
248
- * of an oriented physical raster region.
247
+ * Maps an optical image-plane point (before camera orientation) to normalized
248
+ * coordinates in an oriented physical image region.
249
249
  *
250
- * This is the exact coordinate inverse of
251
- * mapOrientedPhysicalUvToImagePlanePoint(). Points outside the supplied region
252
- * fail closed; a tiny tolerance only absorbs floating-point round-trip noise at
253
- * an edge.
250
+ * This is the exact inverse of mapOrientedPhysicalUvToImagePlanePoint(). A point
251
+ * outside the region is rejected. A tiny tolerance only absorbs floating-point
252
+ * round-trip error at an edge.
254
253
  */
255
254
  export declare function mapImagePlanePointToOrientedPhysicalUv(input: MapImagePlanePointToOrientedPhysicalUvInput): NormalizedRasterUv;
256
255
  /** Transforms an integer half-open native raster rectangle into oriented coordinates. */
@@ -258,21 +257,20 @@ export declare function transformNativeRasterRectToOriented(input: TransformRast
258
257
  /** Transforms an oriented integer half-open rectangle back to native coordinates. */
259
258
  export declare function transformOrientedRasterRectToNative(input: TransformRasterRectInput): RasterRect;
260
259
  /**
261
- * Resolves native sensor geometry, active capture, physical camera orientation,
262
- * and final digital/output geometry without conflating their identities.
260
+ * Resolves native sensor geometry, active capture area, physical camera orientation
261
+ * and final digital (output) geometry, keeping each one distinct.
263
262
  */
264
263
  export declare function resolveCaptureGeometry(input: ResolveCaptureGeometryInput): CalculationResult<ResolvedCaptureGeometry>;
265
264
  /**
266
- * Calculates asymmetric horizontal/vertical FOV plus opposite-corner diagonal
267
- * spans for the active physical capture area after physical camera orientation.
265
+ * Calculates the field of view (FOV) of the active physical capture area after
266
+ * camera orientation. Horizontal and vertical FOV can be asymmetric about the
267
+ * optical axis; both corner-to-corner diagonals are reported.
268
268
  *
269
- * Final digital/output crop is intentionally excluded.
269
+ * The final digital (output) crop is deliberately not included.
270
270
  */
271
271
  export declare function calculateActiveCaptureFieldOfView(input: CalculateActiveCaptureFieldOfViewInput): CalculationResult<ActiveCaptureFieldOfView>;
272
272
  /**
273
- * Calculates final visible field of view after physical active capture,
274
- * orientation, and digital/output crop. Output raster resolution does not
275
- * affect this optical/framing result.
273
+ * Calculates the final visible field of view after the active capture area,
274
+ * orientation and digital (output) crop. Output resolution does not affect it.
276
275
  */
277
276
  export declare function calculateOutputFieldOfView(input: CalculateOutputFieldOfViewInput): CalculationResult<OutputFieldOfView>;
278
- //# sourceMappingURL=capture-geometry.d.ts.map
@@ -1,9 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Transforms a continuous native raster edge-coordinate point into oriented capture coordinates. Pixel
5
- * centers can be represented with +0.5 offsets.
6
- * Transforms an oriented raster edge-coordinate point back to native coordinates.
3
+ * Capture geometry: how the native sensor, the active capture area, the camera's physical
4
+ * orientation and the final output crop relate to each other.
5
+ *
6
+ * It converts points, vectors and rectangles between native and oriented pixel coordinates,
7
+ * maps oriented positions to the optical image plane and back, and computes field of view (FOV)
8
+ * for the active capture and the final output.
7
9
  * @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
8
10
  * limits.
9
11
  */
@@ -11,6 +13,8 @@ import { calculateFieldOfViewBounds } from "../camera/field-of-view.js";
11
13
  import { calculatedResult } from "../core/calculation-result.js";
12
14
  import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
13
15
  import {} from "../sensor/sensor-geometry.js";
16
+ import { requireInputKeys, requireInputObject } from "../core/record-validation.js";
17
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
14
18
  const CAPTURE_ORIENTATIONS = new Set([
15
19
  "landscape",
16
20
  "portrait-clockwise",
@@ -20,10 +24,11 @@ const CAPTURE_ORIENTATIONS = new Set([
20
24
  function requireCaptureOrientation(value) {
21
25
  if (typeof value !== "string" ||
22
26
  !CAPTURE_ORIENTATIONS.has(value)) {
23
- throw new InvalidScientificInputError("orientation is invalid.");
27
+ throw new InvalidConfigurationError("orientation is invalid.");
24
28
  }
25
29
  }
26
30
  function requireRasterDimensions(name, raster) {
31
+ requireInputObject(raster, name);
27
32
  requirePositiveInteger(`${name}.pixelWidth`, raster.pixelWidth);
28
33
  requirePositiveInteger(`${name}.pixelHeight`, raster.pixelHeight);
29
34
  }
@@ -33,6 +38,7 @@ function requireNonNegativeInteger(name, value) {
33
38
  }
34
39
  }
35
40
  function validateRasterRect(name, rect, bounds) {
41
+ requireInputObject(rect, name);
36
42
  requireNonNegativeInteger(`${name}.x`, rect.x);
37
43
  requireNonNegativeInteger(`${name}.y`, rect.y);
38
44
  requirePositiveInteger(`${name}.width`, rect.width);
@@ -43,6 +49,7 @@ function validateRasterRect(name, rect, bounds) {
43
49
  }
44
50
  }
45
51
  function validateRasterPoint(name, point, bounds) {
52
+ requireInputObject(point, name);
46
53
  if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {
47
54
  throw new InvalidScientificInputError(`${name} coordinates must be finite.`);
48
55
  }
@@ -54,6 +61,7 @@ function validateRasterPoint(name, point, bounds) {
54
61
  }
55
62
  }
56
63
  function validateRasterVector(name, vector) {
64
+ requireInputObject(vector, name);
57
65
  if (!Number.isFinite(vector.x) || !Number.isFinite(vector.y)) {
58
66
  throw new InvalidScientificInputError(`${name} coordinates must be finite.`);
59
67
  }
@@ -65,6 +73,7 @@ function physicalCoordinateTolerance(value, minimum, maximum) {
65
73
  return Number.EPSILON * PHYSICAL_EDGE_TOLERANCE_ULPS * scale;
66
74
  }
67
75
  function validatePhysicalBounds(name, bounds) {
76
+ requireInputObject(bounds, name);
68
77
  for (const key of ["left", "right", "top", "bottom"]) {
69
78
  if (!Number.isFinite(bounds[key])) {
70
79
  throw new InvalidScientificInputError(`${name}.${key} must be finite.`);
@@ -88,6 +97,7 @@ function validatePhysicalBounds(name, bounds) {
88
97
  }
89
98
  }
90
99
  function validateNormalizedUv(name, uv) {
100
+ requireInputObject(uv, name);
91
101
  if (!Number.isFinite(uv.u) || !Number.isFinite(uv.v)) {
92
102
  throw new InvalidScientificInputError(`${name} coordinates must be finite.`);
93
103
  }
@@ -152,10 +162,11 @@ function inverseRotateVector(vector, orientation) {
152
162
  }
153
163
  }
154
164
  /**
155
- * Transforms a continuous native raster edge-coordinate point into oriented
156
- * capture coordinates. Pixel centers can be represented with +0.5 offsets.
165
+ * Converts a point in native pixel coordinates to oriented capture coordinates.
166
+ * Coordinates are continuous and measured from pixel edges, so a pixel centre is at +0.5.
157
167
  */
158
168
  export function transformNativeRasterPointToOriented(input) {
169
+ requireInputKeys(input, "transformNativeRasterPointToOriented", ["point", "nativeRaster", "orientation"]);
159
170
  requireCaptureOrientation(input.orientation);
160
171
  requireRasterDimensions("nativeRaster", input.nativeRaster);
161
172
  validateRasterPoint("point", input.point, input.nativeRaster);
@@ -171,8 +182,9 @@ export function transformNativeRasterPointToOriented(input) {
171
182
  return { x: input.point.y, y: width - input.point.x };
172
183
  }
173
184
  }
174
- /** Transforms an oriented raster edge-coordinate point back to native coordinates. */
185
+ /** Converts a point in oriented pixel coordinates (measured from pixel edges) back to native coordinates. */
175
186
  export function transformOrientedRasterPointToNative(input) {
187
+ requireInputKeys(input, "transformOrientedRasterPointToNative", ["point", "nativeRaster", "orientation"]);
176
188
  requireCaptureOrientation(input.orientation);
177
189
  requireRasterDimensions("nativeRaster", input.nativeRaster);
178
190
  const orientedRaster = orientRaster(input.nativeRaster, input.orientation);
@@ -191,26 +203,29 @@ export function transformOrientedRasterPointToNative(input) {
191
203
  }
192
204
  /** Rotates a native raster vector into oriented coordinates. */
193
205
  export function transformNativeRasterVectorToOriented(input) {
206
+ requireInputKeys(input, "transformNativeRasterVectorToOriented", ["vector", "orientation"]);
194
207
  requireCaptureOrientation(input.orientation);
195
208
  validateRasterVector("vector", input.vector);
196
209
  return rotateVector(input.vector, input.orientation);
197
210
  }
198
211
  /** Rotates an oriented raster vector back into native coordinates. */
199
212
  export function transformOrientedRasterVectorToNative(input) {
213
+ requireInputKeys(input, "transformOrientedRasterVectorToNative", ["vector", "orientation"]);
200
214
  requireCaptureOrientation(input.orientation);
201
215
  validateRasterVector("vector", input.vector);
202
216
  return inverseRotateVector(input.vector, input.orientation);
203
217
  }
204
218
  /**
205
- * Maps normalized coordinates in an oriented physical raster region into the
206
- * pre-orientation optical image plane used by lens-field and camera-mapping
207
- * APIs.
219
+ * Maps normalized (0–1) coordinates in an oriented physical image region to the
220
+ * optical image plane used by the lens-field and camera-mapping APIs, before
221
+ * camera orientation.
208
222
  *
209
- * The supplied physical bounds use the capture contract's +Y-down basis after
210
- * physical camera orientation. The returned image-plane point uses optical-axis
211
- * origin, +X right and +Y up. No lens or projection equation is applied.
223
+ * The input bounds are after camera orientation and use +Y down. The returned
224
+ * point has its origin on the optical axis, with +X right and +Y up. No lens or
225
+ * projection equation is applied.
212
226
  */
213
227
  export function mapOrientedPhysicalUvToImagePlanePoint(input) {
228
+ requireInputKeys(input, "mapOrientedPhysicalUvToImagePlanePoint", ["uv", "orientedPhysicalBoundsFromOpticalAxisMm", "orientation"]);
214
229
  requireCaptureOrientation(input.orientation);
215
230
  validateNormalizedUv("uv", input.uv);
216
231
  validatePhysicalBounds("orientedPhysicalBoundsFromOpticalAxisMm", input.orientedPhysicalBoundsFromOpticalAxisMm);
@@ -226,15 +241,15 @@ export function mapOrientedPhysicalUvToImagePlanePoint(input) {
226
241
  };
227
242
  }
228
243
  /**
229
- * Maps a pre-orientation optical image-plane point into normalized coordinates
230
- * of an oriented physical raster region.
244
+ * Maps an optical image-plane point (before camera orientation) to normalized
245
+ * coordinates in an oriented physical image region.
231
246
  *
232
- * This is the exact coordinate inverse of
233
- * mapOrientedPhysicalUvToImagePlanePoint(). Points outside the supplied region
234
- * fail closed; a tiny tolerance only absorbs floating-point round-trip noise at
235
- * an edge.
247
+ * This is the exact inverse of mapOrientedPhysicalUvToImagePlanePoint(). A point
248
+ * outside the region is rejected. A tiny tolerance only absorbs floating-point
249
+ * round-trip error at an edge.
236
250
  */
237
251
  export function mapImagePlanePointToOrientedPhysicalUv(input) {
252
+ requireInputKeys(input, "mapImagePlanePointToOrientedPhysicalUv", ["imagePlanePointMm", "orientedPhysicalBoundsFromOpticalAxisMm", "orientation"]);
238
253
  requireCaptureOrientation(input.orientation);
239
254
  validateRasterVector("imagePlanePointMm", input.imagePlanePointMm);
240
255
  validatePhysicalBounds("orientedPhysicalBoundsFromOpticalAxisMm", input.orientedPhysicalBoundsFromOpticalAxisMm);
@@ -251,6 +266,7 @@ export function mapImagePlanePointToOrientedPhysicalUv(input) {
251
266
  }
252
267
  /** Transforms an integer half-open native raster rectangle into oriented coordinates. */
253
268
  export function transformNativeRasterRectToOriented(input) {
269
+ requireInputKeys(input, "transformNativeRasterRectToOriented", ["rect", "nativeRaster", "orientation"]);
254
270
  requireCaptureOrientation(input.orientation);
255
271
  requireRasterDimensions("nativeRaster", input.nativeRaster);
256
272
  validateRasterRect("rect", input.rect, input.nativeRaster);
@@ -284,6 +300,7 @@ export function transformNativeRasterRectToOriented(input) {
284
300
  }
285
301
  /** Transforms an oriented integer half-open rectangle back to native coordinates. */
286
302
  export function transformOrientedRasterRectToNative(input) {
303
+ requireInputKeys(input, "transformOrientedRasterRectToNative", ["rect", "nativeRaster", "orientation"]);
287
304
  requireCaptureOrientation(input.orientation);
288
305
  requireRasterDimensions("nativeRaster", input.nativeRaster);
289
306
  const orientedRaster = orientRaster(input.nativeRaster, input.orientation);
@@ -351,10 +368,9 @@ function physicalBoundsFromRectWithinBounds(sourceBounds, sourceRaster, rect) {
351
368
  };
352
369
  }
353
370
  function validateOutputAspectRatio(cropRect, outputRaster) {
354
- // Preserve one isotropic output scale while allowing only the sub-pixel
355
- // disagreement introduced when an ideal scaled dimension is rounded to an
356
- // integer raster size. A fixed percentage tolerance can admit visible
357
- // anisotropic stretching at large output dimensions.
371
+ // Keep one scale factor for both axes. Allow only the sub-pixel mismatch that
372
+ // comes from rounding an ideal scaled size to whole pixels. A fixed percentage
373
+ // tolerance would allow visible stretching along one axis at large sizes.
358
374
  const widthScaleMinimum = (outputRaster.pixelWidth - 0.5) / cropRect.width;
359
375
  const widthScaleMaximum = (outputRaster.pixelWidth + 0.5) / cropRect.width;
360
376
  const heightScaleMinimum = (outputRaster.pixelHeight - 0.5) / cropRect.height;
@@ -419,11 +435,13 @@ function calculateBoundsFieldOfView(bounds, focalLengthMm, focusDistanceM) {
419
435
  };
420
436
  }
421
437
  /**
422
- * Resolves native sensor geometry, active capture, physical camera orientation,
423
- * and final digital/output geometry without conflating their identities.
438
+ * Resolves native sensor geometry, active capture area, physical camera orientation
439
+ * and final digital (output) geometry, keeping each one distinct.
424
440
  */
425
441
  export function resolveCaptureGeometry(input) {
442
+ requireInputKeys(input, "resolveCaptureGeometry", ["imagingArea", "nativeRaster", "orientation", "activeCaptureRect", "outputCropRect", "outputRaster"]);
426
443
  requireCaptureOrientation(input.orientation);
444
+ requireInputObject(input.imagingArea, "imagingArea");
427
445
  requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
428
446
  requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
429
447
  requireRasterDimensions("nativeRaster", input.nativeRaster);
@@ -515,12 +533,14 @@ export function resolveCaptureGeometry(input) {
515
533
  ]);
516
534
  }
517
535
  /**
518
- * Calculates asymmetric horizontal/vertical FOV plus opposite-corner diagonal
519
- * spans for the active physical capture area after physical camera orientation.
536
+ * Calculates the field of view (FOV) of the active physical capture area after
537
+ * camera orientation. Horizontal and vertical FOV can be asymmetric about the
538
+ * optical axis; both corner-to-corner diagonals are reported.
520
539
  *
521
- * Final digital/output crop is intentionally excluded.
540
+ * The final digital (output) crop is deliberately not included.
522
541
  */
523
542
  export function calculateActiveCaptureFieldOfView(input) {
543
+ requireInputKeys(input, "calculateActiveCaptureFieldOfView", ["imagingArea", "nativeRaster", "orientation", "activeCaptureRect", "focalLengthMm", "focusDistanceM"]);
524
544
  requirePositiveFinite("focalLengthMm", input.focalLengthMm);
525
545
  const geometry = resolveCaptureGeometry({
526
546
  imagingArea: input.imagingArea,
@@ -548,11 +568,11 @@ export function calculateActiveCaptureFieldOfView(input) {
548
568
  ]);
549
569
  }
550
570
  /**
551
- * Calculates final visible field of view after physical active capture,
552
- * orientation, and digital/output crop. Output raster resolution does not
553
- * affect this optical/framing result.
571
+ * Calculates the final visible field of view after the active capture area,
572
+ * orientation and digital (output) crop. Output resolution does not affect it.
554
573
  */
555
574
  export function calculateOutputFieldOfView(input) {
575
+ requireInputKeys(input, "calculateOutputFieldOfView", ["imagingArea", "nativeRaster", "orientation", "activeCaptureRect", "outputCropRect", "focalLengthMm", "focusDistanceM"]);
556
576
  requirePositiveFinite("focalLengthMm", input.focalLengthMm);
557
577
  const geometry = resolveCaptureGeometry({
558
578
  imagingArea: input.imagingArea,