@photivra/engine 1.5.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1085) hide show
  1. package/CHANGELOG.md +414 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/diffraction-provider.d.ts +30 -0
  236. package/dist/facade/diffraction-provider.js +127 -0
  237. package/dist/facade/diffraction-provider.js.map +1 -0
  238. package/dist/facade/host-yield.d.ts +7 -0
  239. package/dist/facade/host-yield.js +19 -0
  240. package/dist/facade/host-yield.js.map +1 -0
  241. package/dist/facade/scene-radiance.d.ts +117 -0
  242. package/dist/facade/scene-radiance.js +205 -0
  243. package/dist/facade/scene-radiance.js.map +1 -0
  244. package/dist/facade/simulate-capture.d.ts +363 -0
  245. package/dist/facade/simulate-capture.js +1281 -0
  246. package/dist/facade/simulate-capture.js.map +1 -0
  247. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  248. package/dist/gpu/chart-radiance-gpu.js +176 -0
  249. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  250. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  251. package/dist/gpu/image-kernel-accelerator.js +720 -0
  252. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  253. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  254. package/dist/gpu/image-kernel-execution.js +84 -0
  255. package/dist/gpu/image-kernel-execution.js.map +1 -0
  256. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  257. package/dist/gpu/sensor-stage-gpu.js +317 -0
  258. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  259. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  260. package/dist/gpu/temporal-sum-gpu.js +150 -0
  261. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  262. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  263. package/dist/gpu/webgpu-runtime.js +215 -0
  264. package/dist/gpu/webgpu-runtime.js.map +1 -0
  265. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  266. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  267. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  268. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  269. package/dist/gpu/wgsl-kernels.js +365 -0
  270. package/dist/gpu/wgsl-kernels.js.map +1 -0
  271. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  272. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  273. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  274. package/dist/index.d.ts +91 -25
  275. package/dist/index.js +60 -15
  276. package/dist/index.js.map +1 -1
  277. package/dist/motion/camera-rotation.d.ts +92 -40
  278. package/dist/motion/camera-rotation.js +84 -47
  279. package/dist/motion/camera-rotation.js.map +1 -1
  280. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  281. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  282. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  283. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  284. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  285. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  286. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  287. package/dist/motion/capture-rotation-trajectory.js +36 -26
  288. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  289. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  290. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  291. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  292. package/dist/motion/extended-object-projection.d.ts +19 -16
  293. package/dist/motion/extended-object-projection.js +38 -18
  294. package/dist/motion/extended-object-projection.js.map +1 -1
  295. package/dist/motion/projected-motion.d.ts +18 -17
  296. package/dist/motion/projected-motion.js +25 -17
  297. package/dist/motion/projected-motion.js.map +1 -1
  298. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  299. package/dist/motion/temporal-exposure-sum.js +141 -0
  300. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  301. package/dist/motion/video-sequence.d.ts +111 -0
  302. package/dist/motion/video-sequence.js +179 -0
  303. package/dist/motion/video-sequence.js.map +1 -0
  304. package/dist/optics/aperture.d.ts +14 -15
  305. package/dist/optics/aperture.js +13 -11
  306. package/dist/optics/aperture.js.map +1 -1
  307. package/dist/optics/atmospheric-haze.d.ts +83 -0
  308. package/dist/optics/atmospheric-haze.js +113 -0
  309. package/dist/optics/atmospheric-haze.js.map +1 -0
  310. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  311. package/dist/optics/brown-conrady-distortion.js +291 -0
  312. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  313. package/dist/optics/circle-of-confusion.d.ts +10 -10
  314. package/dist/optics/circle-of-confusion.js +15 -11
  315. package/dist/optics/circle-of-confusion.js.map +1 -1
  316. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  317. package/dist/optics/complex-pupil-psf.js +190 -98
  318. package/dist/optics/complex-pupil-psf.js.map +1 -1
  319. package/dist/optics/depth-of-field.d.ts +25 -15
  320. package/dist/optics/depth-of-field.js +67 -27
  321. package/dist/optics/depth-of-field.js.map +1 -1
  322. package/dist/optics/diffraction-psf-profile.d.ts +118 -0
  323. package/dist/optics/diffraction-psf-profile.js +252 -0
  324. package/dist/optics/diffraction-psf-profile.js.map +1 -0
  325. package/dist/optics/diffraction.d.ts +14 -13
  326. package/dist/optics/diffraction.js +14 -10
  327. package/dist/optics/diffraction.js.map +1 -1
  328. package/dist/optics/focus-breathing.d.ts +88 -27
  329. package/dist/optics/focus-breathing.js +114 -23
  330. package/dist/optics/focus-breathing.js.map +1 -1
  331. package/dist/optics/focus-state.d.ts +18 -18
  332. package/dist/optics/focus-state.js +21 -15
  333. package/dist/optics/focus-state.js.map +1 -1
  334. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  335. package/dist/optics/front-of-lens-filter.js +259 -88
  336. package/dist/optics/front-of-lens-filter.js.map +1 -1
  337. package/dist/optics/illumination-vignetting.d.ts +16 -17
  338. package/dist/optics/illumination-vignetting.js +40 -17
  339. package/dist/optics/illumination-vignetting.js.map +1 -1
  340. package/dist/optics/irradiance-convolution.d.ts +59 -0
  341. package/dist/optics/irradiance-convolution.js +138 -0
  342. package/dist/optics/irradiance-convolution.js.map +1 -0
  343. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  344. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  345. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  346. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  347. package/dist/optics/lens-psf-kernels.js +175 -0
  348. package/dist/optics/lens-psf-kernels.js.map +1 -0
  349. package/dist/optics/lens-psf-profile.d.ts +78 -46
  350. package/dist/optics/lens-psf-profile.js +335 -124
  351. package/dist/optics/lens-psf-profile.js.map +1 -1
  352. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  353. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  354. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  355. package/dist/optics/polygon-diffraction.d.ts +80 -23
  356. package/dist/optics/polygon-diffraction.js +130 -25
  357. package/dist/optics/polygon-diffraction.js.map +1 -1
  358. package/dist/optics/profile-contract.d.ts +5 -6
  359. package/dist/optics/profile-contract.js +14 -11
  360. package/dist/optics/profile-contract.js.map +1 -1
  361. package/dist/optics/psf-foundation.d.ts +23 -23
  362. package/dist/optics/psf-foundation.js +24 -21
  363. package/dist/optics/psf-foundation.js.map +1 -1
  364. package/dist/optics/pupil-vignetting.d.ts +118 -0
  365. package/dist/optics/pupil-vignetting.js +264 -0
  366. package/dist/optics/pupil-vignetting.js.map +1 -0
  367. package/dist/optics/radial-distortion.d.ts +34 -33
  368. package/dist/optics/radial-distortion.js +37 -30
  369. package/dist/optics/radial-distortion.js.map +1 -1
  370. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  371. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  372. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  373. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  374. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  375. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  376. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  377. package/dist/optics/sensor-aperture-rays.js +32 -14
  378. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  379. package/dist/optics/sensor-environment-query.d.ts +81 -16
  380. package/dist/optics/sensor-environment-query.js +145 -12
  381. package/dist/optics/sensor-environment-query.js.map +1 -1
  382. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  383. package/dist/optics/sensor-psf-quadrature.js +18 -11
  384. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  385. package/dist/optics/sensor-psf-support.d.ts +8 -6
  386. package/dist/optics/sensor-psf-support.js +8 -5
  387. package/dist/optics/sensor-psf-support.js.map +1 -1
  388. package/dist/optics/stray-light.d.ts +22 -19
  389. package/dist/optics/stray-light.js +18 -12
  390. package/dist/optics/stray-light.js.map +1 -1
  391. package/dist/optics/thin-lens.d.ts +10 -9
  392. package/dist/optics/thin-lens.js +12 -8
  393. package/dist/optics/thin-lens.js.map +1 -1
  394. package/dist/optics/zernike-wavefront.d.ts +154 -0
  395. package/dist/optics/zernike-wavefront.js +352 -0
  396. package/dist/optics/zernike-wavefront.js.map +1 -0
  397. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  398. package/dist/output/capture-corrected-sdr.js +16 -8
  399. package/dist/output/capture-corrected-sdr.js.map +1 -1
  400. package/dist/output/capture-geometry.d.ts +34 -36
  401. package/dist/output/capture-geometry.js +52 -32
  402. package/dist/output/capture-geometry.js.map +1 -1
  403. package/dist/output/capture-sdr.d.ts +7 -6
  404. package/dist/output/capture-sdr.js +11 -8
  405. package/dist/output/capture-sdr.js.map +1 -1
  406. package/dist/output/crop.d.ts +22 -6
  407. package/dist/output/crop.js +40 -6
  408. package/dist/output/crop.js.map +1 -1
  409. package/dist/output/geometric-transforms.d.ts +60 -23
  410. package/dist/output/geometric-transforms.js +111 -24
  411. package/dist/output/geometric-transforms.js.map +1 -1
  412. package/dist/output/lens-corrections.d.ts +27 -19
  413. package/dist/output/lens-corrections.js +29 -13
  414. package/dist/output/lens-corrections.js.map +1 -1
  415. package/dist/output/native-capture-sdr.d.ts +71 -16
  416. package/dist/output/native-capture-sdr.js +190 -33
  417. package/dist/output/native-capture-sdr.js.map +1 -1
  418. package/dist/output/png-encoder.d.ts +65 -0
  419. package/dist/output/png-encoder.js +461 -0
  420. package/dist/output/png-encoder.js.map +1 -0
  421. package/dist/output/print-contrast-reference.d.ts +10 -9
  422. package/dist/output/print-contrast-reference.js +10 -8
  423. package/dist/output/print-contrast-reference.js.map +1 -1
  424. package/dist/output/print-detail.d.ts +18 -17
  425. package/dist/output/print-detail.js +12 -10
  426. package/dist/output/print-detail.js.map +1 -1
  427. package/dist/output/print-jpeg.d.ts +26 -5
  428. package/dist/output/print-jpeg.js +117 -50
  429. package/dist/output/print-jpeg.js.map +1 -1
  430. package/dist/output/print-plan.d.ts +19 -19
  431. package/dist/output/print-plan.js +11 -10
  432. package/dist/output/print-plan.js.map +1 -1
  433. package/dist/output/print-region-statistics.d.ts +14 -15
  434. package/dist/output/print-region-statistics.js +11 -11
  435. package/dist/output/print-region-statistics.js.map +1 -1
  436. package/dist/output/sdr-rendering.d.ts +48 -10
  437. package/dist/output/sdr-rendering.js +114 -25
  438. package/dist/output/sdr-rendering.js.map +1 -1
  439. package/dist/output/subject-framing-crop.d.ts +6 -10
  440. package/dist/output/subject-framing-crop.js +23 -13
  441. package/dist/output/subject-framing-crop.js.map +1 -1
  442. package/dist/processing/demosaic.d.ts +90 -0
  443. package/dist/processing/demosaic.js +275 -0
  444. package/dist/processing/demosaic.js.map +1 -0
  445. package/dist/processing/denoise.d.ts +68 -0
  446. package/dist/processing/denoise.js +214 -0
  447. package/dist/processing/denoise.js.map +1 -0
  448. package/dist/processing/focus-stacking.d.ts +17 -0
  449. package/dist/processing/focus-stacking.js +80 -0
  450. package/dist/processing/focus-stacking.js.map +1 -0
  451. package/dist/processing/hdr.d.ts +54 -0
  452. package/dist/processing/hdr.js +172 -0
  453. package/dist/processing/hdr.js.map +1 -0
  454. package/dist/processing/image-ops.d.ts +66 -0
  455. package/dist/processing/image-ops.js +192 -0
  456. package/dist/processing/image-ops.js.map +1 -0
  457. package/dist/processing/panorama.d.ts +51 -0
  458. package/dist/processing/panorama.js +305 -0
  459. package/dist/processing/panorama.js.map +1 -0
  460. package/dist/processing/processing-task.d.ts +85 -0
  461. package/dist/processing/processing-task.js +164 -0
  462. package/dist/processing/processing-task.js.map +1 -0
  463. package/dist/processing/tone-mapping.d.ts +69 -0
  464. package/dist/processing/tone-mapping.js +310 -0
  465. package/dist/processing/tone-mapping.js.map +1 -0
  466. package/dist/schema/camera.d.ts +5 -4
  467. package/dist/schema/illumination-spectral.d.ts +13 -19
  468. package/dist/schema/illumination-spectral.js +23 -19
  469. package/dist/schema/illumination-spectral.js.map +1 -1
  470. package/dist/schema/illumination-temporal.d.ts +12 -15
  471. package/dist/schema/illumination-temporal.js +43 -28
  472. package/dist/schema/illumination-temporal.js.map +1 -1
  473. package/dist/schema/illumination.d.ts +5 -4
  474. package/dist/schema/illumination.js +55 -20
  475. package/dist/schema/illumination.js.map +1 -1
  476. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  477. package/dist/schema/scene-radiance-temporal.js +26 -23
  478. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  479. package/dist/schema/scene-radiance.d.ts +17 -17
  480. package/dist/schema/scene-radiance.js +56 -34
  481. package/dist/schema/scene-radiance.js.map +1 -1
  482. package/dist/schema/scene.d.ts +14 -13
  483. package/dist/schema/validation.d.ts +0 -1
  484. package/dist/schema/validation.js +17 -15
  485. package/dist/schema/validation.js.map +1 -1
  486. package/dist/sensor/accumulated-charge.d.ts +45 -64
  487. package/dist/sensor/accumulated-charge.js +41 -47
  488. package/dist/sensor/accumulated-charge.js.map +1 -1
  489. package/dist/sensor/architecture.d.ts +22 -25
  490. package/dist/sensor/architecture.js +17 -16
  491. package/dist/sensor/architecture.js.map +1 -1
  492. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  493. package/dist/sensor/camera-saturation-capacity.js +36 -34
  494. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  495. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  496. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  497. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  498. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  499. package/dist/sensor/capture-mode-timing.js +24 -21
  500. package/dist/sensor/capture-mode-timing.js.map +1 -1
  501. package/dist/sensor/capture-mode.d.ts +28 -30
  502. package/dist/sensor/capture-mode.js +33 -31
  503. package/dist/sensor/capture-mode.js.map +1 -1
  504. package/dist/sensor/color-sampling.d.ts +30 -33
  505. package/dist/sensor/color-sampling.js +32 -37
  506. package/dist/sensor/color-sampling.js.map +1 -1
  507. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  508. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  509. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  510. package/dist/sensor/dark-current.d.ts +53 -49
  511. package/dist/sensor/dark-current.js +87 -46
  512. package/dist/sensor/dark-current.js.map +1 -1
  513. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  514. package/dist/sensor/environment-photo-signal.js +127 -46
  515. package/dist/sensor/environment-photo-signal.js.map +1 -1
  516. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  517. package/dist/sensor/eqe-electron-rate.js +34 -14
  518. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  519. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  520. package/dist/sensor/eqe-local-exposure.js +15 -11
  521. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  522. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  523. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  524. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  525. package/dist/sensor/exposure-window.d.ts +48 -34
  526. package/dist/sensor/exposure-window.js +77 -36
  527. package/dist/sensor/exposure-window.js.map +1 -1
  528. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  529. package/dist/sensor/fixed-pattern-noise.js +166 -0
  530. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  531. package/dist/sensor/iso-gain.d.ts +44 -0
  532. package/dist/sensor/iso-gain.js +119 -0
  533. package/dist/sensor/iso-gain.js.map +1 -0
  534. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  535. package/dist/sensor/iso-signal-chain.js +52 -66
  536. package/dist/sensor/iso-signal-chain.js.map +1 -1
  537. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  538. package/dist/sensor/local-exposure-binding.js +22 -18
  539. package/dist/sensor/local-exposure-binding.js.map +1 -1
  540. package/dist/sensor/optical-stack.d.ts +36 -40
  541. package/dist/sensor/optical-stack.js +34 -37
  542. package/dist/sensor/optical-stack.js.map +1 -1
  543. package/dist/sensor/photon-energy.d.ts +22 -28
  544. package/dist/sensor/photon-energy.js +42 -34
  545. package/dist/sensor/photon-energy.js.map +1 -1
  546. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  547. package/dist/sensor/physical-charge-capacity.js +35 -36
  548. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  549. package/dist/sensor/pixel-pitch.d.ts +2 -3
  550. package/dist/sensor/pixel-pitch.js +4 -2
  551. package/dist/sensor/pixel-pitch.js.map +1 -1
  552. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  553. package/dist/sensor/radiometry-readiness.js +20 -17
  554. package/dist/sensor/radiometry-readiness.js.map +1 -1
  555. package/dist/sensor/raw-readout.d.ts +173 -83
  556. package/dist/sensor/raw-readout.js +425 -160
  557. package/dist/sensor/raw-readout.js.map +1 -1
  558. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  559. package/dist/sensor/raw-reconstruction.js +200 -47
  560. package/dist/sensor/raw-reconstruction.js.map +1 -1
  561. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  562. package/dist/sensor/readout-exposure-linkage.js +125 -27
  563. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  564. package/dist/sensor/readout-timing.d.ts +43 -44
  565. package/dist/sensor/readout-timing.js +38 -30
  566. package/dist/sensor/readout-timing.js.map +1 -1
  567. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  568. package/dist/sensor/response-application-compatibility.js +35 -34
  569. package/dist/sensor/response-application-compatibility.js.map +1 -1
  570. package/dist/sensor/response-operating-range.d.ts +26 -35
  571. package/dist/sensor/response-operating-range.js +40 -39
  572. package/dist/sensor/response-operating-range.js.map +1 -1
  573. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  574. package/dist/sensor/responsivity-photocurrent.js +57 -40
  575. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  576. package/dist/sensor/sampling-aperture.d.ts +21 -25
  577. package/dist/sensor/sampling-aperture.js +29 -28
  578. package/dist/sensor/sampling-aperture.js.map +1 -1
  579. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  580. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  581. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  582. package/dist/sensor/sensor-geometry.d.ts +28 -32
  583. package/dist/sensor/sensor-geometry.js +35 -20
  584. package/dist/sensor/sensor-geometry.js.map +1 -1
  585. package/dist/sensor/signal-noise.d.ts +14 -16
  586. package/dist/sensor/signal-noise.js +15 -13
  587. package/dist/sensor/signal-noise.js.map +1 -1
  588. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  589. package/dist/sensor/spatial-sample-reduction.js +39 -48
  590. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  591. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  592. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  593. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  594. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  595. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  596. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  597. package/dist/sensor/spectral-coverage.d.ts +6 -9
  598. package/dist/sensor/spectral-coverage.js +9 -6
  599. package/dist/sensor/spectral-coverage.js.map +1 -1
  600. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  601. package/dist/sensor/spectral-quadrature.js +38 -48
  602. package/dist/sensor/spectral-quadrature.js.map +1 -1
  603. package/dist/sensor/spectral-response.d.ts +53 -41
  604. package/dist/sensor/spectral-response.js +80 -47
  605. package/dist/sensor/spectral-response.js.map +1 -1
  606. package/dist/sensor/stochastic-seed.d.ts +50 -0
  607. package/dist/sensor/stochastic-seed.js +123 -0
  608. package/dist/sensor/stochastic-seed.js.map +1 -0
  609. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  610. package/dist/sensor/temporal-eqe-sum.js +5 -6
  611. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  612. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  613. package/dist/sensor/temporal-photo-signal.js +11 -10
  614. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  615. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  616. package/dist/sensor/temporal-sample-binding.js +3 -3
  617. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  618. package/dist/simulation/poc-simulation.d.ts +16 -16
  619. package/dist/simulation/poc-simulation.js +20 -15
  620. package/dist/simulation/poc-simulation.js.map +1 -1
  621. package/dist/stabilization/camera-shake.d.ts +42 -18
  622. package/dist/stabilization/camera-shake.js +43 -20
  623. package/dist/stabilization/camera-shake.js.map +1 -1
  624. package/dist/stabilization/system.d.ts +44 -41
  625. package/dist/stabilization/system.js +196 -108
  626. package/dist/stabilization/system.js.map +1 -1
  627. package/docs/AGENT_GUIDE.md +183 -0
  628. package/docs/API_REFERENCE.md +777 -2
  629. package/docs/QUICK_START.md +663 -0
  630. package/docs/USAGE.md +1719 -714
  631. package/docs/api/camera-equivalent-focal-length.md +6 -7
  632. package/docs/api/camera-field-of-view.md +16 -8
  633. package/docs/api/camera-lens-projection.md +246 -0
  634. package/docs/api/camera-projected-object-size.md +6 -5
  635. package/docs/api/capture-capture-export-metadata.md +10 -10
  636. package/docs/api/capture-dng-import.md +134 -0
  637. package/docs/api/capture-environment-raw-producer.md +17 -11
  638. package/docs/api/capture-export-jpeg.md +16 -0
  639. package/docs/api/capture-focus-control.md +25 -47
  640. package/docs/api/capture-linear-encoding.md +21 -12
  641. package/docs/api/capture-lossless-jpeg.md +49 -0
  642. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  643. package/docs/api/capture-native-environment-raw.md +161 -4
  644. package/docs/api/capture-native-raw-development.md +69 -8
  645. package/docs/api/capture-native-raw-dng.md +84 -0
  646. package/docs/api/capture-native-raw.md +21 -10
  647. package/docs/api/capture-packed-sensor-raw.md +156 -0
  648. package/docs/api/capture-photographic-export.md +69 -31
  649. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  650. package/docs/api/capture-raw-white-level.md +37 -0
  651. package/docs/api/capture-release-sequence.md +6 -7
  652. package/docs/api/capture-sensor-raw-frame.md +6 -6
  653. package/docs/api/capture-sensor-raw-producer.md +17 -11
  654. package/docs/api/capture-simulated-capture.md +15 -15
  655. package/docs/api/color-camera-color-matrix.md +103 -0
  656. package/docs/api/color-capture-color.md +22 -11
  657. package/docs/api/color-chromatic-adaptation.md +82 -0
  658. package/docs/api/color-color-difference.md +134 -0
  659. package/docs/api/color-color-matching-functions.md +259 -0
  660. package/docs/api/color-colorimetry-math.md +54 -0
  661. package/docs/api/color-gamut-mapping.md +72 -0
  662. package/docs/api/color-illuminants.md +280 -0
  663. package/docs/api/color-rgb-color-spaces.md +151 -0
  664. package/docs/api/color-sensor-color-development.md +27 -0
  665. package/docs/api/color-srgb-icc.md +2 -4
  666. package/docs/api/color-white-balance.md +95 -19
  667. package/docs/api/composition-image-formation-plan.md +124 -95
  668. package/docs/api/composition-plan-consumer.md +7 -7
  669. package/docs/api/core-calculation-result.md +18 -14
  670. package/docs/api/core-configuration-error.md +1 -1
  671. package/docs/api/core-image-formation.md +7 -7
  672. package/docs/api/core-scientific-assurance.md +12 -10
  673. package/docs/api/core-spectral-composition.md +14 -14
  674. package/docs/api/core-spectral.md +6 -6
  675. package/docs/api/core-validation.md +3 -3
  676. package/docs/api/core-version.md +7 -6
  677. package/docs/api/equipment-exposure-capabilities.md +11 -10
  678. package/docs/api/equipment-generic-tier-assets.md +7 -2
  679. package/docs/api/equipment-generic-tier-presets.md +6 -6
  680. package/docs/api/equipment-iso-capabilities.md +18 -18
  681. package/docs/api/equipment-metering-capabilities.md +6 -6
  682. package/docs/api/equipment-release-capabilities.md +4 -4
  683. package/docs/api/exports.json +2253 -3
  684. package/docs/api/exposure-exposure-duration-control.md +9 -9
  685. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  686. package/docs/api/exposure-exposure.md +10 -10
  687. package/docs/api/exposure-flash-ttl.md +182 -0
  688. package/docs/api/exposure-flash.md +183 -28
  689. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  690. package/docs/api/exposure-metering-target.md +9 -8
  691. package/docs/api/exposure-metering-temporal.md +8 -8
  692. package/docs/api/exposure-metering.md +69 -9
  693. package/docs/api/exposure-program-line.md +6 -5
  694. package/docs/api/facade-chart-radiance-batch.md +96 -0
  695. package/docs/api/facade-chart-scenes.md +240 -0
  696. package/docs/api/facade-scene-radiance.md +122 -0
  697. package/docs/api/facade-simulate-capture.md +397 -0
  698. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  699. package/docs/api/gpu-image-kernel-execution.md +152 -0
  700. package/docs/api/motion-camera-rotation.md +43 -26
  701. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  702. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  703. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  704. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  705. package/docs/api/motion-extended-object-projection.md +10 -8
  706. package/docs/api/motion-projected-motion.md +8 -8
  707. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  708. package/docs/api/motion-video-sequence.md +159 -0
  709. package/docs/api/optics-aperture.md +8 -8
  710. package/docs/api/optics-atmospheric-haze.md +104 -0
  711. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  712. package/docs/api/optics-circle-of-confusion.md +5 -4
  713. package/docs/api/optics-complex-pupil-psf.md +57 -16
  714. package/docs/api/optics-depth-of-field.md +12 -6
  715. package/docs/api/optics-diffraction-psf-profile.md +96 -0
  716. package/docs/api/optics-diffraction.md +8 -7
  717. package/docs/api/optics-focus-breathing.md +104 -16
  718. package/docs/api/optics-focus-state.md +9 -10
  719. package/docs/api/optics-front-of-lens-filter.md +72 -14
  720. package/docs/api/optics-illumination-vignetting.md +10 -10
  721. package/docs/api/optics-irradiance-convolution.md +95 -0
  722. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  723. package/docs/api/optics-lens-psf-kernels.md +72 -0
  724. package/docs/api/optics-lens-psf-profile.md +48 -26
  725. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  726. package/docs/api/optics-polygon-diffraction.md +78 -13
  727. package/docs/api/optics-profile-contract.md +4 -4
  728. package/docs/api/optics-psf-foundation.md +12 -12
  729. package/docs/api/optics-pupil-vignetting.md +132 -0
  730. package/docs/api/optics-radial-distortion.md +12 -12
  731. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  732. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  733. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  734. package/docs/api/optics-sensor-environment-query.md +52 -9
  735. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  736. package/docs/api/optics-stray-light.md +12 -11
  737. package/docs/api/optics-thin-lens.md +4 -3
  738. package/docs/api/optics-zernike-wavefront.md +229 -0
  739. package/docs/api/output-capture-corrected-sdr.md +10 -7
  740. package/docs/api/output-capture-geometry.md +35 -36
  741. package/docs/api/output-capture-sdr.md +4 -4
  742. package/docs/api/output-crop.md +7 -4
  743. package/docs/api/output-geometric-transforms.md +65 -19
  744. package/docs/api/output-lens-corrections.md +17 -15
  745. package/docs/api/output-native-capture-sdr.md +26 -13
  746. package/docs/api/output-png-encoder.md +105 -0
  747. package/docs/api/output-print-contrast-reference.md +8 -8
  748. package/docs/api/output-print-detail.md +14 -14
  749. package/docs/api/output-print-jpeg.md +22 -5
  750. package/docs/api/output-print-plan.md +18 -18
  751. package/docs/api/output-print-region-statistics.md +14 -14
  752. package/docs/api/output-sdr-rendering.md +52 -10
  753. package/docs/api/output-subject-framing-crop.md +5 -6
  754. package/docs/api/processing-demosaic.md +120 -0
  755. package/docs/api/processing-denoise.md +148 -0
  756. package/docs/api/processing-focus-stacking.md +41 -0
  757. package/docs/api/processing-hdr.md +113 -0
  758. package/docs/api/processing-panorama.md +82 -0
  759. package/docs/api/processing-processing-task.md +107 -0
  760. package/docs/api/processing-tone-mapping.md +142 -0
  761. package/docs/api/schema-camera.md +6 -4
  762. package/docs/api/schema-illumination-spectral.md +10 -11
  763. package/docs/api/schema-illumination-temporal.md +13 -15
  764. package/docs/api/schema-illumination.md +4 -4
  765. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  766. package/docs/api/schema-scene-radiance.md +18 -17
  767. package/docs/api/schema-scene.md +9 -9
  768. package/docs/api/schema-validation.md +1 -1
  769. package/docs/api/sensor-accumulated-charge.md +12 -20
  770. package/docs/api/sensor-architecture.md +15 -16
  771. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  772. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  773. package/docs/api/sensor-capture-mode-timing.md +9 -9
  774. package/docs/api/sensor-capture-mode.md +29 -30
  775. package/docs/api/sensor-color-sampling.md +31 -33
  776. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  777. package/docs/api/sensor-dark-current.md +30 -14
  778. package/docs/api/sensor-environment-photo-signal.md +13 -6
  779. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  780. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  781. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  782. package/docs/api/sensor-exposure-window.md +24 -24
  783. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  784. package/docs/api/sensor-iso-gain.md +63 -0
  785. package/docs/api/sensor-iso-signal-chain.md +13 -22
  786. package/docs/api/sensor-local-exposure-binding.md +12 -13
  787. package/docs/api/sensor-optical-stack.md +37 -40
  788. package/docs/api/sensor-photon-energy.md +10 -11
  789. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  790. package/docs/api/sensor-pixel-pitch.md +1 -1
  791. package/docs/api/sensor-radiometry-readiness.md +9 -9
  792. package/docs/api/sensor-raw-readout.md +118 -52
  793. package/docs/api/sensor-raw-reconstruction.md +97 -20
  794. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  795. package/docs/api/sensor-readout-timing.md +33 -35
  796. package/docs/api/sensor-response-application-compatibility.md +9 -11
  797. package/docs/api/sensor-response-operating-range.md +14 -18
  798. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  799. package/docs/api/sensor-sampling-aperture.md +22 -25
  800. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  801. package/docs/api/sensor-sensor-geometry.md +23 -24
  802. package/docs/api/sensor-signal-noise.md +10 -10
  803. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  804. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  805. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  806. package/docs/api/sensor-spectral-coverage.md +5 -5
  807. package/docs/api/sensor-spectral-quadrature.md +33 -35
  808. package/docs/api/sensor-spectral-response.md +28 -16
  809. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  810. package/docs/api/simulation-poc-simulation.md +17 -16
  811. package/docs/api/stabilization-camera-shake.md +29 -10
  812. package/docs/api/stabilization-system.md +25 -21
  813. package/docs/examples/production-request.json +3821 -2157
  814. package/docs/examples/simulate-capture.mjs +14 -0
  815. package/llms.txt +35 -0
  816. package/package.json +32 -11
  817. package/AGENTS.md +0 -674
  818. package/CONTRIBUTING.md +0 -76
  819. package/DCO +0 -33
  820. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  821. package/dist/camera/field-of-view.d.ts.map +0 -1
  822. package/dist/camera/projected-object-size.d.ts.map +0 -1
  823. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  824. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  825. package/dist/capture/export-jpeg.d.ts.map +0 -1
  826. package/dist/capture/export-tiff.d.ts.map +0 -1
  827. package/dist/capture/focus-control.d.ts.map +0 -1
  828. package/dist/capture/linear-encoding.d.ts.map +0 -1
  829. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  830. package/dist/capture/native-raw-development.d.ts.map +0 -1
  831. package/dist/capture/native-raw.d.ts.map +0 -1
  832. package/dist/capture/photographic-export.d.ts.map +0 -1
  833. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  834. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  835. package/dist/capture/release-sequence.d.ts.map +0 -1
  836. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  837. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  838. package/dist/capture/simulated-capture.d.ts.map +0 -1
  839. package/dist/color/capture-color.d.ts.map +0 -1
  840. package/dist/color/sensor-color-development.d.ts.map +0 -1
  841. package/dist/color/srgb-icc.d.ts.map +0 -1
  842. package/dist/color/srgb-transfer.d.ts.map +0 -1
  843. package/dist/color/white-balance.d.ts.map +0 -1
  844. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  845. package/dist/composition/plan-consumer.d.ts.map +0 -1
  846. package/dist/core/calculation-result.d.ts.map +0 -1
  847. package/dist/core/canonical-json.d.ts.map +0 -1
  848. package/dist/core/configuration-error.d.ts.map +0 -1
  849. package/dist/core/evidence-provenance.d.ts.map +0 -1
  850. package/dist/core/image-formation.d.ts.map +0 -1
  851. package/dist/core/owned-data.d.ts.map +0 -1
  852. package/dist/core/record-validation.d.ts.map +0 -1
  853. package/dist/core/scientific-assurance.d.ts.map +0 -1
  854. package/dist/core/spectral-composition.d.ts.map +0 -1
  855. package/dist/core/spectral.d.ts.map +0 -1
  856. package/dist/core/validation.d.ts.map +0 -1
  857. package/dist/core/version.d.ts.map +0 -1
  858. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  859. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  860. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  861. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  862. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  863. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  864. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  865. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  866. package/dist/exposure/exposure.d.ts.map +0 -1
  867. package/dist/exposure/flash.d.ts.map +0 -1
  868. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  869. package/dist/exposure/metering-target.d.ts.map +0 -1
  870. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  871. package/dist/exposure/metering.d.ts.map +0 -1
  872. package/dist/exposure/program-line.d.ts.map +0 -1
  873. package/dist/index.d.ts.map +0 -1
  874. package/dist/motion/camera-rotation.d.ts.map +0 -1
  875. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  876. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  877. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  878. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  879. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  880. package/dist/motion/projected-motion.d.ts.map +0 -1
  881. package/dist/optics/aperture.d.ts.map +0 -1
  882. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  883. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  884. package/dist/optics/depth-of-field.d.ts.map +0 -1
  885. package/dist/optics/diffraction.d.ts.map +0 -1
  886. package/dist/optics/focus-breathing.d.ts.map +0 -1
  887. package/dist/optics/focus-state.d.ts.map +0 -1
  888. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  889. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  890. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  891. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  892. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  893. package/dist/optics/profile-contract.d.ts.map +0 -1
  894. package/dist/optics/psf-foundation.d.ts.map +0 -1
  895. package/dist/optics/radial-distortion.d.ts.map +0 -1
  896. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  897. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  898. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  899. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  900. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  901. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  902. package/dist/optics/stray-light.d.ts.map +0 -1
  903. package/dist/optics/thin-lens.d.ts.map +0 -1
  904. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  905. package/dist/output/capture-geometry.d.ts.map +0 -1
  906. package/dist/output/capture-sdr.d.ts.map +0 -1
  907. package/dist/output/crop.d.ts.map +0 -1
  908. package/dist/output/geometric-transforms.d.ts.map +0 -1
  909. package/dist/output/lens-corrections.d.ts.map +0 -1
  910. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  911. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  912. package/dist/output/print-detail.d.ts.map +0 -1
  913. package/dist/output/print-jpeg.d.ts.map +0 -1
  914. package/dist/output/print-plan.d.ts.map +0 -1
  915. package/dist/output/print-region-statistics.d.ts.map +0 -1
  916. package/dist/output/sdr-rendering.d.ts.map +0 -1
  917. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  918. package/dist/schema/camera.d.ts.map +0 -1
  919. package/dist/schema/camera.js +0 -3
  920. package/dist/schema/camera.js.map +0 -1
  921. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  922. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  923. package/dist/schema/illumination.d.ts.map +0 -1
  924. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  925. package/dist/schema/scene-radiance.d.ts.map +0 -1
  926. package/dist/schema/scene.d.ts.map +0 -1
  927. package/dist/schema/scene.js +0 -3
  928. package/dist/schema/scene.js.map +0 -1
  929. package/dist/schema/validation.d.ts.map +0 -1
  930. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  931. package/dist/sensor/architecture.d.ts.map +0 -1
  932. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  933. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  934. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  935. package/dist/sensor/capture-mode.d.ts.map +0 -1
  936. package/dist/sensor/color-sampling.d.ts.map +0 -1
  937. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  938. package/dist/sensor/dark-current.d.ts.map +0 -1
  939. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  940. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  941. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  942. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  943. package/dist/sensor/exposure-window.d.ts.map +0 -1
  944. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  945. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  946. package/dist/sensor/optical-stack.d.ts.map +0 -1
  947. package/dist/sensor/photon-energy.d.ts.map +0 -1
  948. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  949. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  950. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  951. package/dist/sensor/raw-readout.d.ts.map +0 -1
  952. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  953. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  954. package/dist/sensor/readout-timing.d.ts.map +0 -1
  955. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  956. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  957. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  958. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  959. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  960. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  961. package/dist/sensor/signal-noise.d.ts.map +0 -1
  962. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  963. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  964. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  965. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  966. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  967. package/dist/sensor/spectral-response.d.ts.map +0 -1
  968. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  969. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  970. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  971. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  972. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  973. package/dist/stabilization/system.d.ts.map +0 -1
  974. package/docs/API_STYLE.md +0 -235
  975. package/docs/ARCHITECTURE.md +0 -356
  976. package/docs/AUTOMATION_COORDINATION.md +0 -190
  977. package/docs/CAPTURE_COLOR.md +0 -25
  978. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  979. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  980. package/docs/CAPTURE_SDR.md +0 -22
  981. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  982. package/docs/DEVELOPERS.md +0 -68
  983. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  984. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  985. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  986. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  987. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  988. package/docs/IMAGE_FORMATION.md +0 -247
  989. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  990. package/docs/MOTION_AND_SIGNAL.md +0 -250
  991. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  992. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  993. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  994. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  995. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  996. package/docs/PERFORMANCE_BASELINE.md +0 -56
  997. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  998. package/docs/PHYSICS_FOUNDATION.md +0 -426
  999. package/docs/POC_API.md +0 -278
  1000. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  1001. package/docs/POC_PROJECTION_REUSE.md +0 -124
  1002. package/docs/PRINT_195_196_REVIEW.md +0 -93
  1003. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  1004. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  1005. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  1006. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1007. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1008. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1009. package/docs/PRINT_PLANNING.md +0 -75
  1010. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1011. package/docs/PROCESSED_OUTPUT.md +0 -157
  1012. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1013. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1014. package/docs/PROVENANCE.md +0 -115
  1015. package/docs/PSF_FOUNDATION.md +0 -165
  1016. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1017. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1018. package/docs/RELEASE_1_0.md +0 -66
  1019. package/docs/RELEASE_1_0_1.md +0 -61
  1020. package/docs/RELEASE_1_1_0.md +0 -25
  1021. package/docs/RELEASE_1_2_0.md +0 -51
  1022. package/docs/RELEASE_1_3_0.md +0 -15
  1023. package/docs/RELEASE_1_4_0.md +0 -23
  1024. package/docs/RELEASE_1_5_0.md +0 -105
  1025. package/docs/RELEASE_AUDIT.md +0 -39
  1026. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1027. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1028. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1029. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1030. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1031. package/docs/SDR_RENDERING.md +0 -33
  1032. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1033. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1034. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1035. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1036. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1037. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1038. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1039. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1040. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1041. package/docs/SIMULATED_CAPTURE.md +0 -65
  1042. package/docs/STABILIZATION.md +0 -234
  1043. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1044. package/docs/TIER_ACCEPTANCE.md +0 -129
  1045. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1046. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1047. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1048. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1049. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1050. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1051. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1052. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1053. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1054. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1055. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1056. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1057. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1058. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1059. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1060. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1061. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1062. package/docs/validation/documentation-fragments.json +0 -212
  1063. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1064. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1065. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1069. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1071. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1072. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1073. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1074. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1075. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1076. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1077. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1078. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1079. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1080. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1081. package/docs/validation/print-detail-capabilities.json +0 -103
  1082. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1083. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1084. package/docs/validation/release-audit-inventory.json +0 -1306
  1085. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"flash.js","sourceRoot":"","sources":["../../src/exposure/flash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flash.js","sourceRoot":"","sources":["../../src/exposure/flash.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Manual flash and flash sync.\n *\n * The parsers validate untrusted input and return the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected.\n *\n * Manual flash is a relative light pulse added on top of the scene light, timed on the capture's\n * opening-reference clock.\n * - Ordinary front- or rear-curtain sync needs a real interval when the whole frame is open at once.\n * - High-speed sync (HSS; schema 0.2.0 sync profiles) is separate: a near-continuous burst that\n * covers the travelling shutter slit (resolveHighSpeedFlashSync).\n * - TTL pre-flash power and guide-number relations are in flash-ttl.ts.\n * Source brightness, optical transport and sensor integration have their own contracts.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedReleaseFrame\n} from \"../capture/release-sequence.js\";\nimport {\n parseSceneIlluminationProfile,\n type SceneIlluminationProfile,\n type SceneIlluminationSource\n} from \"../schema/illumination.js\";\nimport {\n parseSceneIlluminationTemporalProfile,\n type SceneIlluminationTemporalProfile,\n type SceneIlluminationTemporalWaveformSample\n} from \"../schema/illumination-temporal.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const MANUAL_FLASH_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\nexport const FLASH_SYNC_CAPABILITY_SCHEMA_VERSION =\n \"0.1.0\" as const;\n/** Sync-capability schema that may declare high-speed sync (a fast pulse train that acts as continuous light). */\nexport const FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION =\n \"0.2.0\" as const;\n/** Model identity of the pulsed quasi-continuous high-speed-sync burst. */\nexport const HIGH_SPEED_SYNC_MODEL = Object.freeze({\n id: \"flash-hss-quasi-continuous-burst\",\n version: \"1.0.0\"\n} as const);\n\nexport type ManualFlashSyncMode =\n | \"front-curtain\"\n | \"rear-curtain\";\n\nexport type RequestedFlashSyncMode =\n | ManualFlashSyncMode\n | \"high-speed-sync\";\n\nexport interface ManualFlashPulseProfile {\n waveformId: string;\n scientificStatus: \"approximation\";\n supportDurationSeconds: number;\n interpolation: \"piecewise-linear\";\n samples:\n readonly SceneIlluminationTemporalWaveformSample[];\n normalization:\n \"relative-peak-one\";\n evidence:\n readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface ManualFlashProfile {\n schemaVersion:\n typeof MANUAL_FLASH_PROFILE_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n sourceTemplate:\n Omit<\n SceneIlluminationSource,\n \"enabled\" |\n \"temporalBehavior\"\n >;\n pulse:\n ManualFlashPulseProfile;\n outputControl: {\n kind:\n \"relative-linear-source-scale\";\n scale: number;\n flashExposureCompensationStops:\n 0;\n };\n ttlModeled: false;\n highSpeedSyncModeled: false;\n recycleBehaviorModeled: false;\n redEyePreflashModeled: false;\n modelingLightModeled: false;\n afAssistModeled: false;\n evidence: readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface FlashSyncCapabilityProfile {\n schemaVersion:\n | typeof FLASH_SYNC_CAPABILITY_SCHEMA_VERSION\n | typeof FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n timingProfileId: string;\n supportedOrdinarySyncModes:\n readonly ManualFlashSyncMode[];\n /** Schema 0.1.0 is always false; schema 0.2.0 may declare HSS with {@link highSpeedSync}. */\n highSpeedSyncSupported: boolean;\n /** Present exactly when highSpeedSyncSupported is true (schema 0.2.0). */\n highSpeedSync?: {\n /**\n * η: energy of one full-power high-speed-sync burst, as a fraction of one full-power ordinary\n * pulse, in (0, 1]. The caller declares it from evidence (capacitor and thermal limits). It is\n * never inferred.\n */\n burstEnergyFractionOfFullPulse: number;\n evidence: readonly EvidenceProvenance[];\n };\n ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed:\n true;\n evidence: readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface ResolveManualFlashSyncInput {\n flashEnabled: boolean;\n flashProfile:\n ManualFlashProfile;\n syncCapabilities:\n FlashSyncCapabilityProfile;\n timing:\n ResolvedCaptureModeTiming;\n syncMode:\n RequestedFlashSyncMode;\n releaseFrame?:\n ResolvedReleaseFrame;\n}\n\nexport interface ResolvedManualFlashSync {\n flashEnabled: boolean;\n flashProfileId: string;\n flashProfileVersion: string;\n sourceId: string;\n captureModeId: string;\n timingProfileId: string;\n syncCapabilityProfileId:\n string;\n syncMode:\n RequestedFlashSyncMode;\n syncStatus:\n | \"disabled\"\n | \"ordinary-sync-resolved\";\n timeReference:\n \"first-opening-boundary-phase\";\n wholeActiveFrameOpenInterval:\n {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n pulseSupportDurationSeconds:\n number;\n pulseStartSecondsFromCaptureReference:\n number | null;\n pulseEndSecondsFromCaptureReference:\n number | null;\n waveformTimeZeroSecondsFromCaptureReference:\n number | null;\n releaseFrameBinding:\n | {\n sequenceId: string;\n releaseFrameId: string;\n frameIndex: number;\n sceneTimeSecondsFromSequenceStartAtPulseStart:\n number;\n sceneTimeSecondsFromSequenceStartAtPulseEnd:\n number;\n }\n | null;\n hssModeled: false;\n ttlModeled: false;\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n whiteBalanceModified: false;\n focusModified: false;\n exposureSettingsModified: false;\n driveModeModified: false;\n supportStateModified: false;\n evidence: readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\n/** Fields of a resolved sync (ordinary or HSS) needed to register a flash overlay. */\nexport type FlashOverlaySyncRegistration = Pick<\n ResolvedManualFlashSync,\n | \"flashEnabled\"\n | \"flashProfileId\"\n | \"flashProfileVersion\"\n | \"sourceId\"\n | \"waveformTimeZeroSecondsFromCaptureReference\"\n | \"evidence\"\n>;\n\nexport interface CreateManualFlashIlluminationOverlayInput {\n baseIlluminationProfile:\n SceneIlluminationProfile;\n baseTemporalProfile?:\n SceneIlluminationTemporalProfile;\n flashProfile:\n ManualFlashProfile;\n resolvedSync:\n FlashOverlaySyncRegistration;\n illuminationProfileId: string;\n temporalProfileId: string;\n}\n\nexport interface ManualFlashIlluminationOverlay {\n flashApplied: boolean;\n illuminationProfile:\n SceneIlluminationProfile;\n temporalProfile:\n SceneIlluminationTemporalProfile | null;\n sourceId: string;\n waveformId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n sourceMagnitudeAppliedBySceneTransport:\n true;\n materialTransportOwnedBySceneRadiance:\n true;\n visibilityOwnedBySceneRadiance:\n true;\n indirectTransportOwnedBySceneRadiance:\n true;\n postRenderBrightnessMultiplierUsed:\n false;\n whiteBalanceModified: false;\n ambientMeteringModified: false;\n ttlMeteringIncluded: false;\n ambientTemporalBehaviorPreserved:\n true;\n}\n\nconst ORDINARY_SYNC_MODES =\n new Set<ManualFlashSyncMode>([\n \"front-curtain\",\n \"rear-curtain\"\n ]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed <= 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than zero.\"\n );\n }\n return parsed;\n}\n\nfunction parseLimitations(\n value: unknown,\n path: string\n): readonly string[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n const parsed =\n value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path +\n \"[\" +\n index +\n \"]\"\n )\n );\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\nfunction parsePulseSamples(\n value: unknown,\n supportDurationSeconds:\n number,\n path: string\n): readonly SceneIlluminationTemporalWaveformSample[] {\n if (\n !Array.isArray(value) ||\n value.length < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must contain at least two waveform samples.\"\n );\n }\n const samples =\n value.map((entry, index) => {\n const samplePath =\n path +\n \"[\" +\n index +\n \"]\";\n const record =\n requireRecord(\n entry,\n samplePath, [\"timeSecondsFromWaveformReference\", \"relativeMagnitudeMultiplier\"]\n );\n const time =\n requireFinite(\n record\n .timeSecondsFromWaveformReference,\n samplePath +\n \".timeSecondsFromWaveformReference\"\n );\n const magnitude =\n requireFinite(\n record\n .relativeMagnitudeMultiplier,\n samplePath +\n \".relativeMagnitudeMultiplier\"\n );\n if (\n time < 0 ||\n time >\n supportDurationSeconds\n ) {\n throw new InvalidConfigurationError(\n samplePath +\n \".timeSecondsFromWaveformReference must lie within the declared pulse support.\"\n );\n }\n if (magnitude < 0) {\n throw new InvalidConfigurationError(\n samplePath +\n \".relativeMagnitudeMultiplier must be nonnegative.\"\n );\n }\n return {\n timeSecondsFromWaveformReference:\n time,\n relativeMagnitudeMultiplier:\n magnitude\n };\n });\n\n for (\n let index = 1;\n index < samples.length;\n index += 1\n ) {\n if (\n !(\n samples[index]!\n .timeSecondsFromWaveformReference >\n samples[index - 1]!\n .timeSecondsFromWaveformReference\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \" times must be strictly increasing.\"\n );\n }\n }\n if (\n samples[0]!\n .timeSecondsFromWaveformReference !==\n 0 ||\n samples[\n samples.length - 1\n ]!\n .timeSecondsFromWaveformReference !==\n supportDurationSeconds\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must start at waveform time 0 and end exactly at supportDurationSeconds.\"\n );\n }\n const peak =\n Math.max(\n ...samples.map(\n (sample) =>\n sample\n .relativeMagnitudeMultiplier\n )\n );\n if (\n Math.abs(peak - 1) >\n 1e-12\n ) {\n throw new InvalidConfigurationError(\n path +\n \" peak relative magnitude must equal one for relative-peak-one normalization.\"\n );\n }\n\n return samples;\n}\n\nfunction validateSourceTemplate(\n sourceTemplate:\n ManualFlashProfile[\"sourceTemplate\"]\n): ManualFlashProfile[\"sourceTemplate\"] {\n requireInputObject(sourceTemplate, \"manualFlashProfile.sourceTemplate\");\n const probe =\n parseSceneIlluminationProfile({\n schemaVersion: \"0.1.0\",\n profileId:\n \"manual-flash-source-validation\",\n sceneId:\n \"manual-flash-source-validation\",\n evidence:\n sourceTemplate.evidence,\n sources: [{\n ...sourceTemplate,\n enabled: true,\n temporalBehavior: {\n kind:\n \"time-invariant\"\n }\n }],\n sceneRadianceCalculated:\n false,\n materialResponseApplied:\n false,\n visibilityEvaluated:\n false,\n indirectTransportEvaluated:\n false,\n fluorescenceModeled:\n false,\n volumetricTransportModeled:\n false,\n polarizationModeled:\n false\n });\n const source =\n probe.sources[0];\n if (source === undefined) {\n throw new InvalidConfigurationError(\n \"manualFlashProfile.sourceTemplate must produce one valid illumination source.\"\n );\n }\n return {\n sourceId:\n source.sourceId,\n family:\n source.family,\n geometry:\n source.geometry,\n magnitude:\n source.magnitude,\n spectrum:\n source.spectrum,\n evidence:\n source.evidence,\n ...(source.limitations ===\n undefined\n ? {}\n : {\n limitations:\n source.limitations\n })\n };\n}\n\n/**\n * Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected here.\n *\n * Manual flash is a relative light pulse added on top of the scene light, timed on the capture's\n * opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole\n * frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source\n * brightness, optical transport and sensor integration have their own contracts.\n * @param value - unknown. Untrusted input; TypeScript types alone are not validation.\n * @returns ManualFlashProfile. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function parseManualFlashProfile(\n value: unknown\n): ManualFlashProfile {\n const record =\n requireRecord(\n value,\n \"manualFlashProfile\", [\"schemaVersion\", \"pulse\", \"outputControl\", \"profileId\", \"profileVersion\", \"sourceTemplate\", \"evidence\", \"limitations\", \"ttlModeled\", \"highSpeedSyncModeled\", \"recycleBehaviorModeled\", \"redEyePreflashModeled\", \"modelingLightModeled\", \"afAssistModeled\"]\n );\n if (\n record.schemaVersion !==\n MANUAL_FLASH_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'manualFlashProfile.schemaVersion must be \"' +\n MANUAL_FLASH_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n for (\n const [key, expected] of [\n [\"ttlModeled\", false],\n [\"highSpeedSyncModeled\", false],\n [\"recycleBehaviorModeled\", false],\n [\"redEyePreflashModeled\", false],\n [\"modelingLightModeled\", false],\n [\"afAssistModeled\", false]\n ] as const\n ) {\n if (record[key] !== expected) {\n throw new InvalidConfigurationError(\n \"manualFlashProfile.\" +\n key +\n \" must be false in schema 0.1.0.\"\n );\n }\n }\n\n const pulse =\n requireRecord(\n record.pulse,\n \"manualFlashProfile.pulse\", [\"supportDurationSeconds\", \"scientificStatus\", \"interpolation\", \"normalization\", \"waveformId\", \"samples\", \"evidence\", \"limitations\"]\n );\n const supportDurationSeconds =\n requirePositiveFinite(\n pulse.supportDurationSeconds,\n \"manualFlashProfile.pulse.supportDurationSeconds\"\n );\n if (\n pulse.scientificStatus !==\n \"approximation\" ||\n pulse.interpolation !==\n \"piecewise-linear\" ||\n pulse.normalization !==\n \"relative-peak-one\"\n ) {\n throw new InvalidConfigurationError(\n \"manualFlashProfile.pulse scientificStatus/interpolation/normalization is invalid.\"\n );\n }\n\n const output =\n requireRecord(\n record.outputControl,\n \"manualFlashProfile.outputControl\", [\"kind\", \"flashExposureCompensationStops\", \"scale\"]\n );\n if (\n output.kind !==\n \"relative-linear-source-scale\" ||\n output\n .flashExposureCompensationStops !==\n 0\n ) {\n throw new InvalidConfigurationError(\n \"manualFlashProfile.outputControl must use relative-linear-source-scale with zero flash exposure compensation in the manual-only schema.\"\n );\n }\n\n return {\n schemaVersion:\n MANUAL_FLASH_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"manualFlashProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"manualFlashProfile.profileVersion\"\n ),\n sourceTemplate:\n validateSourceTemplate(\n record.sourceTemplate as\n ManualFlashProfile[\"sourceTemplate\"]\n ),\n pulse: {\n waveformId:\n requireNonEmptyString(\n pulse.waveformId,\n \"manualFlashProfile.pulse.waveformId\"\n ),\n scientificStatus:\n \"approximation\",\n supportDurationSeconds,\n interpolation:\n \"piecewise-linear\",\n samples:\n parsePulseSamples(\n pulse.samples,\n supportDurationSeconds,\n \"manualFlashProfile.pulse.samples\"\n ),\n normalization:\n \"relative-peak-one\",\n evidence:\n parseEvidenceList(\n pulse.evidence,\n \"manualFlashProfile.pulse.evidence\"\n ),\n limitations:\n parseLimitations(\n pulse.limitations,\n \"manualFlashProfile.pulse.limitations\"\n )\n },\n outputControl: {\n kind:\n \"relative-linear-source-scale\",\n scale:\n requirePositiveFinite(\n output.scale,\n \"manualFlashProfile.outputControl.scale\"\n ),\n flashExposureCompensationStops:\n 0\n },\n ttlModeled: false,\n highSpeedSyncModeled: false,\n recycleBehaviorModeled:\n false,\n redEyePreflashModeled:\n false,\n modelingLightModeled:\n false,\n afAssistModeled: false,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"manualFlashProfile.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"manualFlashProfile.limitations\"\n )\n };\n}\n\n/**\n * Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected here.\n *\n * Manual flash is a relative light pulse added on top of the scene light, timed on the capture's\n * opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole\n * frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source\n * brightness, optical transport and sensor integration have their own contracts.\n * @param value - unknown. Untrusted input; TypeScript types alone are not validation.\n * @returns FlashSyncCapabilityProfile. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function parseFlashSyncCapabilityProfile(\n value: unknown\n): FlashSyncCapabilityProfile {\n const record =\n requireRecord(\n value,\n \"flashSyncCapabilityProfile\", [\"schemaVersion\", \"highSpeedSyncSupported\", \"ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed\", \"highSpeedSync\", \"supportedOrdinarySyncModes\", \"profileId\", \"profileVersion\", \"captureModeId\", \"timingProfileId\", \"evidence\", \"limitations\"]\n );\n if (\n record.schemaVersion !==\n FLASH_SYNC_CAPABILITY_SCHEMA_VERSION &&\n record.schemaVersion !==\n FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'flashSyncCapabilityProfile.schemaVersion must be \"' +\n FLASH_SYNC_CAPABILITY_SCHEMA_VERSION +\n '\" or \"' +\n FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION +\n '\".'\n );\n }\n const hssSchema =\n record.schemaVersion ===\n FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION;\n if (\n (hssSchema\n ? typeof record.highSpeedSyncSupported !==\n \"boolean\"\n : record.highSpeedSyncSupported !==\n false) ||\n record\n .ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed !==\n true\n ) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile schema 0.1.0 supports ordinary whole-frame sync only and must not claim HSS.\"\n );\n }\n let highSpeedSync:\n FlashSyncCapabilityProfile[\"highSpeedSync\"];\n if (record.highSpeedSyncSupported === true) {\n const hss = requireRecord(\n record.highSpeedSync,\n \"flashSyncCapabilityProfile.highSpeedSync\", [\"burstEnergyFractionOfFullPulse\", \"evidence\"]\n );\n const fraction = requirePositiveFinite(\n hss.burstEnergyFractionOfFullPulse,\n \"flashSyncCapabilityProfile.highSpeedSync.burstEnergyFractionOfFullPulse\"\n );\n if (fraction > 1) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile.highSpeedSync.burstEnergyFractionOfFullPulse must be at most 1.\"\n );\n }\n highSpeedSync = {\n burstEnergyFractionOfFullPulse:\n fraction,\n evidence: parseEvidenceList(\n hss.evidence,\n \"flashSyncCapabilityProfile.highSpeedSync.evidence\"\n )\n };\n } else if (\n record.highSpeedSync !==\n undefined\n ) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile.highSpeedSync must be omitted when HSS is unsupported.\"\n );\n }\n if (\n !Array.isArray(\n record.supportedOrdinarySyncModes\n ) ||\n record\n .supportedOrdinarySyncModes\n .length === 0\n ) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile.supportedOrdinarySyncModes must be a non-empty array.\"\n );\n }\n const modes =\n record\n .supportedOrdinarySyncModes\n .map((entry, index) => {\n if (\n typeof entry !==\n \"string\" ||\n !ORDINARY_SYNC_MODES.has(\n entry as ManualFlashSyncMode\n )\n ) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile.supportedOrdinarySyncModes[\" +\n index +\n \"] is invalid.\"\n );\n }\n return entry as\n ManualFlashSyncMode;\n });\n if (\n new Set(modes).size !==\n modes.length\n ) {\n throw new InvalidConfigurationError(\n \"flashSyncCapabilityProfile.supportedOrdinarySyncModes must not contain duplicates.\"\n );\n }\n\n return {\n schemaVersion: hssSchema\n ? FLASH_SYNC_CAPABILITY_HSS_SCHEMA_VERSION\n : FLASH_SYNC_CAPABILITY_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"flashSyncCapabilityProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"flashSyncCapabilityProfile.profileVersion\"\n ),\n captureModeId:\n requireNonEmptyString(\n record.captureModeId,\n \"flashSyncCapabilityProfile.captureModeId\"\n ),\n timingProfileId:\n requireNonEmptyString(\n record.timingProfileId,\n \"flashSyncCapabilityProfile.timingProfileId\"\n ),\n supportedOrdinarySyncModes:\n modes,\n highSpeedSyncSupported:\n highSpeedSync !== undefined,\n ...(highSpeedSync === undefined\n ? {}\n : { highSpeedSync }),\n ordinarySyncRequiresWholeActiveFrameSimultaneouslyExposed:\n true,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"flashSyncCapabilityProfile.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"flashSyncCapabilityProfile.limitations\"\n )\n };\n}\n\n/**\n * Shape guard for the resolved capture-mode timing record read by the flash sync functions: every\n * nested object read below must be an object, so a malformed record fails with\n * InvalidConfigurationError instead of a raw TypeError. Values are checked where they are used.\n */\nfunction requireTimingRecordShape(timing: unknown, path: string): void {\n requireInputObject(timing, path);\n const record = timing as Record<string, unknown>;\n if (!Array.isArray(record.evidence)) throw new InvalidConfigurationError(path + \".evidence must be an array.\");\n requireInputObject(record.exposureWindows, path + \".exposureWindows\");\n const windows = record.exposureWindows as Record<string, unknown>;\n requireInputObject(windows.nominalExposureDurationSeconds, path + \".exposureWindows.nominalExposureDurationSeconds\");\n requireInputObject(windows.localExposureDurationRangeSeconds, path + \".exposureWindows.localExposureDurationRangeSeconds\");\n for (const boundary of [\"opening\", \"closing\"] as const) {\n requireInputObject(windows[boundary], path + \".exposureWindows.\" + boundary);\n const schedule = (windows[boundary] as Record<string, unknown>).schedule;\n requireInputObject(schedule, path + \".exposureWindows.\" + boundary + \".schedule\");\n if ((schedule as Record<string, unknown>).kind !== \"simultaneous\") {\n requireInputObject((schedule as Record<string, unknown>).traversalDurationSeconds, path + \".exposureWindows.\" + boundary + \".schedule.traversalDurationSeconds\");\n }\n }\n}\n\nfunction wholeFrameOpenInterval(\n timing:\n ResolvedCaptureModeTiming\n): {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n} {\n const opening =\n timing.exposureWindows.opening\n .schedule;\n const latestOpening =\n opening.kind ===\n \"simultaneous\"\n ? 0\n : opening\n .traversalDurationSeconds\n .value;\n const earliestClosing =\n timing.exposureWindows\n .nominalExposureDurationSeconds\n .value;\n const duration =\n earliestClosing -\n latestOpening;\n return {\n startSecondsFromCaptureReference:\n latestOpening,\n endSecondsFromCaptureReference:\n earliestClosing,\n durationSeconds:\n Math.max(0, duration)\n };\n}\n\nfunction validateReleaseBinding(\n release:\n ResolvedReleaseFrame,\n timing:\n ResolvedCaptureModeTiming\n): void {\n requireInputObject(release, \"releaseFrame\");\n requireInputObject(release.exposure, \"releaseFrame.exposure\");\n const nominal =\n timing.exposureWindows\n .nominalExposureDurationSeconds\n .value;\n const scale =\n Math.max(\n 1,\n Math.abs(nominal),\n Math.abs(\n release.exposure\n .shutterSeconds\n )\n );\n if (\n Math.abs(\n release.exposure\n .shutterSeconds -\n nominal\n ) >\n Number.EPSILON *\n 16 *\n scale\n ) {\n throw new InvalidScientificInputError(\n \"releaseFrame shutter duration must match the exposure duration of the capture-mode exposure-window timing.\"\n );\n }\n}\n\n/**\n * Places a declared ordinary flash pulse inside the actual interval when the whole frame is open, for\n * front- or rear-curtain sync. Otherwise returns a structured incompatibility.\n *\n * Manual flash is a relative light pulse added on top of the scene light, timed on the capture's\n * opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole\n * frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source\n * brightness, optical transport and sensor integration have their own contracts.\n * @param input - ResolveManualFlashSyncInput. See that type for coordinates, units and profile binding.\n * @returns ResolvedManualFlashSync. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveManualFlashSync(\n input:\n ResolveManualFlashSyncInput\n): ResolvedManualFlashSync {\n requireInputKeys(input, \"resolveManualFlashSync\", [\"flashEnabled\", \"flashProfile\", \"syncCapabilities\", \"timing\", \"syncMode\", \"releaseFrame\"]);\n requireTimingRecordShape(input.timing, \"resolveManualFlashSync timing\");\n const flash =\n parseManualFlashProfile(\n input.flashProfile\n );\n const capabilities =\n parseFlashSyncCapabilityProfile(\n input.syncCapabilities\n );\n\n if (\n capabilities.captureModeId !==\n input.timing.captureModeId ||\n capabilities.timingProfileId !==\n input.timing.timingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Flash sync capability profile must exactly match the resolved capture-mode and timing-profile identities.\"\n );\n }\n if (\n input.releaseFrame !==\n undefined\n ) {\n validateReleaseBinding(\n input.releaseFrame,\n input.timing\n );\n }\n\n const openInterval =\n wholeFrameOpenInterval(\n input.timing\n );\n const base = {\n flashProfileId:\n flash.profileId,\n flashProfileVersion:\n flash.profileVersion,\n sourceId:\n flash.sourceTemplate.sourceId,\n captureModeId:\n input.timing.captureModeId,\n timingProfileId:\n input.timing.timingProfileId,\n syncCapabilityProfileId:\n capabilities.profileId,\n syncMode:\n input.syncMode,\n timeReference:\n \"first-opening-boundary-phase\" as const,\n wholeActiveFrameOpenInterval:\n openInterval,\n pulseSupportDurationSeconds:\n flash.pulse\n .supportDurationSeconds,\n hssModeled: false as const,\n ttlModeled: false as const,\n sensorReadoutTimingUsedAsExposureTiming:\n false as const,\n whiteBalanceModified:\n false as const,\n focusModified: false as const,\n exposureSettingsModified:\n false as const,\n driveModeModified:\n false as const,\n supportStateModified:\n false as const,\n evidence: [\n ...flash.evidence,\n ...capabilities.evidence,\n ...input.timing.evidence\n ],\n limitations: [\n ...flash.limitations,\n ...capabilities.limitations,\n \"Ordinary flash synchronization is registered to exposure-boundary timing, never sensor data-readout timing.\",\n \"Schema 0.1.0 does not model HSS, TTL/preflash metering, recycle/thermal limits, red-eye preflash, modeling lights, AF-assist or branded flash protocols.\"\n ]\n };\n\n if (!input.flashEnabled) {\n return {\n flashEnabled: false,\n ...base,\n syncStatus:\n \"disabled\",\n pulseStartSecondsFromCaptureReference:\n null,\n pulseEndSecondsFromCaptureReference:\n null,\n waveformTimeZeroSecondsFromCaptureReference:\n null,\n releaseFrameBinding:\n null\n };\n }\n\n if (\n input.syncMode ===\n \"high-speed-sync\"\n ) {\n throw new InvalidScientificInputError(\n \"High-speed sync is not an ordinary sync mode; ordinary single-pulse flash cannot be used as an HSS substitute. Use resolveHighSpeedFlashSync with an HSS-capable sync profile.\"\n );\n }\n if (\n !capabilities\n .supportedOrdinarySyncModes\n .includes(\n input.syncMode\n )\n ) {\n throw new InvalidScientificInputError(\n \"Requested ordinary flash sync mode is not supported by the capability profile.\"\n );\n }\n if (\n openInterval.durationSeconds <=\n 0\n ) {\n throw new InvalidScientificInputError(\n \"Ordinary one-pulse flash cannot uniformly expose the active frame because the exposure-window timing has no whole-frame-open interval.\"\n );\n }\n if (\n flash.pulse\n .supportDurationSeconds >\n openInterval.durationSeconds\n ) {\n throw new InvalidScientificInputError(\n \"Ordinary flash pulse support does not fit inside the whole-active-frame-open interval.\"\n );\n }\n\n const pulseStart =\n input.syncMode ===\n \"front-curtain\"\n ? openInterval\n .startSecondsFromCaptureReference\n : openInterval\n .endSecondsFromCaptureReference -\n flash.pulse\n .supportDurationSeconds;\n const pulseEnd =\n pulseStart +\n flash.pulse\n .supportDurationSeconds;\n\n const releaseBinding =\n input.releaseFrame ===\n undefined\n ? null\n : {\n sequenceId:\n input.releaseFrame\n .sequenceId,\n releaseFrameId:\n input.releaseFrame\n .releaseFrameId,\n frameIndex:\n input.releaseFrame\n .frameIndex,\n sceneTimeSecondsFromSequenceStartAtPulseStart:\n input.releaseFrame\n .sceneTimeSecondsFromSequenceStart +\n pulseStart,\n sceneTimeSecondsFromSequenceStartAtPulseEnd:\n input.releaseFrame\n .sceneTimeSecondsFromSequenceStart +\n pulseEnd\n };\n\n return {\n flashEnabled: true,\n ...base,\n syncStatus:\n \"ordinary-sync-resolved\",\n pulseStartSecondsFromCaptureReference:\n pulseStart,\n pulseEndSecondsFromCaptureReference:\n pulseEnd,\n waveformTimeZeroSecondsFromCaptureReference:\n pulseStart,\n releaseFrameBinding:\n releaseBinding\n };\n}\n\nfunction scaledFlashSource(\n flash:\n ManualFlashProfile\n): SceneIlluminationSource {\n const template =\n flash.sourceTemplate;\n const magnitude =\n template.magnitude;\n if (\n magnitude.kind !==\n \"relative-linear-scale\"\n ) {\n throw new InvalidScientificInputError(\n \"Manual flash schema 0.1.0 relative output control requires a relative-linear-scale illumination source magnitude; calibrated physical flash energy belongs to a later profile.\"\n );\n }\n\n return {\n ...template,\n magnitude: {\n ...magnitude,\n scale:\n magnitude.scale *\n flash.outputControl.scale\n },\n enabled: true,\n temporalBehavior: {\n kind:\n \"time-invariant\"\n }\n };\n}\n\n/**\n * Builds a temporal illumination overlay from the resolved manual pulse. The identity of the base\n * ambient light source is kept.\n *\n * Manual flash is a relative light pulse added on top of the scene light, timed on the capture's\n * opening-reference clock. Ordinary front- or rear-curtain sync needs a real interval when the whole\n * frame is open at once. High-speed sync (HSS), TTL and flash metering are not handled here. Source\n * brightness, optical transport and sensor integration have their own contracts.\n * @param input - CreateManualFlashIlluminationOverlayInput. See that type for coordinates, units and profile binding.\n * @returns ManualFlashIlluminationOverlay. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function createManualFlashIlluminationOverlay(\n input:\n CreateManualFlashIlluminationOverlayInput\n): ManualFlashIlluminationOverlay {\n requireInputKeys(input, \"createManualFlashIlluminationOverlay\", [\"baseIlluminationProfile\", \"baseTemporalProfile\", \"flashProfile\", \"resolvedSync\", \"illuminationProfileId\", \"temporalProfileId\"]);\n const base =\n parseSceneIlluminationProfile(\n input\n .baseIlluminationProfile\n );\n const baseTemporal =\n input.baseTemporalProfile ===\n undefined\n ? null\n : parseSceneIlluminationTemporalProfile(\n input.baseTemporalProfile\n );\n if (\n baseTemporal !== null &&\n (\n baseTemporal.sceneId !==\n base.sceneId ||\n baseTemporal\n .illuminationProfileId !==\n base.profileId\n )\n ) {\n throw new InvalidScientificInputError(\n \"baseTemporalProfile must exactly match the base illumination profile scene/profile identities.\"\n );\n }\n\n const flash =\n parseManualFlashProfile(\n input.flashProfile\n );\n const sync =\n input.resolvedSync;\n requireInputObject(sync, \"createManualFlashIlluminationOverlay resolvedSync\");\n if (!Array.isArray(sync.evidence)) throw new InvalidConfigurationError(\"createManualFlashIlluminationOverlay resolvedSync.evidence must be an array.\");\n\n if (\n sync.flashProfileId !==\n flash.profileId ||\n sync.flashProfileVersion !==\n flash.profileVersion ||\n sync.sourceId !==\n flash.sourceTemplate.sourceId\n ) {\n throw new InvalidScientificInputError(\n \"Resolved flash sync identity must match the manual flash profile.\"\n );\n }\n if (\n base.sources.some(\n (source) =>\n source.sourceId ===\n flash.sourceTemplate\n .sourceId\n )\n ) {\n throw new InvalidScientificInputError(\n \"Flash sourceId must be unique within the base illumination profile.\"\n );\n }\n\n if (!sync.flashEnabled) {\n return {\n flashApplied: false,\n illuminationProfile:\n base,\n temporalProfile:\n baseTemporal,\n sourceId:\n flash.sourceTemplate\n .sourceId,\n waveformId:\n flash.pulse.waveformId,\n timeReference:\n \"first-opening-boundary-phase\",\n sourceMagnitudeAppliedBySceneTransport:\n true,\n materialTransportOwnedBySceneRadiance:\n true,\n visibilityOwnedBySceneRadiance:\n true,\n indirectTransportOwnedBySceneRadiance:\n true,\n postRenderBrightnessMultiplierUsed:\n false,\n whiteBalanceModified:\n false,\n ambientMeteringModified:\n false,\n ambientTemporalBehaviorPreserved:\n true,\n ttlMeteringIncluded:\n false\n };\n }\n if (\n sync\n .waveformTimeZeroSecondsFromCaptureReference ===\n null\n ) {\n throw new InvalidScientificInputError(\n \"Enabled flash sync must provide an authoritative waveform time-zero registration.\"\n );\n }\n\n const flashSource =\n scaledFlashSource(\n flash\n );\n const illumination =\n parseSceneIlluminationProfile({\n ...base,\n profileId:\n requireNonEmptyString(\n input.illuminationProfileId,\n \"illuminationProfileId\"\n ),\n sources: [\n ...base.sources,\n flashSource\n ]\n });\n\n const temporal =\n parseSceneIlluminationTemporalProfile({\n schemaVersion: \"0.1.0\",\n profileId:\n requireNonEmptyString(\n input.temporalProfileId,\n \"temporalProfileId\"\n ),\n sceneId:\n illumination.sceneId,\n illuminationProfileId:\n illumination.profileId,\n evidence: [\n ...(baseTemporal?.evidence ?? []),\n ...flash.evidence,\n ...sync.evidence\n ],\n waveforms: [\n ...(baseTemporal?.waveforms ?? []),\n {\n waveformId:\n flash.pulse.waveformId,\n kind:\n \"aperiodic-relative-multiplier\",\n timeUnit: \"s\",\n scientificStatus:\n \"approximation\",\n uncertainty: {\n kind:\n \"not-quantified\",\n limitation:\n \"Manual flash pulse timing/shape is an explicit approximation.\"\n },\n evidence:\n flash.pulse.evidence,\n interpolation:\n \"piecewise-linear\",\n samples:\n flash.pulse.samples,\n outsideSupportBehavior:\n \"zero\"\n }\n ],\n sourceBindings: [\n ...(baseTemporal?.sourceBindings ?? []),\n {\n bindingId:\n flash.profileId +\n \":sync\",\n sourceId:\n flashSource.sourceId,\n waveformId:\n flash.pulse.waveformId,\n captureTimeReference:\n \"first-opening-boundary-phase\",\n waveformTimeZeroSecondsFromCaptureReference:\n sync\n .waveformTimeZeroSecondsFromCaptureReference,\n scientificStatus:\n \"approximation\",\n timingUncertainty: {\n kind:\n \"not-quantified\",\n limitation:\n \"Schema 0.1.0 uses ideal deterministic flash trigger registration within the declared exposure-window schedule.\"\n },\n evidence:\n sync.evidence\n }\n ],\n baseIlluminationProfileRemainsAuthoritative:\n true,\n sensorReadoutTimingUsedAsExposureTiming:\n false,\n automaticExposurePolicyIncluded:\n false\n });\n\n return {\n flashApplied: true,\n illuminationProfile:\n illumination,\n temporalProfile:\n temporal,\n sourceId:\n flashSource.sourceId,\n waveformId:\n flash.pulse.waveformId,\n timeReference:\n \"first-opening-boundary-phase\",\n sourceMagnitudeAppliedBySceneTransport:\n true,\n materialTransportOwnedBySceneRadiance:\n true,\n visibilityOwnedBySceneRadiance:\n true,\n indirectTransportOwnedBySceneRadiance:\n true,\n postRenderBrightnessMultiplierUsed:\n false,\n whiteBalanceModified:\n false,\n ambientMeteringModified:\n false,\n ambientTemporalBehaviorPreserved:\n true,\n ttlMeteringIncluded:\n false\n };\n}\n\nexport interface ResolveHighSpeedFlashSyncInput {\n flashEnabled: boolean;\n /** Ordinary full-power pulse definition; its integral defines the full-power pulse energy. */\n flashProfile: ManualFlashProfile;\n /** Schema 0.2.0 profile with highSpeedSyncSupported true. */\n syncCapabilities: FlashSyncCapabilityProfile;\n timing: ResolvedCaptureModeTiming;\n /** Commanded output as a fraction of full power, (0, 1]. */\n powerFraction: number;\n releaseFrame?: ResolvedReleaseFrame;\n}\n\nexport interface ResolvedHighSpeedFlashSync extends FlashOverlaySyncRegistration {\n modelId: typeof HIGH_SPEED_SYNC_MODEL.id;\n modelVersion: typeof HIGH_SPEED_SYNC_MODEL.version;\n syncMode: \"high-speed-sync\";\n syncStatus: \"disabled\" | \"high-speed-sync-resolved\";\n captureModeId: string;\n timingProfileId: string;\n syncCapabilityProfileId: string;\n timeReference: \"first-opening-boundary-phase\";\n powerFraction: number;\n /** η from the sync capability profile. */\n burstEnergyFractionOfFullPulse: number;\n /** ∫ pulse(t) dt of the declared ordinary pulse, whose relative peak is 1 (relative multiplier · s). */\n singlePulseIntegratedRelativeSeconds: number;\n /** D: burst support covering the first line opening to the last line closing. */\n burstStartSecondsFromCaptureReference: number;\n burstEndSecondsFromCaptureReference: number;\n burstDurationSeconds: number;\n /** Local (slit) exposure durations t_e over the active frame. */\n localExposureDurationRangeSeconds: { minimum: number; maximum: number };\n /** Flash energy each line receives relative to one ordinary pulse at the same power: η·t_e/D. */\n energyFractionOfSinglePulseRange: { minimum: number; maximum: number };\n /** Effective guide-number factor relative to the same-power ordinary pulse: √(η·t_e/D). */\n guideNumberFactorRange: { minimum: number; maximum: number };\n uniformAcrossActiveFrame: boolean;\n /** The rectangular high-speed-sync burst, written as a manual pulse profile for the illumination overlay. */\n burstFlashProfile: ManualFlashProfile | null;\n releaseFrameBinding:\n | {\n sequenceId: string;\n releaseFrameId: string;\n frameIndex: number;\n sceneTimeSecondsFromSequenceStartAtBurstStart: number;\n sceneTimeSecondsFromSequenceStartAtBurstEnd: number;\n }\n | null;\n hssModeled: true;\n ttlModeled: false;\n sensorReadoutTimingUsedAsExposureTiming: false;\n limitations: readonly string[];\n}\n\nfunction integratePulse(samples: readonly SceneIlluminationTemporalWaveformSample[]): number {\n let area = 0;\n for (let index = 1; index < samples.length; index += 1) {\n const a = samples[index - 1]!, b = samples[index]!;\n area += (b.timeSecondsFromWaveformReference - a.timeSecondsFromWaveformReference) *\n (a.relativeMagnitudeMultiplier + b.relativeMagnitudeMultiplier) / 2;\n }\n return area;\n}\n\n/**\n * Resolves high-speed (focal-plane) sync (HSS): a fast pulse train that acts as continuous light and\n * covers the whole travelling-slit exposure.\n *\n * At shutter speeds faster than the ordinary sync limit, the shutter's opening and closing edges\n * cross the frame as a slit, and the whole frame is never open at once. A single short pulse would\n * light only a band.\n *\n * HSS instead fires a rapid pulse train. It behaves like constant output P over the burst D, from\n * the first line opening to the last line closing. Each line collects P·t_e over its slit time t_e.\n * - The burst energy is E_burst = η·p·E_pulse. η comes from the sync profile, p is the power\n * fraction and E_pulse is the energy of an ordinary full-power pulse.\n * - So P = E_burst/D, and each line receives η·p·E_pulse·t_e/D.\n * - Exposure ∝ GN² (inverse-square law, GN = d·N). So, relative to an ordinary pulse at the same\n * power, the effective guide number is GN_HSS/GN = √(η·t_e/D).\n * Shortening t_e by one stop therefore costs half a stop of guide number.\n *\n * Approximations: the pulse train is treated as continuous (pulse period ≪ t_e). Recycle and thermal\n * limits are folded into η. Front/rear-curtain placement does not apply, because the burst covers\n * the whole exposure.\n * @see docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md#high-speed-sync\n */\nexport function resolveHighSpeedFlashSync(input: ResolveHighSpeedFlashSyncInput): ResolvedHighSpeedFlashSync {\n requireInputKeys(input, \"resolveHighSpeedFlashSync\", [\"flashEnabled\", \"flashProfile\", \"syncCapabilities\", \"timing\", \"powerFraction\", \"releaseFrame\"]);\n requireTimingRecordShape(input.timing, \"resolveHighSpeedFlashSync timing\");\n const flash = parseManualFlashProfile(input.flashProfile);\n const capabilities = parseFlashSyncCapabilityProfile(input.syncCapabilities);\n if (capabilities.captureModeId !== input.timing.captureModeId || capabilities.timingProfileId !== input.timing.timingProfileId) {\n throw new InvalidScientificInputError(\n \"Flash sync capability profile must exactly match the resolved capture-mode and timing-profile identities.\"\n );\n }\n if (!capabilities.highSpeedSyncSupported || capabilities.highSpeedSync === undefined) {\n throw new InvalidScientificInputError(\"The flash sync capability profile does not declare high-speed sync.\");\n }\n const power = input.powerFraction;\n if (typeof power !== \"number\" || !Number.isFinite(power) || power <= 0 || power > 1) {\n throw new InvalidScientificInputError(\"HSS powerFraction must lie in (0, 1].\");\n }\n if (input.releaseFrame !== undefined) validateReleaseBinding(input.releaseFrame, input.timing);\n\n const windows = input.timing.exposureWindows;\n const closing = windows.closing.schedule;\n const burstEnd = windows.nominalExposureDurationSeconds.value +\n (closing.kind === \"simultaneous\" ? 0 : closing.traversalDurationSeconds.value);\n const eta = capabilities.highSpeedSync.burstEnergyFractionOfFullPulse;\n const local = windows.localExposureDurationRangeSeconds;\n const fraction = { minimum: eta * local.minimum / burstEnd, maximum: eta * local.maximum / burstEnd };\n const pulseEnergy = integratePulse(flash.pulse.samples);\n const burstFlashProfile: ManualFlashProfile = {\n ...flash,\n pulse: {\n ...flash.pulse,\n waveformId: flash.pulse.waveformId + \"-hss-burst\",\n supportDurationSeconds: burstEnd,\n samples: [\n { timeSecondsFromWaveformReference: 0, relativeMagnitudeMultiplier: 1 },\n { timeSecondsFromWaveformReference: burstEnd, relativeMagnitudeMultiplier: 1 }\n ],\n limitations: [...flash.pulse.limitations,\n \"Quasi-continuous HSS burst: the pulse train is approximated by constant output over the burst support.\"]\n },\n outputControl: { ...flash.outputControl, scale: flash.outputControl.scale * power * eta * pulseEnergy / burstEnd }\n };\n const enabled = input.flashEnabled;\n return {\n modelId: HIGH_SPEED_SYNC_MODEL.id,\n modelVersion: HIGH_SPEED_SYNC_MODEL.version,\n flashEnabled: enabled,\n flashProfileId: flash.profileId,\n flashProfileVersion: flash.profileVersion,\n sourceId: flash.sourceTemplate.sourceId,\n syncMode: \"high-speed-sync\",\n syncStatus: enabled ? \"high-speed-sync-resolved\" : \"disabled\",\n captureModeId: input.timing.captureModeId,\n timingProfileId: input.timing.timingProfileId,\n syncCapabilityProfileId: capabilities.profileId,\n timeReference: \"first-opening-boundary-phase\",\n powerFraction: power,\n burstEnergyFractionOfFullPulse: eta,\n singlePulseIntegratedRelativeSeconds: pulseEnergy,\n burstStartSecondsFromCaptureReference: 0,\n burstEndSecondsFromCaptureReference: burstEnd,\n burstDurationSeconds: burstEnd,\n localExposureDurationRangeSeconds: { minimum: local.minimum, maximum: local.maximum },\n energyFractionOfSinglePulseRange: fraction,\n guideNumberFactorRange: { minimum: Math.sqrt(fraction.minimum), maximum: Math.sqrt(fraction.maximum) },\n uniformAcrossActiveFrame: local.minimum === local.maximum,\n burstFlashProfile: enabled ? burstFlashProfile : null,\n waveformTimeZeroSecondsFromCaptureReference: enabled ? 0 : null,\n releaseFrameBinding: !enabled || input.releaseFrame === undefined ? null : {\n sequenceId: input.releaseFrame.sequenceId,\n releaseFrameId: input.releaseFrame.releaseFrameId,\n frameIndex: input.releaseFrame.frameIndex,\n sceneTimeSecondsFromSequenceStartAtBurstStart: input.releaseFrame.sceneTimeSecondsFromSequenceStart,\n sceneTimeSecondsFromSequenceStartAtBurstEnd: input.releaseFrame.sceneTimeSecondsFromSequenceStart + burstEnd\n },\n hssModeled: true,\n ttlModeled: false,\n sensorReadoutTimingUsedAsExposureTiming: false,\n evidence: [...flash.evidence, ...capabilities.evidence, ...capabilities.highSpeedSync.evidence, ...input.timing.evidence],\n limitations: [\n ...flash.limitations,\n ...capabilities.limitations,\n \"HSS burst is registered to exposure-boundary timing (first line opening to last line closing), never sensor data-readout timing.\",\n \"Pulse-train ripple, recycle/thermal limits beyond the declared burst energy fraction and branded flash protocols are not modeled.\"\n ]\n };\n}\n\n/**\n * Registers a resolved high-speed-sync burst as a temporal illumination overlay: a rectangular\n * waveform over [0, D]. Each line then collects the burst over its own local exposure window.\n */\nexport function createHighSpeedSyncIlluminationOverlay(\n input: Omit<CreateManualFlashIlluminationOverlayInput, \"resolvedSync\"> & { resolvedSync: ResolvedHighSpeedFlashSync }\n): ManualFlashIlluminationOverlay {\n requireInputKeys(input, \"createHighSpeedSyncIlluminationOverlay\", [\"baseIlluminationProfile\", \"baseTemporalProfile\", \"flashProfile\", \"illuminationProfileId\", \"temporalProfileId\", \"resolvedSync\"]);\n requireInputObject(input.resolvedSync, \"createHighSpeedSyncIlluminationOverlay resolvedSync\");\n return createManualFlashIlluminationOverlay({ ...input,\n flashProfile: input.resolvedSync.burstFlashProfile ?? input.flashProfile });\n}\n"]}
@@ -53,20 +53,20 @@ export interface CreateSceneRadianceDerivedExposureMeteringSampleSetInput {
53
53
  samples: readonly ExposureMeteringZoneSample[];
54
54
  }
55
55
  /**
56
- * Parses the declared approximation used to reduce renderer/provider scene
57
- * information into the scalar relative-linear domain consumed by metering.
56
+ * Parses the declared approximation that turns renderer or provider scene data
57
+ * into the single relative linear values the meter uses.
58
58
  *
59
- * This profile explicitly does not authorize a calibrated luminance or
60
- * spectral-to-photometric conversion claim.
59
+ * The profile does not support any claim of calibrated luminance or of a
60
+ * spectral-to-photometric conversion.
61
61
  */
62
62
  export declare function parseSceneRadianceMeteringDerivationProfile(value: unknown): SceneRadianceMeteringDerivationProfile;
63
63
  /**
64
- * Creates a relative pre-exposure meter sample set bound to one validated #85
65
- * provider context.
64
+ * Builds a set of relative pre-exposure meter samples tied to one validated
65
+ * scene-radiance provider context.
66
66
  *
67
- * The caller/renderer still supplies the scalar relative samples. This bridge
68
- * validates identity and timing semantics only; it does not convert spectral
69
- * radiance into luminance or define a calibrated meter spectral response.
67
+ * The caller or renderer still supplies the relative sample values. This
68
+ * bridge only checks identity and timing. It does not convert spectral
69
+ * radiance into luminance, and it does not define a calibrated meter spectral
70
+ * response.
70
71
  */
71
72
  export declare function createSceneRadianceDerivedExposureMeteringSampleSet(input: CreateSceneRadianceDerivedExposureMeteringSampleSetInput): SceneRadianceDerivedExposureMeteringSampleSet;
72
- //# sourceMappingURL=metering-scene-radiance.d.ts.map
@@ -1,26 +1,32 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses the declared approximation used to reduce renderer/provider scene information into the scalar
5
- * relative-linear domain consumed by metering. This profile explicitly does not authorize a calibrated
6
- * luminance or spectral-to-photometric conversion claim.
7
- * Creates a relative pre-exposure meter sample set bound to one validated #85 provider context. The
8
- * caller/renderer still supplies the scalar relative samples. This bridge validates identity and
9
- * timing semantics only; it does not convert spectral radiance into luminance or define a calibrated
10
- * meter spectral response.
11
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
3
+ * Links scene radiance to metering.
4
+ *
5
+ * The profile parser reads the declared approximation that turns renderer or provider scene data into
6
+ * the single relative linear values the meter uses. The profile does not support any claim of
7
+ * calibrated luminance or of a spectral-to-photometric conversion.
8
+ *
9
+ * The sample-set function builds a set of relative pre-exposure meter samples tied to one validated
10
+ * scene-radiance provider context. The caller or renderer still supplies the relative sample values.
11
+ * This bridge only checks identity and timing. It does not convert spectral radiance into luminance,
12
+ * and it does not define a calibrated meter spectral response.
13
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
14
+ * limits.
12
15
  */
13
16
  import { InvalidConfigurationError } from "../core/configuration-error.js";
14
17
  import { parseEvidenceList } from "../core/evidence-provenance.js";
15
18
  import { InvalidScientificInputError } from "../core/validation.js";
16
19
  import { assessSceneMaterialResponseFidelity } from "../schema/scene-radiance.js";
20
+ import { requireInputKeys, requireInputObject, rejectUnknownFields } from "../core/record-validation.js";
17
21
  export const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION = "0.1.0";
18
- function requireRecord(value, path) {
22
+ function requireRecord(value, path, allowedKeys) {
19
23
  if (typeof value !== "object" ||
20
24
  value === null ||
21
25
  Array.isArray(value)) {
22
26
  throw new InvalidConfigurationError(path + " must be an object.");
23
27
  }
28
+ if (allowedKeys !== null)
29
+ rejectUnknownFields(value, allowedKeys, path);
24
30
  return value;
25
31
  }
26
32
  function requireNonEmptyString(value, path) {
@@ -38,14 +44,14 @@ function requireFinite(value, path) {
38
44
  return value;
39
45
  }
40
46
  /**
41
- * Parses the declared approximation used to reduce renderer/provider scene
42
- * information into the scalar relative-linear domain consumed by metering.
47
+ * Parses the declared approximation that turns renderer or provider scene data
48
+ * into the single relative linear values the meter uses.
43
49
  *
44
- * This profile explicitly does not authorize a calibrated luminance or
45
- * spectral-to-photometric conversion claim.
50
+ * The profile does not support any claim of calibrated luminance or of a
51
+ * spectral-to-photometric conversion.
46
52
  */
47
53
  export function parseSceneRadianceMeteringDerivationProfile(value) {
48
- const record = requireRecord(value, "sceneRadianceMeteringDerivationProfile");
54
+ const record = requireRecord(value, "sceneRadianceMeteringDerivationProfile", ["schemaVersion", "scientificStatus", "method", "spectralWeighting", "derivationId", "evidence", "limitation"]);
49
55
  if (record.schemaVersion !==
50
56
  SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION) {
51
57
  throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.schemaVersion must be "' +
@@ -76,6 +82,12 @@ export function parseSceneRadianceMeteringDerivationProfile(value) {
76
82
  }
77
83
  function validateProviderContext(input) {
78
84
  const { providerProfile, illuminationProfile, illuminationTemporalProfile, materialResponseProfile } = input;
85
+ requireInputObject(providerProfile, "providerProfile");
86
+ requireInputObject(providerProfile.fidelity, "providerProfile.fidelity");
87
+ requireInputObject(illuminationProfile, "illuminationProfile");
88
+ requireInputObject(materialResponseProfile, "materialResponseProfile");
89
+ if (illuminationTemporalProfile !== undefined)
90
+ requireInputObject(illuminationTemporalProfile, "illuminationTemporalProfile");
79
91
  if (providerProfile.sceneId !==
80
92
  illuminationProfile.sceneId) {
81
93
  throw new InvalidScientificInputError("Provider and illumination profiles must reference the same sceneId.");
@@ -130,6 +142,11 @@ function validateProviderContext(input) {
130
142
  .illuminationProfileId) {
131
143
  throw new InvalidScientificInputError("Temporal illumination profile must bind the provider's illuminationProfileId.");
132
144
  }
145
+ if (!Array.isArray(illuminationProfile.sources) || !Array.isArray(illuminationTemporalProfile.sourceBindings)) {
146
+ throw new InvalidConfigurationError("illuminationProfile.sources and illuminationTemporalProfile.sourceBindings must be arrays.");
147
+ }
148
+ illuminationProfile.sources.forEach((entry, index) => requireInputObject(entry, "illuminationProfile.sources[" + index + "]"));
149
+ illuminationTemporalProfile.sourceBindings.forEach((entry, index) => requireInputObject(entry, "illuminationTemporalProfile.sourceBindings[" + index + "]"));
133
150
  const knownSourceIds = new Set(illuminationProfile.sources.map((entry) => entry.sourceId));
134
151
  for (const binding of illuminationTemporalProfile
135
152
  .sourceBindings) {
@@ -146,31 +163,33 @@ function validateProviderContext(input) {
146
163
  return materialResponseFidelity;
147
164
  }
148
165
  /**
149
- * Creates a relative pre-exposure meter sample set bound to one validated #85
150
- * provider context.
166
+ * Builds a set of relative pre-exposure meter samples tied to one validated
167
+ * scene-radiance provider context.
151
168
  *
152
- * The caller/renderer still supplies the scalar relative samples. This bridge
153
- * validates identity and timing semantics only; it does not convert spectral
154
- * radiance into luminance or define a calibrated meter spectral response.
169
+ * The caller or renderer still supplies the relative sample values. This
170
+ * bridge only checks identity and timing. It does not convert spectral
171
+ * radiance into luminance, and it does not define a calibrated meter spectral
172
+ * response.
155
173
  */
156
174
  export function createSceneRadianceDerivedExposureMeteringSampleSet(input) {
175
+ requireInputKeys(input, "createSceneRadianceDerivedExposureMeteringSampleSet", ["measurementId", "sceneStateId", "providerProfile", "illuminationProfile", "materialResponseProfile", "illuminationTemporalProfile", "captureTimeSecondsFromReference", "captureGeometry", "derivationProfile", "samples"]);
157
176
  const derivationProfile = parseSceneRadianceMeteringDerivationProfile(input.derivationProfile);
158
177
  const materialResponseFidelity = validateProviderContext(input);
159
178
  if (typeof input.measurementId !==
160
179
  "string" ||
161
180
  input.measurementId.trim().length ===
162
181
  0) {
163
- throw new InvalidScientificInputError("measurementId must be a non-empty string.");
182
+ throw new InvalidConfigurationError("measurementId must be a non-empty string.");
164
183
  }
165
184
  if (typeof input.sceneStateId !==
166
185
  "string" ||
167
186
  input.sceneStateId.trim().length ===
168
187
  0) {
169
- throw new InvalidScientificInputError("sceneStateId must be a non-empty string.");
188
+ throw new InvalidConfigurationError("sceneStateId must be a non-empty string.");
170
189
  }
171
190
  if (!Array.isArray(input.samples) ||
172
191
  input.samples.length === 0) {
173
- throw new InvalidScientificInputError("samples must be a non-empty array.");
192
+ throw new InvalidConfigurationError("samples must be a non-empty array.");
174
193
  }
175
194
  const temporal = input.providerProfile
176
195
  .illuminationTemporalProfileId ===
@@ -1 +1 @@
1
- {"version":3,"file":"metering-scene-radiance.js","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metering-scene-radiance.js","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Links scene radiance to metering.\n *\n * The profile parser reads the declared approximation that turns renderer or provider scene data into\n * the single relative linear values the meter uses. The profile does not support any claim of\n * calibrated luminance or of a spectral-to-photometric conversion.\n *\n * The sample-set function builds a set of relative pre-exposure meter samples tied to one validated\n * scene-radiance provider context. The caller or renderer still supplies the relative sample values.\n * This bridge only checks identity and timing. It does not convert spectral radiance into luminance,\n * and it does not define a calibrated meter spectral response.\n * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedCaptureGeometry\n} from \"../output/capture-geometry.js\";\nimport {\n assessSceneMaterialResponseFidelity,\n type SceneMaterialResponseProfile,\n type SceneRadianceProviderProfile\n} from \"../schema/scene-radiance.js\";\nimport type {\n SceneIlluminationProfile\n} from \"../schema/illumination.js\";\nimport type {\n SceneIlluminationTemporalProfile\n} from \"../schema/illumination-temporal.js\";\nimport type {\n ExposureMeteringSampleSet,\n ExposureMeteringZoneSample\n} from \"./metering.js\";\nimport { requireInputKeys, requireInputObject, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport interface SceneRadianceMeteringDerivationProfile {\n schemaVersion:\n typeof SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION;\n derivationId: string;\n scientificStatus: \"approximation\";\n method:\n \"renderer-provided-pre-exposure-relative-reduction\";\n spectralWeighting:\n \"not-calibrated\";\n evidence: readonly EvidenceProvenance[];\n limitation: string;\n}\n\nexport type SceneRadianceMeteringTemporalContext =\n | {\n kind: \"time-invariant\";\n }\n | {\n kind:\n \"registered-time-varying\";\n illuminationTemporalProfileId:\n string;\n timeReference:\n \"first-opening-boundary-phase\";\n captureTimeSecondsFromReference:\n number;\n };\n\nexport interface SceneRadianceMeteringSourceContext {\n kind:\n \"scene-radiance-provider-derived-relative\";\n sceneId: string;\n sceneStateId: string;\n providerProfileId: string;\n illuminationProfileId: string;\n materialResponseProfileId: string;\n derivationProfileId: string;\n providerScientificStatus:\n SceneRadianceProviderProfile[\"scientificStatus\"];\n materialResponseFidelity:\n ReturnType<\n typeof assessSceneMaterialResponseFidelity\n >;\n temporal:\n SceneRadianceMeteringTemporalContext;\n spectralReductionCalibrated: false;\n calibratedLuminanceClaimAuthorized:\n false;\n calibratedSceneRadianceClaimAuthorized:\n false;\n}\n\nexport interface SceneRadianceDerivedExposureMeteringSampleSet\n extends ExposureMeteringSampleSet {\n sourceContext:\n SceneRadianceMeteringSourceContext;\n}\n\nexport interface CreateSceneRadianceDerivedExposureMeteringSampleSetInput {\n measurementId: string;\n sceneStateId: string;\n providerProfile:\n SceneRadianceProviderProfile;\n illuminationProfile:\n SceneIlluminationProfile;\n materialResponseProfile:\n SceneMaterialResponseProfile;\n illuminationTemporalProfile?:\n SceneIlluminationTemporalProfile;\n captureTimeSecondsFromReference?: number;\n captureGeometry:\n ResolvedCaptureGeometry;\n derivationProfile:\n SceneRadianceMeteringDerivationProfile;\n samples:\n readonly ExposureMeteringZoneSample[];\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidScientificInputError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\n/**\n * Parses the declared approximation that turns renderer or provider scene data\n * into the single relative linear values the meter uses.\n *\n * The profile does not support any claim of calibrated luminance or of a\n * spectral-to-photometric conversion.\n */\nexport function parseSceneRadianceMeteringDerivationProfile(\n value: unknown\n): SceneRadianceMeteringDerivationProfile {\n const record = requireRecord(\n value,\n \"sceneRadianceMeteringDerivationProfile\", [\"schemaVersion\", \"scientificStatus\", \"method\", \"spectralWeighting\", \"derivationId\", \"evidence\", \"limitation\"]\n );\n\n if (\n record.schemaVersion !==\n SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'sceneRadianceMeteringDerivationProfile.schemaVersion must be \"' +\n SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'sceneRadianceMeteringDerivationProfile.scientificStatus must be \"approximation\" in schema 0.1.0.'\n );\n }\n if (\n record.method !==\n \"renderer-provided-pre-exposure-relative-reduction\"\n ) {\n throw new InvalidConfigurationError(\n 'sceneRadianceMeteringDerivationProfile.method must be \"renderer-provided-pre-exposure-relative-reduction\".'\n );\n }\n if (\n record.spectralWeighting !==\n \"not-calibrated\"\n ) {\n throw new InvalidConfigurationError(\n 'sceneRadianceMeteringDerivationProfile.spectralWeighting must be \"not-calibrated\" in schema 0.1.0.'\n );\n }\n\n return {\n schemaVersion:\n SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION,\n derivationId:\n requireNonEmptyString(\n record.derivationId,\n \"sceneRadianceMeteringDerivationProfile.derivationId\"\n ),\n scientificStatus: \"approximation\",\n method:\n \"renderer-provided-pre-exposure-relative-reduction\",\n spectralWeighting:\n \"not-calibrated\",\n evidence: parseEvidenceList(\n record.evidence,\n \"sceneRadianceMeteringDerivationProfile.evidence\"\n ),\n limitation:\n requireNonEmptyString(\n record.limitation,\n \"sceneRadianceMeteringDerivationProfile.limitation\"\n )\n };\n}\n\nfunction validateProviderContext(\n input:\n CreateSceneRadianceDerivedExposureMeteringSampleSetInput\n): ReturnType<\n typeof assessSceneMaterialResponseFidelity\n> {\n const {\n providerProfile,\n illuminationProfile,\n illuminationTemporalProfile,\n materialResponseProfile\n } = input;\n requireInputObject(providerProfile, \"providerProfile\");\n requireInputObject(providerProfile.fidelity, \"providerProfile.fidelity\");\n requireInputObject(illuminationProfile, \"illuminationProfile\");\n requireInputObject(materialResponseProfile, \"materialResponseProfile\");\n if (illuminationTemporalProfile !== undefined) requireInputObject(illuminationTemporalProfile, \"illuminationTemporalProfile\");\n\n if (\n providerProfile.sceneId !==\n illuminationProfile.sceneId\n ) {\n throw new InvalidScientificInputError(\n \"Provider and illumination profiles must reference the same sceneId.\"\n );\n }\n if (\n providerProfile.sceneId !==\n materialResponseProfile.sceneId\n ) {\n throw new InvalidScientificInputError(\n \"Provider and material-response profiles must reference the same sceneId.\"\n );\n }\n if (\n providerProfile.illuminationProfileId !==\n illuminationProfile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Provider illuminationProfileId must match the supplied illumination profile.\"\n );\n }\n if (\n providerProfile.materialResponseProfileId !==\n materialResponseProfile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Provider materialResponseProfileId must match the supplied material-response profile.\"\n );\n }\n\n const materialResponseFidelity =\n assessSceneMaterialResponseFidelity(\n materialResponseProfile\n );\n if (\n providerProfile.fidelity.material !==\n materialResponseFidelity\n ) {\n throw new InvalidScientificInputError(\n \"Provider material fidelity must match the supplied material-response profile.\"\n );\n }\n\n if (\n providerProfile\n .illuminationTemporalProfileId ===\n undefined\n ) {\n if (\n illuminationTemporalProfile !==\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"A temporal illumination profile was supplied but the provider profile does not bind one.\"\n );\n }\n if (\n input\n .captureTimeSecondsFromReference !==\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"captureTimeSecondsFromReference must be omitted for a time-invariant provider context.\"\n );\n }\n return materialResponseFidelity;\n }\n\n if (\n illuminationTemporalProfile ===\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"Provider illuminationTemporalProfileId requires the matching temporal illumination profile.\"\n );\n }\n if (\n providerProfile\n .illuminationTemporalProfileId !==\n illuminationTemporalProfile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Provider illuminationTemporalProfileId must match the supplied temporal illumination profile.\"\n );\n }\n if (\n providerProfile.sceneId !==\n illuminationTemporalProfile.sceneId\n ) {\n throw new InvalidScientificInputError(\n \"Provider and temporal illumination profiles must reference the same sceneId.\"\n );\n }\n if (\n providerProfile\n .illuminationProfileId !==\n illuminationTemporalProfile\n .illuminationProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Temporal illumination profile must bind the provider's illuminationProfileId.\"\n );\n }\n\n if (!Array.isArray(illuminationProfile.sources) || !Array.isArray(illuminationTemporalProfile.sourceBindings)) {\n throw new InvalidConfigurationError(\"illuminationProfile.sources and illuminationTemporalProfile.sourceBindings must be arrays.\");\n }\n illuminationProfile.sources.forEach((entry, index) => requireInputObject(entry, \"illuminationProfile.sources[\" + index + \"]\"));\n illuminationTemporalProfile.sourceBindings.forEach((entry, index) => requireInputObject(entry, \"illuminationTemporalProfile.sourceBindings[\" + index + \"]\"));\n const knownSourceIds =\n new Set(\n illuminationProfile.sources.map(\n (entry) => entry.sourceId\n )\n );\n for (\n const binding of\n illuminationTemporalProfile\n .sourceBindings\n ) {\n if (\n !knownSourceIds.has(\n binding.sourceId\n )\n ) {\n throw new InvalidScientificInputError(\n \"Temporal illumination source binding references a sourceId that is not declared by the illumination profile.\"\n );\n }\n }\n if (\n input\n .captureTimeSecondsFromReference ===\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"Time-varying scene-radiance metering requires an explicit captureTimeSecondsFromReference.\"\n );\n }\n requireFinite(\n input.captureTimeSecondsFromReference,\n \"captureTimeSecondsFromReference\"\n );\n\n return materialResponseFidelity;\n}\n\n/**\n * Builds a set of relative pre-exposure meter samples tied to one validated\n * scene-radiance provider context.\n *\n * The caller or renderer still supplies the relative sample values. This\n * bridge only checks identity and timing. It does not convert spectral\n * radiance into luminance, and it does not define a calibrated meter spectral\n * response.\n */\nexport function createSceneRadianceDerivedExposureMeteringSampleSet(\n input:\n CreateSceneRadianceDerivedExposureMeteringSampleSetInput\n): SceneRadianceDerivedExposureMeteringSampleSet {\n requireInputKeys(input, \"createSceneRadianceDerivedExposureMeteringSampleSet\", [\"measurementId\", \"sceneStateId\", \"providerProfile\", \"illuminationProfile\", \"materialResponseProfile\", \"illuminationTemporalProfile\", \"captureTimeSecondsFromReference\", \"captureGeometry\", \"derivationProfile\", \"samples\"]);\n const derivationProfile =\n parseSceneRadianceMeteringDerivationProfile(\n input.derivationProfile\n );\n const materialResponseFidelity =\n validateProviderContext(input);\n\n if (\n typeof input.measurementId !==\n \"string\" ||\n input.measurementId.trim().length ===\n 0\n ) {\n throw new InvalidConfigurationError(\n \"measurementId must be a non-empty string.\"\n );\n }\n if (\n typeof input.sceneStateId !==\n \"string\" ||\n input.sceneStateId.trim().length ===\n 0\n ) {\n throw new InvalidConfigurationError(\n \"sceneStateId must be a non-empty string.\"\n );\n }\n if (\n !Array.isArray(input.samples) ||\n input.samples.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"samples must be a non-empty array.\"\n );\n }\n\n const temporal:\n SceneRadianceMeteringTemporalContext =\n input.providerProfile\n .illuminationTemporalProfileId ===\n undefined\n ? {\n kind: \"time-invariant\"\n }\n : {\n kind:\n \"registered-time-varying\",\n illuminationTemporalProfileId:\n input.providerProfile\n .illuminationTemporalProfileId,\n timeReference:\n \"first-opening-boundary-phase\",\n captureTimeSecondsFromReference:\n input\n .captureTimeSecondsFromReference!\n };\n\n return {\n measurementId:\n input.measurementId.trim(),\n sceneStateId:\n input.sceneStateId.trim(),\n inputDomain:\n \"relative-pre-exposure-linear-signal\",\n captureRegion:\n \"oriented-active-capture\",\n captureGeometry:\n input.captureGeometry,\n processingState: {\n exposureSettingsApplied: false,\n whiteBalanceApplied: false,\n toneMappingApplied: false,\n displayGammaApplied: false,\n sharpeningApplied: false\n },\n samples: input.samples,\n sourceContext: {\n kind:\n \"scene-radiance-provider-derived-relative\",\n sceneId:\n input.providerProfile.sceneId,\n sceneStateId:\n input.sceneStateId.trim(),\n providerProfileId:\n input.providerProfile.profileId,\n illuminationProfileId:\n input.illuminationProfile.profileId,\n materialResponseProfileId:\n input.materialResponseProfile\n .profileId,\n derivationProfileId:\n derivationProfile.derivationId,\n providerScientificStatus:\n input.providerProfile\n .scientificStatus,\n materialResponseFidelity,\n temporal,\n spectralReductionCalibrated:\n false,\n calibratedLuminanceClaimAuthorized:\n false,\n calibratedSceneRadianceClaimAuthorized:\n false\n }\n };\n}\n"]}
@@ -48,20 +48,20 @@ export interface SetExposureCompensationOnMeterTargetInput {
48
48
  exposureCompensationStops: number;
49
49
  }
50
50
  /**
51
- * Freezes one metering result into the stable relative exposure target
52
- * consumed by downstream camera-control policy.
51
+ * Freezes one metering result into a stable relative exposure target, for
52
+ * camera-control logic to use.
53
53
  *
54
- * The target copies the meter snapshot by value. Future scene/light changes do
55
- * not mutate this object, which is the engine seam needed for AE-lock behavior.
54
+ * The target copies the meter snapshot by value. Later changes to the scene or
55
+ * light do not change it. This is what the engine provides for AE lock
56
+ * (auto-exposure lock).
56
57
  */
57
58
  export declare function createExposureMeterTargetFromMeteringResult(input: CreateExposureMeterTargetInput): ExposureMeterTarget;
58
59
  /**
59
60
  * Sets an absolute exposure-compensation value on a frozen meter target.
60
61
  *
61
- * Compensation is always re-derived from the uncompensated base target, so
62
- * repeated UI updates cannot accidentally accumulate floating-point/control
63
- * drift. Positive compensation requests more exposure.
62
+ * Compensation is always worked out again from the base target without
63
+ * compensation, so repeated UI updates cannot build up floating-point or
64
+ * control drift. Positive compensation asks for more exposure.
64
65
  */
65
66
  export declare function setExposureCompensationOnMeterTarget(input: SetExposureCompensationOnMeterTargetInput): ExposureMeterTarget;
66
67
  export {};
67
- //# sourceMappingURL=metering-target.d.ts.map
@@ -1,20 +1,24 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Freezes one metering result into the stable relative exposure target consumed by downstream
5
- * camera-control policy. The target copies the meter snapshot by value. Future scene/light changes do
6
- * not mutate this object, which is the engine seam needed for AE-lock behavior.
7
- * Sets an absolute exposure-compensation value on a frozen meter target. Compensation is always
8
- * re-derived from the uncompensated base target, so repeated UI updates cannot accidentally accumulate
9
- * floating-point/control drift. Positive compensation requests more exposure.
10
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
3
+ * Meter targets: a frozen metering result that camera-control logic uses as its exposure target.
4
+ *
5
+ * The target copies the meter snapshot by value. Later changes to the scene or light do not change
6
+ * it. This is what the engine provides for AE lock (auto-exposure lock).
7
+ *
8
+ * Exposure compensation is set as an absolute value. It is always worked out again from the base
9
+ * target without compensation, so repeated UI updates cannot build up floating-point or control
10
+ * drift. Positive compensation asks for more exposure.
11
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
12
+ * limits.
11
13
  */
12
14
  import { InvalidScientificInputError } from "../core/validation.js";
15
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
16
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
13
17
  export const EXPOSURE_METER_TARGET_SCHEMA_VERSION = "0.1.0";
14
18
  function requireNonEmptyString(value, path) {
15
19
  if (typeof value !== "string" ||
16
20
  value.trim().length === 0) {
17
- throw new InvalidScientificInputError(path + " must be a non-empty string.");
21
+ throw new InvalidConfigurationError(path + " must be a non-empty string.");
18
22
  }
19
23
  return value.trim();
20
24
  }
@@ -62,13 +66,14 @@ function meterSnapshotIdentity(result) {
62
66
  };
63
67
  }
64
68
  function validateCommonMeterResult(result) {
69
+ requireInputObject(result, "result input");
65
70
  if (result.scientificStatus !==
66
71
  "approximation") {
67
- throw new InvalidScientificInputError('meterResult.scientificStatus must be "approximation" for schema 0.1.0.');
72
+ throw new InvalidConfigurationError('meterResult.scientificStatus must be "approximation" for schema 0.1.0.');
68
73
  }
69
74
  if (result.inputDomain !==
70
75
  "relative-pre-exposure-linear-signal") {
71
- throw new InvalidScientificInputError('meterResult.inputDomain must be "relative-pre-exposure-linear-signal".');
76
+ throw new InvalidConfigurationError('meterResult.inputDomain must be "relative-pre-exposure-linear-signal".');
72
77
  }
73
78
  if (result.exposureCompensationApplied !==
74
79
  false) {
@@ -105,13 +110,15 @@ function createBaseTargetFields(targetId, meterResult) {
105
110
  };
106
111
  }
107
112
  /**
108
- * Freezes one metering result into the stable relative exposure target
109
- * consumed by downstream camera-control policy.
113
+ * Freezes one metering result into a stable relative exposure target, for
114
+ * camera-control logic to use.
110
115
  *
111
- * The target copies the meter snapshot by value. Future scene/light changes do
112
- * not mutate this object, which is the engine seam needed for AE-lock behavior.
116
+ * The target copies the meter snapshot by value. Later changes to the scene or
117
+ * light do not change it. This is what the engine provides for AE lock
118
+ * (auto-exposure lock).
113
119
  */
114
120
  export function createExposureMeterTargetFromMeteringResult(input) {
121
+ requireInputKeys(input, "createExposureMeterTargetFromMeteringResult", ["targetId", "meterResult"]);
115
122
  const base = createBaseTargetFields(input.targetId, input.meterResult);
116
123
  if (input.meterResult.status ===
117
124
  "no-signal") {
@@ -150,13 +157,15 @@ export function createExposureMeterTargetFromMeteringResult(input) {
150
157
  };
151
158
  }
152
159
  function validateBaseTarget(target) {
160
+ requireInputObject(target, "target input");
153
161
  if (target.schemaVersion !==
154
162
  EXPOSURE_METER_TARGET_SCHEMA_VERSION) {
155
- throw new InvalidScientificInputError('baseTarget.schemaVersion must be "' +
163
+ throw new InvalidConfigurationError('baseTarget.schemaVersion must be "' +
156
164
  EXPOSURE_METER_TARGET_SCHEMA_VERSION +
157
165
  '".');
158
166
  }
159
167
  requireNonEmptyString(target.targetId, "baseTarget.targetId");
168
+ requireInputObject(target.sourceMeterSnapshot, "baseTarget.sourceMeterSnapshot");
160
169
  requireNonEmptyString(target
161
170
  .sourceMeterSnapshot
162
171
  .measurementId, "baseTarget.sourceMeterSnapshot.measurementId");
@@ -174,7 +183,7 @@ function validateBaseTarget(target) {
174
183
  .sourceMeterSnapshot
175
184
  .sourceKind !==
176
185
  "temporal-metering-result") {
177
- throw new InvalidScientificInputError("baseTarget.sourceMeterSnapshot.sourceKind is invalid.");
186
+ throw new InvalidConfigurationError("baseTarget.sourceMeterSnapshot.sourceKind is invalid.");
178
187
  }
179
188
  if (target.scientificStatus !==
180
189
  "approximation" ||
@@ -207,11 +216,12 @@ function validateBaseTarget(target) {
207
216
  /**
208
217
  * Sets an absolute exposure-compensation value on a frozen meter target.
209
218
  *
210
- * Compensation is always re-derived from the uncompensated base target, so
211
- * repeated UI updates cannot accidentally accumulate floating-point/control
212
- * drift. Positive compensation requests more exposure.
219
+ * Compensation is always worked out again from the base target without
220
+ * compensation, so repeated UI updates cannot build up floating-point or
221
+ * control drift. Positive compensation asks for more exposure.
213
222
  */
214
223
  export function setExposureCompensationOnMeterTarget(input) {
224
+ requireInputKeys(input, "setExposureCompensationOnMeterTarget", ["targetId", "baseTarget", "exposureCompensationStops"]);
215
225
  validateBaseTarget(input.baseTarget);
216
226
  const targetId = requireNonEmptyString(input.targetId, "targetId");
217
227
  if (targetId ===