@photivra/engine 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1074) hide show
  1. package/CHANGELOG.md +401 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,33 +1,179 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- /** Bounded source-radiance → optical/EQE → native packed RAW execution. */
3
- import { calculateNativeRawPlan, createNativeRawTask } from "./native-raw.js";
4
- import { planEnvironmentRawSite } from "./environment-raw-producer.js";
5
- import { executeEnvironmentSensorPhotoSignal } from "../sensor/environment-photo-signal.js";
6
- import { calculateSensorDarkCurrentCharge } from "../sensor/dark-current.js";
2
+ /**
3
+ * Native RAW capture from a scene-radiance provider: source radiance → optics → EQE (external quantum
4
+ * efficiency) → packed RAW codes for the full native sensor, within fixed work limits.
5
+ */
6
+ import { calculateNativeRawPlan, createNativeRawTaskWithCadence } from "./native-raw.js";
7
+ import { createPhaseWhiteLevelAccumulator } from "./raw-white-level.js";
8
+ import { createEnvironmentRawFrameCanonicalMemo, planEnvironmentRawSite } from "./environment-raw-producer.js";
9
+ import { DEFAULT_HOST_YIELD_CADENCE, createHostYieldGate } from "./host-yield-cadence.js";
10
+ import { executeEnvironmentSensorPhotoSignal, prebuildApertureRadianceQuery } from "../sensor/environment-photo-signal.js";
11
+ import { composeNativeEnvironmentSensorSite, createNativeEnvironmentOpticalStageRecorder, createSensorStageRawTask, parseNativeEnvironmentOpticalStageRetention } from "./native-environment-optical-stage.js";
7
12
  import { parseEvidenceList } from "../core/evidence-provenance.js";
8
- import { requireAllowlistedRecord, requirePublicOpaqueId } from "../core/record-validation.js";
13
+ import { rejectUnknownFields, requireAllowlistedRecord, requirePublicOpaqueId } from "../core/record-validation.js";
9
14
  import { stringifyCanonicalJson } from "../core/canonical-json.js";
10
15
  import { freezeOwnedData } from "../core/owned-data.js";
11
16
  import { InvalidConfigurationError } from "../core/configuration-error.js";
17
+ import { createNativeEnvironmentLeanExecutor, createNativeEnvironmentSensorLean, isLeanEnvironmentPlan } from "./native-environment-lean.js";
18
+ import { prepareCaptureExposureWindowSampler } from "../sensor/exposure-window.js";
12
19
  function canonical(value) {
13
20
  return stringifyCanonicalJson(value, { undefinedObjectProperties: "omit", nonFiniteNumberMessage: "Invalid native scene binding.", unsupportedValueMessage: "Invalid native scene binding." });
14
21
  }
15
- /** Every tile is planned and admission-checked before its radiance callbacks; no partial output escapes. */
22
+ /** Site-environment fields that one native event shares across every site (same set as the optical-stage binding). */
23
+ const SHARED_STATE_KEYS = ["sceneBindings", "optics", "motion", "psf", "pupil", "fieldThroughput"];
24
+ /**
25
+ * Strict structural equality of structured-clone output against the reference: Object.is for primitives (0 and
26
+ * -0 differ), identical prototypes limited to plain records and arrays, identical own keys in identical order,
27
+ * and arrays with no holes or non-index properties. Anything else is unequal unless it is the same reference.
28
+ * Equal values therefore serialize to the same canonical string and are interchangeable for every reader, so a
29
+ * site may adopt the reference values. Recursion is bounded by the reference, which serialized without error.
30
+ */
31
+ function samePlainData(value, reference, cleanArrays) {
32
+ if (Object.is(value, reference))
33
+ return true;
34
+ if (typeof value !== "object" || typeof reference !== "object" || value === null || reference === null)
35
+ return false;
36
+ const prototype = Object.getPrototypeOf(value);
37
+ if (prototype !== Object.getPrototypeOf(reference))
38
+ return false;
39
+ if (prototype === Array.prototype) {
40
+ const a = value, b = reference, length = a.length;
41
+ if (length !== b.length)
42
+ return false;
43
+ for (let index = 0; index < length; index++)
44
+ if (!(index in a) || !(index in b) || !samePlainData(a[index], b[index], cleanArrays))
45
+ return false;
46
+ // Holes are excluded above, so equal key counts exclude non-index properties as well.
47
+ if (Object.keys(a).length !== length)
48
+ return false;
49
+ if (!cleanArrays.has(b)) {
50
+ if (Object.keys(b).length !== length)
51
+ return false;
52
+ cleanArrays.add(b);
53
+ }
54
+ return true;
55
+ }
56
+ if (prototype !== Object.prototype && prototype !== null)
57
+ return false;
58
+ const a = value, b = reference, keys = Object.keys(a), referenceKeys = Object.keys(b);
59
+ if (keys.length !== referenceKeys.length)
60
+ return false;
61
+ for (let index = 0; index < keys.length; index++)
62
+ if (keys[index] !== referenceKeys[index])
63
+ return false;
64
+ for (let index = 0; index < keys.length; index++)
65
+ if (!samePlainData(a[keys[index]], b[keys[index]], cleanArrays))
66
+ return false;
67
+ return true;
68
+ }
69
+ /**
70
+ * Replaces a site's private copy of the shared state with the frame's reference values when every field is
71
+ * strictly equal (a 2.0 performance change). All sites then share one engine-owned shared state, so its sampled
72
+ * PSF is parsed and frozen once per frame and duplicate copies can be garbage-collected at once. `verified`
73
+ * holds copies in the current tile already shown equal, so sites the supplier built from one object compare in
74
+ * O(1). Returns false, changing nothing, when any field differs; the caller then serializes as before.
75
+ */
76
+ function adoptSharedState(environment, reference, verified) {
77
+ const record = environment;
78
+ for (let index = 0; index < SHARED_STATE_KEYS.length; index++) {
79
+ const value = record[SHARED_STATE_KEYS[index]];
80
+ if (!(typeof value === "object" && value !== null && value === verified[index]) && !samePlainData(value, reference.values[index], reference.cleanArrays))
81
+ return false;
82
+ }
83
+ for (let index = 0; index < SHARED_STATE_KEYS.length; index++) {
84
+ const key = SHARED_STATE_KEYS[index], value = record[key];
85
+ if (value !== reference.values[index]) {
86
+ verified[index] = value;
87
+ record[key] = reference.values[index];
88
+ }
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Every radiance query the executors will make for these site plans, in their callback order: per site, per instant,
94
+ * per group (spectral-major, spatial-minor), per tap, then per pupil ray. Pupil queries come from the executors' own
95
+ * apertureRadianceQuery, which then hands the executor the same objects.
96
+ */
97
+ function tileQueries(plans) {
98
+ const queries = [];
99
+ const add = (tap) => {
100
+ if (tap.apertureRays === undefined) {
101
+ queries.push({ request: tap.request });
102
+ return;
103
+ }
104
+ // The executor later receives these same objects (apertureRadianceQuery), so they are built once.
105
+ for (const ray of tap.apertureRays)
106
+ queries.push(prebuildApertureRadianceQuery(tap.request, ray));
107
+ };
108
+ for (const p of plans) {
109
+ if (isLeanEnvironmentPlan(p)) {
110
+ for (const instant of p.instants)
111
+ for (const tap of instant.taps)
112
+ add(tap);
113
+ }
114
+ else
115
+ for (const instant of p.instants)
116
+ for (const group of instant.groups)
117
+ for (const tap of group.taps)
118
+ add(tap);
119
+ }
120
+ return queries;
121
+ }
122
+ function parseSceneBinding(value) {
123
+ const binding = requireAllowlistedRecord(value, ["sceneStateId", "providerSceneId", "evidence"], "Invalid native scene binding.");
124
+ return freezeOwnedData({ sceneStateId: requirePublicOpaqueId(binding.sceneStateId, "Invalid scene-state ID."), providerSceneId: requirePublicOpaqueId(binding.providerSceneId, "Invalid provider-scene ID."), evidence: parseEvidenceList(binding.evidence, "nativeEnvironmentSceneBinding.evidence") });
125
+ }
126
+ /**
127
+ * Creates the native RAW task. Every tile is planned and checked against the limits before its radiance
128
+ * callbacks run, and no partial output is ever returned.
129
+ *
130
+ * The task also yields to the host between sites inside a tile once about 8 ms of work has passed (one budget
131
+ * shared with the tile loop). Cancellation is checked after each such yield, so cancel() takes effect within
132
+ * about one site's work. Yield timing never changes tile requests, limit checks, callbacks or output.
133
+ */
16
134
  export function createNativeEnvironmentRawTask(input, provider) {
17
- const r = requireAllowlistedRecord(input, ["raw", "sceneBinding", "maximumProviderEvaluations"], "Invalid native environment input.");
18
- const plan = calculateNativeRawPlan(input.raw), binding = requireAllowlistedRecord(r.sceneBinding, ["sceneStateId", "providerSceneId", "evidence"], "Invalid native scene binding.");
19
- const sceneBinding = freezeOwnedData({ sceneStateId: requirePublicOpaqueId(binding.sceneStateId, "Invalid scene-state ID."), providerSceneId: requirePublicOpaqueId(binding.providerSceneId, "Invalid provider-scene ID."), evidence: parseEvidenceList(binding.evidence, "nativeEnvironmentSceneBinding.evidence") });
135
+ return createNativeEnvironmentRawTaskWithCadence(input, provider, DEFAULT_HOST_YIELD_CADENCE);
136
+ }
137
+ /** Internal: the same task with an explicit host-yield timing. Timing never changes tiles, callbacks or output. Not exported from the package. */
138
+ /** Validates a native environment input exactly as task creation does, before any callback. */
139
+ function admitNativeEnvironmentInput(input) {
140
+ const r = requireAllowlistedRecord(input, ["raw", "sceneBinding", "maximumProviderEvaluations", "opticalStage"], "Invalid native environment input.");
141
+ const plan = calculateNativeRawPlan(input.raw), sceneBinding = parseSceneBinding(r.sceneBinding);
142
+ const retention = r.opticalStage === undefined ? undefined : parseNativeEnvironmentOpticalStageRetention(r.opticalStage);
20
143
  if (sceneBinding.sceneStateId !== plan.exposure.sceneStateId || plan.exposure.sceneTimeSeconds !== 0 || !plan.exposureWindow ||
21
144
  typeof r.maximumProviderEvaluations !== "number" || !Number.isSafeInteger(r.maximumProviderEvaluations) || r.maximumProviderEvaluations < plan.pixelCount || r.maximumProviderEvaluations > 2_000_000_000)
22
145
  throw new InvalidConfigurationError("Native environment requires opening-reference scene binding, an explicit shutter event and bounded full-event query budget.");
146
+ return { plan, sceneBinding, retention, maximum: r.maximumProviderEvaluations };
147
+ }
148
+ export function createNativeEnvironmentRawTaskWithCadence(input, provider, cadence, partition) {
149
+ const { plan, sceneBinding, retention, maximum } = admitNativeEnvironmentInput(input);
150
+ if (partition && retention)
151
+ throw new InvalidConfigurationError("A native environment partition cannot retain the optical stage.");
23
152
  if (!provider || typeof provider.readTile !== "function" || typeof provider.evaluateRadiance !== "function" || typeof provider.yieldControl !== "function" ||
24
153
  (provider.evaluateApertureRadiance !== undefined && typeof provider.evaluateApertureRadiance !== "function") ||
25
- (provider.observePhotoTile !== undefined && typeof provider.observePhotoTile !== "function"))
154
+ (provider.observePhotoTile !== undefined && typeof provider.observePhotoTile !== "function") ||
155
+ (provider.evaluateRadianceBatch !== undefined && typeof provider.evaluateRadianceBatch !== "function"))
26
156
  throw new InvalidConfigurationError("Native environment requires physical source callbacks and host yields.");
27
157
  const read = provider.readTile.bind(provider), evaluate = provider.evaluateRadiance.bind(provider), aperture = provider.evaluateApertureRadiance?.bind(provider), yieldControl = provider.yieldControl.bind(provider);
28
- const maximum = r.maximumProviderEvaluations, observe = provider.observePhotoTile?.bind(provider);
29
- let evaluations = 0, shared;
30
- const task = createNativeRawTask(input.raw, {
158
+ const observe = provider.observePhotoTile?.bind(provider), batch = provider.evaluateRadianceBatch?.bind(provider);
159
+ let evaluations = 0, shared, reference;
160
+ const recorder = retention ? createNativeEnvironmentOpticalStageRecorder(plan, sceneBinding, retention) : undefined;
161
+ const memo = createEnvironmentRawFrameCanonicalMemo(plan.frame, plan.exposureWindow), gate = createHostYieldGate(cadence);
162
+ const layout = plan.frame.colorSamplingProfile.layout, relationship = plan.frame.bindingProfile.relationship;
163
+ const leanFrame = { frameId: plan.frame.frameId, nativeWidth: plan.exposure.geometry.nativeRaster.pixelWidth,
164
+ nativeHeight: plan.exposure.geometry.nativeRaster.pixelHeight, repeatWidth: layout.kind === "periodic-mosaic" ? layout.repeatWidthSites : 0,
165
+ repeatHeight: layout.kind === "periodic-mosaic" ? layout.repeatHeightSites : 0,
166
+ identityBinding: relationship.sitesPerNativeSampleX === 1 && relationship.sitesPerNativeSampleY === 1 && relationship.anchor === "shared-native-top-left" };
167
+ const lean = createNativeEnvironmentLeanExecutor(leanFrame);
168
+ let nativeWindow;
169
+ try {
170
+ nativeWindow = prepareCaptureExposureWindowSampler({ ...plan.exposureWindow, nativeRaster: plan.exposure.geometry.nativeRaster });
171
+ }
172
+ catch {
173
+ nativeWindow = undefined;
174
+ }
175
+ const sensorLean = createNativeEnvironmentSensorLean(leanFrame, plan.frame, nativeWindow);
176
+ const task = createNativeRawTaskWithCadence(input.raw, {
31
177
  async readTile(request, signal) {
32
178
  const supplied = await read(request, signal);
33
179
  if (signal.aborted)
@@ -38,44 +184,299 @@ export function createNativeEnvironmentRawTask(input, provider) {
38
184
  throw new InvalidConfigurationError("Physical source tile identity mismatch.");
39
185
  if (!Array.isArray(tile.sites) || tile.sites.length !== request.width || Array.from({ length: request.width }, (_, i) => i in tile.sites).includes(false))
40
186
  throw new InvalidConfigurationError("Physical source tile needs exact native coverage.");
187
+ // Private copy: planning takes each site environment as engine-owned plan data without copying it again.
41
188
  const sites = structuredClone(tile.sites);
189
+ // Yield to the host between sites on the shared time budget. Cancellation is honoured right after it.
190
+ const pause = async () => {
191
+ if (!gate.due())
192
+ return;
193
+ await yieldControl(signal);
194
+ if (signal.aborted)
195
+ throw new InvalidConfigurationError("Native environment acquisition aborted.");
196
+ gate.restart();
197
+ };
42
198
  let tileCount = 0;
43
- const plans = sites.map((site, j) => {
199
+ const plans = [], verified = [];
200
+ for (let j = 0; j < sites.length; j++) {
201
+ if (j > 0)
202
+ await pause();
203
+ const site = sites[j];
44
204
  requireAllowlistedRecord(site, ["environment", "darkCurrentProfile", "operatingTemperatureC", "charge", "readout"], "Invalid physical site input.");
45
205
  const e = site.environment, index = request.y * plan.exposure.geometry.nativeRaster.pixelWidth + request.x + j;
46
206
  if (e.temporalIntegrationId !== plan.frame.frameId + ":native:" + index)
47
207
  throw new InvalidConfigurationError("Native environment IDs must bind the absolute native index.");
48
- const state = canonical({ sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, pupil: e.pupil, fieldThroughput: e.fieldThroughput });
49
- shared ??= state;
50
- if (state !== shared)
51
- throw new InvalidConfigurationError("Native event requires one shared source/optical/motion state.");
52
- const p = planEnvironmentRawSite(site, request.y * plan.exposure.geometry.nativeRaster.pixelWidth + request.x + j, plan.frame, sceneBinding, plan.exposureWindow);
208
+ // A site strictly equal to the frame's first shared state adopts it and skips serialization; otherwise the
209
+ // canonical comparison runs exactly as before and decides acceptance or the same error.
210
+ let state;
211
+ if (reference !== undefined && adoptSharedState(e, reference, verified))
212
+ state = reference.canonical;
213
+ else {
214
+ state = canonical({ sceneBindings: e.sceneBindings, optics: e.optics, motion: e.motion, psf: e.psf, pupil: e.pupil, fieldThroughput: e.fieldThroughput });
215
+ shared ??= state;
216
+ if (partition)
217
+ partition.shared ??= shared;
218
+ if (state !== shared)
219
+ throw new InvalidConfigurationError("Native event requires one shared source/optical/motion state.");
220
+ reference ??= { canonical: state, values: SHARED_STATE_KEYS.map(key => e[key]), cleanArrays: new WeakSet() };
221
+ }
222
+ // A site matching a verified template gets a lean plan (identical requests and limit checks; see
223
+ // native-environment-lean.ts). A template candidate keeps full query records for its self-check.
224
+ // Otherwise only the photo signal is needed, so the plan keeps just each query's frozen request and image-plane point.
225
+ const leanPlan = lean.plan(e, index);
226
+ let p;
227
+ if (typeof leanPlan === "object")
228
+ p = leanPlan;
229
+ else {
230
+ p = planEnvironmentRawSite(site, index, plan.frame, sceneBinding, plan.exposureWindow, "engine-owned", memo, leanPlan === "candidate" ? "full" : "photo-only");
231
+ if (leanPlan === "candidate")
232
+ lean.admitCandidate(e, index, p);
233
+ }
53
234
  if (p.owned.pupil && !aperture)
54
235
  throw new InvalidConfigurationError("Pupil capture requires origin-aware source visibility.");
236
+ recorder?.admit(index, e, state);
55
237
  tileCount += p.count;
56
238
  if (tileCount > 100_000 || evaluations + tileCount > maximum)
57
239
  throw new InvalidConfigurationError("Native environment exceeds tile or full-event query budget.");
58
- return p;
59
- });
60
- const rawSites = sites.map((site, j) => {
61
- const result = executeEnvironmentSensorPhotoSignal(plans[j], q => { if (signal.aborted)
62
- throw new InvalidConfigurationError("Native source evaluation aborted."); evaluations++; return evaluate(q); }, aperture ? (q, ray) => { if (signal.aborted)
63
- throw new InvalidConfigurationError("Native aperture evaluation aborted."); evaluations++; return aperture(q, ray); } : undefined);
64
- const photoSignal = result.value.photo.value.photoSignal;
65
- const darkCharge = calculateSensorDarkCurrentCharge({ exposure: photoSignal, darkCurrentProfile: site.darkCurrentProfile, operatingTemperatureC: site.operatingTemperatureC }).value;
66
- return { ...site.readout, charge: { ...site.charge, photoSignal, darkCharge } };
67
- });
240
+ plans.push(p);
241
+ }
242
+ // Only value.photo is consumed, so per-evaluation diagnostics are not retained.
243
+ const rawSites = [], photos = [];
244
+ sensorLean.beginTile();
245
+ let evaluateCounted = (q) => { if (signal.aborted)
246
+ throw new InvalidConfigurationError("Native source evaluation aborted."); evaluations++; return evaluate(q); };
247
+ let apertureCounted = aperture ? (q, ray) => { if (signal.aborted)
248
+ throw new InvalidConfigurationError("Native aperture evaluation aborted."); evaluations++; return aperture(q, ray); } : undefined;
249
+ let batched;
250
+ if (batch) {
251
+ // One call for the whole tile, with every planned query in per-query callback order (see tileQueries).
252
+ const queries = tileQueries(plans);
253
+ if (signal.aborted)
254
+ throw new InvalidConfigurationError("Native source evaluation aborted.");
255
+ const results = await batch(Object.freeze(queries), signal);
256
+ if (signal.aborted)
257
+ throw new InvalidConfigurationError("Native source evaluation aborted.");
258
+ if (!Array.isArray(results) || results.length !== queries.length || Array.from({ length: queries.length }, (_, i) => i in results).includes(false))
259
+ throw new InvalidConfigurationError("Batched radiance must return one result per query, in query order.");
260
+ const current = { queries, results: results, next: 0 };
261
+ batched = current;
262
+ // The executors ask for each query in the same order; every step is checked against the planned query.
263
+ const take = (q, ray) => {
264
+ const k = current.next++, planned = current.queries[k];
265
+ if (planned === undefined || planned.request.sampleId !== q.sampleId || (planned.apertureRay === undefined) !== (ray === undefined))
266
+ throw new InvalidConfigurationError("Batched radiance results are out of step with the planned queries.");
267
+ evaluations++;
268
+ return current.results[k];
269
+ };
270
+ evaluateCounted = (q) => take(q, undefined);
271
+ apertureCounted = aperture ? (q, ray) => take(q, ray) : undefined;
272
+ }
273
+ for (let j = 0; j < sites.length; j++) {
274
+ await pause();
275
+ const index = request.y * plan.exposure.geometry.nativeRaster.pixelWidth + request.x + j;
276
+ let p = plans[j], photoSignal;
277
+ if (isLeanEnvironmentPlan(p)) {
278
+ // The full plan (deterministic, no callbacks) is built only when the lean path needs it.
279
+ const fullPlan = () => planEnvironmentRawSite(sites[j], index, plan.frame, sceneBinding, plan.exposureWindow, "engine-owned", memo, "photo-only");
280
+ photoSignal = lean.execute(p, evaluateCounted, apertureCounted, fullPlan);
281
+ // An unverified template: plan this site in full now and execute it in full.
282
+ if (photoSignal === undefined)
283
+ p = fullPlan();
284
+ }
285
+ if (photoSignal === undefined) {
286
+ const full = p, candidate = lean.isCandidate(index);
287
+ const result = executeEnvironmentSensorPhotoSignal(full, evaluateCounted, apertureCounted, candidate ? "full" : "photo-only");
288
+ if (candidate)
289
+ lean.verifyCandidate(index, full, result);
290
+ photoSignal = result.value.photo.value.photoSignal;
291
+ }
292
+ recorder?.record(index, photoSignal);
293
+ photos.push(photoSignal);
294
+ // A site matching a verified sensor template becomes a lean entry: every check its composition and RAW
295
+ // parse would run has been evaluated (see native-environment-lean.ts). Otherwise compose it in full.
296
+ const claimed = sensorLean.claim(sites[j], photoSignal, index);
297
+ if (claimed)
298
+ rawSites.push(claimed);
299
+ else {
300
+ rawSites.push(composeNativeEnvironmentSensorSite(sites[j], photoSignal));
301
+ sensorLean.remember(index, sites[j], photoSignal);
302
+ }
303
+ }
304
+ if (batched && batched.next !== batched.queries.length)
305
+ throw new InvalidConfigurationError("Batched radiance results are out of step with the planned queries.");
68
306
  if (signal.aborted)
69
307
  throw new InvalidConfigurationError("Native photo observation aborted.");
70
308
  if (observe)
71
- await observe(freezeOwnedData({ ...request, sites: rawSites.map((s, j) => ({ nativeIndex: request.y * plan.exposure.geometry.nativeRaster.pixelWidth + request.x + j,
72
- expectedIncidentPhotonCount: s.charge.photoSignal.expectedIncidentPhotonCount, expectedGeneratedElectronCount: s.charge.photoSignal.expectedGeneratedElectronCount })) }), signal);
309
+ await observe(freezeOwnedData({ ...request, sites: photos.map((s, j) => ({ nativeIndex: request.y * plan.exposure.geometry.nativeRaster.pixelWidth + request.x + j,
310
+ expectedIncidentPhotonCount: s.expectedIncidentPhotonCount, expectedGeneratedElectronCount: s.expectedGeneratedElectronCount })) }), signal);
73
311
  return { ...request, sites: rawSites };
74
312
  }, yieldControl
75
- });
313
+ }, cadence, gate, sensorLean.hook, partition ? { y: partition.rows.y, height: partition.rows.height, firstSite: (site) => { partition.firstSite = site; } } : undefined);
314
+ // The frame reference is needed only while tiles are read; release it once the event settles.
315
+ const settle = () => { reference = undefined; };
76
316
  return { plan: task.plan, get state() { return task.state; }, get completedTileCount() { return task.completedTileCount; }, get providerEvaluationCount() { return evaluations; },
317
+ run: () => (recorder ? task.run().catch((error) => { if (task.state === "failed" || task.state === "cancelled" || task.state === "disposed")
318
+ recorder.discard(); throw error; }) : task.run()).finally(settle),
319
+ cancel: () => { if (task.state !== "transferred")
320
+ recorder?.discard(); task.cancel(); }, dispose: () => { if (task.state !== "transferred")
321
+ recorder?.discard(); task.dispose(); },
322
+ takeOutput() {
323
+ // Finish retention first so a retention failure never strands the transferred RAW.
324
+ const opticalStage = recorder && task.state === "completed" ? recorder.finish(evaluations) : undefined;
325
+ const raw = task.takeOutput();
326
+ const base = { raw, sceneBinding, providerEvaluationCount: evaluations, upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe", providerTransportVerified: false, productionPlanActivated: false };
327
+ return opticalStage ? { ...base, opticalStage } : base;
328
+ }
329
+ };
330
+ }
331
+ /**
332
+ * Splits a plan's native rows into at most `count` contiguous bands of nearly equal height (the first
333
+ * `height % count` bands are one row taller), in row order. Deterministic: it depends only on the raster height and
334
+ * `count`. Use one band per worker with createNativeEnvironmentRawPartitionTask.
335
+ */
336
+ export function calculateNativeRawRowBands(plan, count) {
337
+ if (plan !== null && typeof plan === "object")
338
+ rejectUnknownFields(plan, ["schemaVersion", "exposure", "frame", "exposureWindow", "pixelCount", "outputBytes", "tileCount",
339
+ "tileWidth", "upstreamRadiometryVerified", "seedSchedule"], "Native RAW plan");
340
+ const height = plan?.exposure?.geometry?.nativeRaster?.pixelHeight;
341
+ if (typeof height !== "number" || !Number.isSafeInteger(height) || height < 1)
342
+ throw new InvalidConfigurationError("Native RAW partitioning requires a native RAW plan.");
343
+ if (typeof count !== "number" || !Number.isSafeInteger(count) || count < 1 || count > 1024)
344
+ throw new InvalidConfigurationError("Native RAW partition count must be an integer from 1 to 1024.");
345
+ const bands = Math.min(count, height), base = Math.floor(height / bands), extra = height % bands, result = [];
346
+ for (let i = 0, y = 0; i < bands; i++) {
347
+ const h = base + (i < extra ? 1 : 0);
348
+ result.push({ y, height: h });
349
+ y += h;
350
+ }
351
+ return result;
352
+ }
353
+ function inputCanonical(input) {
354
+ return canonical({ raw: input.raw, sceneBinding: input.sceneBinding, maximumProviderEvaluations: input.maximumProviderEvaluations });
355
+ }
356
+ function parseRowBand(value, height) {
357
+ const band = requireAllowlistedRecord(value, ["y", "height"], "Invalid native RAW row band.");
358
+ if (typeof band.y !== "number" || typeof band.height !== "number" || !Number.isSafeInteger(band.y) || !Number.isSafeInteger(band.height) ||
359
+ band.y < 0 || band.height < 1 || band.y + band.height > height)
360
+ throw new InvalidConfigurationError("Native RAW row band must lie inside the native raster.");
361
+ return { y: band.y, height: band.height };
362
+ }
363
+ /**
364
+ * Creates the task for one row band of a native environment capture (opt-in parallel execution, 2.0).
365
+ *
366
+ * Run one partition per worker (or one after another) with the same input, each worker using its own provider, then
367
+ * merge them with composeNativeEnvironmentRawPartitions. The merged output is byte-identical to the single
368
+ * createNativeEnvironmentRawTask output for the same input and a deterministic provider: noise seeds use absolute
369
+ * native indices, and tiles, plans and per-site values are those of the whole-frame task.
370
+ *
371
+ * Each partition checks the same inputs and limits before its callbacks. maximumProviderEvaluations bounds each
372
+ * partition's own work; the merge also rejects a total above it. Frame-wide checks that span sites (one shared
373
+ * state, one readout identity, one white level per CFA phase) run inside each band and again across bands in the
374
+ * merge. Callbacks are split across partitions, and when several partitions fail, which error is seen first depends
375
+ * on the caller's scheduling. Optical-stage retention is not supported in a partition.
376
+ *
377
+ * The package bundles no worker code: the caller creates workers (Web Workers or Node worker threads), runs this
378
+ * task inside each and posts the partition back.
379
+ */
380
+ export function createNativeEnvironmentRawPartitionTask(input, rows, provider) {
381
+ const plan = calculateNativeRawPlan(input?.raw), band = parseRowBand(rows, plan.exposure.geometry.nativeRaster.pixelHeight);
382
+ const probe = { rows: band };
383
+ const task = createNativeEnvironmentRawTaskWithCadence(input, provider, DEFAULT_HOST_YIELD_CADENCE, probe), text = inputCanonical(input);
384
+ return { plan: task.plan, rows: band, get state() { return task.state; }, get completedTileCount() { return task.completedTileCount; },
385
+ get providerEvaluationCount() { return task.providerEvaluationCount; }, run: () => task.run(), cancel: () => task.cancel(), dispose: () => task.dispose(),
386
+ takeOutput() {
387
+ if (task.state !== "completed" || probe.shared === undefined || probe.firstSite === undefined)
388
+ throw new InvalidConfigurationError("Native RAW output unavailable.");
389
+ const site = probe.firstSite, sharedStateCanonical = probe.shared, output = task.takeOutput(), raw = output.raw;
390
+ return { rows: { ...band }, inputCanonical: text, sharedStateCanonical, readoutIdentity: { readoutProfileId: site.readoutProfile.profileId, regimeId: site.regimeId,
391
+ fixedPatternProfileId: site.fixedPatternNoise?.profileId ?? null, fixedPatternSeedUint32: site.fixedPatternNoise?.sensorInstanceSeedUint32 ?? null },
392
+ codes: raw.codes, blackLevels: raw.blackLevels, digitalSaturationCodes: raw.digitalSaturationCodes, saturationFlags: raw.saturationFlags,
393
+ effectiveSaturationCodes: raw.effectiveSaturationCodes, providerEvaluationCount: output.providerEvaluationCount };
394
+ }
395
+ };
396
+ }
397
+ /**
398
+ * Assembles the partitions of one capture into the output createNativeEnvironmentRawTask would have returned for
399
+ * the same input (byte-identical RAW arrays and white levels, the summed provider evaluation count).
400
+ *
401
+ * The partitions must be in row order and cover every native row exactly once, and each must come from
402
+ * createNativeEnvironmentRawPartitionTask with this same input. It rejects, with InvalidConfigurationError, a
403
+ * different input, a gap or overlap, wrong array types or lengths, a second shared state or readout identity, two
404
+ * white levels for one CFA phase, a missing phase, or a total evaluation count above the input's budget. It cannot
405
+ * verify how a partition was computed: posted partitions are the caller's own data.
406
+ */
407
+ export function composeNativeEnvironmentRawPartitions(input, partitions) {
408
+ const { plan, sceneBinding, retention, maximum } = admitNativeEnvironmentInput(input);
409
+ if (retention)
410
+ throw new InvalidConfigurationError("A native environment partition cannot retain the optical stage.");
411
+ const native = plan.exposure.geometry.nativeRaster, width = native.pixelWidth, layout = plan.frame.colorSamplingProfile.layout;
412
+ if (layout.kind !== "periodic-mosaic")
413
+ throw new InvalidConfigurationError("Native RAW requires periodic CFA.");
414
+ const phases = layout.repeatWidthSites * layout.repeatHeightSites, text = inputCanonical(input);
415
+ if (!Array.isArray(partitions) || partitions.length < 1 || partitions.length > native.pixelHeight || Array.from({ length: partitions.length }, (_, i) => i in partitions).includes(false))
416
+ throw new InvalidConfigurationError("Native RAW merge requires a dense list of partitions.");
417
+ const codes = new Uint16Array(plan.pixelCount), blackLevels = new Uint16Array(plan.pixelCount), digitalSaturationCodes = new Uint16Array(plan.pixelCount), saturationFlags = new Uint8Array(plan.pixelCount);
418
+ const white = createPhaseWhiteLevelAccumulator(width, layout.repeatWidthSites, layout.repeatHeightSites);
419
+ let y = 0, total = 0, shared, identity;
420
+ for (const value of partitions) {
421
+ const p = requireAllowlistedRecord(value, ["rows", "inputCanonical", "sharedStateCanonical", "readoutIdentity", "codes", "blackLevels", "digitalSaturationCodes",
422
+ "saturationFlags", "effectiveSaturationCodes", "providerEvaluationCount"], "Invalid native RAW partition.");
423
+ const band = parseRowBand(p.rows, native.pixelHeight), length = band.height * width;
424
+ if (band.y !== y)
425
+ throw new InvalidConfigurationError("Native RAW partitions must cover every row once, in row order.");
426
+ if (p.inputCanonical !== text)
427
+ throw new InvalidConfigurationError("Native RAW partition was computed from a different input.");
428
+ if (!(p.codes instanceof Uint16Array) || !(p.blackLevels instanceof Uint16Array) || !(p.digitalSaturationCodes instanceof Uint16Array) ||
429
+ !(p.saturationFlags instanceof Uint8Array) || !(p.effectiveSaturationCodes instanceof Uint16Array) || p.codes.length !== length || p.blackLevels.length !== length ||
430
+ p.digitalSaturationCodes.length !== length || p.saturationFlags.length !== length || p.effectiveSaturationCodes.length !== phases ||
431
+ typeof p.providerEvaluationCount !== "number" || !Number.isSafeInteger(p.providerEvaluationCount) || p.providerEvaluationCount < 0 || typeof p.sharedStateCanonical !== "string")
432
+ throw new InvalidConfigurationError("Invalid native RAW partition arrays.");
433
+ const id = requireAllowlistedRecord(p.readoutIdentity, ["readoutProfileId", "regimeId", "fixedPatternProfileId", "fixedPatternSeedUint32"], "Invalid native RAW partition identity.");
434
+ const idText = canonical(id);
435
+ shared ??= p.sharedStateCanonical;
436
+ identity ??= idText;
437
+ if (p.sharedStateCanonical !== shared)
438
+ throw new InvalidConfigurationError("Native event requires one shared source/optical/motion state.");
439
+ if (idText !== identity)
440
+ throw new InvalidConfigurationError("Frame requires one readout identity/regime, one fixed-pattern identity and a positive uint16 RAW code span.");
441
+ const offset = band.y * width;
442
+ codes.set(p.codes, offset);
443
+ blackLevels.set(p.blackLevels, offset);
444
+ digitalSaturationCodes.set(p.digitalSaturationCodes, offset);
445
+ saturationFlags.set(p.saturationFlags, offset);
446
+ for (let phase = 0; phase < phases; phase++)
447
+ white.recordPhase(phase, p.effectiveSaturationCodes[phase]);
448
+ total += p.providerEvaluationCount;
449
+ y += band.height;
450
+ }
451
+ if (y !== native.pixelHeight)
452
+ throw new InvalidConfigurationError("Native RAW partitions must cover every row once, in row order.");
453
+ if (total > maximum)
454
+ throw new InvalidConfigurationError("Native environment exceeds tile or full-event query budget.");
455
+ const raw = { plan, codes, blackLevels, digitalSaturationCodes, saturationFlags, effectiveSaturationCodes: white.finish() };
456
+ return { raw, sceneBinding, providerEvaluationCount: total, upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe", providerTransportVerified: false, productionPlanActivated: false };
457
+ }
458
+ /**
459
+ * Re-runs only the sensor stage from a retained optical stage. No radiance callback is called.
460
+ *
461
+ * Use it when only post-optics settings change: noise seed, ISO and its readout regime and gain,
462
+ * fixed-pattern noise, charge, dark-current and capacity profiles, white-balance intent, capture identity
463
+ * or tile width. White balance and rendering are then applied by createNativeRawDevelopmentTask as usual.
464
+ *
465
+ * RAW codes are bit-identical to a full createNativeEnvironmentRawTask with the same final inputs, as long
466
+ * as the radiance provider is a deterministic function of its request.
467
+ *
468
+ * Any optical difference is rejected with InvalidConfigurationError before output. That includes scene
469
+ * binding, geometry or orientation, focal length, aperture, shutter or exposure window, focus,
470
+ * frame/CFA/binding profiles, and any site environment field such as PSF, field throughput, pupil, motion,
471
+ * spectral or temporal sampling and provider profiles.
472
+ *
473
+ * providerEvaluationCount is 0. The caller still owns the stage; it is not used up.
474
+ */
475
+ export function createNativeEnvironmentSensorStageTask(input, opticalStage, provider) {
476
+ const { task, sceneBinding } = createSensorStageRawTask(input, opticalStage, provider, parseSceneBinding);
477
+ return { plan: task.plan, get state() { return task.state; }, get completedTileCount() { return task.completedTileCount; }, get providerEvaluationCount() { return 0; },
77
478
  run: () => task.run(), cancel: () => task.cancel(), dispose: () => task.dispose(),
78
- takeOutput() { return { raw: task.takeOutput(), sceneBinding, providerEvaluationCount: evaluations, upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe", providerTransportVerified: false, productionPlanActivated: false }; }
479
+ takeOutput() { return { raw: task.takeOutput(), sceneBinding, providerEvaluationCount: 0, upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe", providerTransportVerified: false, productionPlanActivated: false }; }
79
480
  };
80
481
  }
81
482
  //# sourceMappingURL=native-environment-raw.js.map