@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,123 @@
1
+ # OpenSource V1 composition and consumer map
2
+
3
+ Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
4
+
5
+ Release candidate: package 1.0.0, root API 0.116.0, production plan 0.7.0. Feature/science main is `34c6d9aca1c2e365b253c1562734d11bc8e0235f` (#206). [V1 #129](https://github.com/Photivra/photivra/issues/129) is **32/32**; #178 and #131 are closed. This audit reconciles current consumer boundaries below; #180 is the release-preparation contribution and publication remains owner-only.
6
+
7
+ A closed foundation ticket establishes its primitive scope, not automatic
8
+ availability of every optional model in every production route. Direct consumers,
9
+ bounded executed composition and unsupported combinations are distinguished
10
+ below; no unsupported combination is an approved V1 deferral.
11
+
12
+ ## All 32 scoped items
13
+
14
+ Source paths identify the main primitive/boundary, not every helper in that
15
+ feature. The consumer column distinguishes direct foundations, production-plan
16
+ results and bounded capture/output adapters. The last column records coupling rules and supported-route limits; older ticket references identify merged owners, not outstanding feature tickets. No competing RAW writer or second scientific graph is needed.
17
+
18
+ | Ticket / feature | Tracker | Primitive or boundary | Current entry point / consumer | Representative evidence | Coupling / supported boundary |
19
+ | --- | --- | --- | --- | --- | --- |
20
+ | [#1](https://github.com/Photivra/photivra/issues/1) Non-circular diffraction | closed | [polygon-diffraction.ts](https://github.com/Photivra/photivra/blob/main/src/optics/polygon-diffraction.ts) | Direct polygon PSF; production PSF execution absent | [polygon-diffraction.test.ts](https://github.com/Photivra/photivra/blob/main/test/polygon-diffraction.test.ts) | #16/#178: compose declared pupil support without double diffraction |
21
+ | [#3](https://github.com/Photivra/photivra/issues/3) Extended-object motion | closed | [extended-object-projection.ts](https://github.com/Photivra/photivra/blob/main/src/motion/extended-object-projection.ts) | Direct temporal projection; production radiance accumulation absent | [extended-object-projection.test.ts](https://github.com/Photivra/photivra/blob/main/test/extended-object-projection.test.ts) | #16/#178: retain depth/visibility/time at requested nodes |
22
+ | [#7](https://github.com/Photivra/photivra/issues/7) ISO and signal chain | closed | [iso-signal-chain.ts](https://github.com/Photivra/photivra/blob/main/src/sensor/iso-signal-chain.ts) | Explicit regime bindings; RAW producer consumes readout profiles | [generic-tier-output-acceptance.test.ts](https://github.com/Photivra/photivra/blob/main/test/generic-tier-output-acceptance.test.ts) | #16: bind committed ISO to explicit regime; preserve physical charge |
23
+ | [#12](https://github.com/Photivra/photivra/issues/12) Readout and shutter | closed | [exposure-window.ts](https://github.com/Photivra/photivra/blob/main/src/sensor/exposure-window.ts) | Production temporal diagnostics; RAW local-window handoff | [sensor-raw-local-exposure.test.ts](https://github.com/Photivra/photivra/blob/main/test/sensor-raw-local-exposure.test.ts) | #16: integrate scene signal over those windows; no inferred synchronization |
24
+ | [#14](https://github.com/Photivra/photivra/issues/14) Sensor pipeline | closed | [eqe-electron-rate.ts](https://github.com/Photivra/photivra/blob/main/src/sensor/eqe-electron-rate.ts) | Bounded irradiance→EQE local exposure composition; charge-to-RAW adapter | [sensor-raw-pipeline.test.ts](https://github.com/Photivra/photivra/blob/main/test/sensor-raw-pipeline.test.ts) | #16/#178: bind committed scene/optics/PSF origin to physical irradiance nodes |
25
+ | [#15](https://github.com/Photivra/photivra/issues/15) Linear capture and color | closed | [simulated-capture.ts](https://github.com/Photivra/photivra/blob/main/src/capture/simulated-capture.ts) | Immutable capture; ideal XYZ color and linear encoding; sensor adapter distinct | [capture-color.test.ts](https://github.com/Photivra/photivra/blob/main/test/capture-color.test.ts) | #112/#16: bind physical capture origin; preserve color-channel basis |
26
+ | [#16](https://github.com/Photivra/photivra/issues/16) Paired RAW DNG/JPEG | closed | [photographic-export.ts](https://github.com/Photivra/photivra/blob/main/src/capture/photographic-export.ts) | Exact attached-RAW reconstruction → development → correction/SDR → files | [raw-output-conformance.test.ts](https://github.com/Photivra/photivra/blob/main/test/raw-output-conformance.test.ts) | Producer-derived independent/Adobe/editor evidence merged in #201; 4,096-site bound remains explicit |
27
+ | [#43](https://github.com/Photivra/photivra/issues/43) Prepared/batch performance | closed | [geometric-transforms.ts](https://github.com/Photivra/photivra/blob/main/src/output/geometric-transforms.ts) | Call-owned prepared geometric mapping reused by sampling execution | [geometric-preparation-reuse.test.ts](https://github.com/Photivra/photivra/blob/main/test/geometric-preparation-reuse.test.ts) | [Merged final remeasurement](V1_PERFORMANCE_DISPOSITION.md); retain merged call-owned reuse; no further abstraction |
28
+ | [#45](https://github.com/Photivra/photivra/issues/45) POC projection reuse | closed | [poc-simulation.ts](https://github.com/Photivra/photivra/blob/main/src/simulation/poc-simulation.ts) | Private prepared projection in legacy POC defocus sweeps | [poc-projection-reuse.test.ts](https://github.com/Photivra/photivra/blob/main/test/poc-projection-reuse.test.ts) | [Merged final remeasurement](V1_PERFORMANCE_DISPOSITION.md); retain request-local reuse; POC remains separate |
29
+ | [#95](https://github.com/Photivra/photivra/issues/95) Stable support | closed | [camera-shake.ts](https://github.com/Photivra/photivra/blob/main/src/stabilization/camera-shake.ts) | Direct ideal stable-support boundary, independent of correction | [camera-shake.test.ts](https://github.com/Photivra/photivra/blob/main/test/camera-shake.test.ts) | #16/#178: requested shake/stabilization must preserve physical ownership |
30
+ | [#97](https://github.com/Photivra/photivra/issues/97) IBIS/OIS | closed | [system.ts](https://github.com/Photivra/photivra/blob/main/src/stabilization/system.ts) | Explicit disturbance/trajectory temporal sampling | [stabilization-system.test.ts](https://github.com/Photivra/photivra/blob/main/test/stabilization-system.test.ts) | #16/#178: consume selected trajectory in physical sampling, not a blur-quality scalar |
31
+ | [#98](https://github.com/Photivra/photivra/issues/98) Sensor architecture | closed | [architecture.ts](https://github.com/Photivra/photivra/blob/main/src/sensor/architecture.ts) | Declared technology metadata and related standalone profile boundaries | [sensor-architecture.test.ts](https://github.com/Photivra/photivra/blob/main/test/sensor-architecture.test.ts) | #16: preserve selected architecture/bindings; metadata alone is not signal execution |
32
+ | [#100](https://github.com/Photivra/photivra/issues/100) Metering | closed | [metering.ts](https://github.com/Photivra/photivra/blob/main/src/exposure/metering.ts) | Relative pre-exposure meter → exposure target/equipment resolver | [metering-equipment-integration.test.ts](https://github.com/Photivra/photivra/blob/main/test/metering-equipment-integration.test.ts) | #16/#112: retain pre-display signal and do not infer calibrated spectral weighting |
33
+ | [#103](https://github.com/Photivra/photivra/issues/103) Finite/infinity focus | closed | [focus-state.ts](https://github.com/Photivra/photivra/blob/main/src/optics/focus-state.ts) | Explicit focus state consumed by optics and committed capture | [focus-state.test.ts](https://github.com/Photivra/photivra/blob/main/test/focus-state.test.ts) | #16/#178: preserve focus in field/depth/PSF evaluations |
34
+ | [#104](https://github.com/Photivra/photivra/issues/104) Focus control | closed | [focus-control.ts](https://github.com/Photivra/photivra/blob/main/src/capture/focus-control.ts) | MF/AF state and release gate; tier body acceptance | [generic-tier-body-acceptance.test.ts](https://github.com/Photivra/photivra/blob/main/test/generic-tier-body-acceptance.test.ts) | #16: carry committed focus; no undocumented tracking renderer |
35
+ | [#105](https://github.com/Photivra/photivra/issues/105) Release sequencing | closed | [release-sequence.ts](https://github.com/Photivra/photivra/blob/main/src/capture/release-sequence.ts) | Release frame → production snapshot binding; deterministic ownership | [production-capture-release-binding.test.ts](https://github.com/Photivra/photivra/blob/main/test/production-capture-release-binding.test.ts) | #16: carry frame timing/settings/seed to physical execution |
36
+ | [#106](https://github.com/Photivra/photivra/issues/106) Manual flash/sync | closed | [flash.ts](https://github.com/Photivra/photivra/blob/main/src/exposure/flash.ts) | Declared sync and illumination overlay; no full production radiance integration | [flash.test.ts](https://github.com/Photivra/photivra/blob/main/test/flash.test.ts) | #16/#178: apply physical-time light transport when selected; no exposure-duration shortcut |
37
+ | [#108](https://github.com/Photivra/photivra/issues/108) WB/custom/AWB | closed | [white-balance.ts](https://github.com/Photivra/photivra/blob/main/src/color/white-balance.ts) | Resolved WB → release/production binding; RAW intent and one-time sensor development | [photographic-export.test.ts](https://github.com/Photivra/photivra/blob/main/test/photographic-export.test.ts) | #112/#16: preserve matching basis; never re-estimate from rendered output |
38
+ | [#111](https://github.com/Photivra/photivra/issues/111) Production plan | closed | [image-formation-plan.ts](https://github.com/Photivra/photivra/blob/main/src/composition/image-formation-plan.ts) | Authoritative graph expansion; physical sample/temporal results and blockers | [production-image-formation-plan.test.ts](https://github.com/Photivra/photivra/blob/main/test/production-image-formation-plan.test.ts) | #178/#16/#112: intentionally add downstream stages with contract/version review |
39
+ | [#112](https://github.com/Photivra/photivra/issues/112) Processed camera output | closed | [capture-corrected-sdr.ts](https://github.com/Photivra/photivra/blob/main/src/output/capture-corrected-sdr.ts) | Capture-bound color/correction → oriented view/SDR; paired RAW consumer | [photographic-export-correction.test.ts](https://github.com/Photivra/photivra/blob/main/test/photographic-export-correction.test.ts) | Shared processed RAW/preview/JPEG merged in #200; executed upstream route in plan 0.7.0; final tier/conformance acceptance is merged |
40
+ | [#113](https://github.com/Photivra/photivra/issues/113) Lens PSF/bokeh | closed | [lens-psf-profile.ts](https://github.com/Photivra/photivra/blob/main/src/optics/lens-psf-profile.ts) | Declared sampled PSF/MTF; separate complex-pupil model | [lens-psf-framework.test.ts](https://github.com/Photivra/photivra/blob/main/test/lens-psf-framework.test.ts) | #16/#178: wavelength/field/depth sampling and finite support; MTF-only is not renderable PSF |
41
+ | [#114](https://github.com/Photivra/photivra/issues/114) Stray light | closed | [stray-light.ts](https://github.com/Photivra/photivra/blob/main/src/optics/stray-light.ts) | Separate declared ghost/veiling irradiance foundation | [stray-light.test.ts](https://github.com/Photivra/photivra/blob/main/test/stray-light.test.ts) | #16/#178: add only explicitly selected incremental light; never fold into primary PSF |
42
+ | [#116](https://github.com/Photivra/photivra/issues/116) Generic tiers | closed | [generic-tier-presets.ts](https://github.com/Photivra/photivra/blob/main/src/equipment/generic-tier-presets.ts) | Exact-version selection; body and lens profile resolution | [generic-tier-presets.test.ts](https://github.com/Photivra/photivra/blob/main/test/generic-tier-presets.test.ts) | [Merged catalog acceptance disposition](TIER_PRESET_ACCEPTANCE.md); nine-pair production/output and 27 exact pupil scenes; #119 broader validation is merged; no calibrated ranking |
43
+ | [#117](https://github.com/Photivra/photivra/issues/117) Lens corrections | closed | [lens-corrections.ts](https://github.com/Photivra/photivra/blob/main/src/output/lens-corrections.ts) | Capture-bound selected correction; RAW informational intent/JPEG processing | [generic-tier-correction-acceptance.test.ts](https://github.com/Photivra/photivra/blob/main/test/generic-tier-correction-acceptance.test.ts) | #112/#16: connect authoritative upstream capture while preserving residual/crop/noise costs |
44
+ | [#118](https://github.com/Photivra/photivra/issues/118) Composed geometry/resampling | closed | [geometric-transforms.ts](https://github.com/Photivra/photivra/blob/main/src/output/geometric-transforms.ts) | Domain-compatible joint mapping/sampling → bounded correction executor | [geometric-transforms.test.ts](https://github.com/Photivra/photivra/blob/main/test/geometric-transforms.test.ts) | #112/#16: preserve full Jacobian/filter/support and existing domain order |
45
+ | [#119](https://github.com/Photivra/photivra/issues/119) Tier acceptance | closed | [generic-tier-assets.ts](https://github.com/Photivra/photivra/blob/main/src/equipment/generic-tier-assets.ts) | Matched synthetic body/correction/readout-to-file fixture consumers | [generic-tier-output-acceptance.test.ts](https://github.com/Photivra/photivra/blob/main/test/generic-tier-output-acceptance.test.ts) | [Merged final tier acceptance](TIER_ACCEPTANCE.md): versioned physical/cost/corrected report, multidimensional finite pupils and matched body execution; existing paired-output evidence reused |
46
+ | [#130](https://github.com/Photivra/photivra/issues/130) Canonical fixture | closed | [basic-reference-fixture.ts](https://github.com/Photivra/photivra/blob/main/test/helpers/basic-reference-fixture.ts) | Shared deterministic laboratory and minimal declared variants | [basic-reference-scene.test.ts](https://github.com/Photivra/photivra/blob/main/test/basic-reference-scene.test.ts) | #131: reuse without treating tiny/synthetic raster as performance or calibration evidence |
47
+ | [#131](https://github.com/Photivra/photivra/issues/131) Final conformance | closed | [raw-output-conformance.test.ts](https://github.com/Photivra/photivra/blob/main/test/raw-output-conformance.test.ts) | Final meter/capture/production/output path plus incremental geometry/signal suites | [cross-stage-conformance.test.ts](https://github.com/Photivra/photivra/blob/main/test/cross-stage-conformance.test.ts) | [Reviewed/merged final conformance](SCIENTIFIC_CONFORMANCE.md), PR #206; 32/32 feature/science complete |
48
+ | [#132](https://github.com/Photivra/photivra/issues/132) Numerics/units | closed | [validation.ts](https://github.com/Photivra/photivra/blob/main/src/core/validation.ts) | Typed input/result guards plus shared units/finite conventions | [numerical-correctness-contract.test.ts](https://github.com/Photivra/photivra/blob/main/test/numerical-correctness-contract.test.ts) | Apply throughout new composition; existing guards do not establish physical validity |
49
+ | [#133](https://github.com/Photivra/photivra/issues/133) API conventions | closed | [API_STYLE.md](../docs/API_STYLE.md) | Root public naming/compatibility/version policy | [api-style-compatibility.test.ts](https://github.com/Photivra/photivra/blob/main/test/api-style-compatibility.test.ts) | Review new public handoffs and relevant independent versions before activation |
50
+ | [#134](https://github.com/Photivra/photivra/issues/134) Evidence/uncertainty | closed | [scientific-assurance.ts](https://github.com/Photivra/photivra/blob/main/src/core/scientific-assurance.ts) | Production assurance composition retains weakest required status and unpropagated uncertainty | [scientific-assurance.test.ts](https://github.com/Photivra/photivra/blob/main/test/scientific-assurance.test.ts) | #16/#112: preserve child evidence/status; no invented combined uncertainty |
51
+ | [#135](https://github.com/Photivra/photivra/issues/135) Front filters | closed | [front-of-lens-filter.ts](https://github.com/Photivra/photivra/blob/main/src/optics/front-of-lens-filter.ts) | Capture snapshot → #110 throughput exactly once | [front-of-lens-filter.test.ts](https://github.com/Photivra/photivra/blob/main/test/front-of-lens-filter.test.ts) | #16/#178: distinguish lens/filter/sensor response scope to avoid double transmission |
52
+
53
+ ## Authoritative production execution
54
+
55
+ [`getImageFormationContract()`](https://github.com/Photivra/photivra/blob/main/src/core/image-formation.ts) owns the stage
56
+ dependencies. Plan 0.7.0 expands that graph and can invoke the existing
57
+ [`simulateEnvironmentSensorRawFrame()`](https://github.com/Photivra/photivra/blob/main/src/capture/environment-raw-producer.ts)
58
+ through `environmentCapture`. It binds exact context/event/scene/provider/optics,
59
+ geometry/shutter/rotation/seed/WB identities before provider code executes.
60
+ Optional processing consumes only its realized native RAW frame. No second
61
+ writer, scientific graph or seed schedule is introduced.
62
+
63
+ | Stage family | Executed consumer | Independent acceptance |
64
+ | --- | --- | --- |
65
+ | Source projection, provider, optical throughput and temporal sampling | Generated inverse environment rays, exact local shutter midpoints and supplied synchronous provider through existing optical bridge | `environment-raw-integration.test.ts`, `sensor-environment-query.test.ts`, `scene-eqe-temporal-exposure.test.ts` |
66
+ | Wavelength/field PSF | Existing sampled local PSF support per wavelength/destination; omitted PSF is an explicit point-optics model with evidence/limitation | `sensor-psf-quadrature.test.ts`, sampled/omitted PSF plan acceptance |
67
+ | Optical stack, CFA/spatial/spectral response | Existing AA/aperture plans, exact destination channel, package-plane response compatibility/range and instantaneous EQE | `spatial-sampling-quadrature.test.ts`, `eqe-local-exposure.test.ts`, `eqe-temporal-exposure.test.ts` |
68
+ | Charge, noise, signed readout and ADC | Existing temporal photo/dark, completeness/capacity and native seeded RAW producer | `temporal-photo-raw.test.ts`, `sensor-raw-producer.test.ts`, plan replay acceptance |
69
+ | Reconstruction, color/WB, selected correction, orientation/crop and display | Shared processed-RAW executor consumes the exact executed frame; output changes retain native codes and upstream noise | `processed-sensor-raw.test.ts`, `photographic-export-correction.test.ts`, all-orientation/WB/correction plan acceptance |
70
+ | Files | Existing paired exporter consumes that same frame; no file IO in the plan | `environment-raw-integration.test.ts`, committed #201 independent LibRaw/XML/TIFF/JPEG records and owner application evidence |
71
+ | Renderer/reference consumers | Consumer manifest 0.2.0 exposes the same immutable execution/output results and plan identity | `production-image-formation-plan.test.ts` |
72
+
73
+ See [production environment capture](PRODUCTION_ENVIRONMENT_CAPTURE.md) for the
74
+ complete binding and migration contract. Successful bounded execution can reach
75
+ all fourteen requested stages. Missing execution inputs, unsupported required
76
+ effects and insufficient renderer capabilities retain explicit blockers. The
77
+ sample-only and independently attached-RAW routes keep their conservative
78
+ limitations; standalone child flags are not rewritten by the parent composer.
79
+
80
+ ## Scientific boundaries and ownership
81
+
82
+ The implemented execution envelope remains the existing bounded ideal
83
+ continuous-spectrum environment route: opening-reference scene time zero,
84
+ complete one-to-one native CFA registration, explicit unity field throughput,
85
+ constant-axis motion, optional destination-local sampled PSF and valid response
86
+ scope/area/range. The native/reference budget is 4,096 sites and aggregate
87
+ provider evaluations are limited to 100,000. Shared output-envelope checks reject
88
+ unsupported resampling/coverage before provider calls; pixel-dependent kernel
89
+ and correction support remain execution checks.
90
+
91
+ Executed source queries establish invocation and numerical lineage, not measured
92
+ transport, visibility, calibration, convergence, arbitrary world pose or global
93
+ field-energy conservation. Renderer implementation remains external under the
94
+ existing provider contract. A closed direct foundation does not license the
95
+ composer to mark an unsupported optional model active. The table above retains
96
+ feature-specific direct consumers and remaining integration ownership. No
97
+ broader capability or unsupported scientific combination has been approved for
98
+ deferral by this change.
99
+
100
+ ## Defect disposition and final gates
101
+
102
+ - #178 finding 1: the 32-item primitive/consumer/evidence/ownership map is present;
103
+ the executed bounded environment route now composes the previously blocked
104
+ sensor stages through the authoritative graph. Unsupported requested effects
105
+ remain explicit; stale version diagnostics were fixed in #183.
106
+ - Finding 2: the plan invokes the engine-owned environment/optics/PSF/response/
107
+ temporal path into the existing RAW producer, rather than accepting a caller
108
+ exposure result as evidence that source execution ran. Provider truth remains
109
+ separate from executed origin.
110
+ - Finding 3: equivalent freeze/canonical JSON/allowlist/public-ID mechanics were
111
+ consolidated in #184/#185/#193. Current production capture bindings and output
112
+ envelope checks reuse the existing owners. Meaningful domain differences are
113
+ documented in [helper reuse review](V1_HELPER_REUSE_REVIEW.md).
114
+ - Finding 4: reusable sensor-color development is owned by the internal color
115
+ adapter from #186; WB basis/application and export/container ownership remain
116
+ distinct.
117
+ - Finding 5: shared producer/reconstruction bounds and early output compatibility
118
+ are documented/tested in #187 and this executed plan preflight; #201 records
119
+ the supported-size decision without claiming megapixel measurements. See
120
+ [RAW frame envelope](RAW_FRAME_ENVELOPE.md).
121
+ - Finding 6: `distribute*` was documented in #183; the compatibility guard remains.
122
+
123
+ #131 final conformance is reviewed and merged. #180 is this final human/agent/source documentation and 1.0 preparation contribution; final review/DCO, signed merge and final-main CI precede owner-only tag/publication. #165 remains post-V1. The linked source and tests define each supported boundary; a closed issue does not authorize every optional model combination.
@@ -0,0 +1,60 @@
1
+ # V1 internal helper reuse review
2
+
3
+ Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
4
+
5
+ This review addresses the remaining repeated validation mechanics in defect
6
+ #178. It does not close production integration, performance, editor acceptance
7
+ or final release preparation. The review follows main `e5a6ce2` and the earlier
8
+ freeze, canonical JSON and sensor-color ownership changes. The temporal photo-signal handoff and shared validators were merged in
9
+ PRs #192/#193. This is a current reuse assessment, not an unmerged stack.
10
+
11
+ ## Shared mechanics
12
+
13
+ `src/core/record-validation.ts` now owns the equivalent record/own-enumerable-key
14
+ allowlist check used by capture, RAW attachment/producer/reconstruction, export
15
+ metadata, photographic export, linear encoding, capture color and SDR/correction
16
+ boundaries, plus the temporal photo-signal boundary. It also owns the identical 1–128 character ASCII public opaque ID
17
+ grammar used by capture, RAW, exporter, producer, color, SDR and temporal photo-signal boundaries.
18
+
19
+ Domain wrappers retain their original diagnostics. Domains still own field
20
+ lists, required fields, enum choices, evidence, numerical validity, copying,
21
+ freezing and scientific contracts. The helper returns the existing record;
22
+ it does not sanitize input or silently add stricter object semantics. This
23
+ preserves the existing treatment of inherited/non-enumerable/symbol properties
24
+ and is not a general serializer or hostile JavaScript object sandbox.
25
+
26
+ ## Separations retained
27
+
28
+ - Finite-number validators differ in sign, integer ranges, negative-zero policy
29
+ and diagnostics. A single generic validator would obscure those contracts.
30
+ - Dense arrays have different limits, required lengths, sparse-array behavior
31
+ and element validation. Their domain policies remain local.
32
+ - UUID and SHA-256 grammars remain distinct from opaque public IDs.
33
+ - Planner/focus/release freezing has intentionally different early-return
34
+ semantics from the shared child-first owned-data freeze.
35
+ - Planner fingerprints and export hashes share canonical JSON mechanics, but
36
+ retain different undefined-value policies and identity algorithms.
37
+ - Sensor-color development and ideal virtual-camera transforms retain their
38
+ separate basis, conditioning and physical meanings.
39
+ - Evidence/calibration parsers retain their own model/version/applicability
40
+ checks. A public identifier grammar is not scientific applicability evidence.
41
+
42
+ The equivalent helper findings are addressed by the shared implementation and
43
+ these explicit retained boundaries. Future reuse should follow demonstrated
44
+ semantic equivalence, rather than mechanical similarity alone.
45
+
46
+ ## Compatibility and verification
47
+
48
+ No public export, version, schema, equation, seed schedule or byte-identity
49
+ algorithm changes. Existing historical capture/RAW/DNG/JPEG hash regressions
50
+ remain the exact-byte oracle. Public-boundary tests cover invalid record shapes,
51
+ unknown fields and unsafe identities with unchanged domain error messages.
52
+ The shared helpers stay internal to the package's root export contract.
53
+
54
+ The final #180 audit must revisit this assessment against the integrated release
55
+ candidate; this document is not that exhaustive final documentation audit.
56
+
57
+ Production environment integration reuses the existing output-envelope check
58
+ before invoking provider code. Capture identity/exposure/seed/WB/focus validation
59
+ is shared between executed and attached-RAW plan routes; domain-specific scene,
60
+ geometry, timing and provider bindings remain separate.
@@ -0,0 +1,88 @@
1
+ # Final V1 performance disposition: #43 / #45
2
+
3
+ Release context: **package 1.0.0 candidate / root API 0.116.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_0.md).
4
+
5
+ Final measured main is `edc20e61538152fa758f3cce4b41cc34d1e8ba03` (#204), root API 0.116.0, POC API 0.20.0. #175 and #176 already merged the justified private optimizations. PR #205 merged this final remeasurement after human review/DCO; both issues are closed. The recorded engine commit identifies the measured build, not the latest release candidate. It adds no runtime optimization, public abstraction, dependency, numerical tolerance change or timing CI gate.
6
+
7
+ ## Context and reproducibility
8
+
9
+ All measurements used Node 24.19.0 / V8 13.6.233.17-node.51, macOS arm64, Apple M5 Pro, 18 logical CPUs. The host is shared; ambient activity, thermals and power state are uncontrolled. Runs were sequential with no concurrent task tests/benchmarks. Both trees were compiled with canonical `tsc`. The independent pre-optimization reference is `c1374c31473f893310d1ce4f0d5a737aaba43ab5`; comparisons isolate the retained #43/#45 paths, not the entire intervening V1 feature set. Candidate source SHA-256 commitments are retained in every paired artifact. `candidateBaseCommit` now records the actual measured final main independently of the reference. Labels are operator-attested, not automatically git-verified.
10
+
11
+ Two ordinary paired runs and one separate forced-GC/profile run reuse the existing owned benchmarks unchanged in workload/equivalence semantics. Reference/candidate order alternates, scenario order rotates. POC: 500 warmups and nine blocks of 1,000 requests per shape. Geometry: five blocks, 100 warmup/block calls for 1×1/5×5, two warmups/one block call for larger grids. Whole response/result including provenance must match the independent reference before timing. See [projection method](POC_PROJECTION_REUSE.md) and [geometry method](GEOMETRIC_PREPARATION_REUSE.md).
12
+
13
+ Raw artifacts: [geometry ordinary 1](benchmarks/2026-10-02-v1-geometry-ordinary-1.json), [ordinary 2](benchmarks/2026-10-02-v1-geometry-ordinary-2.json), [GC/profile](benchmarks/2026-10-02-v1-geometry-gc-profile.json); [POC ordinary 1](benchmarks/2026-10-02-v1-poc-ordinary-1.json), [ordinary 2](benchmarks/2026-10-02-v1-poc-ordinary-2.json), [GC/profile](benchmarks/2026-10-02-v1-poc-gc-profile.json). Raw block timing and retained-heap deltas are preserved. GC-assisted timings are separate distributions and do not establish GC causality.
14
+
15
+ ## #43 decision: retain call-owned geometry reuse; no further prepared API
16
+
17
+ | Whole consumer | Reference ms/call, run 1 | Final main ms/call, run 1 | Ratio run 1 | Ratio run 2 |
18
+ | --- | ---: | ---: | ---: | ---: |
19
+ | sampling-plan-1x1 | 0.0146 | 0.0117 | 0.799 | 0.796 |
20
+ | corrected-capture-1x1 | 0.1264 | 0.1069 | 0.846 | 0.815 |
21
+ | sampling-plan-5x5 | 0.2004 | 0.1157 | 0.577 | 0.594 |
22
+ | corrected-capture-5x5 | 1.3817 | 0.8879 | 0.643 | 0.649 |
23
+ | sampling-plan-17x17 | 2.3222 | 1.2968 | 0.558 | 0.566 |
24
+ | corrected-capture-17x17 | 16.0390 | 10.2372 | 0.638 | 0.608 |
25
+ | sampling-plan-33x33 | 8.6810 | 5.0144 | 0.578 | 0.577 |
26
+ | corrected-capture-33x33 | 62.3895 | 39.9700 | 0.641 | 0.662 |
27
+ | sampling-plan-65x65 | 34.3922 | 20.1464 | 0.586 | 0.557 |
28
+ | corrected-capture-65x65 | 244.6844 | 165.3251 | 0.676 | 0.660 |
29
+
30
+ For 17×17 through 65×65, ordinary sampling plans are approximately 41–44% shorter and whole corrected captures 32–39% shorter in these two runs. The current merged paths execute actual inverse support, joint masks/crops, three-channel nearest resampling and gain on an explicitly declared 24×24 mm synthetic field. These are bounded consumer measurements, not full-resolution or browser rendering. The gain remains material after the V1 processing/tier work stabilized.
31
+
32
+ Separate geometry preparation medians are 3.129 µs reference and 3.298 µs final main; preparation stays at the untrusted public boundary. There is no persistent prepared state or added lifecycle to measure. A returned mapping still owns its transform data and per-point diagnostics. Small grids above measure amortization including boundary overhead rather than assuming preparation is free. No portable break-even grid size is asserted.
33
+
34
+ At 65×65 correction, separate CPU sampling counted `prepareGeometricMapping` in 307/881 reference consumer stacks versus 2/599 final-main stacks. Heap sampling estimated 6,923,905,856 versus 4,842,216,576 allocated bytes over five captures (about 30% lower). Preparation-inclusive estimates were 2,070,409,472 versus 426,720 bytes. These are overlapping inclusive CPU categories and statistical allocation estimates, not exact counters, retained context size or GC-pause measurements. Large cumulative allocation is not simultaneous live memory.
35
+
36
+ Acceptance reuses the existing 32-case deterministic scalar oracle corpus, mutation isolation, fresh-call revalidation and folded/intermediate-domain failures. No inverse iteration bound or scalar API behavior changes. The final disposition is to retain #176 and the existing radial/CA batch surface, and add no generic mutable prepared engine, vignetting/rotation cache or extra solver. The new production profile below supplies no evidence that such an abstraction would materially improve its whole request.
37
+
38
+ ## #45 decision: retain request-local defocus projection reuse; no broader context
39
+
40
+ | Whole POC request | Reference µs, run 1 | Final main µs, run 1 | Ratio run 1 | Ratio run 2 |
41
+ | --- | ---: | ---: | ---: | ---: |
42
+ | 24mp-base | 5.330 | 5.388 | 1.011 | 0.997 |
43
+ | 24mp-defocus-1 | 5.813 | 5.548 | 0.954 | 0.950 |
44
+ | 24mp-defocus-2 | 6.317 | 5.801 | 0.918 | 0.924 |
45
+ | 24mp-defocus-4 | 7.077 | 6.423 | 0.908 | 0.912 |
46
+ | 24mp-defocus-8 | 8.877 | 7.589 | 0.855 | 0.866 |
47
+ | 24mp-defocus-16 | 12.361 | 9.792 | 0.792 | 0.785 |
48
+ | 24mp-mixed-16-per-kind | 26.267 | 23.470 | 0.894 | 0.897 |
49
+ | 24mp-staged-portrait-mixed | 44.816 | 42.584 | 0.950 | 0.957 |
50
+
51
+ The 16-defocus request is 20.8–21.5% shorter, mixed sweeps 10.3–10.6% shorter and staged portrait mixed requests 4.3–5.0% shorter in the two ordinary runs. Base and single-sample changes are small and noisy. No universal benefit or portable break-even count is claimed. The 6000×4000 sensor is analytical request context; the POC does not render 24 million samples. It remains a public compatibility/developer consumer, not observed private-product traffic or the production composer.
52
+
53
+ Preparation creates a frozen three-scalar object only for a nonempty defocus sweep, borrowing the validated projection from the same request. The separate isolated probe median was 19.851 ns, with the existing escape/JIT caveat. No-sweep requests allocate no context; no context is retained across calls, exposed publicly or stored in the result. Net post-GC retained heap is not an object-size/allocation measurement.
54
+
55
+ Separate sampled allocations for 2,000 staged requests were 605,749,360 bytes reference and 564,364,680 final main (about 7% lower); thin-lens-inclusive estimates were 175,036,920 versus 138,980,832 (about 21% lower). Whole-request distributions and the unchanged 64-case independent complete-response SHA corpus support keeping #175. Alternating focal/focus inputs, invalid input and stale-context rejection remain required. No additional FOV/motion/sampling context, cross-request cache or public projection API is justified.
56
+
57
+ ## Current V1 executed environment-to-RAW consumer
58
+
59
+ The new repository-only `scripts/benchmark-v1-environment.mjs` reuses the owned sensor/environment fixtures and canonical TypeScript build in a disposable directory. Setup/compilation is outside timed calls. It executes the current full environment capture adapter: rolling local windows, rotated environment queries, spatial/spectral/temporal integration, optional sampled PSF, EQE, dark charge, capacity, seeded noise and ADC. Every scenario checks executed provider count and deterministic whole-result SHA replay before timing. Two warmups and five rotating one-call blocks are recorded.
60
+
61
+ Four native sites are intentionally held constant while actual work increases from 128 to 36,864 provider evaluations. This is representative of bounded dense quadrature workloads in the supported executor, not full-native throughput, observed traffic or a performance conclusion based on the tiny canonical #130 raster. No 24/45/60 MP or complete physical renderer performance is claimed. The declared synthetic radiance callback is cheap; external provider transport/visibility cost is absent.
62
+
63
+ | Temporal samples / aperture grid / PSF | Provider evaluations/call | Ordinary median ms | Separate GC-assisted median ms |
64
+ | --- | ---: | ---: | ---: |
65
+ | 4 / 2×2 / not applied | 128 | 7.987 | 8.795 |
66
+ | 16 / 4×4 / not applied | 2,048 | 70.555 | 76.885 |
67
+ | 16 / 2×2 / 9 taps | 4,608 | 183.633 | 195.540 |
68
+ | 32 / 4×4 / 9 taps | 36,864 | 1448.311 | 1478.752 |
69
+
70
+ [Ordinary evidence](benchmarks/2026-10-02-v1-environment-ordinary.json) and [GC/profile evidence](benchmarks/2026-10-02-v1-environment-gc-profile.json) include raw heap/RSS deltas, work counts and result commitments. The separate heaviest-case profile counted thin-lens calculation in 10/1,090 whole-consumer CPU stacks, geometric preparation in zero, and recursive finite validation in 889/1,090. Categories overlap, inlining can hide frames, and zero observed samples do not prove zero work. The adapter calls a private internal executor, so the public photo-signal wrapper need not appear in stacks.
71
+
72
+ The independent allocation pass estimated 6,458,745,904 bytes cumulatively for one dense capture, not 6.46 GB retained live memory. Net RSS/heap deltas do not measure peak memory; no peak claim is made. Detailed diagnostic/provenance materialization and fail-closed validation have real cost. This descriptive baseline has no before/after candidate and cannot establish an optimization benefit. It supports an explicit no-further-change decision within #43/#45: no evidence shows their duplicate projection/preparation targets dominate this current consumer, and removing provenance/validation is outside their acceptance. A future narrowly evidenced diagnostic/budget optimization would need its own scope and equivalence. No new V1 deferral or feature is invented.
73
+
74
+ ## Browser boundary, acceptance and reproduction
75
+
76
+ No browser-motivated public API or browser timing claim is proposed. Current root APIs stay browser-safe; existing browser-surface/package checks remain required. Node/macOS measurements do not establish browser, worker, WebGPU or end-user frame-time behavior. This finite disposition covers the merged Node-measured internal optimizations and current supported public consumer shapes. Browser-motivated future work requires real browser evidence.
77
+
78
+ The paired POC script additionally compares every complete response in the existing 64-case corpus directly against the independent pre-optimization reference on this runtime and records their hashes. All 64 agree exactly, including the case whose Linux-authored golden SHA differs on this Mac. No golden is regenerated or tolerance relaxed. Local supported-Node check/coverage pass 1,581 tests with that previously reproduced unchanged-main Mac `equivalence-38` golden-hash difference; static/policy, build and package gates pass. Required Linux CI remains the unchanged release gate. Existing analytical/fuzz/copy-safety/provenance gates remain the correctness oracle. All runtime sources, API/schema versions, asset commitments, scalar errors, reference hashes, inverse limits and coverage thresholds are unchanged. #131 still owns final scientific conformance and #180 final documentation/release audit. PR #205 reviewed/merged this evidence and closed #43/#45; PR #206 closed final conformance.
79
+
80
+ Build current main and the independent reference with `npm ci` and `npm run build`, using a supported Node runtime. Run sequentially without concurrent task tests. Replace the reference path below; repeat ordinary runs independently. Add `--expose-gc` before the script plus `--allocation=sample` (POC) or `--profile=sample` (geometry/environment) for a separate profile run.
81
+
82
+ ```sh
83
+ node scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5 --candidate-commit=edc20e61538152fa758f3cce4b41cc34d1e8ba03
84
+ node scripts/benchmark-geometric-consumers.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5 --candidate-commit=edc20e61538152fa758f3cce4b41cc34d1e8ba03
85
+ node scripts/benchmark-v1-environment.mjs --commit=edc20e61538152fa758f3cce4b41cc34d1e8ba03
86
+ ```
87
+
88
+ No raw inspector profiles/private paths are committed. Performance is informational, with no new dependency or third-party code/data. Human review and contribution-specific DCO certification are required for inclusion.
@@ -0,0 +1,53 @@
1
+ # camera/equivalent-focal-length.ts public contracts
2
+
3
+ Package **1.0.0**, root API **0.116.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## calculateEquivalentFocalLength35Mm
6
+
7
+ Calculates conventional 35 mm-equivalent focal length from physical focal
8
+ length and the effective active-capture diagonal.
9
+
10
+ The physical focal length remains unchanged and continues to be the optical
11
+ input for projection and depth-of-field calculations. Focus distance and
12
+ later digital/output crops are deliberately excluded from this conventional
13
+ equivalence quantity.
14
+
15
+ ```ts
16
+ export function calculateEquivalentFocalLength35Mm(
17
+ input: CalculateEquivalentFocalLength35MmInput
18
+ ): CalculationResult<EquivalentFocalLength35Mm>;
19
+ ```
20
+
21
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
22
+
23
+ ## CalculateEquivalentFocalLength35MmInput
24
+
25
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
26
+
27
+ ```ts
28
+ export interface CalculateEquivalentFocalLength35MmInput {
29
+ /** Physical optical focal length in millimetres. */
30
+ focalLengthMm: number;
31
+ /** Effective physical active-capture imaging area. */
32
+ activeImagingArea: SensorImagingArea;
33
+ }
34
+ ```
35
+
36
+ ## EquivalentFocalLength35Mm
37
+
38
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
39
+
40
+ ```ts
41
+ export interface EquivalentFocalLength35Mm {
42
+ /** Physical optical focal length supplied by the caller. */
43
+ actualFocalLengthMm: number;
44
+ /** Conventional diagonal-based 35 mm-equivalent focal length. */
45
+ equivalentFocalLength35Mm: number;
46
+ /** Diagonal crop factor of the active physical capture area. */
47
+ cropFactor35Mm: number;
48
+ /** Physical active-capture diagonal in millimetres. */
49
+ activeImagingAreaDiagonalMm: number;
50
+ /** Declares the equivalence convention used by this result. */
51
+ basis: "diagonal";
52
+ }
53
+ ```
@@ -0,0 +1,119 @@
1
+ # camera/field-of-view.ts public contracts
2
+
3
+ Package **1.0.0**, root API **0.116.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## calculateFieldOfView
6
+
7
+ Calculates rectilinear angular field of view as
8
+ 2 * atan(sensorDimension / (2 * projectionDistance)).
9
+
10
+ Without focusDistanceM, projectionDistance is nominal focal length for
11
+ backwards-compatible infinity-focus/pinhole behavior. With focusDistanceM,
12
+ projectionDistance is the ideal Gaussian thin-lens image distance for that
13
+ focus plane.
14
+
15
+ Neither mode models real-lens focus breathing or distortion.
16
+
17
+ ```ts
18
+ export function calculateFieldOfView(
19
+ input: CalculateFieldOfViewInput
20
+ ): CalculationResult<FieldOfView>;
21
+ ```
22
+
23
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
24
+
25
+ ## calculateFieldOfViewBounds
26
+
27
+ Calculates an asymmetric rectilinear FOV span from signed sensor-plane
28
+ bounds relative to the optical axis.
29
+
30
+ This is required for off-center active sensor crops where the optical axis
31
+ is not at the center of the retained rectangle.
32
+
33
+ ```ts
34
+ export function calculateFieldOfViewBounds(
35
+ input: CalculateFieldOfViewBoundsInput
36
+ ): CalculationResult<FieldOfViewBounds>;
37
+ ```
38
+
39
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
40
+
41
+ ## CalculateFieldOfViewBoundsInput
42
+
43
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
44
+
45
+ ```ts
46
+ export interface CalculateFieldOfViewBoundsInput {
47
+ /** Lens focal length in millimetres. */
48
+ focalLengthMm: number;
49
+ /**
50
+ * Minimum sensor-plane coordinate in millimetres relative to the optical
51
+ * axis. Negative values lie on the negative side of the requested axis.
52
+ */
53
+ minimumSensorCoordinateMm: number;
54
+ /**
55
+ * Maximum sensor-plane coordinate in millimetres relative to the optical
56
+ * axis.
57
+ */
58
+ maximumSensorCoordinateMm: number;
59
+ /** Optional focus distance in metres. */
60
+ focusDistanceM?: number;
61
+ }
62
+ ```
63
+
64
+ ## CalculateFieldOfViewInput
65
+
66
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
67
+
68
+ ```ts
69
+ export interface CalculateFieldOfViewInput {
70
+ /** Lens focal length in millimetres. */
71
+ focalLengthMm: number;
72
+ /** Sensor dimension corresponding to the requested field of view, in millimetres. */
73
+ sensorDimensionMm: number;
74
+ /**
75
+ * Optional focus distance in metres. When supplied, the ideal thin-lens
76
+ * image distance is used as the projection distance. Omit to preserve the
77
+ * infinity-focus/pinhole approximation.
78
+ */
79
+ focusDistanceM?: number;
80
+ }
81
+ ```
82
+
83
+ ## FieldOfView
84
+
85
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
86
+
87
+ ```ts
88
+ export interface FieldOfView {
89
+ /** Angular field of view in degrees. */
90
+ degrees: number;
91
+ /** Angular field of view in radians. */
92
+ radians: number;
93
+ /** Projection/image-plane distance used by the geometry, in millimetres. */
94
+ projectionDistanceMm: number;
95
+ }
96
+ ```
97
+
98
+ ## FieldOfViewBounds
99
+
100
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
101
+
102
+ ```ts
103
+ export interface FieldOfViewBounds {
104
+ /** Minimum signed angular bound in degrees. */
105
+ minimumDegrees: number;
106
+ /** Maximum signed angular bound in degrees. */
107
+ maximumDegrees: number;
108
+ /** Total angular span in degrees. */
109
+ degrees: number;
110
+ /** Minimum signed angular bound in radians. */
111
+ minimumRadians: number;
112
+ /** Maximum signed angular bound in radians. */
113
+ maximumRadians: number;
114
+ /** Total angular span in radians. */
115
+ radians: number;
116
+ /** Projection/image-plane distance used by the geometry, in millimetres. */
117
+ projectionDistanceMm: number;
118
+ }
119
+ ```
@@ -0,0 +1,54 @@
1
+ # camera/projected-object-size.ts public contracts
2
+
3
+ Package **1.0.0**, root API **0.116.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## calculateProjectedObjectSize
6
+
7
+ Calculates the projected size of a fronto-parallel object plane.
8
+
9
+ Without focusDistanceM, the function preserves ideal pinhole projection
10
+ using nominal focal length. With focusDistanceM, it projects to the ideal
11
+ thin-lens sensor plane selected by that focus distance.
12
+
13
+ ```ts
14
+ export function calculateProjectedObjectSize(
15
+ input: CalculateProjectedObjectSizeInput
16
+ ): CalculationResult<ProjectedObjectSize>;
17
+ ```
18
+
19
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
20
+
21
+ ## CalculateProjectedObjectSizeInput
22
+
23
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
24
+
25
+ ```ts
26
+ export interface CalculateProjectedObjectSizeInput {
27
+ /** Lens focal length in millimetres. */
28
+ focalLengthMm: number;
29
+ /** Object width in metres. */
30
+ objectWidthM: number;
31
+ /** Object height in metres. */
32
+ objectHeightM: number;
33
+ /** Object-plane distance from the camera in metres. */
34
+ distanceM: number;
35
+ /** Optional focus distance in metres for focus-aware sensor-plane projection. */
36
+ focusDistanceM?: number;
37
+ /** Optional sensor pixel pitch in micrometres. */
38
+ pixelPitchMicrometers?: number;
39
+ }
40
+ ```
41
+
42
+ ## ProjectedObjectSize
43
+
44
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
45
+
46
+ ```ts
47
+ export interface ProjectedObjectSize {
48
+ widthMm: number;
49
+ heightMm: number;
50
+ projectionDistanceMm: number;
51
+ widthPixels?: number;
52
+ heightPixels?: number;
53
+ }
54
+ ```
@@ -0,0 +1,107 @@
1
+ # capture/capture-export-metadata.ts public contracts
2
+
3
+ Package **1.0.0**, root API **0.116.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## CAPTURE_EXPORT_METADATA_SCHEMA_VERSION
6
+
7
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
8
+
9
+ ```ts
10
+ CAPTURE_EXPORT_METADATA_SCHEMA_VERSION = "0.1.0" as const
11
+ ```
12
+
13
+ ## CaptureExportArtifactIdentity
14
+
15
+ Caller-owned resource and saved-incarnation UUIDs; no random IDs or wall clock in the engine.
16
+
17
+ ```ts
18
+ export interface CaptureExportArtifactIdentity { documentId: string; instanceId: string }
19
+ ```
20
+
21
+ ## CaptureExportMetadataInput
22
+
23
+ Metadata-only pairing input. CaptureID must already be a non-nil UUID on the committed capture.
24
+
25
+ ```ts
26
+ export interface CaptureExportMetadataInput {
27
+ capture: SimulatedCapture;
28
+ workflow: CaptureExportWorkflow;
29
+ /** Explicit capture-event UTC timestamp, exactly YYYY-MM-DDTHH:mm:ss.sssZ; never scene time. */
30
+ capturedAtUtc: string;
31
+ raw: CaptureExportArtifactIdentity;
32
+ jpeg: CaptureExportArtifactIdentity;
33
+ }
34
+ ```
35
+
36
+ ## CaptureExportMetadataPair
37
+
38
+ Equal shared metadata and distinct resource IDs do not prove RAW/JPEG pixel derivation.
39
+
40
+ ```ts
41
+ export interface CaptureExportMetadataPair {
42
+ schemaVersion: typeof CAPTURE_EXPORT_METADATA_SCHEMA_VERSION;
43
+ shared: CaptureExportSharedMetadata;
44
+ raw: CaptureExportArtifactIdentity & { outputRole: "raw" };
45
+ jpeg: CaptureExportArtifactIdentity & { outputRole: "jpeg" };
46
+ imageDataPairing: "not-verified";
47
+ }
48
+ ```
49
+
50
+ ## CaptureExportSharedMetadata
51
+
52
+ Shared semantic values, not packed EXIF/DNG tags or an XMP packet.
53
+
54
+ ```ts
55
+ export interface CaptureExportSharedMetadata {
56
+ captureId: string;
57
+ capturedAtUtc: string;
58
+ workflow: CaptureExportWorkflow;
59
+ digitalSourceTypeUri: string;
60
+ simulatedCapture: true;
61
+ make: "Photivra";
62
+ model: "Photivra Virtual Camera";
63
+ /** Explicitly the captured engine API version, not a claim of an npm distribution version. */
64
+ software: string;
65
+ creatorTool: string;
66
+ engineApiVersion: string;
67
+ captureContractVersion: SimulatedCapture["schemaVersion"];
68
+ sceneStateId: string;
69
+ sceneTimeSeconds: number;
70
+ exposure: SimulatedCapture["exposure"];
71
+ focus: SimulatedCapture["focus"];
72
+ equivalentFocalLength35Mm: number;
73
+ geometry: SimulatedCapture["geometry"];
74
+ resolvedGeometry: SimulatedCapture["resolvedGeometry"];
75
+ noise: SimulatedCapture["noise"];
76
+ whiteBalanceIntent: SimulatedCapture["whiteBalanceIntent"];
77
+ models: SimulatedCapture["models"];
78
+ }
79
+ ```
80
+
81
+ ## CaptureExportWorkflow
82
+
83
+ Non-generative workflows only; sampled/AI/composite media need a separate reviewed policy.
84
+
85
+ ```ts
86
+ export type CaptureExportWorkflow = "human-directed-non-generative" | "fully-procedural-non-generative";
87
+ ```
88
+
89
+ ## createCaptureExportMetadataPair
90
+
91
+ Projects known capture metadata once for both future writers; never encodes or verifies image data.
92
+
93
+ ```ts
94
+ export function createCaptureExportMetadataPair(input: CaptureExportMetadataInput): CaptureExportMetadataPair;
95
+ ```
96
+
97
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
98
+
99
+ ## parseCaptureExportMetadataInput
100
+
101
+ Fail-closed parser; no default workflow, time, creator, physical-device or file lineage claims.
102
+
103
+ ```ts
104
+ export function parseCaptureExportMetadataInput(value: unknown): CaptureExportMetadataInput;
105
+ ```
106
+
107
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.