@photivra/engine 0.6.0 → 1.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 (749) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +186 -0
  3. package/CITATION.cff +1 -1
  4. package/CONTRIBUTING.md +76 -0
  5. package/DCO +33 -0
  6. package/NODE_SUPPORT.md +37 -0
  7. package/NOTICE +2 -0
  8. package/README.md +138 -71
  9. package/SECURITY.md +55 -0
  10. package/THIRD_PARTY.md +63 -0
  11. package/dist/camera/equivalent-focal-length.d.ts +9 -0
  12. package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
  13. package/dist/camera/equivalent-focal-length.js +9 -0
  14. package/dist/camera/equivalent-focal-length.js.map +1 -1
  15. package/dist/camera/field-of-view.d.ts +13 -0
  16. package/dist/camera/field-of-view.d.ts.map +1 -1
  17. package/dist/camera/field-of-view.js +13 -0
  18. package/dist/camera/field-of-view.js.map +1 -1
  19. package/dist/camera/projected-object-size.d.ts +8 -0
  20. package/dist/camera/projected-object-size.d.ts.map +1 -1
  21. package/dist/camera/projected-object-size.js +8 -0
  22. package/dist/camera/projected-object-size.js.map +1 -1
  23. package/dist/capture/capture-export-metadata.d.ts +60 -0
  24. package/dist/capture/capture-export-metadata.d.ts.map +1 -0
  25. package/dist/capture/capture-export-metadata.js +62 -0
  26. package/dist/capture/capture-export-metadata.js.map +1 -0
  27. package/dist/capture/environment-raw-producer.d.ts +55 -0
  28. package/dist/capture/environment-raw-producer.d.ts.map +1 -0
  29. package/dist/capture/environment-raw-producer.js +88 -0
  30. package/dist/capture/environment-raw-producer.js.map +1 -0
  31. package/dist/capture/export-jpeg.d.ts +12 -0
  32. package/dist/capture/export-jpeg.d.ts.map +1 -0
  33. package/dist/capture/export-jpeg.js +126 -0
  34. package/dist/capture/export-jpeg.js.map +1 -0
  35. package/dist/capture/export-tiff.d.ts +45 -0
  36. package/dist/capture/export-tiff.d.ts.map +1 -0
  37. package/dist/capture/export-tiff.js +129 -0
  38. package/dist/capture/export-tiff.js.map +1 -0
  39. package/dist/capture/focus-control.d.ts +210 -0
  40. package/dist/capture/focus-control.d.ts.map +1 -0
  41. package/dist/capture/focus-control.js +664 -0
  42. package/dist/capture/focus-control.js.map +1 -0
  43. package/dist/capture/linear-encoding.d.ts +59 -0
  44. package/dist/capture/linear-encoding.d.ts.map +1 -0
  45. package/dist/capture/linear-encoding.js +98 -0
  46. package/dist/capture/linear-encoding.js.map +1 -0
  47. package/dist/capture/photographic-export.d.ts +135 -0
  48. package/dist/capture/photographic-export.d.ts.map +1 -0
  49. package/dist/capture/photographic-export.js +273 -0
  50. package/dist/capture/photographic-export.js.map +1 -0
  51. package/dist/capture/raw-frame-limits.d.ts +12 -0
  52. package/dist/capture/raw-frame-limits.d.ts.map +1 -0
  53. package/dist/capture/raw-frame-limits.js +13 -0
  54. package/dist/capture/raw-frame-limits.js.map +1 -0
  55. package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
  56. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
  57. package/dist/capture/raw-frame-reconstruction.js +146 -0
  58. package/dist/capture/raw-frame-reconstruction.js.map +1 -0
  59. package/dist/capture/release-sequence.d.ts +120 -0
  60. package/dist/capture/release-sequence.d.ts.map +1 -0
  61. package/dist/capture/release-sequence.js +446 -0
  62. package/dist/capture/release-sequence.js.map +1 -0
  63. package/dist/capture/sensor-raw-frame.d.ts +34 -0
  64. package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
  65. package/dist/capture/sensor-raw-frame.js +106 -0
  66. package/dist/capture/sensor-raw-frame.js.map +1 -0
  67. package/dist/capture/sensor-raw-producer.d.ts +51 -0
  68. package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
  69. package/dist/capture/sensor-raw-producer.js +235 -0
  70. package/dist/capture/sensor-raw-producer.js.map +1 -0
  71. package/dist/capture/simulated-capture.d.ts +125 -0
  72. package/dist/capture/simulated-capture.d.ts.map +1 -0
  73. package/dist/capture/simulated-capture.js +248 -0
  74. package/dist/capture/simulated-capture.js.map +1 -0
  75. package/dist/color/capture-color.d.ts +73 -0
  76. package/dist/color/capture-color.d.ts.map +1 -0
  77. package/dist/color/capture-color.js +145 -0
  78. package/dist/color/capture-color.js.map +1 -0
  79. package/dist/color/sensor-color-development.d.ts +23 -0
  80. package/dist/color/sensor-color-development.d.ts.map +1 -0
  81. package/dist/color/sensor-color-development.js +56 -0
  82. package/dist/color/sensor-color-development.js.map +1 -0
  83. package/dist/color/white-balance.d.ts +175 -0
  84. package/dist/color/white-balance.d.ts.map +1 -0
  85. package/dist/color/white-balance.js +606 -0
  86. package/dist/color/white-balance.js.map +1 -0
  87. package/dist/composition/image-formation-plan.d.ts +481 -0
  88. package/dist/composition/image-formation-plan.d.ts.map +1 -0
  89. package/dist/composition/image-formation-plan.js +2499 -0
  90. package/dist/composition/image-formation-plan.js.map +1 -0
  91. package/dist/composition/plan-consumer.d.ts +53 -0
  92. package/dist/composition/plan-consumer.d.ts.map +1 -0
  93. package/dist/composition/plan-consumer.js +119 -0
  94. package/dist/composition/plan-consumer.js.map +1 -0
  95. package/dist/core/calculation-result.d.ts.map +1 -1
  96. package/dist/core/calculation-result.js +6 -0
  97. package/dist/core/calculation-result.js.map +1 -1
  98. package/dist/core/canonical-json.d.ts +18 -0
  99. package/dist/core/canonical-json.d.ts.map +1 -0
  100. package/dist/core/canonical-json.js +44 -0
  101. package/dist/core/canonical-json.js.map +1 -0
  102. package/dist/core/configuration-error.d.ts +6 -0
  103. package/dist/core/configuration-error.d.ts.map +1 -1
  104. package/dist/core/configuration-error.js +6 -0
  105. package/dist/core/configuration-error.js.map +1 -1
  106. package/dist/core/evidence-provenance.d.ts +6 -0
  107. package/dist/core/evidence-provenance.d.ts.map +1 -1
  108. package/dist/core/evidence-provenance.js +7 -0
  109. package/dist/core/evidence-provenance.js.map +1 -1
  110. package/dist/core/image-formation.d.ts +9 -3
  111. package/dist/core/image-formation.d.ts.map +1 -1
  112. package/dist/core/image-formation.js +29 -5
  113. package/dist/core/image-formation.js.map +1 -1
  114. package/dist/core/owned-data.d.ts +25 -0
  115. package/dist/core/owned-data.d.ts.map +1 -0
  116. package/dist/core/owned-data.js +34 -0
  117. package/dist/core/owned-data.js.map +1 -0
  118. package/dist/core/record-validation.d.ts +17 -0
  119. package/dist/core/record-validation.d.ts.map +1 -0
  120. package/dist/core/record-validation.js +44 -0
  121. package/dist/core/record-validation.js.map +1 -0
  122. package/dist/core/scientific-assurance.d.ts +101 -0
  123. package/dist/core/scientific-assurance.d.ts.map +1 -0
  124. package/dist/core/scientific-assurance.js +301 -0
  125. package/dist/core/scientific-assurance.js.map +1 -0
  126. package/dist/core/spectral-composition.d.ts +106 -0
  127. package/dist/core/spectral-composition.d.ts.map +1 -0
  128. package/dist/core/spectral-composition.js +334 -0
  129. package/dist/core/spectral-composition.js.map +1 -0
  130. package/dist/core/spectral.d.ts +34 -0
  131. package/dist/core/spectral.d.ts.map +1 -0
  132. package/dist/core/spectral.js +57 -0
  133. package/dist/core/spectral.js.map +1 -0
  134. package/dist/core/validation.d.ts +6 -0
  135. package/dist/core/validation.d.ts.map +1 -1
  136. package/dist/core/validation.js +6 -0
  137. package/dist/core/validation.js.map +1 -1
  138. package/dist/core/version.d.ts +14 -0
  139. package/dist/core/version.d.ts.map +1 -0
  140. package/dist/core/version.js +15 -0
  141. package/dist/core/version.js.map +1 -0
  142. package/dist/equipment/exposure-capabilities.d.ts +125 -0
  143. package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
  144. package/dist/equipment/exposure-capabilities.js +391 -0
  145. package/dist/equipment/exposure-capabilities.js.map +1 -0
  146. package/dist/equipment/generic-tier-assets.d.ts +82 -0
  147. package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
  148. package/dist/equipment/generic-tier-assets.js +119 -0
  149. package/dist/equipment/generic-tier-assets.js.map +1 -0
  150. package/dist/equipment/generic-tier-presets.d.ts +57 -0
  151. package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
  152. package/dist/equipment/generic-tier-presets.js +122 -0
  153. package/dist/equipment/generic-tier-presets.js.map +1 -0
  154. package/dist/equipment/iso-capabilities.d.ts +143 -0
  155. package/dist/equipment/iso-capabilities.d.ts.map +1 -0
  156. package/dist/equipment/iso-capabilities.js +578 -0
  157. package/dist/equipment/iso-capabilities.js.map +1 -0
  158. package/dist/equipment/metering-capabilities.d.ts +58 -0
  159. package/dist/equipment/metering-capabilities.d.ts.map +1 -0
  160. package/dist/equipment/metering-capabilities.js +151 -0
  161. package/dist/equipment/metering-capabilities.js.map +1 -0
  162. package/dist/equipment/release-capabilities.d.ts +33 -0
  163. package/dist/equipment/release-capabilities.d.ts.map +1 -0
  164. package/dist/equipment/release-capabilities.js +176 -0
  165. package/dist/equipment/release-capabilities.js.map +1 -0
  166. package/dist/exposure/exposure-duration-control.d.ts +72 -0
  167. package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
  168. package/dist/exposure/exposure-duration-control.js +161 -0
  169. package/dist/exposure/exposure-duration-control.js.map +1 -0
  170. package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
  171. package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
  172. package/dist/exposure/exposure-mode-resolver.js +1905 -0
  173. package/dist/exposure/exposure-mode-resolver.js.map +1 -0
  174. package/dist/exposure/exposure.d.ts +8 -0
  175. package/dist/exposure/exposure.d.ts.map +1 -1
  176. package/dist/exposure/exposure.js +8 -0
  177. package/dist/exposure/exposure.js.map +1 -1
  178. package/dist/exposure/flash.d.ts +179 -0
  179. package/dist/exposure/flash.d.ts.map +1 -0
  180. package/dist/exposure/flash.js +644 -0
  181. package/dist/exposure/flash.js.map +1 -0
  182. package/dist/exposure/metering-scene-radiance.d.ts +72 -0
  183. package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
  184. package/dist/exposure/metering-scene-radiance.js +222 -0
  185. package/dist/exposure/metering-scene-radiance.js.map +1 -0
  186. package/dist/exposure/metering-target.d.ts +67 -0
  187. package/dist/exposure/metering-target.d.ts.map +1 -0
  188. package/dist/exposure/metering-target.js +265 -0
  189. package/dist/exposure/metering-target.js.map +1 -0
  190. package/dist/exposure/metering-temporal.d.ts +76 -0
  191. package/dist/exposure/metering-temporal.d.ts.map +1 -0
  192. package/dist/exposure/metering-temporal.js +210 -0
  193. package/dist/exposure/metering-temporal.js.map +1 -0
  194. package/dist/exposure/metering.d.ts +124 -0
  195. package/dist/exposure/metering.d.ts.map +1 -0
  196. package/dist/exposure/metering.js +422 -0
  197. package/dist/exposure/metering.js.map +1 -0
  198. package/dist/exposure/program-line.d.ts +29 -0
  199. package/dist/exposure/program-line.d.ts.map +1 -0
  200. package/dist/exposure/program-line.js +126 -0
  201. package/dist/exposure/program-line.js.map +1 -0
  202. package/dist/index.d.ts +87 -6
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +85 -6
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +16 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +16 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
  212. package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  218. package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
  220. package/dist/motion/capture-rotation-trajectory.js +15 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  222. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
  223. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
  224. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
  225. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
  226. package/dist/motion/extended-object-projection.d.ts +175 -0
  227. package/dist/motion/extended-object-projection.d.ts.map +1 -0
  228. package/dist/motion/extended-object-projection.js +402 -0
  229. package/dist/motion/extended-object-projection.js.map +1 -0
  230. package/dist/motion/projected-motion.d.ts +11 -0
  231. package/dist/motion/projected-motion.d.ts.map +1 -1
  232. package/dist/motion/projected-motion.js +11 -0
  233. package/dist/motion/projected-motion.js.map +1 -1
  234. package/dist/optics/aperture.d.ts +9 -0
  235. package/dist/optics/aperture.d.ts.map +1 -1
  236. package/dist/optics/aperture.js +9 -0
  237. package/dist/optics/aperture.js.map +1 -1
  238. package/dist/optics/circle-of-confusion.d.ts +8 -0
  239. package/dist/optics/circle-of-confusion.d.ts.map +1 -1
  240. package/dist/optics/circle-of-confusion.js +8 -0
  241. package/dist/optics/circle-of-confusion.js.map +1 -1
  242. package/dist/optics/complex-pupil-psf.d.ts +128 -0
  243. package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
  244. package/dist/optics/complex-pupil-psf.js +462 -0
  245. package/dist/optics/complex-pupil-psf.js.map +1 -0
  246. package/dist/optics/depth-of-field.d.ts +18 -0
  247. package/dist/optics/depth-of-field.d.ts.map +1 -1
  248. package/dist/optics/depth-of-field.js +29 -4
  249. package/dist/optics/depth-of-field.js.map +1 -1
  250. package/dist/optics/diffraction.d.ts +8 -0
  251. package/dist/optics/diffraction.d.ts.map +1 -1
  252. package/dist/optics/diffraction.js +8 -0
  253. package/dist/optics/diffraction.js.map +1 -1
  254. package/dist/optics/focus-breathing.d.ts +13 -0
  255. package/dist/optics/focus-breathing.d.ts.map +1 -1
  256. package/dist/optics/focus-breathing.js +13 -0
  257. package/dist/optics/focus-breathing.js.map +1 -1
  258. package/dist/optics/focus-state.d.ts +47 -0
  259. package/dist/optics/focus-state.d.ts.map +1 -0
  260. package/dist/optics/focus-state.js +78 -0
  261. package/dist/optics/focus-state.js.map +1 -0
  262. package/dist/optics/front-of-lens-filter.d.ts +114 -0
  263. package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
  264. package/dist/optics/front-of-lens-filter.js +468 -0
  265. package/dist/optics/front-of-lens-filter.js.map +1 -0
  266. package/dist/optics/illumination-vignetting.d.ts +9 -0
  267. package/dist/optics/illumination-vignetting.d.ts.map +1 -1
  268. package/dist/optics/illumination-vignetting.js +9 -0
  269. package/dist/optics/illumination-vignetting.js.map +1 -1
  270. package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
  271. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
  272. package/dist/optics/lateral-chromatic-aberration.js +11 -0
  273. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  274. package/dist/optics/lens-psf-profile.d.ts +217 -0
  275. package/dist/optics/lens-psf-profile.d.ts.map +1 -0
  276. package/dist/optics/lens-psf-profile.js +823 -0
  277. package/dist/optics/lens-psf-profile.js.map +1 -0
  278. package/dist/optics/polygon-diffraction.d.ts +67 -0
  279. package/dist/optics/polygon-diffraction.d.ts.map +1 -0
  280. package/dist/optics/polygon-diffraction.js +145 -0
  281. package/dist/optics/polygon-diffraction.js.map +1 -0
  282. package/dist/optics/profile-contract.d.ts +42 -0
  283. package/dist/optics/profile-contract.d.ts.map +1 -0
  284. package/dist/optics/profile-contract.js +92 -0
  285. package/dist/optics/profile-contract.js.map +1 -0
  286. package/dist/optics/psf-foundation.d.ts +16 -3
  287. package/dist/optics/psf-foundation.d.ts.map +1 -1
  288. package/dist/optics/psf-foundation.js +28 -15
  289. package/dist/optics/psf-foundation.js.map +1 -1
  290. package/dist/optics/radial-distortion.d.ts +18 -0
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +18 -0
  293. package/dist/optics/radial-distortion.js.map +1 -1
  294. package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
  295. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
  296. package/dist/optics/scene-to-sensor-irradiance.js +662 -0
  297. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
  298. package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
  299. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
  300. package/dist/optics/scene-to-sensor-quadrature.js +82 -0
  301. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
  302. package/dist/optics/sensor-environment-query.d.ts +60 -0
  303. package/dist/optics/sensor-environment-query.d.ts.map +1 -0
  304. package/dist/optics/sensor-environment-query.js +50 -0
  305. package/dist/optics/sensor-environment-query.js.map +1 -0
  306. package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
  307. package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
  308. package/dist/optics/sensor-psf-quadrature.js +101 -0
  309. package/dist/optics/sensor-psf-quadrature.js.map +1 -0
  310. package/dist/optics/sensor-psf-support.d.ts +20 -0
  311. package/dist/optics/sensor-psf-support.d.ts.map +1 -0
  312. package/dist/optics/sensor-psf-support.js +13 -0
  313. package/dist/optics/sensor-psf-support.js.map +1 -0
  314. package/dist/optics/stray-light.d.ts +91 -0
  315. package/dist/optics/stray-light.d.ts.map +1 -0
  316. package/dist/optics/stray-light.js +110 -0
  317. package/dist/optics/stray-light.js.map +1 -0
  318. package/dist/optics/thin-lens.d.ts +8 -0
  319. package/dist/optics/thin-lens.d.ts.map +1 -1
  320. package/dist/optics/thin-lens.js +8 -0
  321. package/dist/optics/thin-lens.js.map +1 -1
  322. package/dist/output/capture-corrected-sdr.d.ts +49 -0
  323. package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
  324. package/dist/output/capture-corrected-sdr.js +149 -0
  325. package/dist/output/capture-corrected-sdr.js.map +1 -0
  326. package/dist/output/capture-geometry.d.ts.map +1 -1
  327. package/dist/output/capture-geometry.js +8 -0
  328. package/dist/output/capture-geometry.js.map +1 -1
  329. package/dist/output/capture-sdr.d.ts +49 -0
  330. package/dist/output/capture-sdr.d.ts.map +1 -0
  331. package/dist/output/capture-sdr.js +90 -0
  332. package/dist/output/capture-sdr.js.map +1 -0
  333. package/dist/output/crop.d.ts +6 -0
  334. package/dist/output/crop.d.ts.map +1 -1
  335. package/dist/output/crop.js +6 -0
  336. package/dist/output/crop.js.map +1 -1
  337. package/dist/output/geometric-transforms.d.ts +137 -0
  338. package/dist/output/geometric-transforms.d.ts.map +1 -0
  339. package/dist/output/geometric-transforms.js +225 -0
  340. package/dist/output/geometric-transforms.js.map +1 -0
  341. package/dist/output/lens-corrections.d.ts +121 -0
  342. package/dist/output/lens-corrections.d.ts.map +1 -0
  343. package/dist/output/lens-corrections.js +210 -0
  344. package/dist/output/lens-corrections.js.map +1 -0
  345. package/dist/output/sdr-rendering.d.ts +81 -0
  346. package/dist/output/sdr-rendering.d.ts.map +1 -0
  347. package/dist/output/sdr-rendering.js +106 -0
  348. package/dist/output/sdr-rendering.js.map +1 -0
  349. package/dist/output/subject-framing-crop.d.ts +8 -0
  350. package/dist/output/subject-framing-crop.d.ts.map +1 -1
  351. package/dist/output/subject-framing-crop.js +8 -0
  352. package/dist/output/subject-framing-crop.js.map +1 -1
  353. package/dist/schema/camera.d.ts +6 -0
  354. package/dist/schema/camera.d.ts.map +1 -1
  355. package/dist/schema/illumination-spectral.d.ts +51 -0
  356. package/dist/schema/illumination-spectral.d.ts.map +1 -0
  357. package/dist/schema/illumination-spectral.js +132 -0
  358. package/dist/schema/illumination-spectral.js.map +1 -0
  359. package/dist/schema/illumination-temporal.d.ts +156 -0
  360. package/dist/schema/illumination-temporal.d.ts.map +1 -0
  361. package/dist/schema/illumination-temporal.js +554 -0
  362. package/dist/schema/illumination-temporal.js.map +1 -0
  363. package/dist/schema/illumination.d.ts +138 -0
  364. package/dist/schema/illumination.d.ts.map +1 -0
  365. package/dist/schema/illumination.js +483 -0
  366. package/dist/schema/illumination.js.map +1 -0
  367. package/dist/schema/scene-radiance-temporal.d.ts +107 -0
  368. package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
  369. package/dist/schema/scene-radiance-temporal.js +259 -0
  370. package/dist/schema/scene-radiance-temporal.js.map +1 -0
  371. package/dist/schema/scene-radiance.d.ts +185 -0
  372. package/dist/schema/scene-radiance.d.ts.map +1 -0
  373. package/dist/schema/scene-radiance.js +535 -0
  374. package/dist/schema/scene-radiance.js.map +1 -0
  375. package/dist/schema/scene.d.ts +7 -0
  376. package/dist/schema/scene.d.ts.map +1 -1
  377. package/dist/schema/validation.d.ts.map +1 -1
  378. package/dist/schema/validation.js +7 -0
  379. package/dist/schema/validation.js.map +1 -1
  380. package/dist/sensor/accumulated-charge.d.ts +199 -0
  381. package/dist/sensor/accumulated-charge.d.ts.map +1 -0
  382. package/dist/sensor/accumulated-charge.js +450 -0
  383. package/dist/sensor/accumulated-charge.js.map +1 -0
  384. package/dist/sensor/architecture.d.ts +48 -13
  385. package/dist/sensor/architecture.d.ts.map +1 -1
  386. package/dist/sensor/architecture.js +58 -16
  387. package/dist/sensor/architecture.js.map +1 -1
  388. package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
  389. package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
  390. package/dist/sensor/camera-saturation-capacity.js +356 -0
  391. package/dist/sensor/camera-saturation-capacity.js.map +1 -0
  392. package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
  394. package/dist/sensor/capture-color-sampling-binding.js +14 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  396. package/dist/sensor/capture-mode-timing.d.ts +63 -0
  397. package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
  398. package/dist/sensor/capture-mode-timing.js +270 -0
  399. package/dist/sensor/capture-mode-timing.js.map +1 -0
  400. package/dist/sensor/capture-mode.d.ts.map +1 -1
  401. package/dist/sensor/capture-mode.js +13 -0
  402. package/dist/sensor/capture-mode.js.map +1 -1
  403. package/dist/sensor/color-sampling.d.ts.map +1 -1
  404. package/dist/sensor/color-sampling.js +19 -0
  405. package/dist/sensor/color-sampling.js.map +1 -1
  406. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  407. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  409. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  410. package/dist/sensor/dark-current.d.ts +169 -0
  411. package/dist/sensor/dark-current.d.ts.map +1 -0
  412. package/dist/sensor/dark-current.js +427 -0
  413. package/dist/sensor/dark-current.js.map +1 -0
  414. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  415. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  416. package/dist/sensor/environment-photo-signal.js +186 -0
  417. package/dist/sensor/environment-photo-signal.js.map +1 -0
  418. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  419. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.js +561 -0
  421. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  422. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  423. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.js +84 -0
  425. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  426. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  427. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  429. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  430. package/dist/sensor/exposure-window.d.ts +14 -0
  431. package/dist/sensor/exposure-window.d.ts.map +1 -1
  432. package/dist/sensor/exposure-window.js +14 -0
  433. package/dist/sensor/exposure-window.js.map +1 -1
  434. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  435. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  436. package/dist/sensor/iso-signal-chain.js +411 -0
  437. package/dist/sensor/iso-signal-chain.js.map +1 -0
  438. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  439. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  440. package/dist/sensor/local-exposure-binding.js +214 -0
  441. package/dist/sensor/local-exposure-binding.js.map +1 -0
  442. package/dist/sensor/optical-stack.d.ts.map +1 -1
  443. package/dist/sensor/optical-stack.js +17 -0
  444. package/dist/sensor/optical-stack.js.map +1 -1
  445. package/dist/sensor/photon-energy.d.ts +97 -0
  446. package/dist/sensor/photon-energy.d.ts.map +1 -0
  447. package/dist/sensor/photon-energy.js +390 -0
  448. package/dist/sensor/photon-energy.js.map +1 -0
  449. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  450. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  451. package/dist/sensor/physical-charge-capacity.js +345 -0
  452. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  453. package/dist/sensor/pixel-pitch.d.ts +6 -0
  454. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  455. package/dist/sensor/pixel-pitch.js +6 -0
  456. package/dist/sensor/pixel-pitch.js.map +1 -1
  457. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  458. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  459. package/dist/sensor/radiometry-readiness.js +10 -0
  460. package/dist/sensor/radiometry-readiness.js.map +1 -1
  461. package/dist/sensor/raw-readout.d.ts +314 -0
  462. package/dist/sensor/raw-readout.d.ts.map +1 -0
  463. package/dist/sensor/raw-readout.js +914 -0
  464. package/dist/sensor/raw-readout.js.map +1 -0
  465. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  466. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  467. package/dist/sensor/raw-reconstruction.js +424 -0
  468. package/dist/sensor/raw-reconstruction.js.map +1 -0
  469. package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
  470. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
  471. package/dist/sensor/readout-exposure-linkage.js +12 -0
  472. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  473. package/dist/sensor/readout-timing.d.ts +13 -0
  474. package/dist/sensor/readout-timing.d.ts.map +1 -1
  475. package/dist/sensor/readout-timing.js +13 -0
  476. package/dist/sensor/readout-timing.js.map +1 -1
  477. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  478. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  479. package/dist/sensor/response-application-compatibility.js +408 -0
  480. package/dist/sensor/response-application-compatibility.js.map +1 -0
  481. package/dist/sensor/response-operating-range.d.ts +173 -0
  482. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  483. package/dist/sensor/response-operating-range.js +672 -0
  484. package/dist/sensor/response-operating-range.js.map +1 -0
  485. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  486. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  487. package/dist/sensor/responsivity-photocurrent.js +644 -0
  488. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  489. package/dist/sensor/sampling-aperture.d.ts.map +1 -1
  490. package/dist/sensor/sampling-aperture.js +14 -0
  491. package/dist/sensor/sampling-aperture.js.map +1 -1
  492. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  493. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  494. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  495. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  496. package/dist/sensor/sensor-geometry.d.ts +12 -0
  497. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  498. package/dist/sensor/sensor-geometry.js +12 -0
  499. package/dist/sensor/sensor-geometry.js.map +1 -1
  500. package/dist/sensor/signal-noise.d.ts +10 -0
  501. package/dist/sensor/signal-noise.d.ts.map +1 -1
  502. package/dist/sensor/signal-noise.js +10 -0
  503. package/dist/sensor/signal-noise.js.map +1 -1
  504. package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
  505. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
  506. package/dist/sensor/spatial-sample-reduction.js +51 -5
  507. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  508. package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
  509. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
  510. package/dist/sensor/spatial-sampling-quadrature.js +27 -0
  511. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  512. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  513. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  514. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  515. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  516. package/dist/sensor/spectral-coverage.d.ts +24 -0
  517. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  518. package/dist/sensor/spectral-coverage.js +86 -0
  519. package/dist/sensor/spectral-coverage.js.map +1 -0
  520. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  521. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  522. package/dist/sensor/spectral-quadrature.js +542 -0
  523. package/dist/sensor/spectral-quadrature.js.map +1 -0
  524. package/dist/sensor/spectral-response.d.ts +192 -0
  525. package/dist/sensor/spectral-response.d.ts.map +1 -0
  526. package/dist/sensor/spectral-response.js +664 -0
  527. package/dist/sensor/spectral-response.js.map +1 -0
  528. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  529. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  530. package/dist/sensor/temporal-eqe-sum.js +30 -0
  531. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  532. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  533. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  534. package/dist/sensor/temporal-photo-signal.js +110 -0
  535. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  536. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  537. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  538. package/dist/sensor/temporal-sample-binding.js +32 -0
  539. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  540. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  541. package/dist/simulation/poc-simulation.js +34 -11
  542. package/dist/simulation/poc-simulation.js.map +1 -1
  543. package/dist/stabilization/camera-shake.d.ts +11 -0
  544. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  545. package/dist/stabilization/camera-shake.js +11 -0
  546. package/dist/stabilization/camera-shake.js.map +1 -1
  547. package/dist/stabilization/system.d.ts +218 -0
  548. package/dist/stabilization/system.d.ts.map +1 -0
  549. package/dist/stabilization/system.js +695 -0
  550. package/dist/stabilization/system.js.map +1 -0
  551. package/docs/API_REFERENCE.md +2017 -0
  552. package/docs/API_STYLE.md +132 -0
  553. package/docs/ARCHITECTURE.md +134 -24
  554. package/docs/AUTOMATION_COORDINATION.md +2 -0
  555. package/docs/CAPTURE_COLOR.md +25 -0
  556. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  557. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  558. package/docs/CAPTURE_SDR.md +20 -0
  559. package/docs/DEVELOPERS.md +60 -0
  560. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  561. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  562. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  563. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  564. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  565. package/docs/IMAGE_FORMATION.md +80 -10
  566. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  567. package/docs/MOTION_AND_SIGNAL.md +5 -3
  568. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  569. package/docs/PERFORMANCE_BASELINE.md +56 -0
  570. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  571. package/docs/PHYSICS_FOUNDATION.md +152 -5
  572. package/docs/POC_API.md +2 -0
  573. package/docs/POC_PROJECTION_REUSE.md +124 -0
  574. package/docs/PROCESSED_OUTPUT.md +157 -0
  575. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  576. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  577. package/docs/PROVENANCE.md +4 -0
  578. package/docs/PSF_FOUNDATION.md +110 -88
  579. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  580. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  581. package/docs/RELEASE_1_0.md +65 -0
  582. package/docs/RELEASE_AUDIT.md +38 -0
  583. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  584. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  585. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  586. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  587. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  588. package/docs/SDR_RENDERING.md +33 -0
  589. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  590. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  591. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  592. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  593. package/docs/SENSOR_RAW_FRAME.md +20 -0
  594. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  595. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  596. package/docs/SIMULATED_CAPTURE.md +65 -0
  597. package/docs/STABILIZATION.md +160 -17
  598. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  599. package/docs/TIER_ACCEPTANCE.md +129 -0
  600. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  601. package/docs/USAGE.md +5050 -1047
  602. package/docs/V1_COMPOSITION_MAP.md +123 -0
  603. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  604. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  605. package/docs/api/camera-equivalent-focal-length.md +53 -0
  606. package/docs/api/camera-field-of-view.md +119 -0
  607. package/docs/api/camera-projected-object-size.md +54 -0
  608. package/docs/api/capture-capture-export-metadata.md +107 -0
  609. package/docs/api/capture-environment-raw-producer.md +56 -0
  610. package/docs/api/capture-focus-control.md +419 -0
  611. package/docs/api/capture-linear-encoding.md +99 -0
  612. package/docs/api/capture-photographic-export.md +172 -0
  613. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  614. package/docs/api/capture-release-sequence.md +252 -0
  615. package/docs/api/capture-sensor-raw-frame.md +66 -0
  616. package/docs/api/capture-sensor-raw-producer.md +98 -0
  617. package/docs/api/capture-simulated-capture.md +179 -0
  618. package/docs/api/color-capture-color.md +122 -0
  619. package/docs/api/color-white-balance.md +386 -0
  620. package/docs/api/composition-image-formation-plan.md +825 -0
  621. package/docs/api/composition-plan-consumer.md +98 -0
  622. package/docs/api/core-calculation-result.md +220 -0
  623. package/docs/api/core-configuration-error.md +19 -0
  624. package/docs/api/core-image-formation.md +204 -0
  625. package/docs/api/core-scientific-assurance.md +214 -0
  626. package/docs/api/core-spectral-composition.md +268 -0
  627. package/docs/api/core-spectral.md +78 -0
  628. package/docs/api/core-validation.md +34 -0
  629. package/docs/api/core-version.md +14 -0
  630. package/docs/api/equipment-exposure-capabilities.md +270 -0
  631. package/docs/api/equipment-generic-tier-assets.md +82 -0
  632. package/docs/api/equipment-generic-tier-presets.md +103 -0
  633. package/docs/api/equipment-iso-capabilities.md +295 -0
  634. package/docs/api/equipment-metering-capabilities.md +126 -0
  635. package/docs/api/equipment-release-capabilities.md +91 -0
  636. package/docs/api/exports.json +5656 -0
  637. package/docs/api/exposure-exposure-duration-control.md +115 -0
  638. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  639. package/docs/api/exposure-exposure.md +150 -0
  640. package/docs/api/exposure-flash.md +327 -0
  641. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  642. package/docs/api/exposure-metering-target.md +134 -0
  643. package/docs/api/exposure-metering-temporal.md +77 -0
  644. package/docs/api/exposure-metering.md +172 -0
  645. package/docs/api/exposure-program-line.md +64 -0
  646. package/docs/api/motion-camera-rotation.md +215 -0
  647. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  648. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  649. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  650. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  651. package/docs/api/motion-extended-object-projection.md +312 -0
  652. package/docs/api/motion-projected-motion.md +60 -0
  653. package/docs/api/optics-aperture.md +69 -0
  654. package/docs/api/optics-circle-of-confusion.md +46 -0
  655. package/docs/api/optics-complex-pupil-psf.md +193 -0
  656. package/docs/api/optics-depth-of-field.md +92 -0
  657. package/docs/api/optics-diffraction.md +46 -0
  658. package/docs/api/optics-focus-breathing.md +119 -0
  659. package/docs/api/optics-focus-state.md +64 -0
  660. package/docs/api/optics-front-of-lens-filter.md +263 -0
  661. package/docs/api/optics-illumination-vignetting.md +95 -0
  662. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  663. package/docs/api/optics-lens-psf-profile.md +380 -0
  664. package/docs/api/optics-polygon-diffraction.md +68 -0
  665. package/docs/api/optics-profile-contract.md +47 -0
  666. package/docs/api/optics-psf-foundation.md +181 -0
  667. package/docs/api/optics-radial-distortion.md +194 -0
  668. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  669. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  670. package/docs/api/optics-sensor-environment-query.md +58 -0
  671. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  672. package/docs/api/optics-stray-light.md +109 -0
  673. package/docs/api/optics-thin-lens.md +53 -0
  674. package/docs/api/output-capture-corrected-sdr.md +71 -0
  675. package/docs/api/output-capture-geometry.md +500 -0
  676. package/docs/api/output-capture-sdr.md +69 -0
  677. package/docs/api/output-crop.md +47 -0
  678. package/docs/api/output-geometric-transforms.md +199 -0
  679. package/docs/api/output-lens-corrections.md +162 -0
  680. package/docs/api/output-sdr-rendering.md +122 -0
  681. package/docs/api/output-subject-framing-crop.md +59 -0
  682. package/docs/api/schema-camera.md +84 -0
  683. package/docs/api/schema-illumination-spectral.md +77 -0
  684. package/docs/api/schema-illumination-temporal.md +289 -0
  685. package/docs/api/schema-illumination.md +246 -0
  686. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  687. package/docs/api/schema-scene-radiance.md +415 -0
  688. package/docs/api/schema-scene.md +105 -0
  689. package/docs/api/schema-validation.md +25 -0
  690. package/docs/api/sensor-accumulated-charge.md +273 -0
  691. package/docs/api/sensor-architecture.md +155 -0
  692. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  693. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  694. package/docs/api/sensor-capture-mode-timing.md +123 -0
  695. package/docs/api/sensor-capture-mode.md +321 -0
  696. package/docs/api/sensor-color-sampling.md +228 -0
  697. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  698. package/docs/api/sensor-dark-current.md +227 -0
  699. package/docs/api/sensor-environment-photo-signal.md +77 -0
  700. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  701. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  702. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  703. package/docs/api/sensor-exposure-window.md +183 -0
  704. package/docs/api/sensor-iso-signal-chain.md +264 -0
  705. package/docs/api/sensor-local-exposure-binding.md +126 -0
  706. package/docs/api/sensor-optical-stack.md +211 -0
  707. package/docs/api/sensor-photon-energy.md +149 -0
  708. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  709. package/docs/api/sensor-pixel-pitch.md +41 -0
  710. package/docs/api/sensor-radiometry-readiness.md +240 -0
  711. package/docs/api/sensor-raw-readout.md +499 -0
  712. package/docs/api/sensor-raw-reconstruction.md +260 -0
  713. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  714. package/docs/api/sensor-readout-timing.md +209 -0
  715. package/docs/api/sensor-response-application-compatibility.md +256 -0
  716. package/docs/api/sensor-response-operating-range.md +293 -0
  717. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  718. package/docs/api/sensor-sampling-aperture.md +221 -0
  719. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  720. package/docs/api/sensor-sensor-geometry.md +143 -0
  721. package/docs/api/sensor-signal-noise.md +75 -0
  722. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  723. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  724. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  725. package/docs/api/sensor-spectral-coverage.md +33 -0
  726. package/docs/api/sensor-spectral-quadrature.md +183 -0
  727. package/docs/api/sensor-spectral-response.md +291 -0
  728. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  729. package/docs/api/simulation-poc-simulation.md +364 -0
  730. package/docs/api/stabilization-camera-shake.md +71 -0
  731. package/docs/api/stabilization-system.md +442 -0
  732. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  733. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  734. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  735. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  736. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  737. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  738. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  739. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  740. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  741. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  742. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  743. package/docs/examples/production-capture.mjs +34 -0
  744. package/docs/examples/production-request.json +4613 -0
  745. package/docs/examples/quick-start.mjs +12 -0
  746. package/docs/validation/documentation-fragments.json +212 -0
  747. package/docs/validation/release-audit-inventory.json +1306 -0
  748. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  749. package/package.json +15 -3
@@ -0,0 +1,72 @@
1
+ import { type EvidenceProvenance } from "../core/evidence-provenance.js";
2
+ import type { ResolvedCaptureGeometry } from "../output/capture-geometry.js";
3
+ import { assessSceneMaterialResponseFidelity, type SceneMaterialResponseProfile, type SceneRadianceProviderProfile } from "../schema/scene-radiance.js";
4
+ import type { SceneIlluminationProfile } from "../schema/illumination.js";
5
+ import type { SceneIlluminationTemporalProfile } from "../schema/illumination-temporal.js";
6
+ import type { ExposureMeteringSampleSet, ExposureMeteringZoneSample } from "./metering.js";
7
+ export declare const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION: "0.1.0";
8
+ export interface SceneRadianceMeteringDerivationProfile {
9
+ schemaVersion: typeof SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION;
10
+ derivationId: string;
11
+ scientificStatus: "approximation";
12
+ method: "renderer-provided-pre-exposure-relative-reduction";
13
+ spectralWeighting: "not-calibrated";
14
+ evidence: readonly EvidenceProvenance[];
15
+ limitation: string;
16
+ }
17
+ export type SceneRadianceMeteringTemporalContext = {
18
+ kind: "time-invariant";
19
+ } | {
20
+ kind: "registered-time-varying";
21
+ illuminationTemporalProfileId: string;
22
+ timeReference: "first-opening-boundary-phase";
23
+ captureTimeSecondsFromReference: number;
24
+ };
25
+ export interface SceneRadianceMeteringSourceContext {
26
+ kind: "scene-radiance-provider-derived-relative";
27
+ sceneId: string;
28
+ sceneStateId: string;
29
+ providerProfileId: string;
30
+ illuminationProfileId: string;
31
+ materialResponseProfileId: string;
32
+ derivationProfileId: string;
33
+ providerScientificStatus: SceneRadianceProviderProfile["scientificStatus"];
34
+ materialResponseFidelity: ReturnType<typeof assessSceneMaterialResponseFidelity>;
35
+ temporal: SceneRadianceMeteringTemporalContext;
36
+ spectralReductionCalibrated: false;
37
+ calibratedLuminanceClaimAuthorized: false;
38
+ calibratedSceneRadianceClaimAuthorized: false;
39
+ }
40
+ export interface SceneRadianceDerivedExposureMeteringSampleSet extends ExposureMeteringSampleSet {
41
+ sourceContext: SceneRadianceMeteringSourceContext;
42
+ }
43
+ export interface CreateSceneRadianceDerivedExposureMeteringSampleSetInput {
44
+ measurementId: string;
45
+ sceneStateId: string;
46
+ providerProfile: SceneRadianceProviderProfile;
47
+ illuminationProfile: SceneIlluminationProfile;
48
+ materialResponseProfile: SceneMaterialResponseProfile;
49
+ illuminationTemporalProfile?: SceneIlluminationTemporalProfile;
50
+ captureTimeSecondsFromReference?: number;
51
+ captureGeometry: ResolvedCaptureGeometry;
52
+ derivationProfile: SceneRadianceMeteringDerivationProfile;
53
+ samples: readonly ExposureMeteringZoneSample[];
54
+ }
55
+ /**
56
+ * Parses the declared approximation used to reduce renderer/provider scene
57
+ * information into the scalar relative-linear domain consumed by metering.
58
+ *
59
+ * This profile explicitly does not authorize a calibrated luminance or
60
+ * spectral-to-photometric conversion claim.
61
+ */
62
+ export declare function parseSceneRadianceMeteringDerivationProfile(value: unknown): SceneRadianceMeteringDerivationProfile;
63
+ /**
64
+ * Creates a relative pre-exposure meter sample set bound to one validated #85
65
+ * provider context.
66
+ *
67
+ * The caller/renderer still supplies the scalar relative samples. This bridge
68
+ * validates identity and timing semantics only; it does not convert spectral
69
+ * radiance into luminance or define a calibrated meter spectral response.
70
+ */
71
+ export declare function createSceneRadianceDerivedExposureMeteringSampleSet(input: CreateSceneRadianceDerivedExposureMeteringSampleSetInput): SceneRadianceDerivedExposureMeteringSampleSet;
72
+ //# sourceMappingURL=metering-scene-radiance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering-scene-radiance.d.ts","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"AAeA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mCAAmC,EACnC,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,gCAAgC,EACjC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,iDAAiD,EAC5D,OAAgB,CAAC;AAEnB,MAAM,WAAW,sCAAsC;IACrD,aAAa,EACX,OAAO,iDAAiD,CAAC;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,eAAe,CAAC;IAClC,MAAM,EACJ,mDAAmD,CAAC;IACtD,iBAAiB,EACf,gBAAgB,CAAC;IACnB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,oCAAoC,GAC5C;IACE,IAAI,EAAE,gBAAgB,CAAC;CACxB,GACD;IACE,IAAI,EACF,yBAAyB,CAAC;IAC5B,6BAA6B,EAC3B,MAAM,CAAC;IACT,aAAa,EACX,8BAA8B,CAAC;IACjC,+BAA+B,EAC7B,MAAM,CAAC;CACV,CAAC;AAEN,MAAM,WAAW,kCAAkC;IACjD,IAAI,EACF,0CAA0C,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EACtB,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;IACnD,wBAAwB,EACtB,UAAU,CACR,OAAO,mCAAmC,CAC3C,CAAC;IACJ,QAAQ,EACN,oCAAoC,CAAC;IACvC,2BAA2B,EAAE,KAAK,CAAC;IACnC,kCAAkC,EAChC,KAAK,CAAC;IACR,sCAAsC,EACpC,KAAK,CAAC;CACT;AAED,MAAM,WAAW,6CACf,SAAQ,yBAAyB;IACjC,aAAa,EACX,kCAAkC,CAAC;CACtC;AAED,MAAM,WAAW,wDAAwD;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EACb,4BAA4B,CAAC;IAC/B,mBAAmB,EACjB,wBAAwB,CAAC;IAC3B,uBAAuB,EACrB,4BAA4B,CAAC;IAC/B,2BAA2B,CAAC,EAC1B,gCAAgC,CAAC;IACnC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,eAAe,EACb,uBAAuB,CAAC;IAC1B,iBAAiB,EACf,sCAAsC,CAAC;IACzC,OAAO,EACL,SAAS,0BAA0B,EAAE,CAAC;CACzC;AAgDD;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,OAAO,GACb,sCAAsC,CAgExC;AAgKD;;;;;;;GAOG;AACH,wBAAgB,mDAAmD,CACjE,KAAK,EACH,wDAAwD,GACzD,6CAA6C,CA0G/C"}
@@ -0,0 +1,222 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Module boundary and integration notes.
4
+ * Parses the declared approximation used to reduce renderer/provider scene information into the scalar
5
+ * relative-linear domain consumed by metering. This profile explicitly does not authorize a calibrated
6
+ * luminance or spectral-to-photometric conversion claim.
7
+ * Creates a relative pre-exposure meter sample set bound to one validated #85 provider context. The
8
+ * caller/renderer still supplies the scalar relative samples. This bridge validates identity and
9
+ * timing semantics only; it does not convert spectral radiance into luminance or define a calibrated
10
+ * meter spectral response.
11
+ * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
12
+ */
13
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
14
+ import { parseEvidenceList } from "../core/evidence-provenance.js";
15
+ import { InvalidScientificInputError } from "../core/validation.js";
16
+ import { assessSceneMaterialResponseFidelity } from "../schema/scene-radiance.js";
17
+ export const SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION = "0.1.0";
18
+ function requireRecord(value, path) {
19
+ if (typeof value !== "object" ||
20
+ value === null ||
21
+ Array.isArray(value)) {
22
+ throw new InvalidConfigurationError(path + " must be an object.");
23
+ }
24
+ return value;
25
+ }
26
+ function requireNonEmptyString(value, path) {
27
+ if (typeof value !== "string" ||
28
+ value.trim().length === 0) {
29
+ throw new InvalidConfigurationError(path + " must be a non-empty string.");
30
+ }
31
+ return value.trim();
32
+ }
33
+ function requireFinite(value, path) {
34
+ if (typeof value !== "number" ||
35
+ !Number.isFinite(value)) {
36
+ throw new InvalidScientificInputError(path + " must be finite.");
37
+ }
38
+ return value;
39
+ }
40
+ /**
41
+ * Parses the declared approximation used to reduce renderer/provider scene
42
+ * information into the scalar relative-linear domain consumed by metering.
43
+ *
44
+ * This profile explicitly does not authorize a calibrated luminance or
45
+ * spectral-to-photometric conversion claim.
46
+ */
47
+ export function parseSceneRadianceMeteringDerivationProfile(value) {
48
+ const record = requireRecord(value, "sceneRadianceMeteringDerivationProfile");
49
+ if (record.schemaVersion !==
50
+ SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION) {
51
+ throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.schemaVersion must be "' +
52
+ SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION +
53
+ '".');
54
+ }
55
+ if (record.scientificStatus !==
56
+ "approximation") {
57
+ throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.scientificStatus must be "approximation" in schema 0.1.0.');
58
+ }
59
+ if (record.method !==
60
+ "renderer-provided-pre-exposure-relative-reduction") {
61
+ throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.method must be "renderer-provided-pre-exposure-relative-reduction".');
62
+ }
63
+ if (record.spectralWeighting !==
64
+ "not-calibrated") {
65
+ throw new InvalidConfigurationError('sceneRadianceMeteringDerivationProfile.spectralWeighting must be "not-calibrated" in schema 0.1.0.');
66
+ }
67
+ return {
68
+ schemaVersion: SCENE_RADIANCE_METERING_DERIVATION_SCHEMA_VERSION,
69
+ derivationId: requireNonEmptyString(record.derivationId, "sceneRadianceMeteringDerivationProfile.derivationId"),
70
+ scientificStatus: "approximation",
71
+ method: "renderer-provided-pre-exposure-relative-reduction",
72
+ spectralWeighting: "not-calibrated",
73
+ evidence: parseEvidenceList(record.evidence, "sceneRadianceMeteringDerivationProfile.evidence"),
74
+ limitation: requireNonEmptyString(record.limitation, "sceneRadianceMeteringDerivationProfile.limitation")
75
+ };
76
+ }
77
+ function validateProviderContext(input) {
78
+ const { providerProfile, illuminationProfile, illuminationTemporalProfile, materialResponseProfile } = input;
79
+ if (providerProfile.sceneId !==
80
+ illuminationProfile.sceneId) {
81
+ throw new InvalidScientificInputError("Provider and illumination profiles must reference the same sceneId.");
82
+ }
83
+ if (providerProfile.sceneId !==
84
+ materialResponseProfile.sceneId) {
85
+ throw new InvalidScientificInputError("Provider and material-response profiles must reference the same sceneId.");
86
+ }
87
+ if (providerProfile.illuminationProfileId !==
88
+ illuminationProfile.profileId) {
89
+ throw new InvalidScientificInputError("Provider illuminationProfileId must match the supplied illumination profile.");
90
+ }
91
+ if (providerProfile.materialResponseProfileId !==
92
+ materialResponseProfile.profileId) {
93
+ throw new InvalidScientificInputError("Provider materialResponseProfileId must match the supplied material-response profile.");
94
+ }
95
+ const materialResponseFidelity = assessSceneMaterialResponseFidelity(materialResponseProfile);
96
+ if (providerProfile.fidelity.material !==
97
+ materialResponseFidelity) {
98
+ throw new InvalidScientificInputError("Provider material fidelity must match the supplied material-response profile.");
99
+ }
100
+ if (providerProfile
101
+ .illuminationTemporalProfileId ===
102
+ undefined) {
103
+ if (illuminationTemporalProfile !==
104
+ undefined) {
105
+ throw new InvalidScientificInputError("A temporal illumination profile was supplied but the provider profile does not bind one.");
106
+ }
107
+ if (input
108
+ .captureTimeSecondsFromReference !==
109
+ undefined) {
110
+ throw new InvalidScientificInputError("captureTimeSecondsFromReference must be omitted for a time-invariant provider context.");
111
+ }
112
+ return materialResponseFidelity;
113
+ }
114
+ if (illuminationTemporalProfile ===
115
+ undefined) {
116
+ throw new InvalidScientificInputError("Provider illuminationTemporalProfileId requires the matching temporal illumination profile.");
117
+ }
118
+ if (providerProfile
119
+ .illuminationTemporalProfileId !==
120
+ illuminationTemporalProfile.profileId) {
121
+ throw new InvalidScientificInputError("Provider illuminationTemporalProfileId must match the supplied temporal illumination profile.");
122
+ }
123
+ if (providerProfile.sceneId !==
124
+ illuminationTemporalProfile.sceneId) {
125
+ throw new InvalidScientificInputError("Provider and temporal illumination profiles must reference the same sceneId.");
126
+ }
127
+ if (providerProfile
128
+ .illuminationProfileId !==
129
+ illuminationTemporalProfile
130
+ .illuminationProfileId) {
131
+ throw new InvalidScientificInputError("Temporal illumination profile must bind the provider's illuminationProfileId.");
132
+ }
133
+ const knownSourceIds = new Set(illuminationProfile.sources.map((entry) => entry.sourceId));
134
+ for (const binding of illuminationTemporalProfile
135
+ .sourceBindings) {
136
+ if (!knownSourceIds.has(binding.sourceId)) {
137
+ throw new InvalidScientificInputError("Temporal illumination source binding references a sourceId that is not declared by the illumination profile.");
138
+ }
139
+ }
140
+ if (input
141
+ .captureTimeSecondsFromReference ===
142
+ undefined) {
143
+ throw new InvalidScientificInputError("Time-varying scene-radiance metering requires an explicit captureTimeSecondsFromReference.");
144
+ }
145
+ requireFinite(input.captureTimeSecondsFromReference, "captureTimeSecondsFromReference");
146
+ return materialResponseFidelity;
147
+ }
148
+ /**
149
+ * Creates a relative pre-exposure meter sample set bound to one validated #85
150
+ * provider context.
151
+ *
152
+ * The caller/renderer still supplies the scalar relative samples. This bridge
153
+ * validates identity and timing semantics only; it does not convert spectral
154
+ * radiance into luminance or define a calibrated meter spectral response.
155
+ */
156
+ export function createSceneRadianceDerivedExposureMeteringSampleSet(input) {
157
+ const derivationProfile = parseSceneRadianceMeteringDerivationProfile(input.derivationProfile);
158
+ const materialResponseFidelity = validateProviderContext(input);
159
+ if (typeof input.measurementId !==
160
+ "string" ||
161
+ input.measurementId.trim().length ===
162
+ 0) {
163
+ throw new InvalidScientificInputError("measurementId must be a non-empty string.");
164
+ }
165
+ if (typeof input.sceneStateId !==
166
+ "string" ||
167
+ input.sceneStateId.trim().length ===
168
+ 0) {
169
+ throw new InvalidScientificInputError("sceneStateId must be a non-empty string.");
170
+ }
171
+ if (!Array.isArray(input.samples) ||
172
+ input.samples.length === 0) {
173
+ throw new InvalidScientificInputError("samples must be a non-empty array.");
174
+ }
175
+ const temporal = input.providerProfile
176
+ .illuminationTemporalProfileId ===
177
+ undefined
178
+ ? {
179
+ kind: "time-invariant"
180
+ }
181
+ : {
182
+ kind: "registered-time-varying",
183
+ illuminationTemporalProfileId: input.providerProfile
184
+ .illuminationTemporalProfileId,
185
+ timeReference: "first-opening-boundary-phase",
186
+ captureTimeSecondsFromReference: input
187
+ .captureTimeSecondsFromReference
188
+ };
189
+ return {
190
+ measurementId: input.measurementId.trim(),
191
+ sceneStateId: input.sceneStateId.trim(),
192
+ inputDomain: "relative-pre-exposure-linear-signal",
193
+ captureRegion: "oriented-active-capture",
194
+ captureGeometry: input.captureGeometry,
195
+ processingState: {
196
+ exposureSettingsApplied: false,
197
+ whiteBalanceApplied: false,
198
+ toneMappingApplied: false,
199
+ displayGammaApplied: false,
200
+ sharpeningApplied: false
201
+ },
202
+ samples: input.samples,
203
+ sourceContext: {
204
+ kind: "scene-radiance-provider-derived-relative",
205
+ sceneId: input.providerProfile.sceneId,
206
+ sceneStateId: input.sceneStateId.trim(),
207
+ providerProfileId: input.providerProfile.profileId,
208
+ illuminationProfileId: input.illuminationProfile.profileId,
209
+ materialResponseProfileId: input.materialResponseProfile
210
+ .profileId,
211
+ derivationProfileId: derivationProfile.derivationId,
212
+ providerScientificStatus: input.providerProfile
213
+ .scientificStatus,
214
+ materialResponseFidelity,
215
+ temporal,
216
+ spectralReductionCalibrated: false,
217
+ calibratedLuminanceClaimAuthorized: false,
218
+ calibratedSceneRadianceClaimAuthorized: false
219
+ }
220
+ };
221
+ }
222
+ //# sourceMappingURL=metering-scene-radiance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering-scene-radiance.js","sourceRoot":"","sources":["../../src/exposure/metering-scene-radiance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { ExposureMeteringResult } from "./metering.js";
2
+ import type { SceneRadianceTemporalExposureMeteringResult } from "./metering-temporal.js";
3
+ export declare const EXPOSURE_METER_TARGET_SCHEMA_VERSION: "0.1.0";
4
+ export type ExposureMeterTargetSourceResult = ExposureMeteringResult | SceneRadianceTemporalExposureMeteringResult;
5
+ export type ExposureMeterTargetSourceKind = "spatial-metering-result" | "temporal-metering-result";
6
+ export interface ExposureMeterSnapshotIdentity {
7
+ sourceKind: ExposureMeterTargetSourceKind;
8
+ measurementId: string;
9
+ sceneStateId: string;
10
+ meteringProfileId: string;
11
+ }
12
+ interface ExposureMeterTargetBase {
13
+ schemaVersion: typeof EXPOSURE_METER_TARGET_SCHEMA_VERSION;
14
+ targetId: string;
15
+ sourceMeterSnapshot: ExposureMeterSnapshotIdentity;
16
+ scientificStatus: "approximation";
17
+ inputDomain: "relative-pre-exposure-linear-signal";
18
+ baseTargetRelativeSignal: number;
19
+ meteredRelativeSignal: number;
20
+ exposureCompensationStops: number;
21
+ exposureCompensationApplied: boolean;
22
+ meterMeasurementMutated: false;
23
+ sourceMeterSnapshotPreserved: true;
24
+ resultReusableForAeLock: true;
25
+ automaticExposureResolved: false;
26
+ intendedConsumer: "exposure-mode-resolver";
27
+ }
28
+ export type ExposureMeterTarget = (ExposureMeterTargetBase & {
29
+ status: "resolved";
30
+ baseRequiredExposureScaleToTarget: number;
31
+ baseExposureOffsetStopsToTarget: number;
32
+ requiredExposureScaleToTarget: number;
33
+ exposureOffsetStopsToTarget: number;
34
+ }) | (ExposureMeterTargetBase & {
35
+ status: "no-signal";
36
+ baseRequiredExposureScaleResolved: false;
37
+ baseExposureOffsetStopsResolved: false;
38
+ requiredExposureScaleResolved: false;
39
+ exposureOffsetStopsResolved: false;
40
+ });
41
+ export interface CreateExposureMeterTargetInput {
42
+ targetId: string;
43
+ meterResult: ExposureMeterTargetSourceResult;
44
+ }
45
+ export interface SetExposureCompensationOnMeterTargetInput {
46
+ targetId: string;
47
+ baseTarget: ExposureMeterTarget;
48
+ exposureCompensationStops: number;
49
+ }
50
+ /**
51
+ * Freezes one metering result into the stable relative exposure target
52
+ * consumed by downstream camera-control policy.
53
+ *
54
+ * The target copies the meter snapshot by value. Future scene/light changes do
55
+ * not mutate this object, which is the engine seam needed for AE-lock behavior.
56
+ */
57
+ export declare function createExposureMeterTargetFromMeteringResult(input: CreateExposureMeterTargetInput): ExposureMeterTarget;
58
+ /**
59
+ * Sets an absolute exposure-compensation value on a frozen meter target.
60
+ *
61
+ * Compensation is always re-derived from the uncompensated base target, so
62
+ * repeated UI updates cannot accidentally accumulate floating-point/control
63
+ * drift. Positive compensation requests more exposure.
64
+ */
65
+ export declare function setExposureCompensationOnMeterTarget(input: SetExposureCompensationOnMeterTargetInput): ExposureMeterTarget;
66
+ export {};
67
+ //# sourceMappingURL=metering-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering-target.d.ts","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,2CAA2C,EAC5C,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,oCAAoC,EAC/C,OAAgB,CAAC;AAEnB,MAAM,MAAM,+BAA+B,GACvC,sBAAsB,GACtB,2CAA2C,CAAC;AAEhD,MAAM,MAAM,6BAA6B,GACrC,yBAAyB,GACzB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EACR,6BAA6B,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,uBAAuB;IAC/B,aAAa,EACX,OAAO,oCAAoC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EACjB,6BAA6B,CAAC;IAChC,gBAAgB,EAAE,eAAe,CAAC;IAClC,WAAW,EACT,qCAAqC,CAAC;IACxC,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,2BAA2B,EAAE,OAAO,CAAC;IACrC,uBAAuB,EAAE,KAAK,CAAC;IAC/B,4BAA4B,EAAE,IAAI,CAAC;IACnC,uBAAuB,EAAE,IAAI,CAAC;IAC9B,yBAAyB,EAAE,KAAK,CAAC;IACjC,gBAAgB,EACd,wBAAwB,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAC3B,CAAC,uBAAuB,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,iCAAiC,EAC/B,MAAM,CAAC;IACT,+BAA+B,EAC7B,MAAM,CAAC;IACT,6BAA6B,EAC3B,MAAM,CAAC;IACT,2BAA2B,EACzB,MAAM,CAAC;CACV,CAAC,GACF,CAAC,uBAAuB,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,iCAAiC,EAC/B,KAAK,CAAC;IACR,+BAA+B,EAC7B,KAAK,CAAC;IACR,6BAA6B,EAC3B,KAAK,CAAC;IACR,2BAA2B,EACzB,KAAK,CAAC;CACT,CAAC,CAAC;AAEP,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EACT,+BAA+B,CAAC;CACnC;AAED,MAAM,WAAW,yCAAyC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,mBAAmB,CAAC;IAChC,yBAAyB,EAAE,MAAM,CAAC;CACnC;AA8MD;;;;;;GAMG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EACH,8BAA8B,GAC/B,mBAAmB,CAsErB;AAoGD;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAClD,KAAK,EACH,yCAAyC,GAC1C,mBAAmB,CA+FrB"}
@@ -0,0 +1,265 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ /**
3
+ * Module boundary and integration notes.
4
+ * Freezes one metering result into the stable relative exposure target consumed by downstream
5
+ * camera-control policy. The target copies the meter snapshot by value. Future scene/light changes do
6
+ * not mutate this object, which is the engine seam needed for AE-lock behavior.
7
+ * Sets an absolute exposure-compensation value on a frozen meter target. Compensation is always
8
+ * re-derived from the uncompensated base target, so repeated UI updates cannot accidentally accumulate
9
+ * floating-point/control drift. Positive compensation requests more exposure.
10
+ * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
11
+ */
12
+ import { InvalidScientificInputError } from "../core/validation.js";
13
+ export const EXPOSURE_METER_TARGET_SCHEMA_VERSION = "0.1.0";
14
+ function requireNonEmptyString(value, path) {
15
+ if (typeof value !== "string" ||
16
+ value.trim().length === 0) {
17
+ throw new InvalidScientificInputError(path + " must be a non-empty string.");
18
+ }
19
+ return value.trim();
20
+ }
21
+ function requireFinite(value, path) {
22
+ if (typeof value !== "number" ||
23
+ !Number.isFinite(value)) {
24
+ throw new InvalidScientificInputError(path + " must be finite.");
25
+ }
26
+ return value;
27
+ }
28
+ function requirePositiveFinite(value, path) {
29
+ const parsed = requireFinite(value, path);
30
+ if (parsed <= 0) {
31
+ throw new InvalidScientificInputError(path + " must be greater than zero.");
32
+ }
33
+ return parsed;
34
+ }
35
+ function requireNonNegativeFinite(value, path) {
36
+ const parsed = requireFinite(value, path);
37
+ if (parsed < 0) {
38
+ throw new InvalidScientificInputError(path +
39
+ " must be greater than or equal to zero.");
40
+ }
41
+ return parsed;
42
+ }
43
+ function meterSnapshotIdentity(result) {
44
+ const hasSpatialId = "measurementId" in result;
45
+ const hasTemporalId = "temporalMeasurementId" in
46
+ result;
47
+ if (hasSpatialId === hasTemporalId) {
48
+ throw new InvalidScientificInputError("meterResult must identify exactly one spatial or temporal metering result.");
49
+ }
50
+ return {
51
+ sourceKind: hasSpatialId
52
+ ? "spatial-metering-result"
53
+ : "temporal-metering-result",
54
+ measurementId: requireNonEmptyString(hasSpatialId
55
+ ? result.measurementId
56
+ : result
57
+ .temporalMeasurementId, hasSpatialId
58
+ ? "meterResult.measurementId"
59
+ : "meterResult.temporalMeasurementId"),
60
+ sceneStateId: requireNonEmptyString(result.sceneStateId, "meterResult.sceneStateId"),
61
+ meteringProfileId: requireNonEmptyString(result.profileId, "meterResult.profileId")
62
+ };
63
+ }
64
+ function validateCommonMeterResult(result) {
65
+ if (result.scientificStatus !==
66
+ "approximation") {
67
+ throw new InvalidScientificInputError('meterResult.scientificStatus must be "approximation" for schema 0.1.0.');
68
+ }
69
+ if (result.inputDomain !==
70
+ "relative-pre-exposure-linear-signal") {
71
+ throw new InvalidScientificInputError('meterResult.inputDomain must be "relative-pre-exposure-linear-signal".');
72
+ }
73
+ if (result.exposureCompensationApplied !==
74
+ false) {
75
+ throw new InvalidScientificInputError("meterResult must be the uncompensated base metering result.");
76
+ }
77
+ if (result.automaticExposureResolved !==
78
+ false) {
79
+ throw new InvalidScientificInputError("meterResult must precede automatic exposure resolution.");
80
+ }
81
+ if (result.resultReusableForAeLock !==
82
+ true) {
83
+ throw new InvalidScientificInputError("meterResult must preserve reusable meter-result identity.");
84
+ }
85
+ requirePositiveFinite(result.targetRelativeSignal, "meterResult.targetRelativeSignal");
86
+ requireNonNegativeFinite(result.meteredRelativeSignal, "meterResult.meteredRelativeSignal");
87
+ }
88
+ function createBaseTargetFields(targetId, meterResult) {
89
+ validateCommonMeterResult(meterResult);
90
+ return {
91
+ schemaVersion: EXPOSURE_METER_TARGET_SCHEMA_VERSION,
92
+ targetId: requireNonEmptyString(targetId, "targetId"),
93
+ sourceMeterSnapshot: meterSnapshotIdentity(meterResult),
94
+ scientificStatus: "approximation",
95
+ inputDomain: "relative-pre-exposure-linear-signal",
96
+ baseTargetRelativeSignal: meterResult.targetRelativeSignal,
97
+ meteredRelativeSignal: meterResult.meteredRelativeSignal,
98
+ exposureCompensationStops: 0,
99
+ exposureCompensationApplied: false,
100
+ meterMeasurementMutated: false,
101
+ sourceMeterSnapshotPreserved: true,
102
+ resultReusableForAeLock: true,
103
+ automaticExposureResolved: false,
104
+ intendedConsumer: "exposure-mode-resolver"
105
+ };
106
+ }
107
+ /**
108
+ * Freezes one metering result into the stable relative exposure target
109
+ * consumed by downstream camera-control policy.
110
+ *
111
+ * The target copies the meter snapshot by value. Future scene/light changes do
112
+ * not mutate this object, which is the engine seam needed for AE-lock behavior.
113
+ */
114
+ export function createExposureMeterTargetFromMeteringResult(input) {
115
+ const base = createBaseTargetFields(input.targetId, input.meterResult);
116
+ if (input.meterResult.status ===
117
+ "no-signal") {
118
+ if (input.meterResult
119
+ .meteredRelativeSignal !== 0) {
120
+ throw new InvalidScientificInputError("A no-signal meter result must have meteredRelativeSignal equal to zero.");
121
+ }
122
+ return {
123
+ ...base,
124
+ status: "no-signal",
125
+ baseRequiredExposureScaleResolved: false,
126
+ baseExposureOffsetStopsResolved: false,
127
+ requiredExposureScaleResolved: false,
128
+ exposureOffsetStopsResolved: false
129
+ };
130
+ }
131
+ const meteredRelativeSignal = requirePositiveFinite(input.meterResult
132
+ .meteredRelativeSignal, "meterResult.meteredRelativeSignal");
133
+ const baseScale = base.baseTargetRelativeSignal /
134
+ meteredRelativeSignal;
135
+ if (!Number.isFinite(baseScale) ||
136
+ baseScale <= 0) {
137
+ throw new InvalidScientificInputError("Base required exposure scale must remain finite and greater than zero.");
138
+ }
139
+ const baseStops = Math.log2(baseScale);
140
+ if (!Number.isFinite(baseStops)) {
141
+ throw new InvalidScientificInputError("Base exposure offset must remain finite.");
142
+ }
143
+ return {
144
+ ...base,
145
+ status: "resolved",
146
+ baseRequiredExposureScaleToTarget: baseScale,
147
+ baseExposureOffsetStopsToTarget: baseStops,
148
+ requiredExposureScaleToTarget: baseScale,
149
+ exposureOffsetStopsToTarget: baseStops
150
+ };
151
+ }
152
+ function validateBaseTarget(target) {
153
+ if (target.schemaVersion !==
154
+ EXPOSURE_METER_TARGET_SCHEMA_VERSION) {
155
+ throw new InvalidScientificInputError('baseTarget.schemaVersion must be "' +
156
+ EXPOSURE_METER_TARGET_SCHEMA_VERSION +
157
+ '".');
158
+ }
159
+ requireNonEmptyString(target.targetId, "baseTarget.targetId");
160
+ requireNonEmptyString(target
161
+ .sourceMeterSnapshot
162
+ .measurementId, "baseTarget.sourceMeterSnapshot.measurementId");
163
+ requireNonEmptyString(target
164
+ .sourceMeterSnapshot
165
+ .sceneStateId, "baseTarget.sourceMeterSnapshot.sceneStateId");
166
+ requireNonEmptyString(target
167
+ .sourceMeterSnapshot
168
+ .meteringProfileId, "baseTarget.sourceMeterSnapshot.meteringProfileId");
169
+ if (target
170
+ .sourceMeterSnapshot
171
+ .sourceKind !==
172
+ "spatial-metering-result" &&
173
+ target
174
+ .sourceMeterSnapshot
175
+ .sourceKind !==
176
+ "temporal-metering-result") {
177
+ throw new InvalidScientificInputError("baseTarget.sourceMeterSnapshot.sourceKind is invalid.");
178
+ }
179
+ if (target.scientificStatus !==
180
+ "approximation" ||
181
+ target.inputDomain !==
182
+ "relative-pre-exposure-linear-signal" ||
183
+ target.meterMeasurementMutated !==
184
+ false ||
185
+ target.sourceMeterSnapshotPreserved !==
186
+ true ||
187
+ target.resultReusableForAeLock !==
188
+ true ||
189
+ target.automaticExposureResolved !==
190
+ false ||
191
+ target.intendedConsumer !==
192
+ "exposure-mode-resolver") {
193
+ throw new InvalidScientificInputError("baseTarget does not satisfy the exposure-meter target boundary.");
194
+ }
195
+ requirePositiveFinite(target.baseTargetRelativeSignal, "baseTarget.baseTargetRelativeSignal");
196
+ requireNonNegativeFinite(target.meteredRelativeSignal, "baseTarget.meteredRelativeSignal");
197
+ if (target.status === "resolved") {
198
+ requirePositiveFinite(target
199
+ .baseRequiredExposureScaleToTarget, "baseTarget.baseRequiredExposureScaleToTarget");
200
+ requireFinite(target
201
+ .baseExposureOffsetStopsToTarget, "baseTarget.baseExposureOffsetStopsToTarget");
202
+ }
203
+ else if (target.meteredRelativeSignal !== 0) {
204
+ throw new InvalidScientificInputError("A no-signal baseTarget must preserve zero meteredRelativeSignal.");
205
+ }
206
+ }
207
+ /**
208
+ * Sets an absolute exposure-compensation value on a frozen meter target.
209
+ *
210
+ * Compensation is always re-derived from the uncompensated base target, so
211
+ * repeated UI updates cannot accidentally accumulate floating-point/control
212
+ * drift. Positive compensation requests more exposure.
213
+ */
214
+ export function setExposureCompensationOnMeterTarget(input) {
215
+ validateBaseTarget(input.baseTarget);
216
+ const targetId = requireNonEmptyString(input.targetId, "targetId");
217
+ if (targetId ===
218
+ input.baseTarget.targetId) {
219
+ throw new InvalidScientificInputError("A compensated target must use a new targetId so changed control state cannot hide behind the same identity.");
220
+ }
221
+ const compensation = requireFinite(input.exposureCompensationStops, "exposureCompensationStops");
222
+ const common = {
223
+ ...input.baseTarget,
224
+ targetId,
225
+ exposureCompensationStops: compensation,
226
+ exposureCompensationApplied: compensation !== 0,
227
+ meterMeasurementMutated: false,
228
+ sourceMeterSnapshotPreserved: true,
229
+ resultReusableForAeLock: true,
230
+ automaticExposureResolved: false
231
+ };
232
+ if (input.baseTarget.status ===
233
+ "no-signal") {
234
+ return {
235
+ ...common,
236
+ status: "no-signal",
237
+ baseRequiredExposureScaleResolved: false,
238
+ baseExposureOffsetStopsResolved: false,
239
+ requiredExposureScaleResolved: false,
240
+ exposureOffsetStopsResolved: false
241
+ };
242
+ }
243
+ const compensatedStops = input.baseTarget
244
+ .baseExposureOffsetStopsToTarget +
245
+ compensation;
246
+ const compensatedScale = input.baseTarget
247
+ .baseRequiredExposureScaleToTarget *
248
+ Math.pow(2, compensation);
249
+ if (!Number.isFinite(compensatedStops) ||
250
+ !Number.isFinite(compensatedScale) ||
251
+ compensatedScale <= 0) {
252
+ throw new InvalidScientificInputError("Compensated exposure target must remain finite and greater than zero.");
253
+ }
254
+ return {
255
+ ...common,
256
+ status: "resolved",
257
+ baseRequiredExposureScaleToTarget: input.baseTarget
258
+ .baseRequiredExposureScaleToTarget,
259
+ baseExposureOffsetStopsToTarget: input.baseTarget
260
+ .baseExposureOffsetStopsToTarget,
261
+ requiredExposureScaleToTarget: compensatedScale,
262
+ exposureOffsetStopsToTarget: compensatedStops
263
+ };
264
+ }
265
+ //# sourceMappingURL=metering-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metering-target.js","sourceRoot":"","sources":["../../src/exposure/metering-target.ts"],"names":[],"mappings":"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"}