@photivra/engine 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1074) hide show
  1. package/CHANGELOG.md +401 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,20 +1,19 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses a capture-mode profile without inferring sensor physics from output resolution or marketing
5
- * mode names. The profile is intentionally orthogonal: acquisition frame sequence, per-frame sampling,
6
- * optional inter-frame sensor shift, reconstruction stages, processed raster and downstream
7
- * dependencies are independent axes.
8
- * Resolves one capture mode against the selected sensor's native effective image-sampling raster.
9
- * Resolution changes do not mutate physical sensor geometry. The returned processed raster is
10
- * pre-output geometry and must not be used to infer crop factor, field of view or physical photosite
11
- * count.
3
+ * Capture modes: how a camera mode samples the sensor (for example full resolution, binning, or
4
+ * multi-shot sensor shift) and what image size it produces.
5
+ *
6
+ * Sensor physics is never guessed from output resolution or a marketing mode name. A mode's parts
7
+ * are independent: the sequence of frames, sampling within each frame, optional sensor shift between
8
+ * frames, reconstruction stages, the processed image size and downstream dependencies. Changing
9
+ * resolution never changes the physical sensor geometry.
12
10
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
13
11
  * limits.
14
12
  */
15
13
  import { InvalidConfigurationError } from "../core/configuration-error.js";
16
14
  import { parseEvidenceList } from "../core/evidence-provenance.js";
17
15
  import { InvalidScientificInputError, requirePositiveInteger } from "../core/validation.js";
16
+ import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
18
17
  const COMBINATION_DOMAINS = new Set([
19
18
  "charge-domain",
20
19
  "pre-conversion-analog",
@@ -31,10 +30,12 @@ const DEPENDENCIES = new Set([
31
30
  "radiometric-calibration",
32
31
  "inter-frame-registration"
33
32
  ]);
34
- function requireRecord(value, path) {
33
+ function requireRecord(value, path, allowedKeys) {
35
34
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
36
35
  throw new InvalidConfigurationError(path + " must be an object.");
37
36
  }
37
+ if (allowedKeys !== null)
38
+ rejectUnknownFields(value, allowedKeys, path);
38
39
  return value;
39
40
  }
40
41
  function requireNonEmptyString(value, path) {
@@ -52,14 +53,14 @@ function requirePositiveSafeIntegerValue(value, path) {
52
53
  return value;
53
54
  }
54
55
  function parseIntegerFact(value, path) {
55
- const record = requireRecord(value, path);
56
+ const record = requireRecord(value, path, ["value", "evidence"]);
56
57
  return {
57
58
  value: requirePositiveSafeIntegerValue(record.value, path + ".value"),
58
59
  evidence: parseEvidenceList(record.evidence, path + ".evidence")
59
60
  };
60
61
  }
61
62
  function parseRasterDimensions(value, path) {
62
- const record = requireRecord(value, path);
63
+ const record = requireRecord(value, path, ["pixelWidth", "pixelHeight"]);
63
64
  const pixelWidth = requirePositiveSafeIntegerValue(record.pixelWidth, path + ".pixelWidth");
64
65
  const pixelHeight = requirePositiveSafeIntegerValue(record.pixelHeight, path + ".pixelHeight");
65
66
  const total = pixelWidth * pixelHeight;
@@ -69,14 +70,14 @@ function parseRasterDimensions(value, path) {
69
70
  return { pixelWidth, pixelHeight };
70
71
  }
71
72
  function parseRasterFact(value, path) {
72
- const record = requireRecord(value, path);
73
+ const record = requireRecord(value, path, ["value", "evidence"]);
73
74
  return {
74
75
  value: parseRasterDimensions(record.value, path + ".value"),
75
76
  evidence: parseEvidenceList(record.evidence, path + ".evidence")
76
77
  };
77
78
  }
78
79
  function parseCombinationDomainFact(value, path) {
79
- const record = requireRecord(value, path);
80
+ const record = requireRecord(value, path, ["value", "evidence"]);
80
81
  if (typeof record.value !== "string" ||
81
82
  !COMBINATION_DOMAINS.has(record.value)) {
82
83
  throw new InvalidConfigurationError(path + ".value is invalid.");
@@ -87,7 +88,7 @@ function parseCombinationDomainFact(value, path) {
87
88
  };
88
89
  }
89
90
  function parseAcquisition(value, path) {
90
- const record = requireRecord(value, path);
91
+ const record = requireRecord(value, path, ["kind", "frameCount", "minimumFrameCount", "maximumFrameCount", "evidence"]);
91
92
  if (record.kind === "single-frame") {
92
93
  if (record.frameCount !== undefined ||
93
94
  record.minimumFrameCount !== undefined ||
@@ -157,7 +158,7 @@ function parseAcquisition(value, path) {
157
158
  throw new InvalidConfigurationError(path + ".kind is invalid.");
158
159
  }
159
160
  function parsePerFrameSampling(value, path) {
160
- const record = requireRecord(value, path);
161
+ const record = requireRecord(value, path, ["kind", "groupWidthSamples", "groupHeightSamples", "combinationDomain", "raster"]);
161
162
  if (record.kind === "native-effective-raster") {
162
163
  if (record.groupWidthSamples !== undefined ||
163
164
  record.groupHeightSamples !== undefined ||
@@ -199,13 +200,13 @@ function parsePerFrameSampling(value, path) {
199
200
  throw new InvalidConfigurationError(path + ".kind is invalid.");
200
201
  }
201
202
  function parseOffsetsFact(value, path) {
202
- const record = requireRecord(value, path);
203
+ const record = requireRecord(value, path, ["value", "evidence"]);
203
204
  if (!Array.isArray(record.value) ||
204
205
  record.value.length === 0) {
205
206
  throw new InvalidConfigurationError(path + ".value must be a non-empty array.");
206
207
  }
207
208
  const offsets = record.value.map((entry, index) => {
208
- const item = requireRecord(entry, path + ".value[" + index + "]");
209
+ const item = requireRecord(entry, path + ".value[" + index + "]", ["x", "y"]);
209
210
  if (typeof item.x !== "number" ||
210
211
  !Number.isFinite(item.x) ||
211
212
  typeof item.y !== "number" ||
@@ -230,7 +231,7 @@ function parseReconstructionStages(value, path) {
230
231
  throw new InvalidConfigurationError(path + " must be an array.");
231
232
  }
232
233
  const stages = value.map((entry, index) => {
233
- const record = requireRecord(entry, path + "[" + index + "]");
234
+ const record = requireRecord(entry, path + "[" + index + "]", ["value", "evidence"]);
234
235
  if (typeof record.value !== "string" ||
235
236
  !RECONSTRUCTION_STAGES.has(record.value)) {
236
237
  throw new InvalidConfigurationError(path + "[" + index + "].value is invalid.");
@@ -263,7 +264,7 @@ function parseDependencies(value, path) {
263
264
  return dependencies;
264
265
  }
265
266
  function parseModeDefinition(value, path) {
266
- const record = requireRecord(value, path);
267
+ const record = requireRecord(value, path, ["modeId", "acquisition", "interFrameSensorOffsetsNativeSamples", "evidence", "perFrameSampling", "reconstructionStages", "processedImageRaster", "dependencies"]);
267
268
  const modeId = requireNonEmptyString(record.modeId, path + ".modeId");
268
269
  const acquisition = parseAcquisition(record.acquisition, path + ".acquisition");
269
270
  const interFrameSensorOffsetsNativeSamples = record.interFrameSensorOffsetsNativeSamples === undefined
@@ -299,15 +300,15 @@ function parseModeDefinition(value, path) {
299
300
  };
300
301
  }
301
302
  /**
302
- * Parses a capture-mode profile without inferring sensor physics from output
303
+ * Parses a capture-mode profile. Sensor physics is never guessed from output
303
304
  * resolution or marketing mode names.
304
305
  *
305
- * The profile is intentionally orthogonal: acquisition frame sequence,
306
- * per-frame sampling, optional inter-frame sensor shift, reconstruction stages,
307
- * processed raster and downstream dependencies are independent axes.
306
+ * The profile's parts are independent of each other: the frame sequence,
307
+ * sampling within each frame, optional sensor shift between frames,
308
+ * reconstruction stages, the processed image size and downstream dependencies.
308
309
  */
309
310
  export function parseCaptureModeProfile(value) {
310
- const profile = requireRecord(value, "captureModes");
311
+ const profile = requireRecord(value, "captureModes", ["schemaVersion", "modes"]);
311
312
  if (profile.schemaVersion !== "0.1.0") {
312
313
  throw new InvalidConfigurationError('captureModes.schemaVersion must be "0.1.0".');
313
314
  }
@@ -326,6 +327,7 @@ export function parseCaptureModeProfile(value) {
326
327
  };
327
328
  }
328
329
  function validateNativeRaster(raster) {
330
+ requireInputObject(raster, "raster input");
329
331
  requirePositiveInteger("nativeRaster.pixelWidth", raster.pixelWidth);
330
332
  requirePositiveInteger("nativeRaster.pixelHeight", raster.pixelHeight);
331
333
  const total = raster.pixelWidth * raster.pixelHeight;
@@ -371,18 +373,18 @@ function resolvePerFrameSampling(sampling, nativeRaster) {
371
373
  };
372
374
  }
373
375
  /**
374
- * Resolves one capture mode against the selected sensor's native effective
375
- * image-sampling raster.
376
+ * Resolves one capture mode against the selected sensor's native pixel grid.
376
377
  *
377
- * Resolution changes do not mutate physical sensor geometry. The returned
378
- * processed raster is pre-output geometry and must not be used to infer crop
379
- * factor, field of view or physical photosite count.
378
+ * Resolution changes do not change the physical sensor geometry. The returned
379
+ * processed image size is before output, and must not be used to work out crop
380
+ * factor, field of view or the physical photosite count.
380
381
  */
381
382
  export function resolveCaptureMode(input) {
383
+ requireInputKeys(input, "resolveCaptureMode", ["nativeRaster", "profile", "modeId"]);
382
384
  validateNativeRaster(input.nativeRaster);
383
385
  if (typeof input.modeId !== "string" ||
384
386
  input.modeId.trim().length === 0) {
385
- throw new InvalidScientificInputError("modeId must be a non-empty string.");
387
+ throw new InvalidConfigurationError("modeId must be a non-empty string.");
386
388
  }
387
389
  const profile = parseCaptureModeProfile(input.profile);
388
390
  const mode = profile.modes.find((candidate) => candidate.modeId === input.modeId);
@@ -1 +1 @@
1
- {"version":3,"file":"capture-mode.js","sourceRoot":"","sources":["../../src/sensor/capture-mode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-mode.js","sourceRoot":"","sources":["../../src/sensor/capture-mode.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Capture modes: how a camera mode samples the sensor (for example full resolution, binning, or\n * multi-shot sensor shift) and what image size it produces.\n *\n * Sensor physics is never guessed from output resolution or a marketing mode name. A mode's parts\n * are independent: the sequence of frames, sampling within each frame, optional sensor shift between\n * frames, reconstruction stages, the processed image size and downstream dependencies. Changing\n * resolution never changes the physical sensor geometry.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceBackedFact,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport type {\n NativeImageRaster,\n RasterDimensions\n} from \"./sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type CaptureModeSampleCombinationDomain =\n | \"charge-domain\"\n | \"pre-conversion-analog\"\n | \"post-conversion-digital\";\n\nexport type CaptureModeReconstructionStage =\n | \"remosaic\"\n | \"pixel-shift-combination\"\n | \"multi-frame-computational-combination\";\n\nexport type CaptureModeDependency =\n | \"color-sampling-model\"\n | \"mode-specific-readout-timing\"\n | \"radiometric-calibration\"\n | \"inter-frame-registration\";\n\nexport interface CaptureModeSensorOffsetNativeSamples {\n /**\n * Horizontal sensor shift, in units of the native sample pitch. This says\n * nothing about the physical photodiode pitch.\n */\n x: number;\n /**\n * Vertical sensor shift, in units of the native sample pitch. This says\n * nothing about the physical photodiode pitch.\n */\n y: number;\n}\n\nexport type SourcedCaptureModeFact<T> = EvidenceBackedFact<T>;\n\nexport interface SingleFrameCaptureAcquisition {\n kind: \"single-frame\";\n}\n\nexport interface FixedMultiFrameCaptureAcquisition {\n kind: \"fixed-multi-frame\";\n frameCount: SourcedCaptureModeFact<number>;\n}\n\nexport interface VariableMultiFrameCaptureAcquisition {\n kind: \"variable-multi-frame\";\n /**\n * Evidence that the mode uses a variable number of frames, even when the\n * exact frame-count limits are not published.\n */\n evidence: readonly EvidenceProvenance[];\n minimumFrameCount?: SourcedCaptureModeFact<number>;\n maximumFrameCount?: SourcedCaptureModeFact<number>;\n}\n\nexport type CaptureModeAcquisition =\n | SingleFrameCaptureAcquisition\n | FixedMultiFrameCaptureAcquisition\n | VariableMultiFrameCaptureAcquisition;\n\nexport interface NativeEffectiveCaptureSampling {\n kind: \"native-effective-raster\";\n}\n\nexport interface GroupedNativeCaptureSampling {\n kind: \"grouped-native-samples\";\n groupWidthSamples: SourcedCaptureModeFact<number>;\n groupHeightSamples: SourcedCaptureModeFact<number>;\n /**\n * Omitted means \"unknown, not stated\". Do not guess where samples are\n * combined from the word \"binning\" or from the ratio of image sizes.\n */\n combinationDomain?: SourcedCaptureModeFact<CaptureModeSampleCombinationDomain>;\n}\n\nexport interface DeclaredEffectiveCaptureSampling {\n kind: \"declared-effective-raster\";\n /**\n * Sample grid per frame, for a mode whose relationship to the native grid\n * cannot safely be written as simple integer grouping.\n */\n raster: SourcedCaptureModeFact<RasterDimensions>;\n}\n\nexport type CaptureModePerFrameSampling =\n | NativeEffectiveCaptureSampling\n | GroupedNativeCaptureSampling\n | DeclaredEffectiveCaptureSampling;\n\nexport interface CaptureModeDefinition {\n modeId: string;\n /**\n * Evidence that this mode exists and for how it captures overall. Facts in\n * the fields below keep their own evidence where needed.\n */\n evidence: readonly EvidenceProvenance[];\n acquisition: CaptureModeAcquisition;\n perFrameSampling: CaptureModePerFrameSampling;\n /**\n * Optional ordered sequence of sensor shifts, for modes with a fixed number\n * of frames. The whole sequence is one evidence-backed fact, because\n * published documentation usually describes it as a unit.\n */\n interFrameSensorOffsetsNativeSamples?: SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n >;\n /**\n * Ordered reconstruction or combination stages. These labels only name the\n * stages for later reconstruction models; they implement no algorithm.\n */\n reconstructionStages?: readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[];\n /**\n * Image size produced by the capture mode and reconstruction, before the\n * final output crop or resampling.\n *\n * It does not change the physical sensor geometry or field of view.\n */\n processedImageRaster: SourcedCaptureModeFact<RasterDimensions>;\n /**\n * Explicit downstream scientific/model dependencies for this mode.\n */\n dependencies?: readonly CaptureModeDependency[];\n}\n\nexport interface CaptureModeProfile {\n schemaVersion: \"0.1.0\";\n modes: readonly CaptureModeDefinition[];\n}\n\nexport interface ResolveCaptureModeInput {\n nativeRaster: NativeImageRaster;\n profile: CaptureModeProfile;\n modeId: string;\n}\n\nexport interface ResolvedCaptureMode {\n modeId: string;\n modeEvidence: readonly EvidenceProvenance[];\n nativeRaster: NativeImageRaster;\n nativeRasterSemantic:\n \"effective-image-sampling-grid-not-photosite-count\";\n acquisition:\n | {\n kind: \"single-frame\";\n frameCount: 1;\n }\n | {\n kind: \"fixed-multi-frame\";\n frameCount: SourcedCaptureModeFact<number>;\n }\n | {\n kind: \"variable-multi-frame\";\n evidence: readonly EvidenceProvenance[];\n minimumFrameCount?: SourcedCaptureModeFact<number>;\n maximumFrameCount?: SourcedCaptureModeFact<number>;\n };\n perFrameSampling:\n | {\n kind: \"native-effective-raster\";\n raster: NativeImageRaster;\n }\n | {\n kind: \"grouped-native-samples\";\n raster: RasterDimensions;\n groupWidthSamples: SourcedCaptureModeFact<number>;\n groupHeightSamples: SourcedCaptureModeFact<number>;\n combinationDomain?: SourcedCaptureModeFact<CaptureModeSampleCombinationDomain>;\n }\n | {\n kind: \"declared-effective-raster\";\n raster: SourcedCaptureModeFact<RasterDimensions>;\n };\n interFrameSensorOffsetsNativeSamples?: SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n >;\n reconstructionStages: readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[];\n processedImageRaster: SourcedCaptureModeFact<RasterDimensions>;\n processedImageMegapixels: number;\n dependencies: readonly CaptureModeDependency[];\n physicalSensorGeometryMutation: false;\n photositeCountInference:\n \"not-permitted-from-native-or-processed-raster\";\n finalOutputRasterOwnership:\n \"downstream-capture-output-geometry\";\n}\n\nconst COMBINATION_DOMAINS =\n new Set<CaptureModeSampleCombinationDomain>([\n \"charge-domain\",\n \"pre-conversion-analog\",\n \"post-conversion-digital\"\n ]);\n\nconst RECONSTRUCTION_STAGES =\n new Set<CaptureModeReconstructionStage>([\n \"remosaic\",\n \"pixel-shift-combination\",\n \"multi-frame-computational-combination\"\n ]);\n\nconst DEPENDENCIES = new Set<CaptureModeDependency>([\n \"color-sampling-model\",\n \"mode-specific-readout-timing\",\n \"radiometric-calibration\",\n \"inter-frame-registration\"\n]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new InvalidConfigurationError(path + \" must be an object.\");\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveSafeIntegerValue(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a positive safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseIntegerFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<number> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value: requirePositiveSafeIntegerValue(\n record.value,\n path + \".value\"\n ),\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseRasterDimensions(\n value: unknown,\n path: string\n): RasterDimensions {\n const record = requireRecord(value, path, [\"pixelWidth\", \"pixelHeight\"]);\n const pixelWidth = requirePositiveSafeIntegerValue(\n record.pixelWidth,\n path + \".pixelWidth\"\n );\n const pixelHeight = requirePositiveSafeIntegerValue(\n record.pixelHeight,\n path + \".pixelHeight\"\n );\n const total = pixelWidth * pixelHeight;\n if (!Number.isSafeInteger(total)) {\n throw new InvalidConfigurationError(\n path + \" total sample count must be a safe integer.\"\n );\n }\n return { pixelWidth, pixelHeight };\n}\n\nfunction parseRasterFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<RasterDimensions> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value: parseRasterDimensions(\n record.value,\n path + \".value\"\n ),\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseCombinationDomainFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<CaptureModeSampleCombinationDomain> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n if (\n typeof record.value !== \"string\" ||\n !COMBINATION_DOMAINS.has(\n record.value as CaptureModeSampleCombinationDomain\n )\n ) {\n throw new InvalidConfigurationError(\n path + \".value is invalid.\"\n );\n }\n return {\n value: record.value as CaptureModeSampleCombinationDomain,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseAcquisition(\n value: unknown,\n path: string\n): CaptureModeAcquisition {\n const record = requireRecord(value, path, [\"kind\", \"frameCount\", \"minimumFrameCount\", \"maximumFrameCount\", \"evidence\"]);\n\n if (record.kind === \"single-frame\") {\n if (\n record.frameCount !== undefined ||\n record.minimumFrameCount !== undefined ||\n record.maximumFrameCount !== undefined ||\n record.evidence !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" single-frame acquisition must omit frame-count and evidence fields.\"\n );\n }\n return { kind: \"single-frame\" };\n }\n\n if (record.kind === \"fixed-multi-frame\") {\n if (\n record.minimumFrameCount !== undefined ||\n record.maximumFrameCount !== undefined ||\n record.evidence !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" fixed-multi-frame acquisition must use frameCount only.\"\n );\n }\n const frameCount = parseIntegerFact(\n record.frameCount,\n path + \".frameCount\"\n );\n if (frameCount.value < 2) {\n throw new InvalidConfigurationError(\n path +\n \".frameCount.value must be at least 2 for fixed-multi-frame acquisition.\"\n );\n }\n return {\n kind: \"fixed-multi-frame\",\n frameCount\n };\n }\n\n if (record.kind === \"variable-multi-frame\") {\n if (record.frameCount !== undefined) {\n throw new InvalidConfigurationError(\n path +\n \".frameCount must be omitted for variable-multi-frame acquisition.\"\n );\n }\n\n const evidence = parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n );\n const minimumFrameCount =\n record.minimumFrameCount === undefined\n ? undefined\n : parseIntegerFact(\n record.minimumFrameCount,\n path + \".minimumFrameCount\"\n );\n const maximumFrameCount =\n record.maximumFrameCount === undefined\n ? undefined\n : parseIntegerFact(\n record.maximumFrameCount,\n path + \".maximumFrameCount\"\n );\n\n if (\n minimumFrameCount !== undefined &&\n minimumFrameCount.value < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \".minimumFrameCount.value must be at least 2 for variable-multi-frame acquisition.\"\n );\n }\n if (\n maximumFrameCount !== undefined &&\n maximumFrameCount.value < 2\n ) {\n throw new InvalidConfigurationError(\n path +\n \".maximumFrameCount.value must be at least 2 for variable-multi-frame acquisition.\"\n );\n }\n if (\n minimumFrameCount !== undefined &&\n maximumFrameCount !== undefined &&\n minimumFrameCount.value > maximumFrameCount.value\n ) {\n throw new InvalidConfigurationError(\n path +\n \".minimumFrameCount.value must not exceed maximumFrameCount.value.\"\n );\n }\n\n return {\n kind: \"variable-multi-frame\",\n evidence,\n ...(minimumFrameCount === undefined\n ? {}\n : { minimumFrameCount }),\n ...(maximumFrameCount === undefined\n ? {}\n : { maximumFrameCount })\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parsePerFrameSampling(\n value: unknown,\n path: string\n): CaptureModePerFrameSampling {\n const record = requireRecord(value, path, [\"kind\", \"groupWidthSamples\", \"groupHeightSamples\", \"combinationDomain\", \"raster\"]);\n\n if (record.kind === \"native-effective-raster\") {\n if (\n record.groupWidthSamples !== undefined ||\n record.groupHeightSamples !== undefined ||\n record.combinationDomain !== undefined ||\n record.raster !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" native-effective-raster sampling must omit grouping/raster fields.\"\n );\n }\n return { kind: \"native-effective-raster\" };\n }\n\n if (record.kind === \"grouped-native-samples\") {\n if (record.raster !== undefined) {\n throw new InvalidConfigurationError(\n path +\n \".raster must be omitted for grouped-native-samples sampling.\"\n );\n }\n\n return {\n kind: \"grouped-native-samples\",\n groupWidthSamples: parseIntegerFact(\n record.groupWidthSamples,\n path + \".groupWidthSamples\"\n ),\n groupHeightSamples: parseIntegerFact(\n record.groupHeightSamples,\n path + \".groupHeightSamples\"\n ),\n ...(record.combinationDomain === undefined\n ? {}\n : {\n combinationDomain:\n parseCombinationDomainFact(\n record.combinationDomain,\n path + \".combinationDomain\"\n )\n })\n };\n }\n\n if (record.kind === \"declared-effective-raster\") {\n if (\n record.groupWidthSamples !== undefined ||\n record.groupHeightSamples !== undefined ||\n record.combinationDomain !== undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" declared-effective-raster sampling must omit grouping fields.\"\n );\n }\n\n return {\n kind: \"declared-effective-raster\",\n raster: parseRasterFact(\n record.raster,\n path + \".raster\"\n )\n };\n }\n\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseOffsetsFact(\n value: unknown,\n path: string\n): SourcedCaptureModeFact<\n readonly CaptureModeSensorOffsetNativeSamples[]\n> {\n const record = requireRecord(value, path, [\"value\", \"evidence\"]);\n if (\n !Array.isArray(record.value) ||\n record.value.length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \".value must be a non-empty array.\"\n );\n }\n\n const offsets = record.value.map((entry, index) => {\n const item = requireRecord(\n entry,\n path + \".value[\" + index + \"]\", [\"x\", \"y\"]\n );\n if (\n typeof item.x !== \"number\" ||\n !Number.isFinite(item.x) ||\n typeof item.y !== \"number\" ||\n !Number.isFinite(item.y)\n ) {\n throw new InvalidConfigurationError(\n path +\n \".value[\" +\n index +\n \"] x/y must be finite numbers.\"\n );\n }\n return {\n x: item.x,\n y: item.y\n };\n });\n\n return {\n value: offsets,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseReconstructionStages(\n value: unknown,\n path: string\n): readonly SourcedCaptureModeFact<CaptureModeReconstructionStage>[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n const stages = value.map((entry, index) => {\n const record = requireRecord(\n entry,\n path + \"[\" + index + \"]\", [\"value\", \"evidence\"]\n );\n if (\n typeof record.value !== \"string\" ||\n !RECONSTRUCTION_STAGES.has(\n record.value as CaptureModeReconstructionStage\n )\n ) {\n throw new InvalidConfigurationError(\n path + \"[\" + index + \"].value is invalid.\"\n );\n }\n return {\n value: record.value as CaptureModeReconstructionStage,\n evidence: parseEvidenceList(\n record.evidence,\n path + \"[\" + index + \"].evidence\"\n )\n };\n });\n\n const values = stages.map((stage) => stage.value);\n if (new Set(values).size !== values.length) {\n throw new InvalidConfigurationError(\n path + \" must not contain duplicate stages.\"\n );\n }\n\n return stages;\n}\n\nfunction parseDependencies(\n value: unknown,\n path: string\n): readonly CaptureModeDependency[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n const dependencies = value.map((entry, index) => {\n if (\n typeof entry !== \"string\" ||\n !DEPENDENCIES.has(entry as CaptureModeDependency)\n ) {\n throw new InvalidConfigurationError(\n path + \"[\" + index + \"] is invalid.\"\n );\n }\n return entry as CaptureModeDependency;\n });\n\n if (new Set(dependencies).size !== dependencies.length) {\n throw new InvalidConfigurationError(\n path + \" must not contain duplicates.\"\n );\n }\n\n return dependencies;\n}\n\nfunction parseModeDefinition(\n value: unknown,\n path: string\n): CaptureModeDefinition {\n const record = requireRecord(value, path, [\"modeId\", \"acquisition\", \"interFrameSensorOffsetsNativeSamples\", \"evidence\", \"perFrameSampling\", \"reconstructionStages\", \"processedImageRaster\", \"dependencies\"]);\n const modeId = requireNonEmptyString(\n record.modeId,\n path + \".modeId\"\n );\n const acquisition = parseAcquisition(\n record.acquisition,\n path + \".acquisition\"\n );\n const interFrameSensorOffsetsNativeSamples =\n record.interFrameSensorOffsetsNativeSamples === undefined\n ? undefined\n : parseOffsetsFact(\n record.interFrameSensorOffsetsNativeSamples,\n path + \".interFrameSensorOffsetsNativeSamples\"\n );\n\n if (\n interFrameSensorOffsetsNativeSamples !== undefined &&\n acquisition.kind !== \"fixed-multi-frame\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".interFrameSensorOffsetsNativeSamples is supported only for fixed-multi-frame acquisition.\"\n );\n }\n\n if (\n interFrameSensorOffsetsNativeSamples !== undefined &&\n acquisition.kind === \"fixed-multi-frame\" &&\n interFrameSensorOffsetsNativeSamples.value.length !==\n acquisition.frameCount.value\n ) {\n throw new InvalidConfigurationError(\n path +\n \".interFrameSensorOffsetsNativeSamples.value length must equal acquisition.frameCount.value.\"\n );\n }\n\n return {\n modeId,\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n ),\n acquisition,\n perFrameSampling: parsePerFrameSampling(\n record.perFrameSampling,\n path + \".perFrameSampling\"\n ),\n ...(interFrameSensorOffsetsNativeSamples === undefined\n ? {}\n : { interFrameSensorOffsetsNativeSamples }),\n reconstructionStages:\n record.reconstructionStages === undefined\n ? []\n : parseReconstructionStages(\n record.reconstructionStages,\n path + \".reconstructionStages\"\n ),\n processedImageRaster: parseRasterFact(\n record.processedImageRaster,\n path + \".processedImageRaster\"\n ),\n dependencies:\n record.dependencies === undefined\n ? []\n : parseDependencies(\n record.dependencies,\n path + \".dependencies\"\n )\n };\n}\n\n/**\n * Parses a capture-mode profile. Sensor physics is never guessed from output\n * resolution or marketing mode names.\n *\n * The profile's parts are independent of each other: the frame sequence,\n * sampling within each frame, optional sensor shift between frames,\n * reconstruction stages, the processed image size and downstream dependencies.\n */\nexport function parseCaptureModeProfile(\n value: unknown\n): CaptureModeProfile {\n const profile = requireRecord(value, \"captureModes\", [\"schemaVersion\", \"modes\"]);\n\n if (profile.schemaVersion !== \"0.1.0\") {\n throw new InvalidConfigurationError(\n 'captureModes.schemaVersion must be \"0.1.0\".'\n );\n }\n\n if (\n !Array.isArray(profile.modes) ||\n profile.modes.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"captureModes.modes must be a non-empty array.\"\n );\n }\n\n const modes = profile.modes.map((mode, index) =>\n parseModeDefinition(\n mode,\n \"captureModes.modes[\" + index + \"]\"\n )\n );\n const ids = modes.map((mode) => mode.modeId);\n if (new Set(ids).size !== ids.length) {\n throw new InvalidConfigurationError(\n \"captureModes.modes must not contain duplicate modeId values.\"\n );\n }\n\n return {\n schemaVersion: \"0.1.0\",\n modes\n };\n}\n\nfunction validateNativeRaster(\n raster: NativeImageRaster\n): void {\n requireInputObject(raster, \"raster input\");\n requirePositiveInteger(\n \"nativeRaster.pixelWidth\",\n raster.pixelWidth\n );\n requirePositiveInteger(\n \"nativeRaster.pixelHeight\",\n raster.pixelHeight\n );\n const total =\n raster.pixelWidth * raster.pixelHeight;\n if (!Number.isSafeInteger(total)) {\n throw new InvalidScientificInputError(\n \"nativeRaster total image-sample count must be a safe integer.\"\n );\n }\n}\n\nfunction resolvePerFrameSampling(\n sampling: CaptureModePerFrameSampling,\n nativeRaster: NativeImageRaster\n): ResolvedCaptureMode[\"perFrameSampling\"] {\n if (sampling.kind === \"native-effective-raster\") {\n return {\n kind: \"native-effective-raster\",\n raster: { ...nativeRaster }\n };\n }\n\n if (sampling.kind === \"declared-effective-raster\") {\n return {\n kind: \"declared-effective-raster\",\n raster: {\n value: { ...sampling.raster.value },\n evidence: sampling.raster.evidence\n }\n };\n }\n\n const groupWidth = sampling.groupWidthSamples.value;\n const groupHeight = sampling.groupHeightSamples.value;\n\n if (\n nativeRaster.pixelWidth % groupWidth !== 0 ||\n nativeRaster.pixelHeight % groupHeight !== 0\n ) {\n throw new InvalidScientificInputError(\n \"Grouped native sampling requires nativeRaster dimensions to be exactly divisible by the declared grouping factors.\"\n );\n }\n\n return {\n kind: \"grouped-native-samples\",\n raster: {\n pixelWidth:\n nativeRaster.pixelWidth / groupWidth,\n pixelHeight:\n nativeRaster.pixelHeight / groupHeight\n },\n groupWidthSamples: sampling.groupWidthSamples,\n groupHeightSamples: sampling.groupHeightSamples,\n ...(sampling.combinationDomain === undefined\n ? {}\n : {\n combinationDomain:\n sampling.combinationDomain\n })\n };\n}\n\n/**\n * Resolves one capture mode against the selected sensor's native pixel grid.\n *\n * Resolution changes do not change the physical sensor geometry. The returned\n * processed image size is before output, and must not be used to work out crop\n * factor, field of view or the physical photosite count.\n */\nexport function resolveCaptureMode(\n input: ResolveCaptureModeInput\n): ResolvedCaptureMode {\n requireInputKeys(input, \"resolveCaptureMode\", [\"nativeRaster\", \"profile\", \"modeId\"]);\n validateNativeRaster(input.nativeRaster);\n if (\n typeof input.modeId !== \"string\" ||\n input.modeId.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n \"modeId must be a non-empty string.\"\n );\n }\n const profile = parseCaptureModeProfile(input.profile);\n\n const mode = profile.modes.find(\n (candidate) => candidate.modeId === input.modeId\n );\n if (mode === undefined) {\n throw new InvalidScientificInputError(\n \"modeId does not exist in the supplied capture-mode profile.\"\n );\n }\n\n const processedTotal =\n mode.processedImageRaster.value.pixelWidth *\n mode.processedImageRaster.value.pixelHeight;\n if (!Number.isSafeInteger(processedTotal)) {\n throw new InvalidScientificInputError(\n \"processedImageRaster total image-sample count must be a safe integer.\"\n );\n }\n\n const acquisition: ResolvedCaptureMode[\"acquisition\"] =\n mode.acquisition.kind === \"single-frame\"\n ? {\n kind: \"single-frame\",\n frameCount: 1\n }\n : mode.acquisition.kind === \"fixed-multi-frame\"\n ? {\n kind: \"fixed-multi-frame\",\n frameCount: mode.acquisition.frameCount\n }\n : {\n kind: \"variable-multi-frame\",\n evidence: mode.acquisition.evidence,\n ...(mode.acquisition.minimumFrameCount === undefined\n ? {}\n : {\n minimumFrameCount:\n mode.acquisition.minimumFrameCount\n }),\n ...(mode.acquisition.maximumFrameCount === undefined\n ? {}\n : {\n maximumFrameCount:\n mode.acquisition.maximumFrameCount\n })\n };\n\n return {\n modeId: mode.modeId,\n modeEvidence: mode.evidence,\n nativeRaster: { ...input.nativeRaster },\n nativeRasterSemantic:\n \"effective-image-sampling-grid-not-photosite-count\",\n acquisition,\n perFrameSampling: resolvePerFrameSampling(\n mode.perFrameSampling,\n input.nativeRaster\n ),\n ...(mode.interFrameSensorOffsetsNativeSamples === undefined\n ? {}\n : {\n interFrameSensorOffsetsNativeSamples:\n mode.interFrameSensorOffsetsNativeSamples\n }),\n reconstructionStages:\n mode.reconstructionStages ?? [],\n processedImageRaster: {\n value: {\n ...mode.processedImageRaster.value\n },\n evidence: mode.processedImageRaster.evidence\n },\n processedImageMegapixels:\n processedTotal / 1_000_000,\n dependencies: mode.dependencies ?? [],\n physicalSensorGeometryMutation: false,\n photositeCountInference:\n \"not-permitted-from-native-or-processed-raster\",\n finalOutputRasterOwnership:\n \"downstream-capture-output-geometry\"\n };\n}\n"]}
@@ -5,8 +5,8 @@ export interface NativeColorSamplingSiteIndex {
5
5
  /**
6
6
  * Zero-based integer site index from the native sensor's left edge.
7
7
  *
8
- * This is an abstract color-sampling-site lattice index. It is not a
9
- * NativeImageRaster coordinate and does not assert one site = one physical
8
+ * It indexes the abstract grid of colour-sampling sites. It is not a
9
+ * NativeImageRaster coordinate and does not claim one site is one physical
10
10
  * photodiode.
11
11
  */
12
12
  x: number;
@@ -20,8 +20,8 @@ export interface NativeColorSamplingSiteIndex {
20
20
  export interface MonochromeColorSamplingLayout {
21
21
  kind: "monochrome";
22
22
  /**
23
- * Semantic measurement-channel identifier only. It is not a spectral
24
- * response curve, wavelength, colorimetric primary, or calibration.
23
+ * A name for the measured channel only. It is not a spectral response
24
+ * curve, wavelength, colour primary or calibration.
25
25
  */
26
26
  channelId: string;
27
27
  }
@@ -36,28 +36,28 @@ export interface PeriodicMosaicColorSamplingLayout {
36
36
  */
37
37
  repeatHeightSites: number;
38
38
  /**
39
- * Row-major semantic channel IDs for one repeating tile.
39
+ * Channel IDs for one repeating tile, in row-major order.
40
40
  *
41
41
  * Length must equal repeatWidthSites × repeatHeightSites.
42
42
  */
43
43
  siteChannelIds: readonly string[];
44
44
  /**
45
- * The repeat tile is anchored at native sensor sampling-site index (0, 0).
45
+ * The repeat tile starts at native sensor site (0, 0).
46
46
  *
47
- * Active crops and physical orientation must not silently reset this phase.
47
+ * Active-area crops and camera orientation must not silently reset this phase.
48
48
  */
49
49
  anchor: "native-sensor-top-left-site";
50
50
  }
51
51
  export interface LayeredColorSamplingLayout {
52
52
  kind: "layered";
53
53
  /**
54
- * Semantic layer/channel identifiers only. They do not define spectral
55
- * response, depth ordering, spatial sampling density, or registration.
54
+ * Names for the layers or channels only. They do not define spectral
55
+ * response, depth order, sampling density or alignment between layers.
56
56
  */
57
57
  layerChannelIds: readonly string[];
58
58
  /**
59
- * The first layered representation is deliberately structural only because
60
- * real layered sensors may use unequal per-layer spatial sampling.
59
+ * Layered layouts are described structurally only for now, because real
60
+ * layered sensors may sample each layer differently.
61
61
  */
62
62
  spatialSamplingRelationship: "not-resolved";
63
63
  }
@@ -66,9 +66,9 @@ export interface SensorColorSamplingProfile {
66
66
  schemaVersion: "0.1.0";
67
67
  profileId: string;
68
68
  /**
69
- * Evidence supporting this exact topology declaration.
69
+ * Evidence for this exact layout.
70
70
  *
71
- * Descriptive architecture-family metadata remains a separate contract.
71
+ * Descriptive sensor-architecture metadata is a separate type.
72
72
  */
73
73
  evidence: readonly EvidenceProvenance[];
74
74
  coordinateSystem: SensorColorSamplingProfileCoordinateSystem;
@@ -96,38 +96,35 @@ export interface ResolvedColorSamplingSite {
96
96
  repeatHeightSites: number;
97
97
  };
98
98
  /**
99
- * Explicit scientific boundaries for downstream consumers.
99
+ * States what this profile does not establish, for downstream code.
100
100
  */
101
101
  spectralResponseEstablished: false;
102
102
  nativeImageRasterBindingEstablished: false;
103
103
  physicalPhotodiodeBindingEstablished: false;
104
104
  }
105
105
  /**
106
- * Parses an exact color-sampling topology declaration without binding it to
107
- * NativeImageRaster, physical photodiodes, spectral response, or a
108
- * manufacturer-specific family enum.
106
+ * Parses an exact colour-sampling layout. It is not tied to NativeImageRaster,
107
+ * physical photodiodes, spectral response or a manufacturer's layout name.
109
108
  *
110
- * Periodic mosaics use an abstract native sensor color-sampling-site lattice
111
- * with zero-based integer indices, top-left origin, +X right and +Y down.
112
- * The repeat phase is anchored to the sensor lattice, so later active crops or
113
- * orientation transforms must preserve the original native site indices.
109
+ * Repeating mosaics use an abstract grid of native sensor sites with zero-based
110
+ * integer indices, origin at the top left, +X right and +Y down. The repeat
111
+ * pattern is fixed to this grid, so later crops or orientation changes must keep
112
+ * the original native site indices.
114
113
  *
115
- * Layered layouts are structural-only in this first contract because real
116
- * layered sensors may use unequal spatial sampling density/registration across
117
- * layers. No per-site layered resolver is exposed until that relationship is
118
- * modeled explicitly.
114
+ * Layered layouts are described structurally only, because real layered sensors
115
+ * may sample each layer at different densities or offsets. There is no per-site
116
+ * lookup for layered layouts until that is modelled explicitly.
119
117
  */
120
118
  export declare function parseSensorColorSamplingProfile(value: unknown): SensorColorSamplingProfile;
121
119
  /**
122
- * Resolves the semantic measurement-channel assignment at one abstract native
123
- * sensor color-sampling-site index for monochrome or periodic-mosaic layouts.
120
+ * Returns which channel one native site measures, for monochrome or repeating
121
+ * mosaic layouts.
124
122
  *
125
- * This API intentionally has no NativeImageRaster input. A later explicit
126
- * binding must establish how a selected capture mode's effective raster maps
127
- * to this color-sampling-site lattice before RAW/CFA sampling can be simulated.
123
+ * It deliberately takes no NativeImageRaster. A separate binding
124
+ * (capture-color-sampling-binding) must say how a capture mode's sample grid
125
+ * maps onto this site grid before RAW or CFA sampling can be simulated.
128
126
  *
129
- * Layered layouts fail closed because their per-layer spatial relationship is
130
- * not resolved by the first structural contract.
127
+ * Layered layouts are rejected, because how their layers line up spatially is
128
+ * not defined yet.
131
129
  */
132
130
  export declare function resolveColorSamplingSite(input: ResolveColorSamplingSiteInput): ResolvedColorSamplingSite;
133
- //# sourceMappingURL=color-sampling.d.ts.map
@@ -1,32 +1,28 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses an exact color-sampling topology declaration without binding it to NativeImageRaster,
5
- * physical photodiodes, spectral response, or a manufacturer-specific family enum. Periodic mosaics
6
- * use an abstract native sensor color-sampling-site lattice with zero-based integer indices, top-left
7
- * origin, +X right and +Y down. The repeat phase is anchored to the sensor lattice, so later active
8
- * crops or orientation transforms must preserve the original native site indices. Layered layouts are
9
- * structural-only in this first contract because real layered sensors may use unequal spatial sampling
10
- * density/registration across layers. No per-site layered resolver is exposed until that relationship
11
- * is modeled explicitly.
12
- * Resolves the semantic measurement-channel assignment at one abstract native sensor
13
- * color-sampling-site index for monochrome or periodic-mosaic layouts. This API intentionally has no
14
- * NativeImageRaster input. A later explicit binding must establish how a selected capture mode's
15
- * effective raster maps to this color-sampling-site lattice before RAW/CFA sampling can be simulated.
16
- * Layered layouts fail closed because their per-layer spatial relationship is not resolved by the
17
- * first structural contract.
3
+ * Colour-sampling layout: which colour channel each sensor site measures. Examples are monochrome,
4
+ * a repeating mosaic such as a Bayer CFA (colour filter array), or a layered (stacked) sensor.
5
+ *
6
+ * Sites form an abstract grid with zero-based integer indices, origin at the top left, +X right and
7
+ * +Y down. A site is not necessarily one physical photodiode. The mosaic's repeat pattern is fixed to
8
+ * this grid, so later crops or orientation changes must keep the original native site indices.
9
+ * Layered layouts are described structurally only, because real layered sensors may sample each layer
10
+ * at different densities or offsets.
18
11
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
19
12
  * limits.
20
13
  */
21
14
  import { InvalidConfigurationError } from "../core/configuration-error.js";
22
15
  import { parseEvidenceList } from "../core/evidence-provenance.js";
23
16
  import { InvalidScientificInputError } from "../core/validation.js";
24
- function requireRecord(value, path) {
17
+ import { requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
18
+ function requireRecord(value, path, allowedKeys) {
25
19
  if (typeof value !== "object" ||
26
20
  value === null ||
27
21
  Array.isArray(value)) {
28
22
  throw new InvalidConfigurationError(path + " must be an object.");
29
23
  }
24
+ if (allowedKeys !== null)
25
+ rejectUnknownFields(value, allowedKeys, path);
30
26
  return value;
31
27
  }
32
28
  function requireNonEmptyString(value, path) {
@@ -61,7 +57,7 @@ function parseChannelIds(value, path, options) {
61
57
  return ids;
62
58
  }
63
59
  function parseLayout(value, path) {
64
- const record = requireRecord(value, path);
60
+ const record = requireRecord(value, path, ["kind", "repeatWidthSites", "repeatHeightSites", "siteChannelIds", "anchor", "layerChannelIds", "spatialSamplingRelationship", "channelId"]);
65
61
  if (record.kind === "monochrome") {
66
62
  if (record.repeatWidthSites !== undefined ||
67
63
  record.repeatHeightSites !== undefined ||
@@ -131,22 +127,20 @@ function parseLayout(value, path) {
131
127
  throw new InvalidConfigurationError(path + ".kind is invalid.");
132
128
  }
133
129
  /**
134
- * Parses an exact color-sampling topology declaration without binding it to
135
- * NativeImageRaster, physical photodiodes, spectral response, or a
136
- * manufacturer-specific family enum.
130
+ * Parses an exact colour-sampling layout. It is not tied to NativeImageRaster,
131
+ * physical photodiodes, spectral response or a manufacturer's layout name.
137
132
  *
138
- * Periodic mosaics use an abstract native sensor color-sampling-site lattice
139
- * with zero-based integer indices, top-left origin, +X right and +Y down.
140
- * The repeat phase is anchored to the sensor lattice, so later active crops or
141
- * orientation transforms must preserve the original native site indices.
133
+ * Repeating mosaics use an abstract grid of native sensor sites with zero-based
134
+ * integer indices, origin at the top left, +X right and +Y down. The repeat
135
+ * pattern is fixed to this grid, so later crops or orientation changes must keep
136
+ * the original native site indices.
142
137
  *
143
- * Layered layouts are structural-only in this first contract because real
144
- * layered sensors may use unequal spatial sampling density/registration across
145
- * layers. No per-site layered resolver is exposed until that relationship is
146
- * modeled explicitly.
138
+ * Layered layouts are described structurally only, because real layered sensors
139
+ * may sample each layer at different densities or offsets. There is no per-site
140
+ * lookup for layered layouts until that is modelled explicitly.
147
141
  */
148
142
  export function parseSensorColorSamplingProfile(value) {
149
- const profile = requireRecord(value, "sensorColorSampling");
143
+ const profile = requireRecord(value, "sensorColorSampling", ["schemaVersion", "layout", "coordinateSystem", "profileId", "evidence"]);
150
144
  if (profile.schemaVersion !== "0.1.0") {
151
145
  throw new InvalidConfigurationError('sensorColorSampling.schemaVersion must be "0.1.0".');
152
146
  }
@@ -176,21 +170,22 @@ function requireNativeSiteIndex(value, path) {
176
170
  return value;
177
171
  }
178
172
  /**
179
- * Resolves the semantic measurement-channel assignment at one abstract native
180
- * sensor color-sampling-site index for monochrome or periodic-mosaic layouts.
173
+ * Returns which channel one native site measures, for monochrome or repeating
174
+ * mosaic layouts.
181
175
  *
182
- * This API intentionally has no NativeImageRaster input. A later explicit
183
- * binding must establish how a selected capture mode's effective raster maps
184
- * to this color-sampling-site lattice before RAW/CFA sampling can be simulated.
176
+ * It deliberately takes no NativeImageRaster. A separate binding
177
+ * (capture-color-sampling-binding) must say how a capture mode's sample grid
178
+ * maps onto this site grid before RAW or CFA sampling can be simulated.
185
179
  *
186
- * Layered layouts fail closed because their per-layer spatial relationship is
187
- * not resolved by the first structural contract.
180
+ * Layered layouts are rejected, because how their layers line up spatially is
181
+ * not defined yet.
188
182
  */
189
183
  export function resolveColorSamplingSite(input) {
184
+ requireInputKeys(input, "resolveColorSamplingSite", ["profile", "site"]);
190
185
  const profile = parseSensorColorSamplingProfile(input.profile);
191
186
  if (typeof input.site !== "object" ||
192
187
  input.site === null) {
193
- throw new InvalidScientificInputError("site must be an object.");
188
+ throw new InvalidConfigurationError("site must be an object.");
194
189
  }
195
190
  const x = requireNativeSiteIndex(input.site.x, "site.x");
196
191
  const y = requireNativeSiteIndex(input.site.y, "site.y");