@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,7 +1,10 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Strict parser for generic system corrections; no extrapolation or restoration claim.
4
- * Resolves independent camera states, explicit dependencies, RAW intent and educational bypass.
2
+ * Generic lens corrections applied after capture: distortion, lateral chromatic aberration
3
+ * (CA) and vignetting (corner darkening).
4
+ *
5
+ * It parses correction profiles, resolves which corrections are on for a camera state, and
6
+ * applies them to linear RGB channels. It does not extrapolate beyond a profile and does not
7
+ * claim to restore lost detail.
5
8
  * @see docs/DIGITAL_OPTICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and
6
9
  * support limits.
7
10
  */
@@ -19,27 +22,27 @@ interface CorrectionComponentIdentity {
19
22
  defaultEnabled: boolean;
20
23
  dependencies: readonly string[];
21
24
  requiredByStabilizationModes: readonly string[];
22
- /** Declared residual/calibration limitations; not inferred from optical tier. */
25
+ /** Declared remaining errors and calibration limits. They are not inferred from the optical model tier. */
23
26
  residualNote: string;
24
27
  }
25
- /** A separately declared correction map may deliberately retain physical distortion. */
28
+ /** A distortion correction map, declared separately. It may deliberately leave some physical distortion in place. */
26
29
  export interface GeometricLensCorrection extends CorrectionComponentIdentity {
27
30
  kind: "geometry";
28
31
  transform: DigitalGeometricTransform;
29
32
  }
30
- /** Channel registration only, not longitudinal CA or color shading. */
33
+ /** Lateral CA: shifts colour channels into register. It does not correct longitudinal CA or colour shading. */
31
34
  export interface LateralCaLensCorrection extends CorrectionComponentIdentity {
32
35
  kind: "lateral-ca";
33
36
  transforms: Readonly<Record<LensCorrectionChannel, DigitalGeometricTransform>>;
34
37
  }
35
- /** Post-capture scalar gain; strength 0..1 leaves explicit residual falloff. */
38
+ /** Vignetting correction as a gain applied after capture. A strength below 1 deliberately leaves some falloff. Range 0..1. */
36
39
  export interface IlluminationLensCorrection extends CorrectionComponentIdentity {
37
40
  kind: "peripheral-illumination";
38
41
  profile: IlluminationVignettingProfile;
39
42
  strength: number;
40
43
  }
41
44
  export type LensCorrectionComponent = GeometricLensCorrection | LateralCaLensCorrection | IlluminationLensCorrection;
42
- /** Exact generic system binding, with components in authoritative application order. */
45
+ /** A correction profile for one exact lens-and-camera system. Components are listed in the order they are applied. */
43
46
  export interface GenericLensCorrectionProfile {
44
47
  schemaVersion: "0.1.0";
45
48
  id: string;
@@ -57,12 +60,15 @@ export interface ResolvedLensCorrectionPlan {
57
60
  enabled: boolean;
58
61
  reason: "selected" | "default" | "mandatory" | "stabilization-dependency" | "component-dependency" | "reference-bypass";
59
62
  }[];
60
- /** RAW-like intent remains metadata only in this first foundation. */
63
+ /** For now, a RAW-like intent is recorded as metadata only. */
61
64
  application: "metadata-only" | "bake-downstream";
62
65
  }
63
- /** Strict parser for generic system corrections; no extrapolation or restoration claim. */
66
+ /** Strictly parses a generic correction profile. It does not extrapolate and makes no claim to restore lost detail. */
64
67
  export declare function parseGenericLensCorrectionProfile(value: unknown): GenericLensCorrectionProfile;
65
- /** Resolves independent camera states, explicit dependencies, RAW intent and educational bypass. */
68
+ /**
69
+ * Decides which corrections apply for a camera state. It accounts for per-component settings,
70
+ * explicit dependencies between components, RAW intent and the educational "corrections off" bypass.
71
+ */
66
72
  export declare function resolveLensCorrectionPlan(input: {
67
73
  profile: GenericLensCorrectionProfile;
68
74
  state: OpticalProfileState;
@@ -70,7 +76,10 @@ export declare function resolveLensCorrectionPlan(input: {
70
76
  outputKind: "raw-like" | "processed";
71
77
  selectionKind: "camera-selectable" | "reference-bypass";
72
78
  }): CalculationResult<ResolvedLensCorrectionPlan>;
73
- /** Applies scalar post-capture gain and reports pre-clip variance; no photon/SNR history rewrite. */
79
+ /**
80
+ * Applies a gain after capture and reports the variance before clipping. It does not rewrite
81
+ * the photon or SNR (signal-to-noise ratio) history of the capture.
82
+ */
74
83
  export declare function calculatePeripheralIlluminationCorrection(input: {
75
84
  component: IlluminationLensCorrection;
76
85
  imagePointMm: LensFieldPointMm;
@@ -84,7 +93,7 @@ export declare function calculatePeripheralIlluminationCorrection(input: {
84
93
  noiseVarianceBeforeClipping: number;
85
94
  clipped: boolean;
86
95
  }>;
87
- /** Immutable capture identity accompanies downstream channels for meaningful On/Off comparisons. */
96
+ /** The fixed capture identity travels with the output channels, so On/Off comparisons use the same capture. */
88
97
  export interface LensCorrectionCapture {
89
98
  state: OpticalProfileState;
90
99
  captureId: string;
@@ -93,9 +102,9 @@ export interface LensCorrectionCapture {
93
102
  raster: GeometricRaster;
94
103
  channels: Readonly<Record<LensCorrectionChannel, readonly number[]>>;
95
104
  }
96
- /** Executes bounded reconstructed-linear corrections on already sampled RGB channels.
97
- * Compatible common geometry plus channel CA is sampled once per channel.
98
- * A gain between geometry components or incompatible domains requires an external staged consumer.
105
+ /** Applies bounded corrections to RGB channels that are already sampled and linear.
106
+ * Compatible shared geometry and per-channel CA are combined, so each channel is resampled once.
107
+ * A gain between geometry components, or incompatible domains, needs a separate staged caller.
99
108
  */
100
109
  export declare function calculateLensCorrectedCapture(input: {
101
110
  plan: ResolvedLensCorrectionPlan;
@@ -111,11 +120,10 @@ export declare function calculateLensCorrectedCapture(input: {
111
120
  application: ResolvedLensCorrectionPlan["application"];
112
121
  channels: Readonly<Record<LensCorrectionChannel, readonly (number | null)[]>>;
113
122
  samplingPlans: Partial<Record<LensCorrectionChannel, GeometricSamplingPlan>>;
114
- /** Intersection across all channel footprints, before crop; no missing colors fabricated. */
123
+ /** Area valid in every channel, before cropping. Missing colours are never made up. */
115
124
  validSourceMask: readonly boolean[];
116
125
  jointCrop: GeometricSamplingPlan["jointCrop"];
117
- /** Gain-stage clipping events before joint support/crop; repeated stages count separately. */
126
+ /** Clipping events in gain stages, before the shared valid-area crop. Each stage is counted separately. */
118
127
  illuminationClippingEventCount: number;
119
128
  }>;
120
129
  export {};
121
- //# sourceMappingURL=lens-corrections.d.ts.map
@@ -1,8 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Strict parser for generic system corrections; no extrapolation or restoration claim.
5
- * Resolves independent camera states, explicit dependencies, RAW intent and educational bypass.
3
+ * Generic lens corrections applied after capture: distortion, lateral chromatic aberration
4
+ * (CA) and vignetting (corner darkening).
5
+ *
6
+ * It parses correction profiles, resolves which corrections are on for a camera state, and
7
+ * applies them to linear RGB channels. It does not extrapolate beyond a profile and does not
8
+ * claim to restore lost detail.
6
9
  * @see docs/DIGITAL_OPTICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and
7
10
  * support limits.
8
11
  */
@@ -11,6 +14,8 @@ import { InvalidScientificInputError } from "../core/validation.js";
11
14
  import { calculateIlluminationVignetting } from "../optics/illumination-vignetting.js";
12
15
  import { choice, finite, list, parseEvidence, parseOpticalProfileState, positive, record, requireSameState, textValue } from "../optics/profile-contract.js";
13
16
  import { calculateGeometricResampling, calculateGeometricSamplingPlan, parseDigitalGeometricTransform, prepareGeometricMapping, parseGeometricRaster, calculateValidSourceCrop } from "./geometric-transforms.js";
17
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
14
19
  function illumination(value) {
15
20
  const r = record(value, ["normalizationRadiusMm", "maximumNormalizedRadius", "coefficients"]);
16
21
  const c = record(r.coefficients, ["r2", "r4", "r6"]);
@@ -20,14 +25,14 @@ function illumination(value) {
20
25
  calculateIlluminationVignetting({ imagePointMm: { x: 0, y: 0 }, profile });
21
26
  return profile;
22
27
  }
23
- /** Strict parser for generic system corrections; no extrapolation or restoration claim. */
28
+ /** Strictly parses a generic correction profile. It does not extrapolate and makes no claim to restore lost detail. */
24
29
  export function parseGenericLensCorrectionProfile(value) {
25
30
  const r = record(value, ["schemaVersion", "id", "version", "state", "evidence", "components"]);
26
31
  const components = list(r.components, 16).map((value) => {
27
32
  const c = record(value, ["id", "version", "domain", "availability", "defaultEnabled", "dependencies",
28
33
  "requiredByStabilizationModes", "residualNote", "kind", "transform", "transforms", "profile", "strength"]);
29
34
  if (typeof c.defaultEnabled !== "boolean")
30
- throw new InvalidScientificInputError("defaultEnabled must be boolean.");
35
+ throw new InvalidConfigurationError("defaultEnabled must be boolean.");
31
36
  const identity = { id: textValue(c.id), version: textValue(c.version),
32
37
  domain: choice(c.domain, ["raw-channel", "reconstructed-linear", "processed-output"]),
33
38
  availability: choice(c.availability, ["toggle", "automatic", "mandatory"]), defaultEnabled: c.defaultEnabled,
@@ -66,7 +71,7 @@ export function parseGenericLensCorrectionProfile(value) {
66
71
  new Set(c.dependencies).size !== c.dependencies.length)
67
72
  throw new InvalidScientificInputError("Component IDs/dependency order must be unique and acyclic.");
68
73
  preceding.add(c.id);
69
- // Common and per-channel transforms need stable distinct IDs when fused.
74
+ // Common and per-channel transforms need stable, distinct IDs when they are combined.
70
75
  const maps = c.kind === "geometry" ? [c.transform] : c.kind === "lateral-ca" ? Object.values(c.transforms) : [];
71
76
  for (const t of maps) {
72
77
  if (mappingIds.has(t.id))
@@ -77,8 +82,12 @@ export function parseGenericLensCorrectionProfile(value) {
77
82
  return { schemaVersion: choice(r.schemaVersion, ["0.1.0"]), id: textValue(r.id), version: textValue(r.version),
78
83
  state: parseOpticalProfileState(r.state), evidence: parseEvidence(r.evidence), components };
79
84
  }
80
- /** Resolves independent camera states, explicit dependencies, RAW intent and educational bypass. */
85
+ /**
86
+ * Decides which corrections apply for a camera state. It accounts for per-component settings,
87
+ * explicit dependencies between components, RAW intent and the educational "corrections off" bypass.
88
+ */
81
89
  export function resolveLensCorrectionPlan(input) {
90
+ requireInputKeys(input, "resolveLensCorrectionPlan", ["profile", "state", "selections", "outputKind", "selectionKind"]);
82
91
  const profile = parseGenericLensCorrectionProfile(input.profile);
83
92
  requireSameState(profile.state, input.state);
84
93
  const outputKind = choice(input.outputKind, ["raw-like", "processed"]);
@@ -108,9 +117,14 @@ export function resolveLensCorrectionPlan(input) {
108
117
  "Corrections occur after the same physical capture; tier is not a correction-strength input",
109
118
  "Raw-like output preserves intent without baking corrections; color shading, axial CA and restoration remain unsupported"]);
110
119
  }
111
- /** Applies scalar post-capture gain and reports pre-clip variance; no photon/SNR history rewrite. */
120
+ /**
121
+ * Applies a gain after capture and reports the variance before clipping. It does not rewrite
122
+ * the photon or SNR (signal-to-noise ratio) history of the capture.
123
+ */
112
124
  export function calculatePeripheralIlluminationCorrection(input) {
125
+ requireInputKeys(input, "calculatePeripheralIlluminationCorrection", ["component", "imagePointMm", "signal", "noiseVariance", "clippingLevel"]);
113
126
  const component = input.component;
127
+ requireInputObject(component, "component input");
114
128
  if (component.kind !== "peripheral-illumination" || component.strength < 0 || component.strength > 1 || !Number.isFinite(component.strength))
115
129
  throw new InvalidScientificInputError("Invalid illumination component.");
116
130
  const signal = finite(input.signal, "signal"), variance = finite(input.noiseVariance, "noiseVariance");
@@ -122,12 +136,14 @@ export function calculatePeripheralIlluminationCorrection(input) {
122
136
  return approximationResult({ gain, signalBeforeClipping: before, signal: Math.min(level, before),
123
137
  noiseVarianceBeforeClipping: variance * gain * gain, clipped: before > level }, "post-capture-peripheral-illumination-gain", "0.1.0", ["Variance describes pre-clip samples only", "Gain does not increase captured photons or restore sensor SNR"]);
124
138
  }
125
- /** Executes bounded reconstructed-linear corrections on already sampled RGB channels.
126
- * Compatible common geometry plus channel CA is sampled once per channel.
127
- * A gain between geometry components or incompatible domains requires an external staged consumer.
139
+ /** Applies bounded corrections to RGB channels that are already sampled and linear.
140
+ * Compatible shared geometry and per-channel CA are combined, so each channel is resampled once.
141
+ * A gain between geometry components, or incompatible domains, needs a separate staged caller.
128
142
  */
129
143
  export function calculateLensCorrectedCapture(input) {
130
- // Re-resolve untrusted/mutated plans; callers cannot forge enabled/mandatory state.
144
+ requireInputKeys(input, "calculateLensCorrectedCapture", ["plan", "capture", "destinationRaster", "resampler", "physicalProjectionDistanceMm", "clippingLevel"]);
145
+ // Re-resolve the plan, which may be untrusted or changed, so callers cannot fake enabled or mandatory states.
146
+ requireInputObject(input.plan, "plan");
131
147
  const plan = resolveLensCorrectionPlan({ profile: input.plan.profile, state: input.plan.profile.state,
132
148
  selections: Object.fromEntries(input.plan.components.filter((e) => e.component.availability === "toggle").map((e) => [e.component.id, e.enabled ? "on" : "off"])),
133
149
  outputKind: input.plan.outputKind, selectionKind: input.plan.selectionKind }).value;
@@ -173,7 +189,7 @@ export function calculateLensCorrectedCapture(input) {
173
189
  const samplingPlans = {};
174
190
  let illuminationClippingEventCount = 0;
175
191
  for (const channel of ["red", "green", "blue"]) {
176
- // Application order source->destination reverses for inverse sampling.
192
+ // Corrections are listed source → destination. Inverse sampling runs them in reverse.
177
193
  const transforms = active.filter((c) => c.kind !== "peripheral-illumination").reverse().map((c) => c.kind === "geometry" ? c.transform : c.transforms[channel]);
178
194
  const mapping = prepareGeometricMapping({ transforms, frameTimeSeconds: capture.timeSeconds }).value;
179
195
  const sampling = calculateGeometricSamplingPlan({ mapping, sourceRaster: capture.raster,
@@ -1 +1 @@
1
- {"version":3,"file":"lens-corrections.js","sourceRoot":"","sources":["../../src/output/lens-corrections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lens-corrections.js","sourceRoot":"","sources":["../../src/output/lens-corrections.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Generic lens corrections applied after capture: distortion, lateral chromatic aberration\n * (CA) and vignetting (corner darkening).\n *\n * It parses correction profiles, resolves which corrections are on for a camera state, and\n * applies them to linear RGB channels. It does not extrapolate beyond a profile and does not\n * claim to restore lost detail.\n * @see docs/DIGITAL_OPTICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and\n * support limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { calculateIlluminationVignetting, type IlluminationVignettingProfile } from \"../optics/illumination-vignetting.js\";\nimport {\n choice, finite, list, parseEvidence, parseOpticalProfileState, positive, record,\n requireSameState, textValue, type GenericOpticalEvidence, type OpticalProfileState\n} from \"../optics/profile-contract.js\";\nimport type { LensFieldPointMm } from \"../optics/radial-distortion.js\";\nimport {\n calculateGeometricResampling, calculateGeometricSamplingPlan, parseDigitalGeometricTransform,\n prepareGeometricMapping, parseGeometricRaster, calculateValidSourceCrop, type DigitalGeometricTransform, type GeometricImageDomain,\n type GeometricRaster, type GeometricResampler, type GeometricSamplingPlan\n} from \"./geometric-transforms.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport type LensCorrectionChannel = \"red\" | \"green\" | \"blue\";\ninterface CorrectionComponentIdentity {\n id: string;\n version: string;\n domain: GeometricImageDomain;\n availability: \"toggle\" | \"automatic\" | \"mandatory\";\n defaultEnabled: boolean;\n dependencies: readonly string[];\n requiredByStabilizationModes: readonly string[];\n /** Declared remaining errors and calibration limits. They are not inferred from the optical model tier. */\n residualNote: string;\n}\n/** A distortion correction map, declared separately. It may deliberately leave some physical distortion in place. */\nexport interface GeometricLensCorrection extends CorrectionComponentIdentity {\n kind: \"geometry\";\n transform: DigitalGeometricTransform;\n}\n/** Lateral CA: shifts colour channels into register. It does not correct longitudinal CA or colour shading. */\nexport interface LateralCaLensCorrection extends CorrectionComponentIdentity {\n kind: \"lateral-ca\";\n transforms: Readonly<Record<LensCorrectionChannel, DigitalGeometricTransform>>;\n}\n/** Vignetting correction as a gain applied after capture. A strength below 1 deliberately leaves some falloff. Range 0..1. */\nexport interface IlluminationLensCorrection extends CorrectionComponentIdentity {\n kind: \"peripheral-illumination\";\n profile: IlluminationVignettingProfile;\n strength: number;\n}\nexport type LensCorrectionComponent = GeometricLensCorrection | LateralCaLensCorrection | IlluminationLensCorrection;\n/** A correction profile for one exact lens-and-camera system. Components are listed in the order they are applied. */\nexport interface GenericLensCorrectionProfile {\n schemaVersion: \"0.1.0\";\n id: string;\n version: string;\n state: OpticalProfileState;\n evidence: GenericOpticalEvidence;\n components: readonly LensCorrectionComponent[];\n}\nexport interface ResolvedLensCorrectionPlan {\n profile: GenericLensCorrectionProfile;\n outputKind: \"raw-like\" | \"processed\";\n selectionKind: \"camera-selectable\" | \"reference-bypass\";\n components: readonly { component: LensCorrectionComponent; enabled: boolean;\n reason: \"selected\" | \"default\" | \"mandatory\" | \"stabilization-dependency\" | \"component-dependency\" | \"reference-bypass\" }[];\n /** For now, a RAW-like intent is recorded as metadata only. */\n application: \"metadata-only\" | \"bake-downstream\";\n}\nfunction illumination(value: unknown): IlluminationVignettingProfile {\n const r = record(value, [\"normalizationRadiusMm\", \"maximumNormalizedRadius\", \"coefficients\"]);\n const c = record(r.coefficients, [\"r2\", \"r4\", \"r6\"]);\n const profile = { normalizationRadiusMm: positive(r.normalizationRadiusMm, \"normalizationRadiusMm\"),\n maximumNormalizedRadius: positive(r.maximumNormalizedRadius, \"maximumNormalizedRadius\"),\n coefficients: { r2: finite(c.r2, \"r2\"), r4: finite(c.r4, \"r4\"), r6: finite(c.r6, \"r6\") } };\n calculateIlluminationVignetting({ imagePointMm: { x: 0, y: 0 }, profile });\n return profile;\n}\n/** Strictly parses a generic correction profile. It does not extrapolate and makes no claim to restore lost detail. */\nexport function parseGenericLensCorrectionProfile(value: unknown): GenericLensCorrectionProfile {\n const r = record(value, [\"schemaVersion\", \"id\", \"version\", \"state\", \"evidence\", \"components\"]);\n const components = list(r.components, 16).map((value): LensCorrectionComponent => {\n const c = record(value, [\"id\", \"version\", \"domain\", \"availability\", \"defaultEnabled\", \"dependencies\",\n \"requiredByStabilizationModes\", \"residualNote\", \"kind\", \"transform\", \"transforms\", \"profile\", \"strength\"]);\n if (typeof c.defaultEnabled !== \"boolean\") throw new InvalidConfigurationError(\"defaultEnabled must be boolean.\");\n const identity = { id: textValue(c.id), version: textValue(c.version),\n domain: choice(c.domain, [\"raw-channel\", \"reconstructed-linear\", \"processed-output\"]),\n availability: choice(c.availability, [\"toggle\", \"automatic\", \"mandatory\"]), defaultEnabled: c.defaultEnabled,\n dependencies: list(c.dependencies, 16).map(textValue),\n requiredByStabilizationModes: list(c.requiredByStabilizationModes, 16).map(textValue), residualNote: textValue(c.residualNote) };\n const kind = choice(c.kind, [\"geometry\", \"lateral-ca\", \"peripheral-illumination\"]);\n if (kind === \"geometry\") {\n if (c.transforms !== undefined || c.profile !== undefined || c.strength !== undefined) throw new InvalidScientificInputError(\"Extraneous geometry parameters.\");\n const transform = parseDigitalGeometricTransform(c.transform);\n if (transform.domain !== identity.domain || ![\"distortion\", \"breathing\"].includes(transform.purpose)) throw new InvalidScientificInputError(\"Geometry domain/purpose mismatch.\");\n return { ...identity, kind, transform };\n }\n if (kind === \"lateral-ca\") {\n if (c.transform !== undefined || c.profile !== undefined || c.strength !== undefined) throw new InvalidScientificInputError(\"Extraneous CA parameters.\");\n const t = record(c.transforms, [\"red\", \"green\", \"blue\"]);\n const transforms = { red: parseDigitalGeometricTransform(t.red), green: parseDigitalGeometricTransform(t.green), blue: parseDigitalGeometricTransform(t.blue) };\n for (const transform of Object.values(transforms)) {\n if (transform.domain !== identity.domain || transform.purpose !== \"lateral-ca\") throw new InvalidScientificInputError(\"CA domain/purpose mismatch.\");\n }\n return { ...identity, kind, transforms };\n }\n if (c.transform !== undefined || c.transforms !== undefined) throw new InvalidScientificInputError(\"Extraneous illumination geometry.\");\n const strength = finite(c.strength, \"strength\");\n if (strength < 0 || strength > 1) throw new InvalidScientificInputError(\"Strength must lie in [0,1].\");\n return { ...identity, kind, profile: illumination(c.profile), strength };\n });\n const preceding = new Set<string>(), mappingIds = new Set<string>();\n for (const c of components) {\n if (preceding.has(c.id) || c.dependencies.some((id) => !preceding.has(id)) ||\n new Set(c.dependencies).size !== c.dependencies.length) throw new InvalidScientificInputError(\"Component IDs/dependency order must be unique and acyclic.\");\n preceding.add(c.id);\n // Common and per-channel transforms need stable, distinct IDs when they are combined.\n const maps = c.kind === \"geometry\" ? [c.transform] : c.kind === \"lateral-ca\" ? Object.values(c.transforms) : [];\n for (const t of maps) {\n if (mappingIds.has(t.id)) throw new InvalidScientificInputError(\"Duplicate correction transform ID.\");\n mappingIds.add(t.id);\n }\n }\n return { schemaVersion: choice(r.schemaVersion, [\"0.1.0\"]), id: textValue(r.id), version: textValue(r.version),\n state: parseOpticalProfileState(r.state), evidence: parseEvidence(r.evidence), components };\n}\n\n/**\n * Decides which corrections apply for a camera state. It accounts for per-component settings,\n * explicit dependencies between components, RAW intent and the educational \"corrections off\" bypass.\n */\nexport function resolveLensCorrectionPlan(input: {\n profile: GenericLensCorrectionProfile; state: OpticalProfileState;\n selections: Readonly<Record<string, \"on\" | \"off\" | \"auto\">>;\n outputKind: \"raw-like\" | \"processed\"; selectionKind: \"camera-selectable\" | \"reference-bypass\";\n}): CalculationResult<ResolvedLensCorrectionPlan> {\n requireInputKeys(input, \"resolveLensCorrectionPlan\", [\"profile\", \"state\", \"selections\", \"outputKind\", \"selectionKind\"]);\n const profile = parseGenericLensCorrectionProfile(input.profile);\n requireSameState(profile.state, input.state);\n const outputKind = choice(input.outputKind, [\"raw-like\", \"processed\"]);\n const selectionKind = choice(input.selectionKind, [\"camera-selectable\", \"reference-bypass\"]);\n const selections = record(input.selections, profile.components.map((c) => c.id));\n const components: ResolvedLensCorrectionPlan[\"components\"][number][] = profile.components.map((c): ResolvedLensCorrectionPlan[\"components\"][number] => {\n const selection = choice(selections[c.id] ?? \"auto\", [\"on\", \"off\", \"auto\"]);\n if (selectionKind === \"reference-bypass\") return { component: c, enabled: false, reason: \"reference-bypass\" };\n const stabilization = c.requiredByStabilizationModes.includes(profile.state.stabilizationMode);\n if (c.availability === \"mandatory\" && selection === \"off\") throw new InvalidScientificInputError(\"Mandatory correction cannot be disabled as a camera setting; use reference-bypass.\");\n if (c.availability === \"automatic\" && selection !== \"auto\") throw new InvalidScientificInputError(\"Automatic correction has no camera toggle.\");\n return { component: c, enabled: c.availability === \"mandatory\" || stabilization || (selection === \"auto\" ? c.defaultEnabled : selection === \"on\"),\n reason: c.availability === \"mandatory\" ? \"mandatory\" : stabilization ? \"stabilization-dependency\" : selection === \"auto\" ? \"default\" : \"selected\" };\n });\n for (const entry of [...components].reverse()) if (entry.enabled) for (const id of entry.component.dependencies) {\n const dependency = components.find((c) => c.component.id === id)!;\n dependency.enabled = true; dependency.reason = \"component-dependency\";\n }\n return approximationResult({ profile, outputKind, selectionKind, components,\n application: outputKind === \"raw-like\" ? \"metadata-only\" : \"bake-downstream\" },\n \"generic-camera-lens-correction-plan\", \"0.1.0\", [profile.evidence.basis, profile.evidence.residualNote,\n \"Corrections occur after the same physical capture; tier is not a correction-strength input\",\n \"Raw-like output preserves intent without baking corrections; color shading, axial CA and restoration remain unsupported\"]);\n}\n\n/**\n * Applies a gain after capture and reports the variance before clipping. It does not rewrite\n * the photon or SNR (signal-to-noise ratio) history of the capture.\n */\nexport function calculatePeripheralIlluminationCorrection(input: {\n component: IlluminationLensCorrection; imagePointMm: LensFieldPointMm;\n signal: number; noiseVariance: number; clippingLevel: number;\n}): CalculationResult<{ gain: number; signalBeforeClipping: number; signal: number; noiseVarianceBeforeClipping: number; clipped: boolean }> {\n requireInputKeys(input, \"calculatePeripheralIlluminationCorrection\", [\"component\", \"imagePointMm\", \"signal\", \"noiseVariance\", \"clippingLevel\"]);\n const component = input.component;\n requireInputObject(component, \"component input\");\n if (component.kind !== \"peripheral-illumination\" || component.strength < 0 || component.strength > 1 || !Number.isFinite(component.strength)) throw new InvalidScientificInputError(\"Invalid illumination component.\");\n const signal = finite(input.signal, \"signal\"), variance = finite(input.noiseVariance, \"noiseVariance\");\n const level = positive(input.clippingLevel, \"clippingLevel\");\n if (variance < 0) throw new InvalidScientificInputError(\"Variance must be nonnegative.\");\n const throughput = calculateIlluminationVignetting({ imagePointMm: input.imagePointMm, profile: component.profile }).value.linearThroughputFactor;\n const gain = throughput**(-component.strength), before = signal*gain;\n return approximationResult({ gain, signalBeforeClipping: before, signal: Math.min(level, before),\n noiseVarianceBeforeClipping: variance*gain*gain, clipped: before > level },\n \"post-capture-peripheral-illumination-gain\", \"0.1.0\", [\"Variance describes pre-clip samples only\", \"Gain does not increase captured photons or restore sensor SNR\"]);\n}\n\n/** The fixed capture identity travels with the output channels, so On/Off comparisons use the same capture. */\nexport interface LensCorrectionCapture {\n state: OpticalProfileState;\n captureId: string;\n noiseRealizationId: string;\n timeSeconds: number;\n raster: GeometricRaster;\n channels: Readonly<Record<LensCorrectionChannel, readonly number[]>>;\n}\n/** Applies bounded corrections to RGB channels that are already sampled and linear.\n * Compatible shared geometry and per-channel CA are combined, so each channel is resampled once.\n * A gain between geometry components, or incompatible domains, needs a separate staged caller.\n */\nexport function calculateLensCorrectedCapture(input: {\n plan: ResolvedLensCorrectionPlan; capture: LensCorrectionCapture;\n destinationRaster: GeometricRaster; resampler: GeometricResampler;\n physicalProjectionDistanceMm: number; clippingLevel: number;\n}): CalculationResult<{\n captureId: string; noiseRealizationId: string; timeSeconds: number;\n application: ResolvedLensCorrectionPlan[\"application\"];\n channels: Readonly<Record<LensCorrectionChannel, readonly (number | null)[]>>;\n samplingPlans: Partial<Record<LensCorrectionChannel, GeometricSamplingPlan>>;\n /** Area valid in every channel, before cropping. Missing colours are never made up. */\n validSourceMask: readonly boolean[];\n jointCrop: GeometricSamplingPlan[\"jointCrop\"];\n /** Clipping events in gain stages, before the shared valid-area crop. Each stage is counted separately. */\n illuminationClippingEventCount: number;\n}> {\n requireInputKeys(input, \"calculateLensCorrectedCapture\", [\"plan\", \"capture\", \"destinationRaster\", \"resampler\", \"physicalProjectionDistanceMm\", \"clippingLevel\"]);\n // Re-resolve the plan, which may be untrusted or changed, so callers cannot fake enabled or mandatory states.\n requireInputObject(input.plan, \"plan\");\n const plan = resolveLensCorrectionPlan({ profile: input.plan.profile, state: input.plan.profile.state,\n selections: Object.fromEntries(input.plan.components.filter((e) => e.component.availability === \"toggle\").map((e) => [e.component.id, e.enabled ? \"on\" : \"off\"])),\n outputKind: input.plan.outputKind, selectionKind: input.plan.selectionKind }).value;\n const capture = input.capture;\n requireSameState(plan.profile.state, capture.state);\n const sourceRaster = parseGeometricRaster(capture.raster);\n const destination = parseGeometricRaster(input.destinationRaster);\n if (destination.width !== plan.profile.state.outputWidth || destination.height !== plan.profile.state.outputHeight) {\n throw new InvalidScientificInputError(\"Destination raster differs from correction output binding.\");\n }\n textValue(capture.captureId); textValue(capture.noiseRealizationId);\n if (finite(capture.timeSeconds, \"timeSeconds\") < 0) throw new InvalidScientificInputError(\"Invalid capture time.\");\n const count = capture.raster.width*capture.raster.height;\n for (const channel of [\"red\", \"green\", \"blue\"] as const) {\n const data = list(capture.channels[channel], 65536);\n if (data.length !== count) throw new InvalidScientificInputError(\"Capture channel sample count mismatch.\");\n data.forEach((s) => finite(s, \"channel sample\"));\n }\n const active = plan.components.filter((e) => e.enabled).map((e) => e.component);\n const sameLattice = sourceRaster.width === destination.width && sourceRaster.height === destination.height &&\n sourceRaster.pitchMm === destination.pitchMm && sourceRaster.centerMm.x === destination.centerMm.x &&\n sourceRaster.centerMm.y === destination.centerMm.y;\n // Disabling corrections does not disable an explicit output crop/resampling request.\n if (plan.application === \"metadata-only\" || (!active.length && sameLattice)) {\n return approximationResult({ captureId: capture.captureId, noiseRealizationId: capture.noiseRealizationId,\n timeSeconds: capture.timeSeconds, application: plan.application, channels: capture.channels,\n samplingPlans: {}, validSourceMask: Array<boolean>(count).fill(true), illuminationClippingEventCount: 0,\n jointCrop: { x: 0, y: 0, width: capture.raster.width, height: capture.raster.height } },\n \"generic-lens-correction-capture\", \"0.1.0\", [\"Original physical capture preserved\"]);\n }\n if (active.some((c) => c.domain !== \"reconstructed-linear\")) throw new InvalidScientificInputError(\"This executor requires reconstructed-linear components; other domains need separate consumers.\");\n let seenGain = false;\n for (const c of active) {\n if (c.kind === \"peripheral-illumination\") seenGain = true;\n else if (seenGain) throw new InvalidScientificInputError(\"Cannot reorder geometry across a gain stage.\");\n }\n const channels = {} as Record<LensCorrectionChannel, readonly (number | null)[]>;\n const samplingPlans: Partial<Record<LensCorrectionChannel, GeometricSamplingPlan>> = {};\n let illuminationClippingEventCount = 0;\n for (const channel of [\"red\", \"green\", \"blue\"] as const) {\n // Corrections are listed source → destination. Inverse sampling runs them in reverse.\n const transforms = active.filter((c) => c.kind !== \"peripheral-illumination\").reverse().map((c) =>\n c.kind === \"geometry\" ? c.transform : (c as LateralCaLensCorrection).transforms[channel]);\n const mapping = prepareGeometricMapping({ transforms, frameTimeSeconds: capture.timeSeconds }).value;\n const sampling = calculateGeometricSamplingPlan({ mapping, sourceRaster: capture.raster,\n destinationRaster: input.destinationRaster, resampler: input.resampler,\n physicalProjectionDistanceMm: input.physicalProjectionDistanceMm }).value;\n samplingPlans[channel] = sampling;\n let data = calculateGeometricResampling({ plan: sampling, sourceSamples: capture.channels[channel] }).value.samples;\n for (const c of active) if (c.kind === \"peripheral-illumination\") {\n data = data.map((signal, index): number | null => {\n if (signal === null) return null;\n const raster = input.destinationRaster, x = index%raster.width, y = Math.floor(index/raster.width);\n const corrected = calculatePeripheralIlluminationCorrection({ component: c,\n imagePointMm: { x: raster.centerMm.x+(x+.5-raster.width/2)*raster.pitchMm,\n y: raster.centerMm.y-(y+.5-raster.height/2)*raster.pitchMm },\n signal, noiseVariance: 0, clippingLevel: input.clippingLevel }).value;\n if (corrected.clipped) illuminationClippingEventCount++;\n return corrected.signal;\n });\n }\n channels[channel] = data;\n }\n const mask = channels.red.map((_, i) => channels.red[i] !== null && channels.green[i] !== null && channels.blue[i] !== null);\n for (const channel of [\"red\", \"green\", \"blue\"] as const) channels[channel] = channels[channel].map((s, i) => mask[i] ? s : null);\n return approximationResult({ captureId: capture.captureId, noiseRealizationId: capture.noiseRealizationId,\n timeSeconds: capture.timeSeconds, application: plan.application, channels, samplingPlans, validSourceMask: mask,\n illuminationClippingEventCount,\n jointCrop: calculateValidSourceCrop(mask, destination.width, destination.height) },\n \"generic-lens-correction-capture\", \"0.1.0\", [\"Input capture/noise realization remains unchanged\", \"Channel support intersects before output; optical blur/noise is warped, not physically repaired\",\n \"No production-plan composition is enabled by this standalone executor\"]);\n}\n"]}
@@ -1,6 +1,9 @@
1
- /** Engine-owned bounded tile execution; see docs/NATIVE_CAPTURE_SDR.md. */
2
- import { type SimulatedCapture } from "../capture/simulated-capture.js";
3
- import { type SdrRenderingProfile, type SdrRenderingResult } from "./sdr-rendering.js";
1
+ /**
2
+ * Native SDR rendering of large captures, tile by tile, within fixed memory limits. The engine
3
+ * owns the task; the caller supplies the pixel tiles. See docs/NATIVE_CAPTURE_SDR.md.
4
+ */
5
+ import { type SimulatedCapture, type CaptureLinearPlane } from "../capture/simulated-capture.js";
6
+ import { type SdrPixelTone, type SdrRenderingProfile, type SdrRenderingResult } from "./sdr-rendering.js";
4
7
  export declare const NATIVE_CAPTURE_SDR_SCHEMA_VERSION: "0.1.0";
5
8
  export declare const NATIVE_CAPTURE_SDR_LIMITS: Readonly<{
6
9
  maximumPixels: 24000000;
@@ -9,16 +12,16 @@ export declare const NATIVE_CAPTURE_SDR_LIMITS: Readonly<{
9
12
  tileHeight: 32;
10
13
  maximumTileStorageSamples: 32768;
11
14
  }>;
12
- /** Metadata-only external float master. Samples must already be color/WB resolved. */
15
+ /** Input. The capture holds only metadata; float samples are read from external storage. Samples must already have colour and white balance applied. */
13
16
  export interface NativeCaptureSdrInput {
14
17
  capture: SimulatedCapture;
15
18
  sourcePlaneId: string;
16
19
  outputImageStateId: string;
17
20
  profile: SdrRenderingProfile;
18
- /** Admission limit for retained integer output, before allocation or provider calls. */
21
+ /** Limit on the size of the integer output. Checked before anything is allocated or any tile is read. */
19
22
  maximumOutputBytes: number;
20
23
  }
21
- /** Absolute coordinates in the selected plane's declared binding, never crop-local sensor indices. */
24
+ /** Tile request. Coordinates are absolute in the selected plane's declared pixel grid, never relative to a crop. */
22
25
  export interface NativeCaptureSdrTileRequest {
23
26
  captureId: string;
24
27
  sourcePlaneId: string;
@@ -29,16 +32,26 @@ export interface NativeCaptureSdrTileRequest {
29
32
  width: number;
30
33
  height: number;
31
34
  }
32
- /** Returned tile is exclusively handed to this call; do not mutate/reuse it. Padding is not image data. */
35
+ /** A tile returned by the provider. It belongs to this call alone; do not change or reuse it. Row padding is not image data. */
33
36
  export interface NativeCaptureSdrTile extends NativeCaptureSdrTileRequest {
34
37
  rowStrideSamples: number;
35
38
  samples: Float32Array | Float64Array;
36
39
  }
37
- /** One provider call at a time. Caller must release decoding/GPU resources on abort/settlement. */
40
+ /** Supplies tiles, one call at a time. The caller must release decoder and GPU resources when the task aborts or finishes. */
38
41
  export interface NativeCaptureSdrProvider {
39
42
  readTile(request: Readonly<NativeCaptureSdrTileRequest>, signal: AbortSignal): Promise<NativeCaptureSdrTile>;
40
- /** Must yield to the host event loop, allowing cancellation/input events between tiles. */
43
+ /** Must yield to the host event loop, so cancellation and input events can run between tiles. */
41
44
  yieldControl(signal: AbortSignal): Promise<void>;
45
+ /**
46
+ * Optional progress observer, called synchronously after each committed tile. It cannot change
47
+ * output; an exception it throws fails the task like any other error.
48
+ */
49
+ onProgress?(progress: NativeTaskProgress): void;
50
+ }
51
+ /** Tile progress of a native task: `completedTileCount` of `totalTileCount` tiles are committed. */
52
+ export interface NativeTaskProgress {
53
+ readonly completedTileCount: number;
54
+ readonly totalTileCount: number;
42
55
  }
43
56
  export interface NativeCaptureSdrPlan {
44
57
  schemaVersion: typeof NATIVE_CAPTURE_SDR_SCHEMA_VERSION;
@@ -47,22 +60,65 @@ export interface NativeCaptureSdrPlan {
47
60
  outputImageStateId: string;
48
61
  profile: SdrRenderingProfile;
49
62
  outputBytes: number;
50
- /** Logical array payload bound, not JS heap/GPU/process peak memory or device qualification. */
63
+ /** Upper bound on the bytes held in working arrays. It is not peak JavaScript heap, GPU or process memory, and does not show that a device can run the task. */
51
64
  maximumScratchPayloadBytes: number;
52
65
  tileCount: number;
53
66
  }
54
67
  export interface NativeCaptureSdrOutput {
55
68
  plan: NativeCaptureSdrPlan;
56
- /** Caller-owned packed row-major RGB; 16-bit codes are numeric, not serialized endian bytes. */
69
+ /** Packed RGB codes in row-major order, owned by the caller. 16-bit codes are numbers, not bytes in a particular byte order. */
57
70
  integerSamples: Uint8Array | Uint16Array;
58
71
  diagnostics: SdrRenderingResult["diagnostics"];
59
72
  outputEncoding: SdrRenderingResult["outputEncoding"];
60
73
  displayAdaptation: SdrRenderingResult["displayAdaptation"];
61
74
  }
62
75
  export type NativeCaptureSdrTaskState = "ready" | "running" | "completed" | "cancelled" | "failed" | "disposed" | "transferred";
63
- /** Validates/admission-plans without reading external samples or allocating a raster. */
76
+ /** Validates the input and plans the task, including its limits, without reading samples or allocating an image. */
64
77
  export declare function calculateNativeCaptureSdrPlan(input: NativeCaptureSdrInput): NativeCaptureSdrPlan;
65
- /** Single-use task: no partial output escapes; cancel/dispose prevents late publication. */
78
+ /**
79
+ * Tile checks shared by every native SDR backend: identity, precision, row stride, storage and valid
80
+ * input values. Returns a view of the provider's samples (not a copy). Padding is not checked for
81
+ * finite values. Not exported from the package.
82
+ */
83
+ export declare function validateNativeCaptureSdrTile(tile: NativeCaptureSdrTile, request: NativeCaptureSdrTileRequest, plane: CaptureLinearPlane): {
84
+ source: Float32Array | Float64Array;
85
+ stride: number;
86
+ };
87
+ /** Exact 8-bit sRGB quantizer tables; see {@link srgb8Quantizer}. */
88
+ export interface Srgb8Quantizer {
89
+ /** t[k]: smallest binary64 x in [0,1] with referenceSrgb8(x) ≥ k; t[256] = +∞ sentinel. */
90
+ readonly thresholds: Float64Array;
91
+ /** start[b]: reference code of b/4096, the first code of bucket [b/4096, (b+1)/4096). */
92
+ readonly start: Uint8Array;
93
+ }
94
+ /** Internal, for tests: the exact quantizer (null when its construction check failed). */
95
+ export declare function nativeSrgb8QuantizerForTest(): {
96
+ quantizer: Srgb8Quantizer | null;
97
+ quantize(x: number): number;
98
+ };
99
+ /** Per-tile counters for {@link renderSdrRunInto}. `outOfGamut` delays the rejection, as the reference does. */
100
+ export interface SdrPixelCounts {
101
+ negative: number;
102
+ above: number;
103
+ changed: number;
104
+ low: number;
105
+ high: number;
106
+ outOfGamut: boolean;
107
+ }
108
+ /**
109
+ * Internal SDR kernel on typed arrays, shared by native SDR and RAW development.
110
+ *
111
+ * For `pixelCount` interleaved linear-sRGB pixels starting at `source[start]`, it runs exactly the
112
+ * reference (`calculateSdrRendering`) operations in the same order per pixel: -0 → +0 → rendering
113
+ * exposure → shared tone operator → gamut → sRGB transfer → quantization (nearest, ties up) into
114
+ * `codes[outOffset]`. A gamut rejection is delayed via `counts.outOfGamut`, because the reference
115
+ * finishes the whole tone pass (and its exposure errors) first. `scratch` must hold at least 3
116
+ * values. Not exported from the package.
117
+ */
118
+ export declare function renderSdrRunInto(source: Float32Array | Float64Array, start: number, pixelCount: number, profile: SdrRenderingProfile, tone: SdrPixelTone, scale: number, maximum: number, codes: Uint8Array | Uint16Array, outOffset: number, scratch: Float64Array, counts: SdrPixelCounts): void;
119
+ /** The reference's output-encoding declaration for the given code maximum. */
120
+ export declare function sdrOutputEncoding(maximum: number): SdrRenderingResult["outputEncoding"];
121
+ /** A single-use task. No partial output is ever returned, and cancel or dispose stops a late result from being published. */
66
122
  export interface NativeCaptureSdrTask {
67
123
  readonly plan: NativeCaptureSdrPlan;
68
124
  readonly state: NativeCaptureSdrTaskState;
@@ -70,9 +126,8 @@ export interface NativeCaptureSdrTask {
70
126
  run(): Promise<void>;
71
127
  cancel(): void;
72
128
  dispose(): void;
73
- /** Transfers sole retained buffer ownership once. Dispose cannot revoke a transferred buffer. */
129
+ /** Hands over the only copy of the output buffer, once. Dispose cannot take back a buffer already handed over. */
74
130
  takeOutput(): NativeCaptureSdrOutput;
75
131
  }
76
- /** Creates a single-use execution owner. Admission is validated before any buffer/provider work. */
132
+ /** Creates a single-use task. Limits are checked before any buffer is allocated or tile is read. */
77
133
  export declare function createNativeCaptureSdrTask(input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider): NativeCaptureSdrTask;
78
- //# sourceMappingURL=native-capture-sdr.d.ts.map