@photivra/engine 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/stabilization/system.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/stabilization/system.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Generic image stabilization: profiles, disturbance trajectories, the stabilized rotation and its\n * effect on capture timing samples.\n *\n * The parsers validate untrusted input and return the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected.\n *\n * The generic stabilizer takes a declared angular disturbance (camera shake) and applies a per-axis\n * response, latency, travel limits and a panning policy. The leftover (residual) motion feeds the\n * existing temporal mapping. No commercial IBIS (in-body) or OIS (optical) calibration is supplied,\n * no arbitrary \"stops\" rating is used, and body/lens coordination is never inferred.\n * @see docs/STABILIZATION.md for the equations, units, coordinate conventions, known blockers and\n * support limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\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 RasterPoint\n} from \"../output/capture-geometry.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport { requireInputKeys, requireInputObject, rejectUnknownFields, rejectUnknownVariantFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const STABILIZATION_SYSTEM_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\nexport const STABILIZATION_DISTURBANCE_TRAJECTORY_VERSION =\n \"0.1.0\" as const;\n\nexport type StabilizationRotationAxis =\n | \"pitch\"\n | \"yaw\"\n | \"roll\";\n\nexport type PhysicalStabilizationArchitecture =\n | \"off\"\n | \"sensor-shift\"\n | \"lens-optical\"\n | \"coordinated-physical\";\n\nexport type StabilizationCaptureKind =\n | \"still\"\n | \"video\";\n\nexport interface StabilizationAngularStateRad {\n pitch: number;\n yaw: number;\n roll: number;\n}\n\nexport interface StabilizationDisturbanceSample {\n timeSecondsFromCaptureReference:\n number;\n angularDisplacementRad:\n StabilizationAngularStateRad;\n}\n\nexport interface StabilizationDisturbanceTrajectory {\n version:\n typeof STABILIZATION_DISTURBANCE_TRAJECTORY_VERSION;\n trajectoryId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n samples:\n readonly StabilizationDisturbanceSample[];\n initialAngularDisplacementIsZero:\n true;\n cameraTranslationIncluded:\n false;\n subjectMotionIncluded:\n false;\n supportStateEncoded:\n false;\n evidence: readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface StabilizationAxisResponseProfile {\n axis: StabilizationRotationAxis;\n correctionGain:\n EvidenceBackedFact<number>;\n latencySeconds:\n EvidenceBackedFact<number>;\n maximumCorrectionAngleRad:\n EvidenceBackedFact<number>;\n}\n\nexport type StabilizationPanningPolicy =\n | {\n kind: \"none\";\n }\n | {\n kind:\n \"declared-axis-bypass\";\n axis:\n StabilizationRotationAxis;\n evidence:\n readonly EvidenceProvenance[];\n };\n\nexport interface StabilizationCoordinatedAllocation {\n bodyFraction: number;\n lensFraction: number;\n evidence: readonly EvidenceProvenance[];\n totalCorrectionAppliedOnce:\n true;\n}\n\nexport interface StabilizationSystemProfile {\n schemaVersion:\n typeof STABILIZATION_SYSTEM_PROFILE_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n profileKind:\n \"generic-synthetic\";\n scientificStatus:\n \"approximation\";\n architecture:\n PhysicalStabilizationArchitecture;\n captureKind:\n StabilizationCaptureKind;\n axisResponses:\n readonly StabilizationAxisResponseProfile[];\n panningPolicy:\n StabilizationPanningPolicy;\n coordinatedAllocation?:\n StabilizationCoordinatedAllocation;\n controlTransientModeled: false;\n spontaneousDriftModeled: false;\n cameraTranslationCorrectionModeled:\n false;\n digitalStabilizationIncluded:\n false;\n supportPolicyIncluded: false;\n stopRatingUsedAsDynamicResponse:\n false;\n evidence: readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface CalculateStabilizedRotationTrajectoryInput {\n disturbance:\n StabilizationDisturbanceTrajectory;\n profile:\n StabilizationSystemProfile;\n captureKind:\n StabilizationCaptureKind;\n}\n\nexport interface StabilizationAxisResolution {\n axis: StabilizationRotationAxis;\n disturbanceAngleRad: number;\n delayedMeasuredAngleRad: number;\n requestedCorrectionAngleRad:\n number;\n appliedCorrectionAngleRad:\n number;\n residualAngleRad: number;\n correctionGain: number;\n latencySeconds: number;\n maximumCorrectionAngleRad:\n number;\n bypassedForDeclaredPan:\n boolean;\n correctionLimitReached:\n boolean;\n}\n\nexport interface StabilizedRotationSample {\n timeSecondsFromCaptureReference:\n number;\n disturbanceAngularDisplacementRad:\n StabilizationAngularStateRad;\n appliedCorrectionAngularDisplacementRad:\n StabilizationAngularStateRad;\n residualAngularDisplacementRad:\n StabilizationAngularStateRad;\n axes:\n readonly StabilizationAxisResolution[];\n}\n\nexport interface StabilizedRotationTrajectory {\n profileId: string;\n profileVersion: string;\n trajectoryId: string;\n architecture:\n PhysicalStabilizationArchitecture;\n captureKind:\n StabilizationCaptureKind;\n timeReference:\n \"first-opening-boundary-phase\";\n samples:\n readonly StabilizedRotationSample[];\n correctionModel:\n \"delayed-linear-image-equivalent-angular-response\";\n supportStateConsumed: false;\n translationCorrectionModeled:\n false;\n digitalStabilizationApplied:\n false;\n digitalStabilizationOwnedBy:\n \"downstream-geometric-correction-composition\";\n coordinatedCorrectionDoubleCounted:\n false;\n zeroDisturbanceCanCreateMotion:\n false;\n}\n\nexport interface CalculateStabilizedCaptureTemporalSamplesInput {\n disturbance:\n StabilizationDisturbanceTrajectory;\n profile:\n StabilizationSystemProfile;\n captureKind:\n StabilizationCaptureKind;\n timing:\n ResolvedCaptureModeTiming;\n samplePointsNative:\n readonly RasterPoint[];\n temporalSampleCount: number;\n}\n\nexport interface StabilizedCaptureTemporalNode {\n temporalSampleIndex: number;\n localExposurePhase: number;\n captureTimeSecondsFromReference:\n number;\n normalizedTimeWeight: number;\n timeMeasureSeconds: number;\n stabilization:\n StabilizedRotationSample;\n}\n\nexport interface StabilizedCaptureTemporalPoint {\n destinationPointNative:\n RasterPoint;\n localExposureWindow: {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n nodes:\n readonly StabilizedCaptureTemporalNode[];\n}\n\nexport interface StabilizedCaptureTemporalSamples {\n profileId: string;\n trajectoryId: string;\n captureModeId: string;\n timingProfileId: string;\n captureKind:\n StabilizationCaptureKind;\n architecture:\n PhysicalStabilizationArchitecture;\n timeReference:\n \"first-opening-boundary-phase\";\n quadratureScheme:\n \"uniform-midpoint\";\n temporalSampleCount: number;\n points:\n readonly StabilizedCaptureTemporalPoint[];\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n supportStateConsumed: false;\n translationCorrectionModeled:\n false;\n digitalStabilizationApplied:\n false;\n}\n\nconst AXES =\n new Set<StabilizationRotationAxis>([\n \"pitch\",\n \"yaw\",\n \"roll\"\n ]);\n\nconst ARCHITECTURES =\n new Set<PhysicalStabilizationArchitecture>([\n \"off\",\n \"sensor-shift\",\n \"lens-optical\",\n \"coordinated-physical\"\n ]);\n\nconst CAPTURE_KINDS =\n new Set<StabilizationCaptureKind>([\n \"still\",\n \"video\"\n ]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed < 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed <= 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than zero.\"\n );\n }\n return parsed;\n}\n\nfunction requireFraction(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (\n parsed < 0 ||\n parsed > 1\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must lie from zero through one.\"\n );\n }\n return parsed;\n}\n\nfunction parseLimitations(\n value: unknown,\n path: string\n): readonly string[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n const parsed =\n value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path +\n \"[\" +\n index +\n \"]\"\n )\n );\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\nfunction parseFractionFact(\n value: unknown,\n path: string\n): EvidenceBackedFact<number> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n requireFraction(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseNonNegativeFact(\n value: unknown,\n path: string\n): EvidenceBackedFact<number> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n requireNonNegativeFinite(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parsePositiveFact(\n value: unknown,\n path: string\n): EvidenceBackedFact<number> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n requirePositiveFinite(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseAxis(\n value: unknown,\n path: string\n): StabilizationRotationAxis {\n if (\n typeof value !== \"string\" ||\n !AXES.has(\n value as\n StabilizationRotationAxis\n )\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value as\n StabilizationRotationAxis;\n}\n\nfunction parseAxisResponse(\n value: unknown,\n path: string\n): StabilizationAxisResponseProfile {\n const record =\n requireRecord(value, path, [\"axis\", \"correctionGain\", \"latencySeconds\", \"maximumCorrectionAngleRad\"]);\n return {\n axis:\n parseAxis(\n record.axis,\n path + \".axis\"\n ),\n correctionGain:\n parseFractionFact(\n record.correctionGain,\n path +\n \".correctionGain\"\n ),\n latencySeconds:\n parseNonNegativeFact(\n record.latencySeconds,\n path +\n \".latencySeconds\"\n ),\n maximumCorrectionAngleRad:\n parsePositiveFact(\n record\n .maximumCorrectionAngleRad,\n path +\n \".maximumCorrectionAngleRad\"\n )\n };\n}\n\nfunction parsePanningPolicy(\n value: unknown,\n path: string\n): StabilizationPanningPolicy {\n const record =\n requireRecord(value, path, null);\n rejectUnknownVariantFields(record, \"kind\", { none: [\"kind\"], \"declared-axis-bypass\": [\"kind\", \"axis\", \"evidence\"] }, path);\n if (record.kind === \"none\") {\n return {\n kind: \"none\"\n };\n }\n if (\n record.kind ===\n \"declared-axis-bypass\"\n ) {\n return {\n kind:\n \"declared-axis-bypass\",\n axis:\n parseAxis(\n record.axis,\n path + \".axis\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n }\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseCoordinatedAllocation(\n value: unknown,\n path: string\n): StabilizationCoordinatedAllocation {\n const record =\n requireRecord(value, path, [\"totalCorrectionAppliedOnce\", \"bodyFraction\", \"lensFraction\", \"evidence\"]);\n if (\n record\n .totalCorrectionAppliedOnce !==\n true\n ) {\n throw new InvalidConfigurationError(\n path +\n \".totalCorrectionAppliedOnce must be true.\"\n );\n }\n const bodyFraction =\n requireFraction(\n record.bodyFraction,\n path + \".bodyFraction\"\n );\n const lensFraction =\n requireFraction(\n record.lensFraction,\n path + \".lensFraction\"\n );\n if (\n Math.abs(\n bodyFraction +\n lensFraction -\n 1\n ) >\n 1e-12\n ) {\n throw new InvalidConfigurationError(\n path +\n \" bodyFraction + lensFraction must equal one.\"\n );\n }\n return {\n bodyFraction,\n lensFraction,\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n ),\n totalCorrectionAppliedOnce:\n true\n };\n}\n\n/**\n * Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected here.\n *\n * The generic stabilizer takes a declared angular disturbance (camera shake) and applies a per-axis\n * response, latency, travel limits and a panning policy. The leftover (residual) motion feeds the\n * existing temporal mapping. No commercial IBIS (in-body) or OIS (optical) calibration is supplied,\n * no arbitrary \"stops\" rating is used, and body/lens coordination is never inferred.\n * @param value - unknown. Untrusted input; TypeScript types alone are not validation.\n * @returns StabilizationSystemProfile. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function parseStabilizationSystemProfile(\n value: unknown\n): StabilizationSystemProfile {\n const record =\n requireRecord(\n value,\n \"stabilizationSystemProfile\", [\"schemaVersion\", \"profileKind\", \"scientificStatus\", \"architecture\", \"captureKind\", \"axisResponses\", \"panningPolicy\", \"coordinatedAllocation\", \"profileId\", \"profileVersion\", \"evidence\", \"limitations\", \"controlTransientModeled\", \"spontaneousDriftModeled\", \"cameraTranslationCorrectionModeled\", \"digitalStabilizationIncluded\", \"supportPolicyIncluded\", \"stopRatingUsedAsDynamicResponse\"]\n );\n if (\n record.schemaVersion !==\n STABILIZATION_SYSTEM_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'stabilizationSystemProfile.schemaVersion must be \"' +\n STABILIZATION_SYSTEM_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.profileKind !==\n \"generic-synthetic\" ||\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'stabilizationSystemProfile schema 0.1.0 requires profileKind \"generic-synthetic\" and scientificStatus \"approximation\".'\n );\n }\n if (\n typeof record.architecture !==\n \"string\" ||\n !ARCHITECTURES.has(\n record.architecture as\n PhysicalStabilizationArchitecture\n )\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationSystemProfile.architecture is invalid.\"\n );\n }\n if (\n typeof record.captureKind !==\n \"string\" ||\n !CAPTURE_KINDS.has(\n record.captureKind as\n StabilizationCaptureKind\n )\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationSystemProfile.captureKind is invalid.\"\n );\n }\n\n for (\n const key of [\n \"controlTransientModeled\",\n \"spontaneousDriftModeled\",\n \"cameraTranslationCorrectionModeled\",\n \"digitalStabilizationIncluded\",\n \"supportPolicyIncluded\",\n \"stopRatingUsedAsDynamicResponse\"\n ] as const\n ) {\n if (record[key] !== false) {\n throw new InvalidConfigurationError(\n \"stabilizationSystemProfile.\" +\n key +\n \" must be false in schema 0.1.0.\"\n );\n }\n }\n\n if (\n !Array.isArray(\n record.axisResponses\n )\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationSystemProfile.axisResponses must be an array.\"\n );\n }\n const axisResponses =\n record.axisResponses.map(\n (entry, index) =>\n parseAxisResponse(\n entry,\n \"stabilizationSystemProfile.axisResponses[\" +\n index +\n \"]\"\n )\n );\n const axes =\n axisResponses.map(\n (entry) =>\n entry.axis\n );\n if (\n new Set(axes).size !==\n axes.length\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationSystemProfile.axisResponses must not contain duplicate axes.\"\n );\n }\n\n const architecture =\n record.architecture as\n PhysicalStabilizationArchitecture;\n if (\n architecture === \"off\" &&\n axisResponses.length !== 0\n ) {\n throw new InvalidConfigurationError(\n \"An off stabilization profile must not declare axis responses.\"\n );\n }\n if (\n architecture !== \"off\" &&\n axisResponses.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"An enabled physical stabilization profile must declare at least one axis response.\"\n );\n }\n\n const panningPolicy =\n parsePanningPolicy(\n record.panningPolicy,\n \"stabilizationSystemProfile.panningPolicy\"\n );\n if (\n architecture === \"off\" &&\n panningPolicy.kind !== \"none\"\n ) {\n throw new InvalidConfigurationError(\n \"An off stabilization profile must use panningPolicy.kind \\\"none\\\".\"\n );\n }\n if (\n panningPolicy.kind ===\n \"declared-axis-bypass\" &&\n !axisResponses.some(\n (entry) =>\n entry.axis ===\n panningPolicy.axis\n )\n ) {\n throw new InvalidConfigurationError(\n \"Declared panning bypass axis must exist in axisResponses.\"\n );\n }\n\n const coordinatedAllocation =\n record.coordinatedAllocation ===\n undefined\n ? undefined\n : parseCoordinatedAllocation(\n record.coordinatedAllocation,\n \"stabilizationSystemProfile.coordinatedAllocation\"\n );\n if (\n architecture ===\n \"coordinated-physical\" &&\n coordinatedAllocation ===\n undefined\n ) {\n throw new InvalidConfigurationError(\n \"Coordinated physical stabilization requires an explicit body/lens correction allocation.\"\n );\n }\n if (\n architecture !==\n \"coordinated-physical\" &&\n coordinatedAllocation !==\n undefined\n ) {\n throw new InvalidConfigurationError(\n \"Only coordinated physical stabilization may declare coordinatedAllocation.\"\n );\n }\n\n return {\n schemaVersion:\n STABILIZATION_SYSTEM_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"stabilizationSystemProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"stabilizationSystemProfile.profileVersion\"\n ),\n profileKind:\n \"generic-synthetic\",\n scientificStatus:\n \"approximation\",\n architecture,\n captureKind:\n record.captureKind as\n StabilizationCaptureKind,\n axisResponses,\n panningPolicy,\n ...(coordinatedAllocation ===\n undefined\n ? {}\n : {\n coordinatedAllocation\n }),\n controlTransientModeled:\n false,\n spontaneousDriftModeled:\n false,\n cameraTranslationCorrectionModeled:\n false,\n digitalStabilizationIncluded:\n false,\n supportPolicyIncluded:\n false,\n stopRatingUsedAsDynamicResponse:\n false,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"stabilizationSystemProfile.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"stabilizationSystemProfile.limitations\"\n )\n };\n}\n\nfunction parseAngularState(\n value: unknown,\n path: string\n): StabilizationAngularStateRad {\n const record =\n requireRecord(value, path, [\"pitch\", \"yaw\", \"roll\"]);\n return {\n pitch:\n requireFinite(\n record.pitch,\n path + \".pitch\"\n ),\n yaw:\n requireFinite(\n record.yaw,\n path + \".yaw\"\n ),\n roll:\n requireFinite(\n record.roll,\n path + \".roll\"\n )\n };\n}\n\n/**\n * Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected here.\n *\n * The generic stabilizer takes a declared angular disturbance (camera shake) and applies a per-axis\n * response, latency, travel limits and a panning policy. The leftover (residual) motion feeds the\n * existing temporal mapping. No commercial IBIS (in-body) or OIS (optical) calibration is supplied,\n * no arbitrary \"stops\" rating is used, and body/lens coordination is never inferred.\n * @param value - unknown. Untrusted input; TypeScript types alone are not validation.\n * @returns StabilizationDisturbanceTrajectory. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function parseStabilizationDisturbanceTrajectory(\n value: unknown\n): StabilizationDisturbanceTrajectory {\n const record =\n requireRecord(\n value,\n \"stabilizationDisturbanceTrajectory\", [\"version\", \"timeReference\", \"initialAngularDisplacementIsZero\", \"cameraTranslationIncluded\", \"subjectMotionIncluded\", \"supportStateEncoded\", \"samples\", \"trajectoryId\", \"evidence\", \"limitations\"]\n );\n if (\n record.version !==\n STABILIZATION_DISTURBANCE_TRAJECTORY_VERSION ||\n record.timeReference !==\n \"first-opening-boundary-phase\" ||\n record\n .initialAngularDisplacementIsZero !==\n true ||\n record\n .cameraTranslationIncluded !==\n false ||\n record.subjectMotionIncluded !==\n false ||\n record.supportStateEncoded !==\n false\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationDisturbanceTrajectory metadata is invalid for version 0.1.0.\"\n );\n }\n if (\n !Array.isArray(record.samples) ||\n record.samples.length < 2\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationDisturbanceTrajectory.samples must contain at least two samples.\"\n );\n }\n\n let previousTime =\n Number.NEGATIVE_INFINITY;\n const samples =\n record.samples.map(\n (entry, index) => {\n const path =\n \"stabilizationDisturbanceTrajectory.samples[\" +\n index +\n \"]\";\n const sample =\n requireRecord(\n entry,\n path, [\"timeSecondsFromCaptureReference\", \"angularDisplacementRad\"]\n );\n const time =\n requireNonNegativeFinite(\n sample\n .timeSecondsFromCaptureReference,\n path +\n \".timeSecondsFromCaptureReference\"\n );\n if (time <= previousTime) {\n throw new InvalidConfigurationError(\n \"stabilizationDisturbanceTrajectory sample times must be strictly increasing.\"\n );\n }\n previousTime = time;\n return {\n timeSecondsFromCaptureReference:\n time,\n angularDisplacementRad:\n parseAngularState(\n sample\n .angularDisplacementRad,\n path +\n \".angularDisplacementRad\"\n )\n };\n }\n );\n\n const first =\n samples[0]!;\n if (\n first\n .timeSecondsFromCaptureReference !==\n 0 ||\n first\n .angularDisplacementRad\n .pitch !== 0 ||\n first\n .angularDisplacementRad\n .yaw !== 0 ||\n first\n .angularDisplacementRad\n .roll !== 0\n ) {\n throw new InvalidConfigurationError(\n \"stabilizationDisturbanceTrajectory must begin at capture-reference t=0 with zero angular displacement.\"\n );\n }\n\n return {\n version:\n STABILIZATION_DISTURBANCE_TRAJECTORY_VERSION,\n trajectoryId:\n requireNonEmptyString(\n record.trajectoryId,\n \"stabilizationDisturbanceTrajectory.trajectoryId\"\n ),\n timeReference:\n \"first-opening-boundary-phase\",\n samples,\n initialAngularDisplacementIsZero:\n true,\n cameraTranslationIncluded:\n false,\n subjectMotionIncluded:\n false,\n supportStateEncoded:\n false,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"stabilizationDisturbanceTrajectory.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"stabilizationDisturbanceTrajectory.limitations\"\n )\n };\n}\n\n/**\n * Lookup index over a parsed disturbance trajectory, built for evaluation. Support times are copied\n * once into a Float64Array (exact IEEE-754 values). Each lookup is then an O(log n) binary search\n * instead of an O(n) scan. The interpolation arithmetic is unchanged.\n */\ninterface DisturbanceIndex {\n readonly samples:\n StabilizationDisturbanceTrajectory[\"samples\"];\n readonly times: Float64Array;\n}\n\nfunction indexDisturbance(\n trajectory:\n StabilizationDisturbanceTrajectory\n): DisturbanceIndex {\n const times =\n new Float64Array(\n trajectory.samples.length\n );\n for (\n let index = 0;\n index < times.length;\n index += 1\n ) {\n times[index] =\n trajectory.samples[index]!\n .timeSecondsFromCaptureReference;\n }\n return {\n samples:\n trajectory.samples,\n times\n };\n}\n\n/**\n * Returns the left index of the support segment used for `timeSeconds`. Returns -1 for the final support\n * time, which uses its stored value. The chosen segment is exactly the one a first-match linear scan\n * would pick: the smallest `i` with `t[i] <= timeSeconds <= t[i + 1]`. Support times strictly\n * increase, so a time that equals an interior support time uses the segment on its left.\n */\nfunction locateDisturbanceSegment(\n disturbance: DisturbanceIndex,\n timeSeconds: number\n): number {\n const times =\n disturbance.times;\n const lastIndex =\n times.length - 1;\n if (\n timeSeconds < times[0]! ||\n timeSeconds > times[lastIndex]!\n ) {\n throw new InvalidScientificInputError(\n \"Requested stabilization evaluation time lies outside the disturbance trajectory support.\"\n );\n }\n\n if (\n timeSeconds ===\n times[lastIndex]!\n ) {\n return -1;\n }\n\n // Lower bound: first index whose support time is >= timeSeconds.\n let low = 0;\n let high = lastIndex;\n while (low < high) {\n const middle =\n (low + high) >>> 1;\n if (\n times[middle]! >=\n timeSeconds\n ) {\n high = middle;\n } else {\n low = middle + 1;\n }\n }\n const index =\n low === 0 ? 0 : low - 1;\n if (\n !(\n timeSeconds >=\n times[index]! &&\n timeSeconds <=\n times[index + 1]!\n )\n ) {\n throw new InvalidScientificInputError(\n \"Disturbance trajectory interpolation failed.\"\n );\n }\n return index;\n}\n\nfunction interpolateDisturbanceSegment(\n disturbance: DisturbanceIndex,\n segmentIndex: number,\n timeSeconds: number,\n axis:\n StabilizationRotationAxis\n): number {\n const samples =\n disturbance.samples;\n if (segmentIndex < 0) {\n return samples[\n samples.length - 1\n ]!\n .angularDisplacementRad[\n axis\n ];\n }\n const left =\n samples[segmentIndex]!;\n const right =\n samples[\n segmentIndex + 1\n ]!;\n const duration =\n right\n .timeSecondsFromCaptureReference -\n left\n .timeSecondsFromCaptureReference;\n const phase =\n duration === 0\n ? 0\n : (\n timeSeconds -\n left\n .timeSecondsFromCaptureReference\n ) /\n duration;\n const a =\n left\n .angularDisplacementRad[\n axis\n ];\n const b =\n right\n .angularDisplacementRad[\n axis\n ];\n return (\n a +\n (b - a) * phase\n );\n}\n\nfunction interpolateAxis(\n disturbance: DisturbanceIndex,\n timeSeconds: number,\n axis:\n StabilizationRotationAxis\n): number {\n return interpolateDisturbanceSegment(\n disturbance,\n locateDisturbanceSegment(\n disturbance,\n timeSeconds\n ),\n timeSeconds,\n axis\n );\n}\n\nfunction axisValue(\n state:\n StabilizationAngularStateRad,\n axis:\n StabilizationRotationAxis\n): number {\n return state[axis];\n}\n\nfunction setAxisValue(\n state:\n StabilizationAngularStateRad,\n axis:\n StabilizationRotationAxis,\n value: number\n): void {\n state[axis] = value;\n}\n\nfunction clampSymmetric(\n value: number,\n limit: number\n): number {\n return Math.max(\n -limit,\n Math.min(limit, value)\n );\n}\n\ntype AxisResponseIndex = ReadonlyMap<\n StabilizationRotationAxis,\n StabilizationSystemProfile[\"axisResponses\"][number]\n>;\n\n/** Built once per calculation. Later entries win, as with a per-evaluation Map. */\nfunction indexAxisResponses(\n profile:\n StabilizationSystemProfile\n): AxisResponseIndex {\n return new Map(\n profile.axisResponses.map(\n (response) => [\n response.axis,\n response\n ] as const\n )\n );\n}\n\nfunction evaluateAtTime(\n disturbance: DisturbanceIndex,\n profile:\n StabilizationSystemProfile,\n responses: AxisResponseIndex,\n timeSeconds: number\n): StabilizedRotationSample {\n // One segment lookup serves all three axes at the same time.\n const segment =\n locateDisturbanceSegment(\n disturbance,\n timeSeconds\n );\n const current:\n StabilizationAngularStateRad = {\n pitch:\n interpolateDisturbanceSegment(\n disturbance,\n segment,\n timeSeconds,\n \"pitch\"\n ),\n yaw:\n interpolateDisturbanceSegment(\n disturbance,\n segment,\n timeSeconds,\n \"yaw\"\n ),\n roll:\n interpolateDisturbanceSegment(\n disturbance,\n segment,\n timeSeconds,\n \"roll\"\n )\n };\n const correction:\n StabilizationAngularStateRad = {\n pitch: 0,\n yaw: 0,\n roll: 0\n };\n const residual:\n StabilizationAngularStateRad = {\n ...current\n };\n\n const axes =\n [\"pitch\", \"yaw\", \"roll\"] as const;\n const resolvedAxes =\n axes.map((axis) => {\n const response =\n responses.get(axis);\n const bypassed =\n profile.panningPolicy.kind ===\n \"declared-axis-bypass\" &&\n profile.panningPolicy.axis ===\n axis;\n\n if (\n profile.architecture ===\n \"off\" ||\n response === undefined ||\n bypassed\n ) {\n return {\n axis,\n disturbanceAngleRad:\n axisValue(\n current,\n axis\n ),\n delayedMeasuredAngleRad:\n 0,\n requestedCorrectionAngleRad:\n 0,\n appliedCorrectionAngleRad:\n 0,\n residualAngleRad:\n axisValue(\n current,\n axis\n ),\n correctionGain:\n response?.correctionGain\n .value ?? 0,\n latencySeconds:\n response?.latencySeconds\n .value ?? 0,\n maximumCorrectionAngleRad:\n response\n ?.maximumCorrectionAngleRad\n .value ?? 0,\n bypassedForDeclaredPan:\n bypassed,\n correctionLimitReached:\n false\n };\n }\n\n const delayedTime =\n timeSeconds -\n response\n .latencySeconds.value;\n const delayedMeasured =\n delayedTime < 0\n ? 0\n : interpolateAxis(\n disturbance,\n delayedTime,\n axis\n );\n const requested =\n delayedMeasured *\n response\n .correctionGain.value;\n const applied =\n clampSymmetric(\n requested,\n response\n .maximumCorrectionAngleRad\n .value\n );\n const residualAngle =\n axisValue(\n current,\n axis\n ) -\n applied;\n\n setAxisValue(\n correction,\n axis,\n applied\n );\n setAxisValue(\n residual,\n axis,\n residualAngle\n );\n\n return {\n axis,\n disturbanceAngleRad:\n axisValue(\n current,\n axis\n ),\n delayedMeasuredAngleRad:\n delayedMeasured,\n requestedCorrectionAngleRad:\n requested,\n appliedCorrectionAngleRad:\n applied,\n residualAngleRad:\n residualAngle,\n correctionGain:\n response\n .correctionGain.value,\n latencySeconds:\n response\n .latencySeconds.value,\n maximumCorrectionAngleRad:\n response\n .maximumCorrectionAngleRad\n .value,\n bypassedForDeclaredPan:\n false,\n correctionLimitReached:\n applied !== requested\n };\n });\n\n return {\n timeSecondsFromCaptureReference:\n timeSeconds,\n disturbanceAngularDisplacementRad:\n current,\n appliedCorrectionAngularDisplacementRad:\n correction,\n residualAngularDisplacementRad:\n residual,\n axes:\n resolvedAxes\n };\n}\n\n/**\n * Runs the declared generic per-axis controller against an explicit angular disturbance trajectory.\n * Returns the residual motion, with diagnostics for latency and travel limits.\n *\n * The generic stabilizer takes a declared angular disturbance (camera shake) and applies a per-axis\n * response, latency, travel limits and a panning policy. The leftover (residual) motion feeds the\n * existing temporal mapping. No commercial IBIS (in-body) or OIS (optical) calibration is supplied,\n * no arbitrary \"stops\" rating is used, and body/lens coordination is never inferred.\n * @param input - CalculateStabilizedRotationTrajectoryInput. See that type for coordinates, units and profile binding.\n * @returns CalculationResult<StabilizedRotationTrajectory>. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function calculateStabilizedRotationTrajectory(\n input:\n CalculateStabilizedRotationTrajectoryInput\n): CalculationResult<StabilizedRotationTrajectory> {\n requireInputKeys(input, \"calculateStabilizedRotationTrajectory\", [\"disturbance\", \"profile\", \"captureKind\"]);\n const disturbance =\n parseStabilizationDisturbanceTrajectory(\n input.disturbance\n );\n const profile =\n parseStabilizationSystemProfile(\n input.profile\n );\n\n if (\n input.captureKind !==\n profile.captureKind\n ) {\n throw new InvalidScientificInputError(\n \"captureKind must exactly match the stabilization profile captureKind.\"\n );\n }\n\n const disturbanceIndex =\n indexDisturbance(disturbance);\n const responses =\n indexAxisResponses(profile);\n const samples =\n disturbance.samples.map(\n (sample) =>\n evaluateAtTime(\n disturbanceIndex,\n profile,\n responses,\n sample\n .timeSecondsFromCaptureReference\n )\n );\n\n return approximationResult(\n {\n profileId:\n profile.profileId,\n profileVersion:\n profile.profileVersion,\n trajectoryId:\n disturbance.trajectoryId,\n architecture:\n profile.architecture,\n captureKind:\n input.captureKind,\n timeReference:\n \"first-opening-boundary-phase\",\n samples,\n correctionModel:\n \"delayed-linear-image-equivalent-angular-response\",\n supportStateConsumed:\n false,\n translationCorrectionModeled:\n false,\n digitalStabilizationApplied:\n false,\n digitalStabilizationOwnedBy:\n \"downstream-geometric-correction-composition\",\n coordinatedCorrectionDoubleCounted:\n false,\n zeroDisturbanceCanCreateMotion:\n false\n },\n \"generic-time-domain-physical-stabilization\",\n \"1.0.0\",\n [\n \"The stabilization response is a generic synthetic image-equivalent rotational correction, not a manufacturer-specific IBIS/OIS calibration.\",\n \"Correction uses explicit per-axis gain, latency and symmetric angular correction limits.\",\n \"A coordinated profile allocates one total correction between body and lens for descriptive ownership only; the total correction is applied once.\",\n \"Support state is not an input and never silently toggles stabilization.\",\n \"Declared panning bypass suppresses correction only on the explicitly selected axis; pan intent is never inferred.\",\n \"Camera translation/parallax correction is not modeled because translational image motion depends on scene depth.\",\n \"Digital stabilization is a separate downstream geometric/crop/resampling domain.\",\n \"CIPA-style stop ratings are not used as a dynamic response function.\",\n \"The legacy stabilizationStopsEquivalent approximation remains unchanged.\"\n ]\n );\n}\n\ntype ExposureWindowSample =\n ResolvedCaptureModeTiming[\"exposureWindows\"][\"samples\"][number];\ntype ExposureWindowIndex = ReadonlyMap<\n unknown,\n ReadonlyMap<unknown, readonly ExposureWindowSample[]>\n>;\n\n/**\n * Groups the committed exposure-window samples by native point, once per calculation, and keeps their\n * order. Map keys compare with SameValueZero, so lookups are filtered again with the original `===`\n * test: NaN never matches, and +0 matches -0.\n */\nfunction indexExposureWindows(\n timing:\n ResolvedCaptureModeTiming\n): ExposureWindowIndex {\n requireInputObject(timing, \"timing\");\n requireInputObject(timing.exposureWindows, \"timing.exposureWindows\");\n if (!Array.isArray(timing.exposureWindows.samples)) throw new InvalidConfigurationError(\"timing.exposureWindows.samples must be an array.\");\n timing.exposureWindows.samples.forEach((sample, index) => {\n requireInputObject(sample, \"timing.exposureWindows.samples[\" + index + \"]\");\n requireInputObject(sample.pointNative, \"timing.exposureWindows.samples[\" + index + \"].pointNative\");\n });\n const byX =\n new Map<\n unknown,\n Map<unknown, ExposureWindowSample[]>\n >();\n for (const sample of timing.exposureWindows.samples) {\n let byY =\n byX.get(sample.pointNative.x);\n if (byY === undefined) {\n byY = new Map();\n byX.set(\n sample.pointNative.x,\n byY\n );\n }\n const bucket =\n byY.get(sample.pointNative.y);\n if (bucket === undefined) {\n byY.set(\n sample.pointNative.y,\n [sample]\n );\n } else {\n bucket.push(sample);\n }\n }\n return byX;\n}\n\nfunction localExposureForPoint(\n windows: ExposureWindowIndex,\n point:\n RasterPoint\n): {\n start: number;\n end: number;\n duration: number;\n} {\n const matches =\n (\n windows\n .get(point.x)\n ?.get(point.y) ?? []\n ).filter(\n (sample) =>\n sample.pointNative.x ===\n point.x &&\n sample.pointNative.y ===\n point.y\n );\n if (matches.length !== 1) {\n throw new InvalidScientificInputError(\n \"Each stabilization sample point must match exactly one committed exposure-window sample point.\"\n );\n }\n const match =\n matches[0]!;\n return {\n start:\n match\n .startOffsetSecondsFromOpeningReference,\n end:\n match\n .endOffsetSecondsFromOpeningReference,\n duration:\n match\n .localExposureDurationSeconds\n };\n}\n\n/**\n * Feeds the residual stabilized rotation into the existing local-exposure temporal mapping. Shutter\n * timing is not changed, and no blur radius is invented.\n *\n * The generic stabilizer takes a declared angular disturbance (camera shake) and applies a per-axis\n * response, latency, travel limits and a panning policy. The leftover (residual) motion feeds the\n * existing temporal mapping. No commercial IBIS (in-body) or OIS (optical) calibration is supplied,\n * no arbitrary \"stops\" rating is used, and body/lens coordination is never inferred.\n * @param input - CalculateStabilizedCaptureTemporalSamplesInput. See that type for coordinates, units and profile binding.\n * @returns CalculationResult<StabilizedCaptureTemporalSamples>. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function calculateStabilizedCaptureTemporalSamples(\n input:\n CalculateStabilizedCaptureTemporalSamplesInput\n): CalculationResult<StabilizedCaptureTemporalSamples> {\n requireInputKeys(input, \"calculateStabilizedCaptureTemporalSamples\", [\"disturbance\", \"profile\", \"captureKind\", \"timing\", \"samplePointsNative\", \"temporalSampleCount\"]);\n requireInputObject(input.timing, \"timing\");\n const disturbance =\n parseStabilizationDisturbanceTrajectory(\n input.disturbance\n );\n const profile =\n parseStabilizationSystemProfile(\n input.profile\n );\n if (\n input.captureKind !==\n profile.captureKind\n ) {\n throw new InvalidScientificInputError(\n \"captureKind must exactly match the stabilization profile captureKind.\"\n );\n }\n requirePositiveInteger(\n \"temporalSampleCount\",\n input.temporalSampleCount\n );\n if (\n !Array.isArray(\n input.samplePointsNative\n ) ||\n input.samplePointsNative.length ===\n 0\n ) {\n throw new InvalidConfigurationError(\n \"samplePointsNative must be a non-empty array.\"\n );\n }\n input.samplePointsNative.forEach((point, index) => requireInputObject(point, \"samplePointsNative[\" + index + \"]\"));\n\n const totalNodeCount =\n input.temporalSampleCount *\n input.samplePointsNative.length;\n if (\n !Number.isSafeInteger(\n totalNodeCount\n )\n ) {\n throw new InvalidScientificInputError(\n \"temporalSampleCount × samplePointsNative.length must remain a safe integer.\"\n );\n }\n\n const disturbanceIndex =\n indexDisturbance(disturbance);\n const responses =\n indexAxisResponses(profile);\n let exposureWindowIndex:\n ExposureWindowIndex | undefined;\n const points =\n input.samplePointsNative.map(\n (point) => {\n exposureWindowIndex ??=\n indexExposureWindows(\n input.timing\n );\n const exposure =\n localExposureForPoint(\n exposureWindowIndex,\n point\n );\n const normalizedTimeWeight =\n 1 /\n input.temporalSampleCount;\n const timeMeasureSeconds =\n exposure.duration /\n input.temporalSampleCount;\n\n const nodes =\n Array.from(\n {\n length:\n input.temporalSampleCount\n },\n (\n _,\n temporalSampleIndex\n ) => {\n const localExposurePhase =\n (\n temporalSampleIndex +\n 0.5\n ) /\n input.temporalSampleCount;\n const captureTime =\n exposure.start +\n localExposurePhase *\n exposure.duration;\n return {\n temporalSampleIndex,\n localExposurePhase,\n captureTimeSecondsFromReference:\n captureTime,\n normalizedTimeWeight,\n timeMeasureSeconds,\n stabilization:\n evaluateAtTime(\n disturbanceIndex,\n profile,\n responses,\n captureTime\n )\n };\n }\n );\n\n return {\n destinationPointNative: {\n ...point\n },\n localExposureWindow: {\n startSecondsFromCaptureReference:\n exposure.start,\n endSecondsFromCaptureReference:\n exposure.end,\n durationSeconds:\n exposure.duration\n },\n nodes\n };\n }\n );\n\n return approximationResult(\n {\n profileId:\n profile.profileId,\n trajectoryId:\n disturbance.trajectoryId,\n captureModeId:\n input.timing.captureModeId,\n timingProfileId:\n input.timing.timingProfileId,\n captureKind:\n input.captureKind,\n architecture:\n profile.architecture,\n timeReference:\n \"first-opening-boundary-phase\",\n quadratureScheme:\n \"uniform-midpoint\",\n temporalSampleCount:\n input.temporalSampleCount,\n points,\n sensorReadoutTimingUsedAsExposureTiming:\n false,\n supportStateConsumed:\n false,\n translationCorrectionModeled:\n false,\n digitalStabilizationApplied:\n false\n },\n \"capture-local-stabilization-temporal-sampling\",\n \"1.0.0\",\n [\n \"Stabilization is evaluated at deterministic midpoint nodes inside each authoritative local exposure window of the exposure-window model.\",\n \"Sensor data-readout timing is not substituted for exposure timing.\",\n \"The result is rotational disturbance/correction/residual state only; it does not itself calculate image-plane mapping, radiance, blur, PSF or output pixels.\",\n \"Translation/parallax, subject motion, shutter shock, support vibration sources and digital stabilization remain separate domains.\"\n ]\n );\n}\n"]}
@@ -0,0 +1,183 @@
1
+ # Using Photivra from an agent
2
+
3
+ This page is for AI agents and the people who build them. It says which function to call, which
4
+ units to pass, how to read a result and how to report it honestly. For the full option list of the
5
+ one-call capture, see the [Quick Start](QUICK_START.md). For every export, see the
6
+ [API reference](API_REFERENCE.md).
7
+
8
+ ## Runtime
9
+
10
+ - The package is `@photivra/engine`, an ESM library. It runs in the browser and in Node.
11
+ - Node 22.13 or later is required (`engines` in `package.json`). The repository tests Node 22, 24
12
+ and 26; see [NODE_SUPPORT.md](../NODE_SUPPORT.md).
13
+ - It makes no network calls and needs no API key or account. Everything runs locally.
14
+ - `simulateCapture()` hashes the scene description with Web Crypto (`crypto.subtle`). That is
15
+ available in Node 22+ and in secure browser contexts (HTTPS or localhost).
16
+ - Results are deterministic. Random sensor noise uses a fixed seed (`sensor.noiseSeed`, default 1).
17
+
18
+ ## Choosing a function
19
+
20
+ | Task | Call | Notes |
21
+ | --- | --- | --- |
22
+ | Simulate a full photo | [`simulateCapture`](api/facade-simulate-capture.md#simulatecapture) | Async. Returns an image, the RAW data, `assumptions` and `provenance`. |
23
+ | Exposure value (EV) of a setting | [`calculateExposureValue100`](api/exposure-exposure.md#calculateexposurevalue100) | EV at ISO 100 = log2(N²/t). |
24
+ | Keep brightness after changing aperture or shutter | [`calculateEquivalentIso`](api/exposure-exposure.md#calculateequivalentiso) | Returns the compensating ISO. Not a noise model. |
25
+ | Compare two exposures in stops | [`calculateRelativeRenderedExposure`](api/exposure-exposure.md#calculaterelativerenderedexposure) | Includes ISO as gain. |
26
+ | Depth of field and hyperfocal distance | [`calculateDepthOfField`](api/optics-depth-of-field.md#calculatedepthoffield) | Thin-lens model. `farLimitM` is `null` when it is infinite. |
27
+ | Blur of an out-of-focus subject | [`calculateDefocusCircle`](api/optics-depth-of-field.md#calculatedefocuscircle) | Geometric blur-circle diameter at the sensor. |
28
+ | Field (angle) of view | [`calculateFieldOfView`](api/camera-field-of-view.md#calculatefieldofview) | Pass the sensor width, height or diagonal for that angle. |
29
+ | Crop factor and 35 mm-equivalent focal length | [`calculateEquivalentFocalLength35Mm`](api/camera-equivalent-focal-length.md#calculateequivalentfocallength35mm) | Diagonal-based, against a 36 × 24 mm frame. |
30
+ | Pixels left after a centred crop | [`calculateCenteredCrop`](api/output-crop.md#calculatecenteredcrop) | Keeps the aspect ratio to whole pixels. |
31
+ | Motion blur for a shutter speed | [`calculateProjectedMotionBlur`](api/motion-projected-motion.md#calculateprojectedmotionblur) | Subject position and velocity in metres; blur in mm, and in pixels if you give a pixel pitch. |
32
+ | Video shutter angle to exposure time | [`calculateShutterAngleExposureSeconds`](api/motion-video-sequence.md#calculateshutterangleexposureseconds) | Positional arguments: frame rate (Hz), angle (degrees). |
33
+ | Diffraction spot size | [`calculateAiryDisk`](api/optics-diffraction.md#calculateairydisk) | Ideal circular aperture; you choose the wavelength. |
34
+ | Photons to electrons | [`calculatePhotoelectrons`](api/sensor-signal-noise.md#calculatephotoelectrons) | Mean value; you supply the quantum efficiency. |
35
+ | Sensor noise and signal-to-noise ratio (SNR) | [`calculateSignalToNoise`](api/sensor-signal-noise.md#calculatesignaltonoise) | Shot noise plus read noise, in electrons. |
36
+ | Colour temperature to a white point | [`calculateChromaticityFromCorrelatedColorTemperature`](api/color-illuminants.md#calculatechromaticityfromcorrelatedcolortemperature) | Kelvin and Duv (tint) to CIE 1931 xy. |
37
+ | White point to colour temperature | [`calculateCorrelatedColorTemperature`](api/color-illuminants.md#calculatecorrelatedcolortemperature) | CIE 1931 xy to kelvin and Duv. |
38
+ | White balance from Kelvin and tint | [`createColorTemperatureWhiteBalanceIntent`](api/color-white-balance.md#createcolortemperaturewhitebalanceintent), then [`resolveColorTemperatureWhiteBalance`](api/color-white-balance.md#resolvecolortemperaturewhitebalance) | Needs an explicit camera colour matrix. In `simulateCapture()`, use `output.whiteBalance: { kelvin, tint }` instead. |
39
+
40
+ If a task is not in this table, search the [API reference](API_REFERENCE.md) or the
41
+ [Usage Guide](USAGE.md). Do not reimplement a formula the engine already has.
42
+
43
+ ## Units and conventions
44
+
45
+ The unit is part of the field name. Read it there; do not guess.
46
+
47
+ | Quantity | Unit | Example fields |
48
+ | --- | --- | --- |
49
+ | Focal length, sensor size, circle of confusion | millimetres | `focalLengthMm`, `sensorDimensionMm`, `circleOfConfusionMm` |
50
+ | Distances in the scene | metres | `focusDistanceM`, `subjectDistanceM`, `hyperfocalDistanceM` |
51
+ | Subject position and velocity | metres, metres per second | `positionM`, `velocityMps` (+z points away from the camera) |
52
+ | Pixel pitch, Airy disk size | micrometres | `pixelPitchMicrometers`, `firstZeroDiameterMicrometers` |
53
+ | Wavelength | nanometres | `wavelengthNm`, `wavelengthNanometers` |
54
+ | Shutter time | seconds | `shutterSeconds` (1/125 s is `1 / 125`) |
55
+ | Aperture | f-number N (no unit) | `aperture` in the single calculations, `lens.fNumber` in `simulateCapture()` |
56
+ | Exposure changes | stops (factors of 2) | `compensationStops`, `stops` |
57
+ | Colour temperature | kelvin | `correlatedColorTemperatureKelvin`, `colorTemperatureKelvin`, `{ kelvin }` |
58
+ | Illuminance on the scene | lux | `illuminanceLux` |
59
+ | Scene luminance | candela per square metre | `meteredSceneLuminanceCdPerSquareMeter` |
60
+ | Signal and noise | electrons | `signalElectrons`, `readNoiseElectrons` |
61
+ | Angles | degrees or radians, as named | `degrees`, `radians`, `shutterAngleDegrees`, `angularVelocityRadPerSec` |
62
+
63
+ Other conventions:
64
+
65
+ - Most calls take one input object. Every calculator that takes an input object, including
66
+ `simulateCapture()`, `calculateDepthOfField()` and `calculateSignalToNoise()`, rejects unknown
67
+ fields, so a typo or a wrong unit suffix fails loudly with `InvalidConfigurationError`. Check field
68
+ names against the reference. The versioned-record parsers (`parse*()`) and the functions that take
69
+ a whole record are strict too: an unknown field at any level fails, and the error names it.
70
+ - `null` stands for an infinite or undefined value that JSON cannot store, for example
71
+ `farLimitM` beyond the hyperfocal distance.
72
+ - The 35 mm reference frame is 36 × 24 mm.
73
+
74
+ ## Reading results
75
+
76
+ Most single calculations return a `CalculationResult`: `{ value, provenance, quality? }`.
77
+
78
+ - `value` holds the numbers.
79
+ - `provenance.kind` is `calculated`, `calibrated`, `estimated` or `approximation`.
80
+ - `calculated`: an exact result of the stated model, such as the thin-lens equations.
81
+ - `approximation`: a simplified model, such as the fitted analytic colour-matching functions.
82
+ - `provenance.model` and `provenance.modelVersion` name the equation set. `provenance.assumptions`
83
+ lists what the model leaves out, for example "Lens transmission (T-stop) is not modeled".
84
+ - `quality` appears only when the engine can defend an uncertainty or valid range. Its absence does
85
+ not mean the result is exact.
86
+ - Results are read-only. The envelope, `provenance` and `quality` are frozen, and so is the top
87
+ level of `value`. Assigning to them throws a `TypeError`. Copy a value (`{ ...result.value }` or
88
+ `structuredClone(result.value)`) before you change it. Nested objects inside `value` are not
89
+ frozen by the envelope, and typed arrays can never be frozen.
90
+
91
+ `simulateCapture()` returns a richer object:
92
+
93
+ - `assumptions` lists every choice made for you. Each entry has an `id`, a `kind`, a `value` and an
94
+ `explanation`.
95
+ - `default`: you left the option out, so the default was used.
96
+ - `derived`: the facade calculated the value from your inputs, such as the framed scene size.
97
+ - `model`: a fixed modelling choice, such as "no lens PSF".
98
+ - `provenance.scientificStatus` is always `approximation`. `provenance.limitations` says why in
99
+ plain words.
100
+
101
+ How to report a result to a user:
102
+
103
+ - Give the number with its unit.
104
+ - Say when `provenance.kind` or `scientificStatus` is `approximation`.
105
+ - Mention the assumptions that matter for the question, for example a thin lens or no lens
106
+ transmission.
107
+ - For `simulateCapture()`, say which inputs were defaults. Never present a simulated image as what a
108
+ real camera would produce.
109
+
110
+ ```ts
111
+ import { simulateCapture } from "@photivra/engine";
112
+
113
+ const capture = await simulateCapture({
114
+ scene: { preset: "uniform" },
115
+ exposure: { mode: "manual", iso: 100, shutterSeconds: 1 / 250 },
116
+ output: { width: 8, height: 8 }
117
+ });
118
+
119
+ console.log(capture.exposure.ev100, capture.provenance.scientificStatus);
120
+ for (const assumption of capture.assumptions) {
121
+ if (assumption.kind === "default") console.log(`${assumption.id} = ${JSON.stringify(assumption.value)}`);
122
+ }
123
+ ```
124
+
125
+ ## Errors
126
+
127
+ Invalid input throws. Nothing returns NaN or Infinity.
128
+
129
+ | Error | Base class | `code` | Thrown when |
130
+ | --- | --- | --- | --- |
131
+ | `InvalidScientificInputError` | `RangeError` | `INVALID_SCIENTIFIC_INPUT` | A number is missing, not finite or out of its valid range: a zero or negative f-number, a focus distance inside the focal length, an f-number or ISO outside the camera tier's capability. |
132
+ | `InvalidConfigurationError` | `TypeError` | `INVALID_CONFIGURATION` | The input has the wrong shape: not an object or array, an unknown field, an unknown kind, mode or version string, or a malformed identifier. Also any defect inside a versioned record or options object, such as a profile or a negative `exposure.iso` in `simulateCapture()`. |
133
+ | `InvalidScientificResultError` | `RangeError` | `INVALID_SCIENTIFIC_RESULT` | A result would not be finite. |
134
+
135
+ All three are root exports, so you can test them with `instanceof`. `simulateCapture()` is async, so
136
+ its errors arrive as a rejected promise.
137
+
138
+ How to recover:
139
+
140
+ - Read `message`. It names the field and the rule, for example
141
+ "aperture must be a finite number greater than zero."
142
+ - For `InvalidScientificInputError`, change the value, not the units. Check you passed metres where
143
+ the field ends in `M` and millimetres where it ends in `Mm`.
144
+ - For `InvalidConfigurationError`, fix the field name or shape against the
145
+ [API reference](API_REFERENCE.md).
146
+ - Do not retry the same input. The engine is deterministic and will fail the same way.
147
+
148
+ Some lower-level planners return structured `blockers` for a well-formed request they cannot serve,
149
+ instead of throwing. Report those to the user as unsupported, not as errors in their input.
150
+
151
+ ```ts
152
+ import { calculateDepthOfField, InvalidConfigurationError, InvalidScientificInputError } from "@photivra/engine";
153
+
154
+ try {
155
+ calculateDepthOfField({ focalLengthMm: 50, aperture: 8, focusDistanceM: 0.01, circleOfConfusionMm: 0.03 });
156
+ } catch (error) {
157
+ if (error instanceof InvalidScientificInputError) console.log("Fix the value:", error.code, error.message);
158
+ else if (error instanceof InvalidConfigurationError) console.log("Fix the shape:", error.code, error.message);
159
+ else throw error;
160
+ }
161
+ ```
162
+
163
+ Here 0.01 m (10 mm) is closer than the 50 mm focal length, so the call throws
164
+ `InvalidScientificInputError`.
165
+
166
+ ## Limits to state
167
+
168
+ - **The camera tiers are synthetic.** `"consumer"`, `"prosumer"` and `"professional"` are educational
169
+ designs owned by Photivra. They are not measured from, calibrated to or named after any real camera
170
+ or lens. All three tier lenses are 50 mm primes with an f/4–f/16 range.
171
+ - **No real camera or lens is modelled.** The engine claims no named commercial camera or lens
172
+ performance.
173
+ - **`simulateCapture()` is an approximation.** It uses an idealized colorimetric sensor, a flat
174
+ Lambertian scene and, by default, no lens PSF, diffraction, vignetting or distortion. See
175
+ [Modelling choices](QUICK_START.md#modelling-choices).
176
+ - **The single calculations are ideal models.** Depth of field and field of view use a thin lens.
177
+ The Airy disk assumes an ideal circular aperture. SNR leaves out dark current and fixed-pattern
178
+ noise. Each result's `provenance.assumptions` says what it leaves out.
179
+ - **Not modelled yet** (from the README): decentering distortion and named-lens calibration,
180
+ calibrated commercial in-body or optical stabilization, non-uniform or segmented sensor readout,
181
+ rolling-shutter image distortion in the low-level readout-timing model, and photon or noise output
182
+ in the composed POC (`simulatePocCamera()`). See
183
+ [Important scientific limits](../README.md#important-scientific-limits) for the full list.