@photivra/engine 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/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 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  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/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulate-capture.js","sourceRoot":"","sources":["../../src/facade/simulate-capture.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * `simulateCapture()` is the easy starting point. It turns a small input into a complete native\n * environment RAW request: scene radiance → optics → spectral EQE (external quantum efficiency) →\n * charge → readout and ADC. That request then runs through the existing native RAW development task\n * and, optionally, the existing JPEG encoder.\n *\n * It adds no physics of its own. Every number comes from existing public contracts: generic tier\n * presets, exposure metering and mode resolution, colorimetry, native environment RAW, native RAW\n * development and print JPEG.\n *\n * Everything the facade decides for the caller is listed in `result.assumptions`: defaults, derived\n * values and fixed modelling choices. Nothing is hidden. The complete underlying request is returned\n * in `result.request`; get the per-site inputs with `request.siteInput(index)`.\n *\n * The 2.0 options are opt-in and only combine existing public contracts. If none is given, the\n * request, RAW, samples and JPEG are byte-identical to the 1.0 facade:\n * - output formats: `png` (`serializePngImage`; sRGB, or Display P3 / Rec. 2020 through the colorimetry\n * matrices and transfer functions) and `dng`\n * (`serializeNativeRawDng` of the packed native RAW; no linear master is declared);\n * - demosaic: `createBuiltInBayerDemosaicProfiles` (bilinear) and mirror borders;\n * - optics: the environment `lensFieldMapping` (projection, radial / Brown–Conrady distortion), radial\n * illumination vignetting as field throughput and a caller sampled lens PSF;\n * - motion: constant camera angular velocity and the electronic rolling-shutter exposure schedule.\n * @see docs/QUICK_START.md\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { requireInputObject } from \"../core/record-validation.js\";\nimport { ENGINE_API_VERSION } from \"../core/version.js\";\nimport type { EvidenceProvenance } from \"../core/evidence-provenance.js\";\nimport { GENERIC_TIER_ASSETS, type GenericEquipmentTier, type GenericEquipmentTierPreset } from \"../equipment/generic-tier-assets.js\";\nimport { parseCallerCameraPreset } from \"./camera-preset.js\";\nimport { createHostYield } from \"./host-yield.js\";\nimport { resolveGenericEquipmentExposureCapabilities } from \"../equipment/exposure-capabilities.js\";\nimport { resolveGenericIsoSignalChain } from \"../sensor/iso-signal-chain.js\";\nimport { meterRelativeExposure } from \"../exposure/metering.js\";\nimport { createExposureMeterTargetFromMeteringResult, setExposureCompensationOnMeterTarget } from \"../exposure/metering-target.js\";\nimport { resolveManualExposureMode, resolveAperturePriorityExposureMode, resolveShutterPriorityExposureMode,\n resolveProgramAutoExposureMode } from \"../exposure/exposure-mode-resolver.js\";\nimport { parseExposureProgramLineProfile, type ExposureProgramLineProfile } from \"../exposure/program-line.js\";\nimport { resolveCaptureGeometry } from \"../output/capture-geometry.js\";\nimport { estimateCie1931ColorMatchingFunctions, type PreparedColorimetricSpectrum } from \"../color/color-matching-functions.js\";\nimport { createColorTemperatureWhiteBalanceIntent, resolveColorTemperatureWhiteBalance, resolveCustomWhiteBalance,\n resolveManualWhiteBalance, estimateAutoWhiteBalance, type ResolvedWhiteBalanceState } from \"../color/white-balance.js\";\nimport { createCaptureWhiteBalanceIntent, type CaptureWhiteBalanceIntent } from \"../capture/simulated-capture.js\";\nimport { SENSOR_RAW_PRODUCER_NOISE_MODEL } from \"../capture/sensor-raw-producer.js\";\nimport { calculateNativeRawPlan, type NativeRawInput, type NativeRawOutput, type NativeRawPlan } from \"../capture/native-raw.js\";\nimport { createNativeEnvironmentRawTask, type NativeEnvironmentRawInput,\n type NativeEnvironmentRawTask, type NativeEnvironmentRawTile } from \"../capture/native-environment-raw.js\";\nimport { createNativeRawDevelopmentTask, type NativeRawDevelopmentInput, type RawHighlightDiagnostics } from \"../capture/native-raw-development.js\";\nimport type { RawFrameReconstructionPhaseProfile } from \"../capture/raw-frame-reconstruction.js\";\nimport type { ExportSensorColorProfile } from \"../capture/photographic-export.js\";\nimport { parseSdrRenderingProfile, type SdrRenderingProfile, type SdrToneCurve, type SdrToneCurveParameters, type SdrRenderingResult } from \"../output/sdr-rendering.js\";\nimport type { RawHighlightMode } from \"../color/sensor-color-development.js\";\nimport { createPrintJpegTask } from \"../output/print-jpeg.js\";\nimport type { SimulateEnvironmentSensorRawFrameInput } from \"../capture/environment-raw-producer.js\";\nimport { checkNativeRawIntegrity, prepareNativeRawDevelopment } from \"../capture/native-raw-development.js\";\nimport { createRawPixelDeveloper } from \"../capture/raw-development-kernel.js\";\nimport { BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION as BUILT_IN_DEMOSAIC_VERSION, createBuiltInBayerDemosaicProfiles } from \"../sensor/raw-reconstruction.js\";\nimport { transformOrientedRasterPointToNative } from \"../output/capture-geometry.js\";\nimport { resolveCaptureColorModel } from \"../color/capture-color.js\";\nimport { evaluateBt709Oetf, evaluateSrgbEncoding, resolveRgbColorSpace } from \"../color/rgb-color-spaces.js\";\nimport { serializePngImage, type PngColourEncoding } from \"../output/png-encoder.js\";\nimport { parseLensProjectionModel, type LensProjectionModel } from \"../camera/lens-projection.js\";\nimport { prepareEnvironmentLensFieldMapping, type EnvironmentLensFieldMapping } from \"../optics/sensor-environment-query.js\";\nimport type { RadialDistortionProfile } from \"../optics/radial-distortion.js\";\nimport type { BrownConradyDistortionProfile } from \"../optics/brown-conrady-distortion.js\";\nimport type { IlluminationVignettingProfile } from \"../optics/illumination-vignetting.js\";\nimport type { CalculateEnvironmentSensorPhotoSignalInput } from \"../sensor/environment-photo-signal.js\";\nimport { createRollingShutterCaptureExposureSchedule, resolveElectronicRollingShutterExposureSchedule,\n type ElectronicRollingShutterExposureSchedule } from \"../sensor/readout-exposure-linkage.js\";\nimport { calculateCaptureExposureWindows } from \"../sensor/exposure-window.js\";\nimport { multiplyMatrices, type ColorMatrix3x3, type ColorVector3 } from \"../color/colorimetry-math.js\";\nimport { prepareRgbGamutMapping, type PreparedRgbGamutMapping } from \"../color/gamut-mapping.js\";\nimport { serializeNativeRawDng, type NativeRawDng } from \"../capture/native-raw-dng.js\";\nimport { resolveSensorReadoutRegime } from \"../sensor/raw-readout.js\";\nimport { resolveChartScene, CHART_SCENE_PRESETS, type ChartScene, type ResolvedChartScene } from \"./chart-scenes.js\";\nimport { resolveCaptureIlluminant, calculateIlluminantIrradianceScale, buildPlanarSceneRadianceProvider, requireCallerScene, FACADE_SPECTRAL_RANGE_NANOMETERS,\n PHOTOPIC_MAXIMUM_LUMINOUS_EFFICACY_LM_PER_W, type CaptureIlluminant, type CallerRadianceScene, type CallerReflectanceScene,\n type PlanarSceneRadianceProvider, type ResolvedCaptureIlluminant } from \"./scene-radiance.js\";\n\n/** Version of how the facade builds requests. It changes whenever the same input would build a different request. */\nexport const SIMULATE_CAPTURE_FACADE_VERSION = \"1.0.0\" as const;\n\nexport type SimulateCaptureExposureMode = \"manual\" | \"aperture-priority\" | \"shutter-priority\" | \"program\";\nexport type SimulateCaptureOutputFormat = \"srgb-8\" | \"srgb-16\" | \"jpeg\" | \"png\" | \"dng\";\nexport type SimulateCaptureWhiteBalance =\n | \"scene-illuminant\"\n | \"auto\"\n | \"none\"\n | { kelvin: number; tint?: number }\n | { channelGains: { red: number; green: number; blue: number } };\n/**\n * PNG colour encoding. `srgb` is the developed sRGB output. The others take the developed linear\n * colour (camera → XYZ → linear sRGB/D65, unclipped) and convert it through CIE XYZ into the target\n * primaries:\n * - `display-p3`: Display P3 primaries (W3C CSS Color 4 `display-p3`; also SMPTE EG 432-1) with the\n * sRGB transfer function;\n * - `rec2020`: ITU-R BT.2020 primaries and OETF.\n * PQ and HLG (BT.2100) are not part of 2.0; see THIRD_PARTY.md.\n */\nexport type SimulateCaptureColorEncoding = \"srgb\" | \"display-p3\" | \"rec2020\";\n/** Built-in Bayer demosaic kernels (`createBuiltInBayerDemosaicProfiles`). */\nexport type SimulateCaptureDemosaic = \"bilinear\";\n/**\n * `margin` renders extra native sites around the output, as far as the kernel reaches. `mirror` renders\n * exactly the output and reads mirrored (reflect-101) copies of the missing border sites. Mirroring is\n * checked to keep the CFA (colour filter array) pattern consistent.\n */\nexport type SimulateCaptureBorderHandling = \"margin\" | \"mirror\";\nexport type SimulateCaptureLensDistortion =\n | { kind: \"radial\"; profile: RadialDistortionProfile }\n | { kind: \"brown-conrady\"; profile: BrownConradyDistortionProfile };\nexport interface SimulateCaptureMotion {\n /** Constant camera angular velocity, rad/s, in the engine's pitch/yaw/roll convention. Missing axes are 0. */\n angularVelocityRadPerSec?: { pitch?: number; yaw?: number; roll?: number };\n /** Default \"global\". `rolling` derives the exposure schedule from the body's rolling readout declaration. */\n shutter?: \"global\" | \"rolling\";\n /** Rolling shutter only: time from the first to the last line over the simulated frame, in s. Default: the body's declared readout skew. */\n rollingShutterSkewSeconds?: number;\n}\n\nexport interface SimulateCaptureOptions {\n /** Generic tier preset id or a full preset record (for example a modified copy of a catalog entry). Default \"professional\". */\n camera?: GenericEquipmentTier | GenericEquipmentTierPreset;\n lens?: {\n /** Must lie in the lens capability (the generic primes are 50 mm). Default: the lens's shortest focal length. */\n focalLengthMm?: number;\n /** Aperture for manual and aperture-priority modes. Default 8. */\n fNumber?: number;\n /** Focus distance in metres. Default: the subject distance. */\n focusDistanceM?: number;\n /** Opt-in ideal circular-pupil ray sampling (defocus/depth of field). Default off (central ray only). */\n pupilSampling?: { radialSamples: number; angularSamples: number };\n /** Ideal lens projection (`LENS_PROJECTION_MODELS`). Default \"rectilinear\". Not combinable with pupilSampling. */\n projection?: LensProjectionModel;\n /** Caller-declared radial or Brown–Conrady distortion profile. Default none. Not combinable with pupilSampling. */\n distortion?: SimulateCaptureLensDistortion;\n /** Caller-declared radial relative-illumination (vignetting) profile, applied as environment field throughput. */\n vignetting?: IlluminationVignettingProfile;\n /**\n * Caller sampled lens PSF, passed unchanged to the environment contract. Its focal length, f-number and\n * focus must equal the resolved capture settings exactly. Not combinable with pupilSampling.\n */\n psf?: Extract<CalculateEnvironmentSensorPhotoSignalInput[\"psf\"], { kind: \"sampled-local\" }>;\n };\n exposure?: {\n /** Default \"manual\". */\n mode?: SimulateCaptureExposureMode;\n /** Default 100. */\n iso?: number;\n /** Shutter for manual and shutter-priority modes. Default 1/125 s. */\n shutterSeconds?: number;\n /** Exposure compensation applied to the meter target, in stops. Default 0. */\n compensationStops?: number;\n };\n /** Required: an engine chart (for example `{ preset: \"uniform\" }`, an 18 % grey card) or a caller reflectance/radiance function. */\n scene: ChartScene | CallerReflectanceScene | CallerRadianceScene;\n /** Distance from the camera to the scene plane in metres. Default 5. */\n subjectDistanceM?: number;\n /** Default: Planckian 6500 K (a blackbody stand-in for daylight; CIE D65 is not bundled). */\n illuminant?: CaptureIlluminant;\n /** Illuminance on the scene plane, lux. Default about 21 481 lux (see `SIMULATE_CAPTURE_DEFAULT_ILLUMINANCE_LUX` and the assumptions). */\n illuminanceLux?: number;\n output?: {\n /** Output pixels; the native sensor raster adds a one-site demosaic border on each side. Defaults 64 × 64. */\n width?: number;\n height?: number;\n /** Default \"srgb-8\". */\n format?: SimulateCaptureOutputFormat;\n /** Default \"identity\". */\n toneCurve?: SdrToneCurve;\n /** Required by the luminance tone curves (see `SdrToneCurveParameters`). The facade does not make one up. */\n toneCurveParameters?: SdrToneCurveParameters;\n /** Default \"clip\". */\n highlightMode?: RawHighlightMode;\n /** Default \"scene-illuminant\". */\n whiteBalance?: SimulateCaptureWhiteBalance;\n /** JPEG constant quantization step 1-255 (not a manufacturer 'quality'). Default 2. */\n jpegQuantizationStep?: number;\n /** PNG only. Default \"srgb\". */\n colorEncoding?: SimulateCaptureColorEncoding;\n /** PNG only: 8 or 16 bits per sample. Default 8. */\n bitDepth?: 8 | 16;\n /**\n * PNG SDR encodings only. Default \"clip\" (per-component clip to the target gamut). \"perceptual\" maps\n * through `prepareRgbGamutMapping`: constant CIELAB L* and hue, chroma above 90 % of the boundary compressed.\n */\n gamutMapping?: \"clip\" | \"perceptual\";\n /** Default: the 1.0 facade's bilinear RGGB kernels. */\n demosaic?: SimulateCaptureDemosaic;\n /** Default \"margin\". */\n borderHandling?: SimulateCaptureBorderHandling;\n /** DNG only: optional capture-event time (YYYY-MM-DDTHH:mm:ss.sssZ); without it no date tags are written. */\n dng?: { capturedAtUtc?: string };\n };\n /** Camera motion and shutter type. Default: still camera, global electronic shutter. */\n motion?: SimulateCaptureMotion;\n sensor?: {\n /** Pixel pitch in micrometres. Default 6. */\n pixelPitchMicrometers?: number;\n /** Maximum spectral quadrature subinterval in nm. Default 20. */\n spectralStepNanometers?: number;\n /** Temporal midpoint samples across the exposure. Default 1. */\n temporalSampleCount?: number;\n /** Noise seed (uint32). Default 1. */\n noiseSeed?: number;\n };\n /** Aborting cancels the running task; the promise rejects with a domain error and returns no partial image. */\n signal?: AbortSignal;\n /** Called after each committed RAW, development or JPEG tile. Cannot change output. */\n onProgress?: (progress: SimulateCaptureProgress) => void;\n}\n\nexport interface SimulateCaptureProgress {\n stage: \"raw\" | \"white-balance\" | \"development\" | \"jpeg\";\n completedTileCount: number;\n totalTileCount: number;\n}\n\n/** One decision the facade made: a default, a derived value or a fixed modelling choice. */\nexport interface SimulateCaptureAssumption {\n /** Dotted option path or modelling topic, for example \"exposure.shutterSeconds\" or \"model.lens-psf\". */\n id: string;\n kind: \"default\" | \"derived\" | \"model\";\n value: unknown;\n explanation: string;\n}\n\nexport interface SimulateCaptureResult {\n facadeVersion: typeof SIMULATE_CAPTURE_FACADE_VERSION;\n engineApiVersion: string;\n image: {\n width: number;\n height: number;\n format: SimulateCaptureOutputFormat;\n /** Interleaved RGB, row by row from the top-left. sRGB-encoded (W3C CSS Color 4 sRGB; also IEC 61966-2-1) unless `colorEncoding` says otherwise. */\n samples: Uint8Array | Uint16Array;\n /** Baseline JPEG bytes when format is \"jpeg\". */\n jpeg?: Uint8Array;\n /** PNG file bytes when format is \"png\". */\n png?: Uint8Array;\n /** Encoding of `samples` and `png` when format is \"png\". */\n colorEncoding?: SimulateCaptureColorEncoding;\n /** Lossless uncompressed CFA DNG of the packed RAW when format is \"dng\" (`serializeNativeRawDng`); `samples` are then sRGB 8-bit. */\n dng?: Uint8Array;\n };\n /** Packed native RAW (codes, black levels, saturation flags) as produced by the native environment RAW task. */\n raw: NativeRawOutput;\n plan: NativeRawPlan;\n /** The complete underlying request. */\n request: {\n environmentRaw: NativeEnvironmentRawInput;\n /** Rebuilds the exact physical site input the provider supplied for a native row-major index. */\n siteInput(nativeIndex: number): SimulateEnvironmentSensorRawFrameInput[\"sites\"][number];\n development: Omit<NativeRawDevelopmentInput, \"raw\">;\n whiteBalanceState: ResolvedWhiteBalanceState | null;\n };\n exposure: {\n mode: SimulateCaptureExposureMode;\n settings: { fNumber: number; shutterSeconds: number; iso: number };\n /** Exposure value at ISO 100 of the settings, log2(N²/t). */\n ev100: number;\n meteredSceneLuminanceCdPerSquareMeter: number;\n /** Full output of the existing exposure-mode resolver. */\n resolution: unknown;\n };\n scene: {\n sceneId: string;\n preset: string;\n parameters: Readonly<Record<string, unknown>>;\n illuminant: { id: string; description: string; illuminanceLux: number };\n distanceM: number;\n /** Physical size of the framed scene plane, metres. */\n framedWidthM: number;\n framedHeightM: number;\n /**\n * SHA-256 of the canonical scene description, recorded as the capture source digest. Caller spectra (a\n * `spectrum` or `daylight` illuminant, chart reflectance spectra) are part of the description: tabulated\n * data exactly, function spectra sampled at 1 nm over 380-780 nm, plus the daylight basis datasetId.\n * The body of a caller scene's evaluate function is not hashed.\n */\n sourceSha256: string;\n };\n diagnostics: {\n providerEvaluationCount: number;\n highlight: RawHighlightDiagnostics;\n rendering: SdrRenderingResult[\"diagnostics\"];\n /** Present with output.gamutMapping \"perceptual\": pixels whose chroma or lightness the mapping changed. */\n gamutMapping?: { method: \"cielab-hue-preserving-chroma-compression\"; kneeFraction: number; adjustedPixelCount: number; lightnessClippedPixelCount: number };\n timingsMs: { raw: number; whiteBalance: number; development: number; jpeg: number; total: number };\n };\n provenance: {\n scientificStatus: \"approximation\";\n cameraPresetId: string;\n cameraPresetVersion: string;\n evidence: readonly EvidenceProvenance[];\n /** Existing engine contracts the facade composed, in execution order. */\n composedContracts: readonly string[];\n limitations: readonly string[];\n };\n assumptions: readonly SimulateCaptureAssumption[];\n}\n\nconst FACADE_EVIDENCE: readonly EvidenceProvenance[] = Object.freeze([Object.freeze({ sourceOrigin: \"photivra\" as const,\n sourceReference: \"photivra:simulate-capture-facade\", reuseStatus: \"photivra-owned\" as const })]);\nconst DEFAULTS = Object.freeze({ camera: \"professional\" as const, fNumber: 8, shutterSeconds: 1 / 125, iso: 100, compensationStops: 0,\n subjectDistanceM: 5, width: 64, height: 64, format: \"srgb-8\" as const, toneCurve: \"identity\" as const, highlightMode: \"clip\" as const,\n whiteBalance: \"scene-illuminant\" as const, jpegQuantizationStep: 2, pixelPitchMicrometers: 6, spectralStepNanometers: 20,\n temporalSampleCount: 1, noiseSeed: 1, illuminantKelvin: 6500 });\n/** Standard output sensitivity S = 10 / H (CIPA DC-004-2020 §3.2): the reference exposure in lx·s is 10 / S. */\nconst SOS_REFERENCE_EXPOSURE_NUMERATOR_LUX_SECONDS = 10;\n/** Camera equation H = 0.65·L·t/N² (CIPA DC-004-2020 §5.5 (4); 0.65 = τ·π/4 with τ = 0.828, Explanation 4). */\nconst CAMERA_EQUATION_CONSTANT = 0.65;\n/** Neutral reference reflectance: DC-004 ties the SOS reference level to an 18 % grey (Explanation 1 and 2.2). */\nconst GREY_CARD_REFLECTANCE = 0.18;\n/** Scene luminance (cd/m²) whose focal-plane exposure 0.65·L·t/N² equals the SOS reference exposure 10/S. */\nfunction sosReferenceLuminance(fNumber: number, shutterSeconds: number, iso: number): number {\n return SOS_REFERENCE_EXPOSURE_NUMERATOR_LUX_SECONDS * fNumber ** 2 / (CAMERA_EQUATION_CONSTANT * shutterSeconds * iso);\n}\n/**\n * Default illuminance, lux: an 18 % Lambertian grey card (L = 0.18·E/π) then gets exactly the CIPA DC-004 standard\n * output sensitivity reference exposure H = 10/S at f/8, 1/125 s, ISO 100:\n * E = π·10·N²/(0.65·t·S·0.18) = π·80 000/11.7 ≈ 21 480.98 lux.\n */\nexport const SIMULATE_CAPTURE_DEFAULT_ILLUMINANCE_LUX = Math.PI * sosReferenceLuminance(DEFAULTS.fNumber, DEFAULTS.shutterSeconds, DEFAULTS.iso) /\n GREY_CARD_REFLECTANCE;\n/** Demosaic border, native sites per side. */\nconst MARGIN = 1;\n\n/** Default temporal midpoints when the camera rotates (2.0 motion option). */\nconst ROTATING_TEMPORAL_SAMPLE_COUNT = 8;\nconst IDS = Object.freeze({ frame: \"facade-frame\", mode: \"native-still\", cfa: \"photivra-generic-bayer\", binding: \"facade-native-cfa\",\n sceneState: \"facade-scene-state\", scene: \"facade-scene\", provider: \"facade-provider\", lights: \"facade-lights\", materials: \"facade-materials\",\n capture: \"facade-capture\", spectral: \"facade-colorimetric-eqe\", sampling: \"facade-sampling\", stack: \"facade-no-aa\",\n stationarity: \"facade-stationarity\", operatingState: \"facade-operating-state\", dark: \"facade-dark\", completeness: \"facade-completeness\",\n chargeSampling: \"facade-charge-sampling\", capacity: \"facade-capacity\" });\nconst CHANNELS = [\"red\", \"green\", \"blue\"] as const;\ntype Channel = typeof CHANNELS[number];\n/**\n * Synthetic colorimetric sensor: channel EQE(λ) = a·cmf(λ)·(555 nm/λ), with cmf = x̄, ȳ, z̄. The λ factor turns\n * the energy-weighted CMF (colour-matching function) into a photon-counting response. So channel counts are\n * proportional to CIE XYZ (the Luther–Ives condition holds, up to quadrature error), and the camera→XYZ\n * matrix is diagonal.\n */\nconst EQE_SCALE: Readonly<Record<Channel, number>> = Object.freeze({ red: 0.5, green: 0.5, blue: 0.25 });\nconst CMF_KEY: Readonly<Record<Channel, \"x\" | \"y\" | \"z\">> = Object.freeze({ red: \"x\", green: \"y\", blue: \"z\" });\nconst CAMERA_TO_XYZ: readonly (readonly number[])[] = Object.freeze([[EQE_SCALE.green / EQE_SCALE.red, 0, 0], [0, 1, 0], [0, 0, EQE_SCALE.green / EQE_SCALE.blue]].map((r) => Object.freeze(r)));\nconst XYZ_TO_CAMERA = [[EQE_SCALE.red / EQE_SCALE.green, 0, 0], [0, 1, 0], [0, 0, EQE_SCALE.blue / EQE_SCALE.green]] as const;\n/** Synthetic dark current per site at the operating temperature, e⁻/s. */\nconst DARK_CURRENT_ELECTRONS_PER_SECOND = 1;\nconst OPERATING_TEMPERATURE_C = 20;\n\nfunction fail(message: string): never { throw new InvalidConfigurationError(message); }\nfunction positive(value: unknown, name: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) fail(name + \" must be a positive finite number.\");\n return value as number;\n}\nfunction integerIn(value: unknown, name: string, minimum: number, maximum: number): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < minimum || value > maximum) fail(name + \" must be an integer from \" + minimum + \" to \" + maximum + \".\");\n return value as number;\n}\nfunction allowKeys(value: unknown, name: string, keys: readonly string[]): Record<string, unknown> {\n if (value === undefined) return {};\n requireInputObject(value, name);\n for (const key of Object.keys(value as object)) if (!keys.includes(key)) fail(\"Unknown \" + name + \" field: \" + key + \".\");\n return value as Record<string, unknown>;\n}\nfunction sampled(values: readonly { nm: number; value: number }[]): { wavelengthUnit: \"nm\"; wavelengthBasis: \"vacuum\"; interpolation: \"piecewise-linear\";\n outsideRangeBehavior: \"fail-closed\"; evidence: readonly EvidenceProvenance[]; samples: { wavelengthNanometers: number; value: number }[] } {\n return { wavelengthUnit: \"nm\", wavelengthBasis: \"vacuum\", interpolation: \"piecewise-linear\", outsideRangeBehavior: \"fail-closed\", evidence: FACADE_EVIDENCE,\n samples: values.map((s) => ({ wavelengthNanometers: s.nm, value: s.value })) };\n}\nasync function sha256Hex(text: string): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) fail(\"simulateCapture needs crypto.subtle (a secure browser context or Node 22+) to digest the scene description.\");\n const bytes = new Uint8Array(await subtle.digest(\"SHA-256\", new TextEncoder().encode(text)));\n return Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n/**\n * The form in which a caller spectrum enters the scene digest. Tabulated data is hashed exactly as its\n * (wavelength, value) pairs. A function spectrum has no data to hash, so it is sampled at the facade's\n * 1 nm integer nodes over 380-780 nm (the grid the facade also uses to normalize illuminance).\n */\nfunction spectrumDigestForm(raw: unknown, prepared: PreparedColorimetricSpectrum): unknown {\n const record = raw as { kind?: unknown; samples?: readonly { wavelengthNanometers: number; value: number }[] };\n if (record.kind === \"tabulated\" && Array.isArray(record.samples)) {\n return { kind: \"tabulated\", samples: record.samples.map((sample) => [sample.wavelengthNanometers, sample.value]) };\n }\n const values: number[] = [];\n for (let nm = FACADE_SPECTRAL_RANGE_NANOMETERS.minimum; nm <= FACADE_SPECTRAL_RANGE_NANOMETERS.maximum; nm++) values.push(prepared.evaluate(nm));\n return { kind: \"function-sampled-1nm\", rangeNanometers: [FACADE_SPECTRAL_RANGE_NANOMETERS.minimum, FACADE_SPECTRAL_RANGE_NANOMETERS.maximum], values };\n}\nfunction luminanceOf(radiance: (nm: number) => number): number {\n let sum = 0;\n for (let nm = FACADE_SPECTRAL_RANGE_NANOMETERS.minimum; nm <= FACADE_SPECTRAL_RANGE_NANOMETERS.maximum; nm += 5) {\n const w = nm === FACADE_SPECTRAL_RANGE_NANOMETERS.minimum || nm === FACADE_SPECTRAL_RANGE_NANOMETERS.maximum ? 2.5 : 5;\n sum += w * radiance(nm) * estimateCie1931ColorMatchingFunctions(nm).y;\n }\n return PHOTOPIC_MAXIMUM_LUMINOUS_EFFICACY_LM_PER_W * sum;\n}\nfunction illuminantXyz(illuminant: ResolvedCaptureIlluminant): [number, number, number] {\n let x = 0, y = 0, z = 0;\n for (let nm = FACADE_SPECTRAL_RANGE_NANOMETERS.minimum; nm <= FACADE_SPECTRAL_RANGE_NANOMETERS.maximum; nm++) {\n const s = illuminant.shape.evaluate(nm), c = estimateCie1931ColorMatchingFunctions(nm);\n x += s * c.x; y += s * c.y; z += s * c.z;\n }\n return [x / y, 1, z / y];\n}\n/** Bilinear RGGB demosaic as explicit linear neighbourhood kernels (weights sum to one per output channel). */\nfunction bilinearPhaseProfiles(): RawFrameReconstructionPhaseProfile[] {\n const cross = [[1, 0], [-1, 0], [0, 1], [0, -1]], diagonal = [[1, 1], [1, -1], [-1, 1], [-1, -1]], horizontal = [[1, 0], [-1, 0]], vertical = [[0, 1], [0, -1]];\n type Contribution = { offsetX: number; offsetY: number; sourceChannelId: Channel; weight: number };\n const average = (offsets: number[][], channel: Channel): Contribution[] => offsets.map(([x, y]) => ({ offsetX: x!, offsetY: y!, sourceChannelId: channel, weight: 1 / offsets.length }));\n const self = (channel: Channel): Contribution[] => [{ offsetX: 0, offsetY: 0, sourceChannelId: channel, weight: 1 }];\n const kernels: Record<string, Record<Channel, ReturnType<typeof self>>> = {\n \"0,0\": { red: self(\"red\"), green: average(cross, \"green\"), blue: average(diagonal, \"blue\") },\n \"1,0\": { red: average(horizontal, \"red\"), green: self(\"green\"), blue: average(vertical, \"blue\") },\n \"0,1\": { red: average(vertical, \"red\"), green: self(\"green\"), blue: average(horizontal, \"blue\") },\n \"1,1\": { red: average(diagonal, \"red\"), green: average(cross, \"green\"), blue: self(\"blue\") }\n };\n return [[0, 0], [1, 0], [0, 1], [1, 1]].map(([px, py], index) => ({ phaseX: px!, phaseY: py!, profile: { schemaVersion: \"0.1.0\" as const,\n profileId: \"facade-bilinear-phase-\" + index, profileVersion: \"1\", captureModeId: IDS.mode, colorSamplingProfileId: IDS.cfa,\n scientificStatus: \"approximation\" as const, method: \"explicit-linear-native-neighborhood\" as const,\n normalization: \"weights-sum-to-one-per-output-channel\" as const, negativeBlackSubtractedValuesAllowed: true,\n kernels: CHANNELS.map((c) => ({ outputChannelId: c, contributions: kernels[px + \",\" + py]![c] })), evidence: FACADE_EVIDENCE,\n limitations: [\"Bilinear interpolation of the RGGB mosaic; no edge-directed demosaic, false-colour suppression or calibration.\"] } })) as unknown as RawFrameReconstructionPhaseProfile[];\n}\nfunction defaultProgramLine(): ExposureProgramLineProfile {\n // Generic educational program line written for the engine, relative to the f/8, 1/125 s reference. For less light\n // it first opens the aperture toward f/4, then lengthens the shutter. For more light it first closes toward\n // f/16, then shortens the shutter.\n return parseExposureProgramLineProfile({ schemaVersion: \"0.1.0\", profileId: \"facade-generic-program-line\", profileVersion: \"1.0.0\",\n scientificStatus: \"approximation\", policyKind: \"generic-program-line\", interpolation: \"log2-aperture-shutter\", evidence: FACADE_EVIDENCE,\n limitations: [\"Generic educational program line authored for the capture facade; not any manufacturer's program.\"],\n nodes: [\n { nodeId: \"minus-6\", opticalExposureStopsFromReference: -6, aperture: 16, shutterSeconds: 1 / 2000 },\n { nodeId: \"minus-2\", opticalExposureStopsFromReference: -2, aperture: 16, shutterSeconds: 1 / 125 },\n { nodeId: \"zero\", opticalExposureStopsFromReference: 0, aperture: 8, shutterSeconds: 1 / 125 },\n { nodeId: \"plus-2\", opticalExposureStopsFromReference: 2, aperture: 4, shutterSeconds: 1 / 125 },\n { nodeId: \"plus-9\", opticalExposureStopsFromReference: 9, aperture: 4, shutterSeconds: 128 / 125 }\n ] });\n}\n\n/** PNG colour signalling: the sRGB chunk for sRGB, ITU-T H.273 code points through cICP otherwise. */\nfunction pngColourEncoding(encoding: SimulateCaptureColorEncoding): PngColourEncoding {\n if (encoding === \"srgb\") return { kind: \"srgb\", renderingIntent: \"perceptual\" };\n if (encoding === \"display-p3\") return { kind: \"cicp\", primaries: \"display-p3\", transfer: \"srgb\", fullRange: true };\n return { kind: \"cicp\", primaries: \"bt2020\", transfer: \"bt709\", fullRange: true };\n}\n/**\n * Develops the packed RAW to unclipped linear sRGB/D65, using the exact operator inside\n * `createNativeRawDevelopmentTask`. Validation, demosaic kernels, border handling, per-site white-level\n * clipping, white balance, highlight mode and the camera→XYZ→linear-sRGB matrices are all the same. It\n * stops before tone mapping, gamut clipping and quantization. It reads the RAW without taking ownership.\n */\nasync function developLinearSrgb(input: NativeRawDevelopmentInput, afterRow: (completed: number, total: number) => Promise<void>):\n Promise<{ rgb: Float64Array; highlight: RawHighlightDiagnostics }> {\n const v = prepareNativeRawDevelopment(input), plan = v.plan, raw = input.raw, layout = plan.frame.colorSamplingProfile.layout;\n if (layout.kind !== \"periodic-mosaic\") fail(\"Development requires a periodic CFA.\");\n const native = plan.exposure.geometry.nativeRaster, g = plan.exposure.resolvedGeometry, active = g.activeCapture.nativeRect;\n checkNativeRawIntegrity(raw, native.pixelWidth, layout.repeatWidthSites, layout.repeatHeightSites, 0, native.pixelHeight);\n const developer = createRawPixelDeveloper({ nativeWidth: native.pixelWidth, repeatWidth: layout.repeatWidthSites, repeatHeight: layout.repeatHeightSites,\n codes: raw.codes, blackLevels: raw.blackLevels, saturationFlags: raw.saturationFlags, whiteByPhase: raw.effectiveSaturationCodes }, v.phases, v.development, v.mirror);\n const width = v.raster.pixelWidth, height = v.raster.pixelHeight, rgb = new Float64Array(width * height * 3), row = new Float64Array(width * 3);\n const at = (x: number, y: number): { x: number; y: number } => {\n const q = transformOrientedRasterPointToNative({ point: { x: v.crop.x + x + 0.5, y: v.crop.y + y + 0.5 }, nativeRaster: g.activeCapture.raster, orientation: plan.exposure.geometry.orientation });\n return { x: Math.floor(q.x) + active.x, y: Math.floor(q.y) + active.y };\n };\n for (let y = 0; y < height; y++) {\n const first = at(0, y), second = width > 1 ? at(1, y) : first;\n developer.developRun(first.x, first.y, second.x - first.x, second.y - first.y, width, row);\n rgb.set(row, y * width * 3);\n await afterRow(y + 1, height);\n }\n const c = developer.counts;\n return { rgb, highlight: { mode: v.highlightMode, saturatedPixelCount: c.saturatedPixelCount, whiteBalanceClippedSampleCount: c.whiteBalanceClippedSampleCount,\n reconstructedPixelCount: c.reconstructedPixelCount } };\n}\n/** Linear sRGB/D65 → CIE XYZ (inverse of the development's XYZ → sRGB matrix) → linear target RGB/D65. */\nfunction linearSrgbToTarget(target: \"srgb\" | \"display-p3\" | \"rec2020\"): readonly (readonly number[])[] {\n return multiplyMatrices(resolveRgbColorSpace(target).value.xyzToRgb, resolveCaptureColorModel().cameraRgbToXyz as unknown as ColorMatrix3x3);\n}\n/** Knee of the `perceptual` gamut mapping: chroma below 90 % of the gamut-boundary chroma (at constant L*, h) is untouched. */\nconst PERCEPTUAL_GAMUT_KNEE_FRACTION = 0.9;\n/**\n * SDR encoding from linear sRGB/D65:\n * 1. Convert to the target primaries with a matrix.\n * 2. Either clip each component to [0, 1], or, with `mapping`, compress chroma while keeping CIELAB hue\n * and lightness (`prepareRgbGamutMapping`).\n * 3. Apply the target transfer function and round to the nearest code (ties round up).\n */\nfunction encodeSdrFromLinear(rgb: Float64Array, encoding: \"srgb\" | \"display-p3\" | \"rec2020\", bitDepth: 8 | 16, mapping?: PreparedRgbGamutMapping):\n { samples: Uint8Array | Uint16Array; diagnostics: SdrRenderingResult[\"diagnostics\"]; adjustedPixelCount: number; lightnessClippedPixelCount: number } {\n const m = linearSrgbToTarget(encoding), toXyz = resolveCaptureColorModel().cameraRgbToXyz, maximum = 2 ** bitDepth - 1;\n const transfer = encoding === \"rec2020\" ? evaluateBt709Oetf : evaluateSrgbEncoding;\n const samples = bitDepth === 8 ? new Uint8Array(rgb.length) : new Uint16Array(rgb.length);\n let low = 0, high = 0, adjusted = 0, lightnessClipped = 0;\n for (let i = 0; i < rgb.length; i += 3) {\n const r = rgb[i]!, g = rgb[i + 1]!, b = rgb[i + 2]!;\n if (mapping) {\n const xyz = [0, 1, 2].map((k) => toXyz[k]![0]! * r + toXyz[k]![1]! * g + toXyz[k]![2]! * b) as unknown as ColorVector3;\n const mapped = mapping.map(xyz);\n if (mapped.adjusted) adjusted++;\n if (mapped.lightnessClipped) lightnessClipped++;\n for (let k = 0; k < 3; k++) samples[i + k] = Math.floor(transfer(mapped.linearRgb[k]!) * maximum + 0.5);\n continue;\n }\n for (let k = 0; k < 3; k++) {\n const row = m[k]!;\n let value = row[0]! * r + row[1]! * g + row[2]! * b;\n if (value < 0) { value = 0; low++; } else if (value > 1) { value = 1; high++; }\n samples[i + k] = Math.floor(transfer(value) * maximum + 0.5);\n }\n }\n return { samples, adjustedPixelCount: adjusted, lightnessClippedPixelCount: lightnessClipped, diagnostics: { renderingNegativeSampleCount: low,\n renderingAboveReferenceSampleCount: high, toneChangedSampleCount: 0, gamutClippedLowSampleCount: low, gamutClippedHighSampleCount: high, captureSaturation: \"consumed-in-raw-development\" } };\n}\n\n/**\n * Simulates one still capture of a planar scene and returns the developed image, the packed RAW, the full\n * underlying request/plan, provenance and every assumption made. See docs/QUICK_START.md.\n */\nexport async function simulateCapture(options: SimulateCaptureOptions): Promise<SimulateCaptureResult> {\n const started = Date.now();\n requireInputObject(options, \"simulateCapture options\");\n const top = allowKeys(options, \"simulateCapture options\", [\"camera\", \"lens\", \"exposure\", \"scene\", \"subjectDistanceM\", \"illuminant\",\n \"illuminanceLux\", \"output\", \"sensor\", \"motion\", \"signal\", \"onProgress\"]);\n const signal = top.signal as AbortSignal | undefined, onProgress = top.onProgress as SimulateCaptureOptions[\"onProgress\"];\n if (signal !== undefined && (typeof signal !== \"object\" || signal === null || typeof (signal as AbortSignal).aborted !== \"boolean\")) fail(\"signal must be an AbortSignal.\");\n if (onProgress !== undefined && typeof onProgress !== \"function\") fail(\"onProgress must be a function.\");\n const assumptions: SimulateCaptureAssumption[] = [];\n const assume = (id: string, kind: SimulateCaptureAssumption[\"kind\"], value: unknown, explanation: string): void => { assumptions.push({ id, kind, value, explanation }); };\n function pick<T>(record: Record<string, unknown>, key: string, path: string, fallback: T, explanation: string): T {\n if (record[key] !== undefined) return record[key] as T;\n assume(path, \"default\", fallback, explanation);\n return fallback;\n }\n const checkAbort = (): void => { if (signal?.aborted) fail(\"simulateCapture aborted.\"); };\n checkAbort();\n\n // Camera\n const cameraOption = pick<GenericEquipmentTier | GenericEquipmentTierPreset>(top, \"camera\", \"camera\", DEFAULTS.camera,\n \"Generic Photivra tier preset 2.0.0 (synthetic educational values, not a real camera).\");\n let preset: GenericEquipmentTierPreset;\n if (typeof cameraOption === \"string\") preset = GENERIC_TIER_ASSETS.find((p) => p.tier === cameraOption) ?? fail(\"Unknown camera tier.\");\n else preset = parseCallerCameraPreset(cameraOption);\n const body = preset.body, lens = preset.lens;\n\n // Lens\n const lensOptions = allowKeys(top.lens, \"lens\", [\"focalLengthMm\", \"fNumber\", \"focusDistanceM\", \"pupilSampling\", \"projection\", \"distortion\", \"vignetting\", \"psf\"]);\n const focalDefault = lens.exposure.focalLengthMmRange.value.minimum;\n const focalLengthMm = positive(pick(lensOptions, \"focalLengthMm\", \"lens.focalLengthMm\", focalDefault, \"The preset lens's focal length (the generic primes are 50 mm).\"), \"lens.focalLengthMm\");\n const capabilities = resolveGenericEquipmentExposureCapabilities({ bodyProfile: body.exposure, lensProfile: lens.exposure, selectedFocalLengthMm: focalLengthMm });\n const subjectDistanceM = positive(pick(top, \"subjectDistanceM\", \"subjectDistanceM\", DEFAULTS.subjectDistanceM, \"Scene plane 5 m in front of the camera (the generic tiers' reference focus distance).\"), \"subjectDistanceM\");\n if (subjectDistanceM * 1000 <= focalLengthMm * 2) fail(\"subjectDistanceM must exceed twice the focal length.\");\n const focusDistanceM = positive(pick(lensOptions, \"focusDistanceM\", \"lens.focusDistanceM\", subjectDistanceM, \"Focused on the scene plane.\"), \"lens.focusDistanceM\");\n if (focusDistanceM * 1000 <= focalLengthMm) fail(\"lens.focusDistanceM must exceed the focal length.\");\n let pupil: { radialSamples: number; angularSamples: number } | undefined;\n if (lensOptions.pupilSampling === undefined) assume(\"lens.pupilSampling\", \"default\", null,\n \"No pupil sampling: each scene query follows the central (chief) ray, so defocus and depth of field are not rendered. Enable lens.pupilSampling for an ideal circular pupil.\");\n else {\n const p = allowKeys(lensOptions.pupilSampling, \"lens.pupilSampling\", [\"radialSamples\", \"angularSamples\"]);\n // The environment pupil contract admits 4..64 azimuthal midpoints and at most 256 rays.\n pupil = { radialSamples: integerIn(p.radialSamples, \"lens.pupilSampling.radialSamples\", 1, 16), angularSamples: integerIn(p.angularSamples, \"lens.pupilSampling.angularSamples\", 4, 64) };\n if (pupil.radialSamples * pupil.angularSamples > 256) fail(\"lens.pupilSampling needs at most 256 rays (radialSamples × angularSamples).\");\n }\n // 2.0 optics hooks: only what the environment site contract accepts.\n const projection: LensProjectionModel | undefined = lensOptions.projection === undefined ? undefined : parseLensProjectionModel(lensOptions.projection);\n let distortion: SimulateCaptureLensDistortion | undefined;\n if (lensOptions.distortion !== undefined) {\n const d = allowKeys(lensOptions.distortion, \"lens.distortion\", [\"kind\", \"profile\"]);\n if (d.kind !== \"radial\" && d.kind !== \"brown-conrady\") fail(\"lens.distortion.kind must be radial or brown-conrady.\");\n distortion = d as unknown as SimulateCaptureLensDistortion;\n }\n const lensFieldMapping: EnvironmentLensFieldMapping | undefined = projection === undefined && distortion === undefined ? undefined :\n { projectionModel: projection ?? \"rectilinear\", distortion: distortion ?? { kind: \"none\" }, radiometricAreaCorrection: \"inverse-distortion-jacobian\" };\n if (lensFieldMapping) {\n if (pupil) fail(\"lens.projection and lens.distortion cannot be combined with lens.pupilSampling: ideal pupil rays use the rectilinear, distortion-free projection.\");\n try { prepareEnvironmentLensFieldMapping(lensFieldMapping); } catch (error) { fail(\"Invalid lens projection or distortion: \" + (error as Error).message); }\n }\n let vignetting: IlluminationVignettingProfile | undefined;\n if (lensOptions.vignetting !== undefined) { requireInputObject(lensOptions.vignetting, \"lens.vignetting\"); vignetting = lensOptions.vignetting as IlluminationVignettingProfile; }\n let lensPsf: NonNullable<NonNullable<SimulateCaptureOptions[\"lens\"]>[\"psf\"]> | undefined;\n if (lensOptions.psf !== undefined) {\n const p = allowKeys(lensOptions.psf, \"lens.psf\", [\"kind\", \"configuration\"]);\n if (p.kind !== \"sampled-local\") fail(\"lens.psf.kind must be sampled-local.\");\n requireInputObject(p.configuration, \"lens.psf.configuration\");\n if (pupil) fail(\"lens.psf cannot be combined with lens.pupilSampling: geometric defocus would be counted twice.\");\n lensPsf = p as unknown as typeof lensPsf;\n }\n\n // Motion (2.0): constant camera rotation and the shutter type.\n const motionOptions = allowKeys(top.motion, \"motion\", [\"angularVelocityRadPerSec\", \"shutter\", \"rollingShutterSkewSeconds\"]);\n const angular = { pitch: 0, yaw: 0, roll: 0 };\n if (motionOptions.angularVelocityRadPerSec !== undefined) {\n const a = allowKeys(motionOptions.angularVelocityRadPerSec, \"motion.angularVelocityRadPerSec\", [\"pitch\", \"yaw\", \"roll\"]);\n for (const axis of [\"pitch\", \"yaw\", \"roll\"] as const) if (a[axis] !== undefined) {\n const value = a[axis];\n if (typeof value !== \"number\" || !Number.isFinite(value) || Math.abs(value) > 100) fail(\"motion.angularVelocityRadPerSec.\" + axis + \" must be a finite number within ±100 rad/s.\");\n angular[axis] = value as number;\n }\n }\n const rotating = angular.pitch !== 0 || angular.yaw !== 0 || angular.roll !== 0;\n const shutterKind = motionOptions.shutter === undefined ? \"global\" : motionOptions.shutter;\n if (shutterKind !== \"global\" && shutterKind !== \"rolling\") fail(\"motion.shutter must be global or rolling.\");\n if (motionOptions.rollingShutterSkewSeconds !== undefined && shutterKind !== \"rolling\") fail(\"motion.rollingShutterSkewSeconds needs motion.shutter \\\"rolling\\\".\");\n const rollingSkewOption = motionOptions.rollingShutterSkewSeconds === undefined ? undefined : positive(motionOptions.rollingShutterSkewSeconds, \"motion.rollingShutterSkewSeconds\");\n\n // Output and sensor\n const outputOptions = allowKeys(top.output, \"output\", [\"width\", \"height\", \"format\", \"toneCurve\", \"toneCurveParameters\", \"highlightMode\", \"whiteBalance\", \"jpegQuantizationStep\",\n \"colorEncoding\", \"bitDepth\", \"gamutMapping\", \"demosaic\", \"borderHandling\", \"dng\"]);\n const width = integerIn(pick(outputOptions, \"width\", \"output.width\", DEFAULTS.width, \"64 × 64 output pixels.\"), \"output.width\", 1, 4094);\n const height = integerIn(pick(outputOptions, \"height\", \"output.height\", DEFAULTS.height, \"64 × 64 output pixels.\"), \"output.height\", 1, 4094);\n const format = pick<SimulateCaptureOutputFormat>(outputOptions, \"format\", \"output.format\", DEFAULTS.format, \"8-bit sRGB samples.\");\n if (![\"srgb-8\", \"srgb-16\", \"jpeg\", \"png\", \"dng\"].includes(format)) fail(\"output.format must be srgb-8, srgb-16, jpeg, png or dng.\");\n let dngCapturedAtUtc: string | undefined;\n if (format === \"dng\") {\n const d = allowKeys(outputOptions.dng, \"output.dng\", [\"capturedAtUtc\"]);\n dngCapturedAtUtc = d.capturedAtUtc as string | undefined;\n if (dngCapturedAtUtc === undefined) assume(\"output.dng.capturedAtUtc\", \"default\", null, \"No capture time: the DNG carries no DateTimeOriginal (the engine never invents a wall clock).\");\n } else if (outputOptions.dng !== undefined) fail(\"output.dng applies only to output.format \\\"dng\\\".\");\n let colorEncoding: SimulateCaptureColorEncoding | undefined, pngBitDepth: 8 | 16 | undefined;\n if (format === \"png\") {\n colorEncoding = pick<SimulateCaptureColorEncoding>(outputOptions, \"colorEncoding\", \"output.colorEncoding\", \"srgb\",\n \"sRGB (W3C CSS Color 4 srgb) samples signalled with the PNG sRGB chunk (perceptual intent) and its prescribed gAMA/cHRM values.\");\n if (![\"srgb\", \"display-p3\", \"rec2020\"].includes(colorEncoding)) fail(\"output.colorEncoding must be srgb, display-p3 or rec2020.\");\n pngBitDepth = pick<8 | 16>(outputOptions, \"bitDepth\", \"output.bitDepth\", 8, \"8 bits per sample.\");\n if (pngBitDepth !== 8 && pngBitDepth !== 16) fail(\"output.bitDepth must be 8 or 16.\");\n } else if (outputOptions.colorEncoding !== undefined || outputOptions.bitDepth !== undefined) fail(\"output.colorEncoding and output.bitDepth apply only to output.format \\\"png\\\".\");\n let perceptual = false;\n if (format === \"png\") {\n const gamutMapping = pick<\"clip\" | \"perceptual\">(outputOptions, \"gamutMapping\", \"output.gamutMapping\", \"clip\", \"Out-of-gamut components are clipped to [0, 1] in the target space.\");\n if (gamutMapping !== \"clip\" && gamutMapping !== \"perceptual\") fail(\"output.gamutMapping must be clip or perceptual.\");\n perceptual = gamutMapping === \"perceptual\";\n } else if (outputOptions.gamutMapping !== undefined) fail(\"output.gamutMapping applies only to output.format \\\"png\\\".\");\n const wideGamut = colorEncoding !== undefined && colorEncoding !== \"srgb\";\n // The linear development path serves wide-gamut encodings and perceptual gamut mapping.\n const linearPath = wideGamut || perceptual;\n const toneCurve = pick<SdrToneCurve>(outputOptions, \"toneCurve\", \"output.toneCurve\", DEFAULTS.toneCurve, \"Identity tone curve: scene-linear values are clipped at display white, then sRGB-encoded.\");\n if (linearPath && toneCurve !== \"identity\") fail(\"output.toneCurve other than identity is available only for sRGB output; wide-gamut encodings are converted from the linear developed colour.\");\n const highlightMode = pick<RawHighlightMode>(outputOptions, \"highlightMode\", \"output.highlightMode\", DEFAULTS.highlightMode, \"Saturated RAW highlights are clipped to neutral.\");\n const whiteBalanceOption = pick<SimulateCaptureWhiteBalance>(outputOptions, \"whiteBalance\", \"output.whiteBalance\", DEFAULTS.whiteBalance,\n \"White balance measured from a perfect white diffuser under the scene illuminant (a custom/grey-card white balance).\");\n const jpegStep = format === \"jpeg\" ? integerIn(pick(outputOptions, \"jpegQuantizationStep\", \"output.jpegQuantizationStep\", DEFAULTS.jpegQuantizationStep,\n \"Constant JPEG quantization step 2 (not a manufacturer quality scale).\"), \"output.jpegQuantizationStep\", 1, 255) : undefined;\n if (format !== \"jpeg\" && outputOptions.jpegQuantizationStep !== undefined) fail(\"output.jpegQuantizationStep applies only to output.format \\\"jpeg\\\".\");\n const sensorOptions = allowKeys(top.sensor, \"sensor\", [\"pixelPitchMicrometers\", \"spectralStepNanometers\", \"temporalSampleCount\", \"noiseSeed\"]);\n const pitch = positive(pick(sensorOptions, \"pixelPitchMicrometers\", \"sensor.pixelPitchMicrometers\", DEFAULTS.pixelPitchMicrometers,\n \"6 µm pixels (about a 24 MP full-frame sensor). The simulated sensor is width × pitch wide, so small images are a central crop of a large sensor, not a downscaled full frame.\"), \"sensor.pixelPitchMicrometers\");\n if (pitch < 0.5 || pitch > 100) fail(\"sensor.pixelPitchMicrometers must be 0.5-100.\");\n const spectralStep = positive(pick(sensorOptions, \"spectralStepNanometers\", \"sensor.spectralStepNanometers\", DEFAULTS.spectralStepNanometers,\n \"Spectral midpoint quadrature over 380-780 nm with subintervals of at most 20 nm.\"), \"sensor.spectralStepNanometers\");\n if (spectralStep < 1 || spectralStep > 100) fail(\"sensor.spectralStepNanometers must be 1-100.\");\n const temporalSampleCount = integerIn(rotating ? pick(sensorOptions, \"temporalSampleCount\", \"sensor.temporalSampleCount\", ROTATING_TEMPORAL_SAMPLE_COUNT,\n \"Eight temporal midpoints across each site's exposure window sample the camera rotation (motion blur); raise it for long exposures or fast rotation.\") :\n pick(sensorOptions, \"temporalSampleCount\", \"sensor.temporalSampleCount\", DEFAULTS.temporalSampleCount,\n \"One temporal sample: the static scene and still camera make more samples unnecessary.\"), \"sensor.temporalSampleCount\", 1, 256);\n const noiseSeed = integerIn(pick(sensorOptions, \"noiseSeed\", \"sensor.noiseSeed\", DEFAULTS.noiseSeed, \"Fixed noise seed 1 (deterministic output).\"), \"sensor.noiseSeed\", 0, 0xffffffff);\n\n const colorSamplingProfile = { schemaVersion: \"0.1.0\" as const, profileId: IDS.cfa, evidence: FACADE_EVIDENCE, coordinateSystem: \"native-sensor-color-sampling-site-index\" as const,\n layout: { kind: \"periodic-mosaic\" as const, repeatWidthSites: 2, repeatHeightSites: 2, siteChannelIds: [\"red\", \"green\", \"green\", \"blue\"], anchor: \"native-sensor-top-left-site\" as const } };\n // Demosaic (2.0): built-in Bayer kernels and border handling. Omitted, the 1.0 bilinear kernels and a\n // one-site rendered border are used unchanged.\n const demosaicOption = outputOptions.demosaic as SimulateCaptureDemosaic | undefined, borderOption = outputOptions.borderHandling as SimulateCaptureBorderHandling | undefined;\n if (demosaicOption !== undefined && demosaicOption !== \"bilinear\") fail(\"output.demosaic must be bilinear.\");\n if (borderOption !== undefined && borderOption !== \"margin\" && borderOption !== \"mirror\") fail(\"output.borderHandling must be margin or mirror.\");\n const builtInDemosaic = demosaicOption === undefined ? undefined : createBuiltInBayerDemosaicProfiles({ kernel: \"bilinear\",\n captureModeId: IDS.mode, colorSamplingProfile, channelRoles: { red: \"red\", green: \"green\", blue: \"blue\" } }).value;\n const mirrorBorder = borderOption === \"mirror\";\n const margin = mirrorBorder ? 0 : builtInDemosaic ? builtInDemosaic.kernelReachSites : MARGIN;\n if (mirrorBorder && (width < 2 || height < 2)) fail(\"output.borderHandling \\\"mirror\\\" needs an output of at least 2 × 2 pixels.\");\n\n // Geometry: the demosaic border (if any) on each side; output crop is the active area.\n const nativeWidth = width + 2 * margin, nativeHeight = height + 2 * margin;\n const imagingArea = { widthMm: nativeWidth * pitch / 1000, heightMm: nativeHeight * pitch / 1000 };\n const geometry = { imagingArea, nativeRaster: { pixelWidth: nativeWidth, pixelHeight: nativeHeight }, orientation: \"landscape\" as const,\n activeCaptureRect: { x: margin, y: margin, width, height }, outputRaster: { pixelWidth: width, pixelHeight: height } };\n const resolvedGeometry = resolveCaptureGeometry(geometry).value;\n const imageDistanceMm = focalLengthMm * focusDistanceM * 1000 / (focusDistanceM * 1000 - focalLengthMm);\n const metresPerFrameUnit = (width * pitch / 2000) * subjectDistanceM / imageDistanceMm;\n const aspect = height / width;\n assume(\"scene.framing\", \"derived\", { framedWidthM: 2 * metresPerFrameUnit, framedHeightM: 2 * metresPerFrameUnit * aspect },\n \"The scene plane is perpendicular to the optical axis and the chart is sized to fill the active frame exactly.\");\n if (demosaicOption === undefined && borderOption === undefined) {\n assume(\"output.demosaic\", \"model\", \"bilinear-rggb\", \"Bilinear RGGB demosaic through explicit linear kernels; the native raster has a one-site border on each side so every output pixel has full support.\");\n } else {\n if (demosaicOption === undefined) assume(\"output.demosaic\", \"default\", \"bilinear-rggb\", \"The 1.0 facade's bilinear RGGB kernels (explicit linear neighbourhood weights).\");\n else assume(\"output.demosaic\", \"model\", { kernel: builtInDemosaic!.kernel, modelVersion: BUILT_IN_DEMOSAIC_VERSION, kernelReachSites: builtInDemosaic!.kernelReachSites },\n \"Built-in bilinear Bayer kernels (createBuiltInBayerDemosaicProfiles): nearest same-channel averages.\");\n if (borderOption === undefined) assume(\"output.borderHandling\", \"default\", \"margin\", \"The native raster adds the kernel reach (\" + margin + \" site(s)) on each side, so every output pixel is reconstructed from rendered sites.\");\n else assume(\"output.borderHandling\", \"model\", borderOption, mirrorBorder ?\n \"No rendered border: the native raster equals the output and reconstruction reads reflect-101 mirror images of the missing sites (CFA consistency validated), so edge pixels use mirrored rather than rendered neighbours.\" :\n \"The native raster adds the kernel reach (\" + margin + \" site(s)) on each side, so every output pixel is reconstructed from rendered sites.\");\n }\n\n // Radiance queries per native site: spectral subintervals × temporal midpoints × pupil rays × PSF taps.\n const psfTaps = lensPsf ? Math.max(1, ...((lensPsf.configuration.psf.profile.nodes ?? []) as readonly { kernel?: { widthSamples?: unknown; heightSamples?: unknown } }[])\n .map((node) => Number(node.kernel?.widthSamples) * Number(node.kernel?.heightSamples)).filter((taps) => Number.isSafeInteger(taps) && taps > 0)) : 1;\n const queriesPerSite = temporalSampleCount * (Math.ceil((FACADE_SPECTRAL_RANGE_NANOMETERS.maximum - FACADE_SPECTRAL_RANGE_NANOMETERS.minimum) / spectralStep) + 1) *\n (pupil ? pupil.radialSamples * pupil.angularSamples : 1) * psfTaps;\n\n // Scene and illuminant\n // The scene is the one required input: the facade never guesses what is being photographed.\n if (top.scene === undefined) fail(\"simulateCapture needs a scene, for example { preset: \\\"uniform\\\" } (an 18 % grey card) or { preset: \\\"slanted-edge\\\" }.\");\n const sceneOption = top.scene;\n requireInputObject(sceneOption, \"scene\");\n const illuminantOption = pick<CaptureIlluminant>(top, \"illuminant\", \"illuminant\", { kind: \"planckian\", temperatureKelvin: DEFAULTS.illuminantKelvin },\n \"Planckian (blackbody) 6500 K as a stand-in for daylight. CIE D65 is not bundled; pass its S0/S1/S2 basis as a daylight illuminant to use it.\");\n const illuminant = resolveCaptureIlluminant(illuminantOption);\n const illuminanceLux = positive(pick(top, \"illuminanceLux\", \"illuminanceLux\", SIMULATE_CAPTURE_DEFAULT_ILLUMINANCE_LUX,\n \"π·10·N²/(0.65·t·S·0.18) lux at f/8, 1/125 s, ISO 100 (CIPA DC-004 standard output sensitivity H = 10/S and camera equation H = 0.65·L·t/N²): an 18 % grey card then gets the reference exposure for the default settings. It does not follow the caller's exposure settings.\"), \"illuminanceLux\");\n const irradianceScale = calculateIlluminantIrradianceScale(illuminant.shape, illuminanceLux);\n let chart: ResolvedChartScene | undefined, callerScene: CallerReflectanceScene | CallerRadianceScene | undefined;\n const sceneRecord = sceneOption as Record<string, unknown>;\n if (\"kind\" in sceneRecord) {\n callerScene = requireCallerScene(sceneOption);\n } else {\n chart = resolveChartScene({ scene: sceneOption as ChartScene, aspect });\n for (const key of chart.defaultedParameters) assume(\"scene.\" + key, \"default\", chart.parameters[key], \"Chart default for \" + chart.preset + \".\");\n }\n const scenePreset = chart ? chart.preset : callerScene!.kind;\n // Caller spectra enter the digest as data (see spectrumDigestForm). Without caller spectra the description is unchanged,\n // so default captures keep their digests.\n const illuminantRecord = typeof illuminantOption === \"object\" ? illuminantOption as { kind?: unknown; basis?: { datasetId?: unknown } } : undefined;\n const illuminantSpectrum = illuminantRecord?.kind === \"spectrum\" ? { spectrum: spectrumDigestForm(illuminant.spectrum, illuminant.shape) } :\n illuminantRecord?.kind === \"daylight\" ? { basisDatasetId: illuminantRecord.basis?.datasetId, spectrum: spectrumDigestForm(illuminant.spectrum, illuminant.shape) } : undefined;\n const sceneSpectra = chart ? chart.materials.flatMap((m, index) => {\n if (m.kind !== \"spectrum\") return [];\n const raw = chart!.preset === \"uniform\" ? sceneRecord.reflectance : (sceneRecord.patches as readonly { reflectance: unknown }[])[index]!.reflectance;\n return [{ material: index, spectrum: spectrumDigestForm(raw, m.spectrum) }];\n }) : [];\n const sceneDescription = { facadeVersion: SIMULATE_CAPTURE_FACADE_VERSION, scene: chart ? { preset: chart.preset, parameters: chart.parameters } :\n { kind: callerScene!.kind, sceneId: callerScene!.sceneId }, illuminant: illuminant.id, illuminanceLux, subjectDistanceM, framedWidthM: 2 * metresPerFrameUnit, aspect,\n ...(illuminantSpectrum === undefined ? {} : { illuminantSpectrum }), ...(sceneSpectra.length === 0 ? {} : { sceneSpectra }) };\n if (callerScene) assume(\"scene.digest\", \"model\", \"caller-function-not-hashed\", \"The source digest covers the caller's sceneId and the framing, not the body of the caller's evaluate function.\");\n const sourceSha256 = await sha256Hex(JSON.stringify(sceneDescription, (_key, value: unknown) => (typeof value === \"object\" && value !== null && \"evaluate\" in value ? \"caller-spectrum\" : value)));\n checkAbort();\n const provider: PlanarSceneRadianceProvider = buildPlanarSceneRadianceProvider({ scene: chart ?? callerScene!, sceneId: IDS.scene, providerProfileId: IDS.provider,\n illuminant, irradianceScale, geometry: { distanceM: subjectDistanceM, metresPerFrameUnit }, evidence: FACADE_EVIDENCE,\n limitations: [\"Planar Lambertian scene under uniform illumination; no shadows, inter-reflection, gloss or fluorescence.\"] });\n assume(\"model.scene-radiometry\", \"model\", \"lambertian-plane\", \"Radiance = reflectance × irradiance / π on one plane; illuminance from K_m = 683 lm/W and the engine's analytic CIE 1931 ȳ fit.\");\n\n // Metering (CIPA DC-004 standard output sensitivity and camera equation) and exposure-mode resolution\n const exposureOptions = allowKeys(top.exposure, \"exposure\", [\"mode\", \"iso\", \"shutterSeconds\", \"compensationStops\"]);\n const mode = pick<SimulateCaptureExposureMode>(exposureOptions, \"mode\", \"exposure.mode\", \"manual\", \"Manual exposure.\");\n if (![\"manual\", \"aperture-priority\", \"shutter-priority\", \"program\"].includes(mode)) fail(\"Unknown exposure mode.\");\n const iso = positive(pick(exposureOptions, \"iso\", \"exposure.iso\", DEFAULTS.iso, \"ISO 100, the tiers' base ISO.\"), \"exposure.iso\");\n const compensation = exposureOptions.compensationStops === undefined ? DEFAULTS.compensationStops : exposureOptions.compensationStops;\n if (typeof compensation !== \"number\" || !Number.isFinite(compensation) || Math.abs(compensation) > 10) fail(\"exposure.compensationStops must be within ±10.\");\n if (exposureOptions.compensationStops === undefined) assume(\"exposure.compensationStops\", \"default\", 0, \"No exposure compensation.\");\n const reference = { aperture: DEFAULTS.fNumber, shutterSeconds: DEFAULTS.shutterSeconds, iso: DEFAULTS.iso };\n const referenceLuminance = sosReferenceLuminance(reference.aperture, reference.shutterSeconds, reference.iso);\n assume(\"exposure.referenceExposure\", \"model\", { ...reference, meteredLuminanceCdPerSquareMeter: referenceLuminance },\n \"Exposure anchor: f/8, 1/125 s, ISO 100 gives the CIPA DC-004 standard output sensitivity reference exposure H = 10/S = 0.1 lx·s for an average scene luminance of 10·N²/(0.65·t·S) ≈ 1230.77 cd/m² (camera equation H = 0.65·L·t/N²).\");\n const meterProfile = body.metering[0]!.profile, zones = 16, zoneSamples = [];\n let luminanceSum = 0;\n for (let j = 0; j < zones; j++) for (let i = 0; i < zones; i++) {\n const u = -1 + (i + 0.5) * 2 / zones, v = aspect - (j + 0.5) * 2 * aspect / zones;\n const luminance = luminanceOf((nm) => provider.radianceAt(u, v, nm));\n luminanceSum += luminance;\n zoneSamples.push({ sampleId: \"zone-\" + i + \"-\" + j, positionOrientedCaptureUv: { u: (i + 0.5) / zones, v: (j + 0.5) / zones },\n relativeLinearSignal: meterProfile.target.targetRelativeSignal * luminance / referenceLuminance, areaWeight: 1 });\n }\n const meteredLuminance = luminanceSum / (zones * zones);\n assume(\"exposure.metering\", \"model\", { policy: meterProfile.policy.kind, zones: zones * zones },\n \"The body's \" + meterProfile.policy.kind + \" meter reads scene luminance on a 16 × 16 zone grid, before the lens (no lens transmission, vignetting or flare).\");\n const meterResult = meterRelativeExposure({ profile: meterProfile, sampleSet: { measurementId: \"facade-meter\", sceneStateId: IDS.sceneState,\n inputDomain: \"relative-pre-exposure-linear-signal\", captureRegion: \"oriented-active-capture\", captureGeometry: resolvedGeometry,\n processingState: { exposureSettingsApplied: false, whiteBalanceApplied: false, toneMappingApplied: false, displayGammaApplied: false, sharpeningApplied: false },\n samples: zoneSamples } });\n let target = createExposureMeterTargetFromMeteringResult({ targetId: \"facade-target\", meterResult: meterResult.value });\n if (compensation !== 0) target = setExposureCompensationOnMeterTarget({ targetId: \"facade-target-ec\", baseTarget: target, exposureCompensationStops: compensation });\n let resolution: { status: string; resolvedSettings?: { aperture?: number; shutterSeconds?: number; iso?: number } };\n let fNumber: number, shutterSeconds: number;\n if (mode === \"manual\" || mode === \"aperture-priority\") {\n fNumber = positive(pick(lensOptions, \"fNumber\", \"lens.fNumber\", DEFAULTS.fNumber, \"f/8.\"), \"lens.fNumber\");\n } else {\n if (lensOptions.fNumber !== undefined) fail(\"lens.fNumber is resolved automatically in \" + mode + \" mode; omit it.\");\n fNumber = NaN;\n }\n if (mode === \"manual\" || mode === \"shutter-priority\") {\n shutterSeconds = positive(pick(exposureOptions, \"shutterSeconds\", \"exposure.shutterSeconds\", DEFAULTS.shutterSeconds, \"1/125 s.\"), \"exposure.shutterSeconds\");\n } else {\n if (exposureOptions.shutterSeconds !== undefined) fail(\"exposure.shutterSeconds is resolved automatically in \" + mode + \" mode; omit it.\");\n shutterSeconds = NaN;\n }\n if (mode === \"manual\") {\n resolution = resolveManualExposureMode({ target, capabilities, referenceExposure: reference, manualAperture: fNumber, manualShutterSeconds: shutterSeconds,\n isoControl: { kind: \"manual\", iso } });\n } else if (mode === \"aperture-priority\") {\n resolution = resolveAperturePriorityExposureMode({ target, capabilities, referenceExposure: reference, manualAperture: fNumber, manualIso: iso,\n shutterQuantizationPolicy: \"nearest-log2-shorter-on-tie\" });\n } else if (mode === \"shutter-priority\") {\n resolution = resolveShutterPriorityExposureMode({ target, capabilities, referenceExposure: reference, manualShutterSeconds: shutterSeconds,\n isoControl: { kind: \"manual\", iso, apertureQuantizationPolicy: \"nearest-log2-narrower-on-tie\" } });\n } else {\n assume(\"exposure.programLine\", \"model\", \"facade-generic-program-line\", \"Engine-authored generic program line (f/16 1/2000 s … f/8 1/125 s … f/4 1.024 s); not a manufacturer program.\");\n resolution = resolveProgramAutoExposureMode({ target, capabilities, referenceExposure: reference, programLine: defaultProgramLine(), isoControl: { kind: \"manual\", iso } });\n }\n if (resolution.status !== \"resolved\" || !resolution.resolvedSettings) fail(\"Exposure could not be resolved (\" + resolution.status + \"); the scene may have no signal.\");\n fNumber = resolution.resolvedSettings.aperture ?? fNumber;\n shutterSeconds = resolution.resolvedSettings.shutterSeconds ?? shutterSeconds;\n const resolvedIso = resolution.resolvedSettings.iso ?? iso;\n\n // Sensor readout for the ISO setting\n const regimeByChannel = {} as Record<Channel, { readoutProfile: (typeof body.readout)[number][\"profile\"]; regimeId: string }>;\n for (const channel of CHANNELS) {\n const asset = body.readout.find((a) => a.profile.channelId === channel) ?? fail(\"Camera readout lacks channel \" + channel + \".\");\n const chain = resolveGenericIsoSignalChain({ profile: body.signalChain, isoCapability: body.iso, requestedIsoSetting: { kind: \"standard\", exposureIndex: resolvedIso },\n captureModeId: IDS.mode, readoutProfile: asset.profile });\n regimeByChannel[channel] = { readoutProfile: asset.profile, regimeId: chain.readout.regime.regimeId };\n }\n const baseRegime = body.readout[0]!.profile.regimes[0]! as unknown as { preAdcSaturationElectronEquivalent: { value: number } };\n const capacityElectrons = Math.max(...body.readout[0]!.profile.regimes.map((r) => (r as unknown as { preAdcSaturationElectronEquivalent: { value: number } }).preAdcSaturationElectronEquivalent.value),\n baseRegime.preAdcSaturationElectronEquivalent.value);\n assume(\"sensor.capacityElectrons\", \"derived\", capacityElectrons, \"Physical charge capacity set to the body's largest declared pre-ADC saturation (its base-ISO saturation signal), so storage never clips before the declared readout white.\");\n assume(\"sensor.darkCurrent\", \"model\", { electronsPerSecond: DARK_CURRENT_ELECTRONS_PER_SECOND, temperatureC: OPERATING_TEMPERATURE_C },\n \"Synthetic uniform dark current of 1 e⁻/s per site at 20 °C (the tier presets declare none); dark shot noise follows from it.\");\n assume(\"sensor.spectralResponse\", \"model\", { kind: \"colorimetric-cmf-eqe\", peakScale: EQE_SCALE },\n \"Idealized colorimetric sensor: channel EQE = a·{x̄, ȳ, z̄}(λ)·555/λ (the engine's analytic CIE 1931 fit), so RAW channels are proportional to CIE XYZ (Luther–Ives) and the camera matrix is diagonal. Not a real camera's response; CMF air wavelengths are used as vacuum wavelengths (difference about 0.03 %).\");\n assume(\"sensor.fillFactor\", \"model\", 1, \"Square sensitive aperture equal to the pixel pitch; no microlens or anti-aliasing filter.\");\n // Shutter (2.0): the electronic rolling-shutter schedule derived from the body's rolling readout declaration.\n let rollingSchedule: ElectronicRollingShutterExposureSchedule | undefined;\n if (shutterKind === \"rolling\") {\n const declared = (body as { rollingReadoutTiming?: { profile: unknown } }).rollingReadoutTiming?.profile as Parameters<typeof resolveElectronicRollingShutterExposureSchedule>[0][\"readout\"] | undefined;\n if (!declared || declared.readoutMode !== \"rolling\") fail(\"motion.shutter \\\"rolling\\\" needs a camera body with a rolling readout timing declaration.\");\n const readout = rollingSkewOption === undefined ? declared : { ...declared, spatialSamplingSkewSeconds: { value: rollingSkewOption, unit: \"s\" as const, evidence: FACADE_EVIDENCE } };\n rollingSchedule = resolveElectronicRollingShutterExposureSchedule({ readout, linkageEvidence: FACADE_EVIDENCE,\n nominalExposureDurationSeconds: { value: shutterSeconds, unit: \"s\", evidence: FACADE_EVIDENCE } });\n assume(\"sensor.shutter\", \"model\", { kind: \"electronic-rolling\", modelId: rollingSchedule.modelId, modelVersion: rollingSchedule.modelVersion,\n lineScanSkewSeconds: rollingSchedule.lineScanSkewSeconds, scanDirection: readout.scanDirectionNative.value },\n \"Electronic rolling shutter (line reset/read linkage): a site at normalized scan position s integrates over [s·τ, s·τ + T]. \" +\n (rollingSkewOption === undefined ? \"τ is the body's declared full-frame data-readout skew, applied unchanged across the simulated frame (it is not scaled to the cropped sensor), so a small frame shows the skew of a full-sensor readout.\" :\n \"τ is the caller-declared skew across the simulated frame.\"));\n } else assume(\"sensor.shutter\", \"model\", \"global-electronic\", \"Global electronic shutter: every site integrates the same exposure window.\");\n if (rotating) assume(\"motion.angularVelocityRadPerSec\", \"model\", { ...angular },\n \"Constant camera angular velocity applied to every scene ray at each temporal midpoint of each site's exposure window (engine rotation convention, docs/SENSOR_ENVIRONMENT_QUERY.md); motion blur is the midpoint quadrature over sensor.temporalSampleCount samples.\");\n if (lensPsf) assume(\"lens.psf\", \"model\", { kind: \"sampled-local\" }, \"Caller-supplied sampled lens PSF redistributes irradiance through the environment PSF quadrature; its evidence and limits are the caller's.\");\n else assume(\"lens.psf\", \"model\", \"not-applied\", \"No lens PSF or diffraction blur is applied (point optics); the generic tiers' optical data are declared only at f/4.\");\n assume(\"lens.transmission\", \"model\", lens.matchedReference.transmission,\n \"The tier lens's spectrally flat transmission is used at every f-number and focus in the lens capability; the tier declares it only at its f/4, 5 m reference state.\");\n if (!vignetting && !lensFieldMapping) assume(\"lens.fieldThroughput\", \"model\", \"unity\", \"No vignetting, distortion, lateral colour or stray light.\");\n else {\n if (vignetting) assume(\"lens.vignetting\", \"model\", { kind: \"radial-illumination-vignetting\", profile: vignetting },\n \"Caller-declared radial relative illumination 1 + r2·ρ² + r4·ρ⁴ + r6·ρ⁶, applied once as environment field throughput at the physical sensor point before any PSF.\");\n else assume(\"lens.fieldThroughput\", \"model\", \"unity\", \"No vignetting, lateral colour or stray light.\");\n if (distortion) assume(\"lens.distortion\", \"model\", distortion,\n \"Caller-declared \" + distortion.kind + \" distortion: each sensor point is inverse-distorted before the scene-ray query and irradiance is multiplied exactly once by the area factor 1/det(J).\");\n }\n if (projection === undefined) assume(\"lens.projection\", \"default\", \"rectilinear\", \"Ideal rectilinear (pinhole) projection.\");\n else assume(\"lens.projection\", \"model\", projection, \"Ideal \" + projection + \" projection through the environment lens field mapping. At finite focus its scale is the thin-lens image distance (an approximation); the chart is still sized with the rectilinear thin-lens scale, so its edges move with the projection.\");\n\n // White balance\n let whiteBalanceState: ResolvedWhiteBalanceState | null = null, needsAuto = false;\n if (whiteBalanceOption === \"none\") whiteBalanceState = null;\n else if (whiteBalanceOption === \"auto\") needsAuto = true;\n else if (whiteBalanceOption === \"scene-illuminant\") {\n const xyz = illuminantXyz(illuminant), camera = XYZ_TO_CAMERA.map((row) => row[0] * xyz[0] + row[1] * xyz[1] + row[2] * xyz[2]);\n whiteBalanceState = resolveCustomWhiteBalance({ stateId: \"facade-wb-scene-illuminant\", sampleSet: { imageStateId: \"facade-white-diffuser\",\n inputDomain: \"relative-pre-wb-camera-linear-rgb\", samples: [{ sampleId: \"white\", red: camera[0]!, green: camera[1]!, blue: camera[2]!, weight: 1, clipped: false }] } });\n } else if (typeof whiteBalanceOption === \"object\" && whiteBalanceOption !== null && \"kelvin\" in whiteBalanceOption) {\n const wb = allowKeys(whiteBalanceOption, \"output.whiteBalance\", [\"kelvin\", \"tint\"]);\n const intent = createColorTemperatureWhiteBalanceIntent({ intentId: \"facade-wb-cct\", colorTemperatureKelvin: positive(wb.kelvin, \"output.whiteBalance.kelvin\"),\n tint: wb.tint === undefined ? 0 : wb.tint as number });\n whiteBalanceState = resolveColorTemperatureWhiteBalance({ stateId: \"facade-wb-cct\", intent, whiteLocus: \"planckian\", tintInterpretation: \"duv-cie-1960-uv\",\n camera: { profileId: IDS.spectral, profileVersion: SIMULATE_CAPTURE_FACADE_VERSION, xyzToCameraRgb: XYZ_TO_CAMERA.map((r) => [...r]) as unknown as Parameters<typeof resolveColorTemperatureWhiteBalance>[0][\"camera\"][\"xyzToCameraRgb\"] } });\n } else if (typeof whiteBalanceOption === \"object\" && whiteBalanceOption !== null && \"channelGains\" in whiteBalanceOption) {\n allowKeys(whiteBalanceOption, \"output.whiteBalance\", [\"channelGains\"]);\n requireInputObject(whiteBalanceOption.channelGains, \"output.whiteBalance.channelGains\");\n allowKeys(whiteBalanceOption.channelGains, \"output.whiteBalance.channelGains\", [\"red\", \"green\", \"blue\"]);\n whiteBalanceState = resolveManualWhiteBalance({ stateId: \"facade-wb-manual\", channelGains: whiteBalanceOption.channelGains });\n } else fail(\"Unknown output.whiteBalance.\");\n const intentOf = (state: ResolvedWhiteBalanceState | null): CaptureWhiteBalanceIntent | null => (state ? createCaptureWhiteBalanceIntent({ state }) : null);\n\n const rendering: SdrRenderingProfile = { schemaVersion: \"0.1.0\", profileId: \"facade-sdr\", profileVersion: \"1\", renderingExposureEv: 0, toneCurve,\n ...(outputOptions.toneCurveParameters === undefined ? {} : { toneCurveParameters: outputOptions.toneCurveParameters as SdrToneCurveParameters }),\n gamutHandling: \"clip-components\", outputDynamicRange: \"sdr\", transferFunction: \"srgb\", bitDepth: format === \"srgb-16\" || (format === \"png\" && !wideGamut && pngBitDepth === 16) ? 16 : 8, rounding: \"nearest-ties-up\", dither: \"none\" };\n if (!linearPath) assume(\"output.rendering\", \"model\", { renderingExposureEv: 0, gamutHandling: \"clip-components\" },\n \"Developed linear sRGB/D65 with the RAW white level mapped to display white, no exposure push, out-of-gamut components clipped.\");\n else assume(\"output.rendering\", \"model\", { renderingExposureEv: 0, gamutHandling: \"clip-components-in-target-gamut\", sdrRendererUsed: false },\n \"The sRGB SDR renderer is not used: the linear development (RAW white level = relative 1.0, no exposure push) is converted to the target encoding; request.development.rendering is validated but only its exposure and tone curve (identity) apply.\");\n // Rendering choices are validated before any radiance work, so a bad tone curve fails fast.\n parseSdrRenderingProfile(rendering);\n if (highlightMode !== \"clip\" && highlightMode !== \"reconstruct\") fail(\"output.highlightMode must be clip or reconstruct.\");\n\n // Frame profiles\n const evidence = FACADE_EVIDENCE;\n const nativeRaster = { pixelWidth: nativeWidth, pixelHeight: nativeHeight };\n const captureModeProfile = { schemaVersion: \"0.1.0\" as const, modes: [{ modeId: IDS.mode, evidence, acquisition: { kind: \"single-frame\" as const },\n perFrameSampling: { kind: \"native-effective-raster\" as const }, reconstructionStages: [], processedImageRaster: { value: nativeRaster, evidence },\n dependencies: [\"color-sampling-model\"] }] } as unknown as NativeRawInput[\"captureModeProfile\"];\n const bindingProfile = { schemaVersion: \"0.1.0\" as const, bindingId: IDS.binding, colorSamplingProfileId: IDS.cfa, nativeRaster, evidence,\n relationship: { kind: \"regular-native-effective-sample-blocks\" as const, sitesPerNativeSampleX: 1, sitesPerNativeSampleY: 1, anchor: \"shared-native-top-left\" as const } };\n const exposureWindow = rollingSchedule ? createRollingShutterCaptureExposureSchedule(rollingSchedule) as unknown as {\n shutterMechanism: \"electronic\"; nominalExposureDurationSeconds: { value: number; unit: \"s\"; evidence: readonly EvidenceProvenance[] };\n opening: { kind: \"simultaneous\" }; closing: { kind: \"simultaneous\" } } :\n { shutterMechanism: \"electronic\" as const, nominalExposureDurationSeconds: { value: shutterSeconds, unit: \"s\" as const, evidence },\n opening: { kind: \"simultaneous\" as const }, closing: { kind: \"simultaneous\" as const } };\n const buildRawInput = (intent: CaptureWhiteBalanceIntent | null): NativeRawInput => ({\n exposure: { captureId: IDS.capture, sceneStateId: IDS.sceneState, sceneTimeSeconds: 0, geometry,\n exposure: { focalLengthMm, aperture: fNumber, shutterSeconds, iso: resolvedIso }, focus: { kind: \"finite\", distanceM: focusDistanceM },\n noise: { seedUint32: noiseSeed, realizationId: \"facade-noise\", model: { ...SENSOR_RAW_PRODUCER_NOISE_MODEL } },\n source: { kind: \"scene-radiance-source\", artifactId: \"facade-scene-\" + scenePreset, sha256: sourceSha256, dynamicRangeHistory: \"no-loss-declared\" },\n whiteBalanceIntent: intent, adoptedWhiteXyz: null,\n models: [{ profile: { id: \"photivra-simulate-capture\", version: SIMULATE_CAPTURE_FACADE_VERSION }, scientificStatus: \"approximation\", publicEvidenceIds: [\"photivra:simulate-capture-facade\"] }] },\n frameId: IDS.frame, modeId: IDS.mode, captureModeProfile, colorSamplingProfile, bindingProfile, exposureWindow,\n maximumOutputBytes: nativeWidth * nativeHeight * 7, tileWidth });\n const sceneBinding = { sceneStateId: IDS.sceneState, providerSceneId: IDS.scene, evidence };\n\n // Shared per-site environment pieces (identical objects for every site keep the native task's shared-state fast path).\n const range = { ...FACADE_SPECTRAL_RANGE_NANOMETERS };\n // EQE breakpoints coincide with the quadrature subintervals, so the quadrature is not split further.\n const eqeSpacing = (range.maximum - range.minimum) / Math.ceil((range.maximum - range.minimum) / spectralStep);\n const eqeSamples = (channel: Channel): { nm: number; value: number }[] => {\n const out: { nm: number; value: number }[] = [];\n for (let nm = range.minimum; nm <= range.maximum + 1e-9; nm += eqeSpacing) out.push({ nm, value: EQE_SCALE[channel] * estimateCie1931ColorMatchingFunctions(nm)[CMF_KEY[channel]] * 555 / nm });\n return out;\n };\n const operatingConditions = { temperatureC: 25, incidenceAngleDegreesFromNormal: 0, polarization: \"unpolarized\" as const };\n // One single-channel response profile per CFA channel keeps each site's response data small.\n const spectralResponseProfiles = Object.fromEntries(CHANNELS.map((only) => [only, { schemaVersion: \"0.1.0\" as const, profileId: IDS.spectral, colorSamplingProfileId: IDS.cfa, evidence,\n channels: [only].map((channelId) => ({ channelId, kind: \"effective-external-quantum-efficiency\" as const, responseScope: \"sensor-package-incident-effective-channel-response\" as const,\n scientificStatus: \"approximation\" as const, uncertainty: { kind: \"not-quantified\" as const, limitation: \"Idealized colorimetric response; not a measured sensor.\" },\n evidence, referenceConditions: operatingConditions, conditionDependence: \"not-modeled\" as const, externalQuantumEfficiency: sampled(eqeSamples(channelId)) })) }])) as Record<Channel, unknown>;\n const apertureArea = pitch * pitch;\n const samplingApertureProfile = { schemaVersion: \"0.1.0\" as const, profileId: IDS.sampling, colorSamplingProfileId: IDS.cfa, colorSamplingBindingId: IDS.binding, evidence,\n siteCenterLattice: { kind: \"regular-rectangular-site-center-lattice\" as const, coordinateSystem: \"native-sensor-physical\" as const, pitchXMicrometers: pitch, pitchYMicrometers: pitch,\n firstSiteCenterFromImagingAreaTopLeftMicrometers: { x: pitch / 2, y: pitch / 2 }, evidence },\n geometricSensitiveAperture: { kind: \"uniform-axis-aligned-rectangle\" as const, widthMicrometers: pitch, heightMicrometers: pitch, centerOffsetFromSiteCenterMicrometers: { x: 0, y: 0 }, evidence } };\n const opticalStackProfile = { schemaVersion: \"0.1.0\" as const, profileId: IDS.stack, evidence, effectiveAntiAliasingSpatialResponse: { kind: \"absent\" as const, evidence } };\n const perChannel = Object.fromEntries(CHANNELS.map((channelId) => [channelId, {\n applicationProfile: { schemaVersion: \"0.1.0\" as const, profileId: \"facade-application-\" + channelId, spectralResponseProfileId: IDS.spectral, colorSamplingProfileId: IDS.cfa, channelId,\n samplingApertureProfileId: IDS.sampling, opticalStackProfileId: IDS.stack, evidence, incidentAreaBasis: { kind: \"geometric-sensitive-aperture\" as const, areaSquareMicrometers: apertureArea },\n spatialResponseModel: { kind: \"uniform-over-geometric-sensitive-aperture\" as const, scientificStatus: \"approximation\" as const, evidence, limitation: \"Uniform response over the square aperture.\" },\n referenceConditionPolicy: { kind: \"exact-match-required\" as const } },\n operatingRangeProfile: { schemaVersion: \"0.1.0\" as const, profileId: \"facade-linearity-\" + channelId, responseApplicationProfileId: \"facade-application-\" + channelId,\n spectralResponseProfileId: IDS.spectral, colorSamplingProfileId: IDS.cfa, channelId, scientificStatus: \"approximation\" as const,\n uncertainty: { kind: \"not-quantified\" as const, limitation: \"Declared linear photo response for the idealized sensor.\" }, evidence,\n inputRange: { kind: \"wavelength-integrated-geometric-aperture-radiant-power\" as const, unit: \"W\" as const, minimumInclusive: 0, maximumInclusive: 1 },\n wavelengthApplicability: { wavelengthBasis: \"vacuum\" as const, minimumNanometers: range.minimum, maximumNanometers: range.maximum, containment: \"requested-range-must-be-contained\" as const },\n linearityCriterion: { maximumAbsoluteRelativeDeviation: 0.01 },\n spatialLinearityModel: { kind: \"linear-superposition-over-geometric-aperture\" as const, scientificStatus: \"approximation\" as const, evidence, limitation: \"Declared linear superposition.\" },\n spectralInputModel: { kind: \"per-spectral-bin\" as const, maximumBinWidthNanometers: Math.max(spectralStep, 20), scientificStatus: \"approximation\" as const, evidence, limitation: \"Declared per-bin linearity.\" },\n referenceConditions: operatingConditions, referenceConditionPolicy: { kind: \"exact-match-required\" as const } } }])) as Record<Channel, { applicationProfile: unknown; operatingRangeProfile: unknown }>;\n const sourcePlane = { value: \"sensor-package-incident\" as const, evidence };\n const localExposure = { bindingProfile, exposureWindowInput: { ...exposureWindow, nativeRaster } };\n const sceneBindings = {\n illuminationProfile: { schemaVersion: \"0.1.0\" as const, profileId: IDS.lights, sceneId: IDS.scene, evidence, sources: [{ sourceId: \"illuminant\", family: \"environment\" as const,\n enabled: true, geometry: { kind: \"environment\" as const }, magnitude: { kind: \"relative-linear-scale\" as const, scale: 1, scientificStatus: \"approximation\" as const,\n limitation: \"Absolute level is carried by the provider radiance (\" + illuminanceLux + \" lux).\" },\n spectrum: { kind: \"unresolved\" as const, limitation: \"Spectral radiance is supplied numerically by the provider (\" + illuminant.id + \").\" },\n temporalBehavior: { kind: \"time-invariant\" as const }, evidence }] },\n materialResponseProfile: { schemaVersion: \"0.1.0\" as const, profileId: IDS.materials, sceneId: IDS.scene, evidence, materials: [{ materialResponseId: \"facade-surface\", evidence,\n representation: { kind: \"spectral-wavelength-preserving-data\" as const, dataArtifact: { id: \"facade-scene-\" + scenePreset, checksumSha256: sourceSha256 },\n wavelengthBasis: \"vacuum\" as const, wavelengthRangeNanometers: range, scatteringModel: \"provider-defined-wavelength-preserving\" as const, scientificStatus: \"approximation\" as const,\n uncertainty: { kind: \"not-quantified\" as const, limitation: \"Analytic Lambertian reflectance.\" }, wavelengthChangingBehaviorModeled: false, emissionModeled: false } }],\n fluorescenceModeled: false, volumetricMaterialTransportModeled: false, polarizationModeled: false },\n providerProfile: { schemaVersion: \"0.1.0\" as const, profileId: IDS.provider, sceneId: IDS.scene, illuminationProfileId: IDS.lights, materialResponseProfileId: IDS.materials,\n outputQuantity: \"outgoing-spectral-radiance\" as const, outputUnit: \"W/m^2/sr/nm\" as const, scientificStatus: \"approximation\" as const,\n uncertainty: { kind: \"not-quantified\" as const, limitation: \"Analytic planar scene.\" },\n fidelity: { spectral: \"wavelength-resolved\" as const, material: \"spectral-data\" as const, visibility: \"resolved\" as const, directTransport: \"approximation\" as const, indirectTransport: \"not-modeled\" as const },\n wavelengthChangingTransportModeled: false, volumetricTransportModeled: false, polarizationModeled: false, evidence, limitations: [\"Engine-authored planar chart or caller scene function.\"] } };\n const lensId = lens.exposure.profileId;\n const opticsProfile = { schemaVersion: \"0.1.0\" as const, profileId: lensId + \":facade-transmission\", profileVersion: SIMULATE_CAPTURE_FACADE_VERSION, lensProfileId: lensId,\n scientificStatus: \"approximation\" as const, applicability: { focalLengthMm: { minimum: capabilities.selectedFocalLengthMm, maximum: capabilities.selectedFocalLengthMm },\n nominalFNumber: { minimum: capabilities.aperture.widestAvailableFNumber, maximum: capabilities.aperture.narrowestAvailableFNumber }, focus: { kind: \"any\" as const } },\n transmission: { kind: \"spectral-transmission\" as const, scientificStatus: \"approximation\" as const, wavelengthBasis: \"vacuum\" as const,\n samples: { value: [{ wavelengthNanometers: range.minimum, linearTransmissionFactor: lens.matchedReference.transmission },\n { wavelengthNanometers: range.maximum, linearTransmissionFactor: lens.matchedReference.transmission }], evidence: preset.evidence },\n uncertainty: { kind: \"not-quantified\" as const, limitation: \"Synthetic spectrally flat transmission from the tier preset.\" } },\n distortionAreaMappingOwnership: \"not-applied-by-bridge\" as const, psfRedistributionOwnership: \"downstream-normalized-energy-redistribution\" as const,\n sensorOpticalStackIncluded: false, strayLightIncluded: false, polarizationModeled: false, wavelengthChangingBehaviorModeled: false, volumetricScatteringModeled: false,\n evidence: preset.evidence, limitations: [...lens.limitations, \"Flat transmission applied across the lens capability by the capture facade.\"] };\n const optics = { profile: opticsProfile, focalLengthMm, nominalFNumber: fNumber,\n focus: { kind: \"ideal-symmetric-thin-lens\" as const, objectDistanceM: focusDistanceM, pupilMagnificationAssumption: \"unity\" as const } };\n const motion = { angularVelocityRadPerSec: angular, timeReference: \"first-opening-boundary-phase\" as const, environmentDirectionConvention: \"outgoing-radiance-toward-camera\" as const };\n const fieldThroughput = vignetting ? { kind: \"radial-illumination-vignetting\" as const, profile: vignetting, evidence,\n limitation: \"Caller-declared radial relative illumination applied by the capture facade; not a measured lens.\" } :\n { kind: \"unity\" as const, evidence, limitation: \"No vignetting or field throughput loss applied by the facade.\" };\n const psf = lensPsf ?? { kind: \"not-applied\" as const, evidence, limitation: \"No lens PSF (point optics).\" };\n const pupilRecord = pupil ? { kind: \"ideal-uniform-circular-pupil\" as const, radialSampleCount: pupil.radialSamples, angularSampleCount: pupil.angularSamples, evidence,\n limitation: \"Ideal uniform circular pupil; finite ray sampling, no convergence claim.\" } : undefined;\n const spectralSamplingByChannel = Object.fromEntries(CHANNELS.map((channelId) => [channelId, { channelId, wavelengthBasis: \"vacuum\" as const, wavelengthRangeNanometers: range,\n maximumSubintervalWidthNanometers: spectralStep }])) as Record<Channel, unknown>;\n const chargeSamplingProfile = { schemaVersion: \"0.1.0\" as const, profileId: IDS.chargeSampling, completenessProfileId: IDS.completeness, scientificStatus: \"approximation\" as const,\n photoShotNoiseModel: \"poisson\" as const, darkShotNoiseModel: \"poisson\" as const, additionalComponentPolicies: [], evidence, limitations: [\"Poisson photo and dark shot noise.\"] };\n const channelAt = (x: number, y: number): Channel => ([\"red\", \"green\", \"green\", \"blue\"] as const)[(y % 2) * 2 + (x % 2)]!;\n function siteInput(index: number): SimulateEnvironmentSensorRawFrameInput[\"sites\"][number] {\n if (!Number.isSafeInteger(index) || index < 0 || index >= nativeWidth * nativeHeight) fail(\"Native site index out of range.\");\n const x = index % nativeWidth, y = Math.floor(index / nativeWidth), channel = channelAt(x, y), site = { x, y }, c = perChannel[channel], r = regimeByChannel[channel];\n const environment = { temporalIntegrationId: IDS.frame + \":native:\" + index,\n sensor: { spatialSampling: { imagingArea, samplingApertureProfile, opticalStackProfile, site, spatialSampleCountX: 1, spatialSampleCountY: 1 },\n spectralSampling: spectralSamplingByChannel[channel], colorSamplingProfile, spectralResponseProfile: spectralResponseProfiles[channel],\n responseApplication: { applicationProfile: c.applicationProfile, sourcePlane, operatingConditions }, operatingRangeProfile: c.operatingRangeProfile, localExposure },\n sceneBindings, optics, motion, temporalSampleCount, fieldThroughput, psf, ...(pupilRecord ? { pupil: pupilRecord } : {}), ...(lensFieldMapping ? { lensFieldMapping } : {}) };\n // The charge completeness profile must cover the site's own exposure window (shifted by s·τ under a rolling shutter).\n const window = rollingSchedule ? calculateCaptureExposureWindows({ ...exposureWindow, nativeRaster, samplePointsNative: [{ x: x + 0.5, y: y + 0.5 }] }).value.samples[0]! :\n { startOffsetSecondsFromOpeningReference: 0, endOffsetSecondsFromOpeningReference: shutterSeconds };\n return { environment, operatingTemperatureC: OPERATING_TEMPERATURE_C,\n darkCurrentProfile: { schemaVersion: \"0.1.0\", profileId: IDS.dark, colorSamplingProfileId: IDS.cfa, channelId: channel, scientificStatus: \"approximation\", evidence,\n uncertainty: { kind: \"not-quantified\", limitation: \"Synthetic dark current for the capture facade.\" }, chargeMeaning: \"pre-compensation-thermally-generated-electrons\",\n siteApplicability: { kind: \"exact-site\", site }, temperatureModel: { kind: \"fixed-reference-temperature\", referenceTemperatureC: OPERATING_TEMPERATURE_C,\n darkCurrentElectronsPerSecond: DARK_CURRENT_ELECTRONS_PER_SECOND }, darkCurrentCompensationIncluded: false, spatialDarkCurrentNonuniformityModeled: false },\n charge: { completenessProfile: { schemaVersion: \"0.1.0\", profileId: IDS.completeness, colorSamplingProfileId: IDS.cfa, channelId: channel, site, bindingId: IDS.binding,\n timeReference: \"first-opening-boundary-phase\", startOffsetSecondsFromOpeningReference: window.startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference: window.endOffsetSecondsFromOpeningReference,\n darkCurrentProfileId: IDS.dark, includedAdditionalComponentIds: [], coverageMeaning: \"all-material-stored-electron-contributors-accounted-for\",\n scientificStatus: \"approximation\", evidence, limitation: \"Photo and dark charge only.\" } },\n readout: { samplingProfile: chargeSamplingProfile, capacityProfile: { schemaVersion: \"0.1.0\", profileId: IDS.capacity, colorSamplingProfileId: IDS.cfa, channelId: channel,\n capacityMeaning: \"physical-charge-storage-capacity-electrons\", capacityElectrons, scientificStatus: \"approximation\",\n uncertainty: { kind: \"not-quantified\", limitation: \"Derived from the tier's declared saturation signal.\" }, evidence, siteApplicability: { kind: \"exact-site\", site },\n operatingState: { stateId: IDS.operatingState, evidence }, temperatureApplicability: { kind: \"exact-reference-temperature\", temperatureC: OPERATING_TEMPERATURE_C } },\n operatingStateId: IDS.operatingState, readoutProfile: r.readoutProfile, regimeId: r.regimeId } } as unknown as SimulateEnvironmentSensorRawFrameInput[\"sites\"][number];\n }\n const readTile = async (request: { captureId: string; frameId: string; x: number; y: number; width: number; height: number }): Promise<NativeEnvironmentRawTile> =>\n ({ ...request, sites: Array.from({ length: request.width }, (_, j) => siteInput(request.y * nativeWidth + request.x + j)) });\n const yieldControl = createHostYield().yieldControl;\n const perSite = queriesPerSite;\n const evaluations = nativeWidth * nativeHeight * perSite;\n // The native task admits at most 100 000 radiance queries per tile.\n const tileWidth = Math.max(1, Math.min(256, Math.floor(100_000 / perSite)));\n const environmentRaw: NativeEnvironmentRawInput = { raw: buildRawInput(intentOf(whiteBalanceState)), sceneBinding,\n maximumProviderEvaluations: Math.min(2_000_000_000, Math.max(nativeWidth * nativeHeight, evaluations)) };\n\n async function runTask<T extends { run(): Promise<void>; cancel(): void; dispose(): void; readonly state: string }>(task: T): Promise<void> {\n const onAbort = (): void => task.cancel();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try { checkAbort(); await task.run(); checkAbort(); } catch (error) { task.dispose(); if (signal?.aborted) fail(\"simulateCapture aborted.\"); throw error; } finally { signal?.removeEventListener(\"abort\", onAbort); }\n }\n const rawStarted = Date.now();\n const plan = calculateNativeRawPlan(environmentRaw.raw);\n const progress = (stage: SimulateCaptureProgress[\"stage\"], total: number) => {\n let completed = 0;\n return (): void => { completed++; onProgress?.({ stage, completedTileCount: completed, totalTileCount: total }); };\n };\n const rawTick = progress(\"raw\", plan.tileCount);\n const rawTask: NativeEnvironmentRawTask = createNativeEnvironmentRawTask(environmentRaw, {\n readTile: async (request) => { const tile = await readTile(request); rawTick(); return tile; },\n evaluateRadiance: provider.evaluateRadiance, ...(pupil ? { evaluateApertureRadiance: provider.evaluateApertureRadiance } : {}), yieldControl });\n await runTask(rawTask);\n let rawOutput = rawTask.takeOutput();\n const providerEvaluationCount = rawOutput.providerEvaluationCount;\n const rawMs = Date.now() - rawStarted, wbStarted = Date.now();\n let finalRawInput = environmentRaw;\n if (needsAuto) {\n // Grey-world AWB over pre-WB RAW: black-subtracted, white-normalized channel means of each 2×2 CFA block on a coarse grid.\n const raw = rawOutput.raw, step = Math.max(2, 2 * Math.floor(Math.sqrt(width * height / 4096) / 1)), samples = [];\n for (let y = margin - (margin % 2); y + 1 < nativeHeight; y += step) for (let x = margin - (margin % 2); x + 1 < nativeWidth; x += step) {\n const value = (dx: number, dy: number): number => { const i = (y + dy) * nativeWidth + x + dx; return (raw.codes[i]! - raw.blackLevels[i]!) / (raw.effectiveSaturationCodes[dy * 2 + dx]! - raw.blackLevels[i]!); };\n let clipped = false;\n for (const [dx, dy] of [[0, 0], [1, 0], [0, 1], [1, 1]]) if (raw.saturationFlags[(y + dy!) * nativeWidth + x + dx!]! !== 0) clipped = true;\n samples.push({ sampleId: \"block-\" + x + \"-\" + y, red: Math.max(1e-9, value(0, 0)), green: Math.max(1e-9, (value(1, 0) + value(0, 1)) / 2), blue: Math.max(1e-9, value(1, 1)), weight: 1, clipped });\n }\n const policy = body.whiteBalance.awbPolicies[0]!;\n assume(\"output.whiteBalance.auto\", \"model\", { policyId: policy.policyId, samples: samples.length },\n \"Grey-world AWB of the body's \" + policy.policyId + \" policy over 2×2 CFA block means of the pre-WB RAW; the RAW is then rendered again with that intent (the same radiance queries are repeated).\");\n whiteBalanceState = estimateAutoWhiteBalance({ stateId: \"facade-wb-auto\", profile: body.whiteBalance, policyId: policy.policyId,\n sampleSet: { imageStateId: \"facade-pre-wb-raw\", inputDomain: \"relative-pre-wb-camera-linear-rgb\", samples } });\n finalRawInput = { raw: buildRawInput(intentOf(whiteBalanceState)), sceneBinding, maximumProviderEvaluations: environmentRaw.maximumProviderEvaluations };\n const wbTick = progress(\"white-balance\", plan.tileCount);\n // A second lean RAW pass with the measured intent. It gives the same RAW as re-running the sensor stage on a\n // retained optical stage, and is faster: retaining the optical stage takes the first pass off the lean executor.\n const wbTask = createNativeEnvironmentRawTask(finalRawInput, {\n readTile: async (request) => { const tile = await readTile(request); wbTick(); return tile; },\n evaluateRadiance: provider.evaluateRadiance, ...(pupil ? { evaluateApertureRadiance: provider.evaluateApertureRadiance } : {}), yieldControl });\n await runTask(wbTask);\n rawOutput = wbTask.takeOutput();\n }\n const wbMs = Date.now() - wbStarted, devStarted = Date.now();\n const colorProfile: ExportSensorColorProfile = { schemaVersion: \"0.1.0\", profileId: IDS.spectral, profileVersion: SIMULATE_CAPTURE_FACADE_VERSION, colorSamplingProfileId: IDS.cfa,\n channelIds: [\"red\", \"green\", \"blue\"], scientificStatus: \"approximation\", referenceIlluminant: \"D65\", normalizedCameraChannelsToXyz: CAMERA_TO_XYZ,\n evidence, limitations: [\"Diagonal camera→XYZ matrix of the idealized colorimetric (Luther–Ives) sensor; exact up to spectral quadrature.\"] };\n const phaseProfiles = builtInDemosaic ? builtInDemosaic.phaseProfiles : bilinearPhaseProfiles();\n const developmentWhiteBalance = whiteBalanceState ? \"apply-resolved-sensor-gains\" as const : \"not-required\" as const;\n\n\n // DNG (2.0): the packed native RAW itself, before development takes ownership of it.\n let dng: NativeRawDng | undefined;\n if (format === \"dng\") {\n const noise = Object.fromEntries(CHANNELS.map((channel) => {\n const resolved = resolveSensorReadoutRegime({ profile: regimeByChannel[channel].readoutProfile as Parameters<typeof resolveSensorReadoutRegime>[0][\"profile\"], regimeId: regimeByChannel[channel].regimeId });\n return [channel, { conversionGainElectronsPerCode: resolved.regime.systemConversionGainElectronsPerCode.value / (resolved.regime.adc.digitalGain ?? 1),\n readNoiseRmsElectrons: resolved.combinedReadNoiseRmsElectrons }];\n }));\n dng = await serializeNativeRawDng({ raw: rawOutput.raw, colorProfile, noise, ...(dngCapturedAtUtc === undefined ? {} : { capturedAtUtc: dngCapturedAtUtc }) });\n checkAbort();\n assume(\"output.dng\", \"model\", { writer: \"serializeNativeRawDng\", schemaVersion: dng.schemaVersion, whiteLevel: dng.whiteLevel, blackLevels: dng.blackLevels,\n noiseProfile: dng.noiseProfile, unrepresentedSaturationFlagCount: dng.unrepresentedSaturationFlagCount },\n \"Lossless uncompressed 16-bit CFA DNG of exactly the packed native RAW codes: per-phase BlackLevel, WhiteLevel = smallest per-phase effective white, ActiveArea and DefaultCrop from the capture geometry, ColorMatrix1/ForwardMatrix1 from the facade's diagonal camera→XYZ profile (D65), AsShotNeutral from the white-balance intent, BaselineExposure 0, and NoiseProfile from each channel's readout regime (conversion gain ÷ digital gain, combined read noise; Poisson + Gaussian + quantization only). No linear master or developed image is declared; saturation flags below WhiteLevel are not representable and are counted.\");\n }\n\n // Development\n const development: Omit<NativeRawDevelopmentInput, \"raw\"> = { phaseProfiles, colorProfile,\n whiteBalance: developmentWhiteBalance, rendering, highlightMode, ...(mirrorBorder ? { borderHandling: \"mirror\" as const } : {}),\n maximumRetainedPayloadBytes: plan.outputBytes + width * height * 3 * (rendering.bitDepth / 8) };\n let developed: { raw: NativeRawOutput; integerSamples: Uint8Array | Uint16Array; highlight: RawHighlightDiagnostics; diagnostics: SdrRenderingResult[\"diagnostics\"] };\n let gamutMappingDiagnostics: { method: \"cielab-hue-preserving-chroma-compression\"; kneeFraction: number; adjustedPixelCount: number; lightnessClippedPixelCount: number } | undefined;\n if (!linearPath) {\n const devTask = createNativeRawDevelopmentTask({ ...development, raw: rawOutput.raw }, { yieldControl,\n onProgress: (p) => onProgress?.({ stage: \"development\", completedTileCount: p.completedTileCount, totalTileCount: p.totalTileCount }) });\n await runTask(devTask);\n developed = devTask.takeOutput();\n } else {\n // Wide gamut: the native development operator up to linear sRGB/D65 (unclipped), then XYZ → target primaries.\n let lastYield = Date.now();\n const linear = await developLinearSrgb({ ...development, raw: rawOutput.raw }, async (completed, total) => {\n onProgress?.({ stage: \"development\", completedTileCount: completed, totalTileCount: total });\n if (Date.now() - lastYield >= 8) { await yieldControl(); checkAbort(); lastYield = Date.now(); }\n });\n {\n const mapping = perceptual ? prepareRgbGamutMapping({ colorSpace: colorEncoding!, method: \"cielab-hue-preserving-chroma-compression\", kneeFraction: PERCEPTUAL_GAMUT_KNEE_FRACTION }) : undefined;\n const encoded = encodeSdrFromLinear(linear.rgb, colorEncoding!, pngBitDepth!, mapping);\n developed = { raw: rawOutput.raw, integerSamples: encoded.samples, highlight: linear.highlight, diagnostics: encoded.diagnostics };\n if (mapping) {\n gamutMappingDiagnostics = { method: \"cielab-hue-preserving-chroma-compression\", kneeFraction: PERCEPTUAL_GAMUT_KNEE_FRACTION,\n adjustedPixelCount: encoded.adjustedPixelCount, lightnessClippedPixelCount: encoded.lightnessClippedPixelCount };\n assume(\"output.gamutMapping\", \"model\", { method: \"cielab-hue-preserving-chroma-compression\", kneeFraction: PERCEPTUAL_GAMUT_KNEE_FRACTION, colorSpace: colorEncoding },\n \"prepareRgbGamutMapping: CIELAB L* and hue held, chroma above 90 % of the boundary chroma C_max(L*, h) compressed with a tanh knee so it never reaches C_max (Morovič 2008, §10). In-gamut colours below the knee are unchanged; saturated in-gamut colours above it are desaturated slightly. L* ≥ 100 (above the RAW white) maps to white. CIELAB hue is not perceptually constant for saturated blues, so they can shift toward purple.\");\n }\n assume(\"output.colorEncoding.conversion\", \"model\", { from: \"linear-srgb-d65 (unclipped)\", via: \"CIE XYZ\", to: colorEncoding, gamutHandling: perceptual ? \"cielab-hue-preserving-chroma-compression\" : \"clip-components\",\n transfer: colorEncoding === \"rec2020\" ? \"bt2020-oetf (= BT.709 OETF)\" : \"srgb (W3C CSS Color 4)\" },\n \"Developed with the native development operator (demosaic, per-site white-level clip, WB, highlight mode, diagonal camera→XYZ, XYZ→linear sRGB) but before any sRGB clipping, so colours outside sRGB are kept; converted to \" +\n colorEncoding + \" through XYZ (matrices from primaries and D65, as in W3C CSS Color 4), \" + (perceptual ? \"gamut-mapped perceptually (output.gamutMapping)\" : \"components clipped to [0, 1] in the target gamut\") +\n \", then encoded and rounded to nearest. RAW white maps to display white, as in the sRGB path.\");\n }\n }\n const devMs = Date.now() - devStarted, jpegStarted = Date.now();\n let jpeg: Uint8Array | undefined;\n if (format === \"jpeg\") {\n const samples = developed.integerSamples as Uint8Array;\n const jpegSha = await sha256Hex(Array.from(samples.subarray(0, Math.min(samples.length, 4096))).join(\",\") + \":\" + samples.length + \":\" + sourceSha256);\n const source = { captureId: IDS.capture, imageStateId: \"facade-developed\", artifactId: \"facade-developed-srgb8\", sha256: jpegSha, width, height, encoding: \"encoded-srgb-8-rgb\" as const };\n // The encoder reads every pixel once, in source tiles of at most 256 × 32 aligned to the crop origin.\n const reads = Math.ceil(height / 32) * Math.ceil(width / 256), jpegTick = progress(\"jpeg\", reads);\n const jpegTask = createPrintJpegTask({ source, crop: { x: 0, y: 0, width, height }, outputWidth: width, outputHeight: height, quantizationStep: jpegStep!,\n maximumEncodedBytes: Math.max(65536, width * height * 6), maximumProviderReads: reads }, {\n readTile: async (request) => {\n jpegTick();\n const out = new Uint8Array(request.width * request.height * 3);\n for (let row = 0; row < request.height; row++) out.set(samples.subarray(((request.y + row) * width + request.x) * 3, ((request.y + row) * width + request.x + request.width) * 3), row * request.width * 3);\n return { ...request, samples: out };\n }, yieldControl });\n await runTask(jpegTask);\n jpeg = jpegTask.takeOutput().bytes;\n assume(\"output.jpeg\", \"model\", { encoder: \"photivra-print-jpeg\", iccProfile: \"photivra-srgb\" }, \"Baseline JPEG from the existing print JPEG encoder with an embedded sRGB ICC profile; the source digest covers a sample prefix, length and scene digest.\");\n }\n const jpegMs = Date.now() - jpegStarted;\n let png: Uint8Array | undefined;\n if (format === \"png\") {\n png = serializePngImage({ width, height, bitDepth: pngBitDepth!, samples: developed.integerSamples, colourEncoding: pngColourEncoding(colorEncoding!) });\n assume(\"output.png\", \"model\", { encoder: \"serializePngImage\", bitDepth: pngBitDepth, colourEncoding: pngColourEncoding(colorEncoding!) },\n \"Deterministic PNG (8/16-bit RGB, in-house zlib) with the colour encoding signalled in the file: the sRGB chunk for sRGB, otherwise a cICP chunk with ITU-T H.273 primaries/transfer code points. No mastering-display (mDCV) or content-light-level (cLLI) metadata is written.\");\n }\n\n return Object.freeze({\n facadeVersion: SIMULATE_CAPTURE_FACADE_VERSION, engineApiVersion: ENGINE_API_VERSION,\n image: { width, height, format, samples: developed.integerSamples, ...(jpeg ? { jpeg } : {}), ...(png ? { png, colorEncoding: colorEncoding! } : {}), ...(dng ? { dng: dng.bytes } : {}) },\n raw: developed.raw, plan,\n request: { environmentRaw: finalRawInput, siteInput, development, whiteBalanceState },\n exposure: { mode, settings: { fNumber, shutterSeconds, iso: resolvedIso }, ev100: Math.log2(fNumber ** 2 / shutterSeconds),\n meteredSceneLuminanceCdPerSquareMeter: meteredLuminance, resolution },\n scene: { sceneId: chart ? \"chart:\" + chart.preset : callerScene!.sceneId, preset: scenePreset, parameters: chart ? chart.parameters : {},\n illuminant: { id: illuminant.id, description: illuminant.description, illuminanceLux }, distanceM: subjectDistanceM,\n framedWidthM: 2 * metresPerFrameUnit, framedHeightM: 2 * metresPerFrameUnit * aspect, sourceSha256 },\n diagnostics: { providerEvaluationCount, highlight: developed.highlight, rendering: developed.diagnostics, ...(gamutMappingDiagnostics ? { gamutMapping: gamutMappingDiagnostics } : {}),\n timingsMs: { raw: rawMs, whiteBalance: wbMs, development: devMs, jpeg: jpegMs, total: Date.now() - started } },\n provenance: { scientificStatus: \"approximation\" as const, cameraPresetId: preset.presetId, cameraPresetVersion: preset.presetVersion,\n evidence: [...FACADE_EVIDENCE, ...preset.evidence],\n composedContracts: [\"resolveGenericEquipmentExposureCapabilities\", \"meterRelativeExposure\", \"createExposureMeterTargetFromMeteringResult\",\n \"resolve\" + (mode === \"manual\" ? \"Manual\" : mode === \"aperture-priority\" ? \"AperturePriority\" : mode === \"shutter-priority\" ? \"ShutterPriority\" : \"ProgramAuto\") + \"ExposureMode\",\n ...(rollingSchedule ? [\"resolveElectronicRollingShutterExposureSchedule\", \"createRollingShutterCaptureExposureSchedule\"] : []),\n \"resolveGenericIsoSignalChain\", \"createNativeEnvironmentRawTask\", ...(needsAuto ? [\"estimateAutoWhiteBalance\"] : []),\n ...(builtInDemosaic ? [\"createBuiltInBayerDemosaicProfiles\"] : []),\n ...(linearPath ? [\"native RAW development operator (linear, pre-clip)\", \"resolveRgbColorSpace\", ...(perceptual ? [\"prepareRgbGamutMapping\"] : [])] : [\"createNativeRawDevelopmentTask\"]),\n ...(jpeg ? [\"createPrintJpegTask\"] : []), ...(png ? [\"serializePngImage\"] : []), ...(dng ? [\"resolveSensorReadoutRegime\", \"serializeNativeRawDng\"] : [])],\n limitations: [\"Educational approximation: synthetic tier sensor values, idealized colorimetric sensor, planar Lambertian scene and point optics; not a calibrated camera emulation.\",\n \"Not offered by the facade: atmospheric haze and polarizers (the scene-radiance provider contract declares no volumetric transport or polarization), flash, video, HDR brackets and processing operators; compose those APIs directly.\"] },\n assumptions: Object.freeze(assumptions.map((a) => Object.freeze(a)))\n });\n}\n\n/** Chart preset ids accepted by `simulateCapture({ scene: { preset } })`. */\nexport const SIMULATE_CAPTURE_CHART_PRESETS = CHART_SCENE_PRESETS;\n"]}
@@ -0,0 +1,17 @@
1
+ import { type ChartRadianceBatchInput, type ChartRadianceBatchPlan } from "../facade/chart-radiance-batch.js";
2
+ import { type ImageKernelExecution } from "./image-kernel-execution.js";
3
+ import type { ChartRadianceResult } from "./image-kernel-accelerator.js";
4
+ import { type WebGpuRuntime } from "./webgpu-runtime.js";
5
+ type PipelineSource = (label: string, code: string) => Promise<GPUComputePipeline>;
6
+ type YieldControl = ((signal: AbortSignal) => Promise<void>) | undefined;
7
+ /** Frame-unit magnitude limit for GPU points. */
8
+ export declare const CHART_GPU_MAXIMUM_COORDINATE: number;
9
+ export declare function evaluateChartRadianceOnCpu(input: ChartRadianceBatchInput, abort: AbortController, yieldControl: YieldControl, execution: ImageKernelExecution): Promise<ChartRadianceResult>;
10
+ /** Preset constants (uniform words 3–5 and floats 8–15) and the auxiliary table. @internal */
11
+ export declare function chartGpuConstants(plan: ChartRadianceBatchPlan): {
12
+ ints: [number, number, number];
13
+ floats: number[];
14
+ aux: Float32Array<ArrayBuffer>;
15
+ };
16
+ export declare function evaluateChartRadianceOnGpu(runtime: WebGpuRuntime, bandBytes: number, input: ChartRadianceBatchInput, abort: AbortController, yieldControl: YieldControl, pipelines: PipelineSource): Promise<ChartRadianceResult>;
17
+ export {};