@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
@@ -1,5 +1,7 @@
1
1
  # Physics Foundation
2
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
+
3
5
  Photivra starts with analytical models that can be independently tested and whose assumptions can be stated explicitly.
4
6
 
5
7
  ## Implemented models
@@ -92,7 +94,77 @@ At a focus distance of at least 100 focal lengths, the ideal thin-lens projectio
92
94
 
93
95
  The focus-aware model improves internal consistency with thin-lens DOF/defocus calculations, but it is still an ideal paraxial model. It does not model real-lens focus breathing, pupil magnification, principal-plane movement, distortion, aberrations, or lens-specific macro behavior.
94
96
 
95
- Projected subject motion is a representative-point displacement model with constant linear world velocity. It does not yet describe scale blur of an extended object whose magnification changes materially during the exposure.
97
+ Projected subject motion remains a representative-point displacement model with constant linear world velocity. The separate extended-object projection foundation now evaluates multiple explicit metric points under shared rigid translation, so depth-direction motion can produce spatially varying trajectories and validated planar magnification where appropriate.
98
+
99
+ ### Extended-object projection under rigid translation
100
+
101
+ A representative point does not fully describe an extended object moving along the optical axis. Under rectilinear projection, an on-axis center point can remain fixed while off-axis points move radially as object depth changes.
102
+
103
+ The extended-object foundation therefore projects each supplied metric point independently through time.
104
+
105
+ For a rigid object and translating camera:
106
+
107
+ ```text
108
+ relative velocity = object translation - camera translation
109
+ position_i(t) = position_i(0) + relative velocity * t
110
+ projected_i(t) = v * (x_i(t)/z_i(t), y_i(t)/z_i(t))
111
+ ```
112
+
113
+ where `v` is the selected nominal or focus-aware image-plane projection distance.
114
+
115
+ This first model is deliberately rigid and translational. It does not model object rotation, articulation, deformation or acceleration.
116
+
117
+ A single uniform magnification is scientifically justified only for a constrained geometry. Photivra therefore reports a planar scale diagnostic only when the caller explicitly declares a fronto-parallel planar patch and every supplied point validates against the same reference depth. Under shared rigid translation the diagnostic scale is:
118
+
119
+ `reference depth / current depth`
120
+
121
+ That special-case result does not imply that arbitrary 3D geometry admits one scale or one homography.
122
+
123
+ When bound to #12, each object point is evaluated on its own local exposure clock. This preserves rolling-capture timing without treating sensor data readout as exposure timing.
124
+
125
+ The geometry result does not solve visibility. Axial/lateral motion can reveal/hide surfaces or move geometry through frame boundaries; a renderer must evaluate those states explicitly. Similarly, relative depth changes can alter defocus/PSF through the exposure, so a static blur/PSF composition is not automatically valid.
126
+
127
+ ### Mode-bound exposure/readout timing and temporal translation
128
+
129
+ The #12 closure preserves two different clocks:
130
+
131
+ 1. **local exposure-window timing**, referenced to the first opening-boundary phase; and
132
+ 2. **sensor data-readout timing**, referenced to its own native readout phase.
133
+
134
+ A capture-mode timing profile binds both sets of facts to one exact capture-mode/profile identity without asserting that those clocks are synchronized. Global readout removes spatial readout skew; it does not remove finite-exposure motion.
135
+
136
+ The first supported exposure/readout schedules remain simultaneous or uniform-linear native scans. More complex non-uniform schedules are rejected unless a future explicit model represents them.
137
+
138
+ Pure camera rotation can be evaluated without scene depth. Camera translation cannot. Under constant translation, a stationary scene point at metric position `(x,y,z)` is evaluated from its relative camera-space position over time, so image displacement scales with scene depth through rectilinear projection. Consequently, arbitrary 3D translation does not admit one globally valid image-plane homography.
139
+
140
+ Optional subject velocity remains separate from camera translation and composes as relative motion. The model does not reinterpret subject motion as sensor/readout behavior.
141
+
142
+ Temporal radiance integration uses deterministic midpoint nodes inside each authoritative local exposure interval. Scene-radiance providers must evaluate at those physical capture times; sensor readout timing is not substituted for exposure time. Per-node uncertainty/evidence is preserved, while aggregate uncertainty remains unquantified unless justified correlation assumptions are supplied.
143
+
144
+ ### Manual flash timing and scene-light boundary
145
+
146
+ The first flash model composes two already-established domains instead of introducing a special image effect:
147
+
148
+ 1. #85 spatial/temporal illumination; and
149
+ 2. #12 exposure-boundary timing.
150
+
151
+ A short manual-flash pulse is an aperiodic relative illumination waveform attached to an explicit spatial source. The source geometry therefore remains available to the scene-radiance transport layer for distance, surface-angle, visibility/shadow, and indirect-light behavior.
152
+
153
+ Ordinary full-frame flash synchronization requires a non-empty interval where every point in the active capture is simultaneously exposed. For the currently supported simultaneous or uniform-linear boundary schedules:
154
+
155
+ - latest opening phase is zero for a simultaneous opening, otherwise the declared opening traversal duration;
156
+ - earliest closing phase is the nominal closing reference;
157
+ - ordinary one-pulse sync is valid only when the complete pulse support lies inside that interval.
158
+
159
+ This rule is derived from exposure boundaries, not sensor data readout.
160
+
161
+ Front- and rear-curtain modes differ only in where the same pulse support is registered inside that valid interval. Their different relationship to subject motion/ambient trails must emerge from time-dependent scene-radiance integration rather than drawing a synthetic trail.
162
+
163
+ Flash duration and shutter duration remain independent. Extending the shutter can integrate more ambient scene time without proportionally increasing a fixed short flash pulse.
164
+
165
+ Schema 0.1.0 intentionally excludes HSS. A moving-slit exposure with no whole-frame-open interval cannot be made ordinary-flash-compatible by relabeling a single pulse as HSS.
166
+
167
+ Manual flash also excludes TTL/preflash metering, recycle/thermal behavior, flash exposure lock, red-eye/modeling/AF-assist emissions and branded protocols. Camera WB remains downstream interpretation and never changes the emitted flash spectrum.
96
168
 
97
169
  ### Generic illumination vignetting
98
170
 
@@ -176,10 +248,44 @@ In composed POC capture mode, the equivalent-viewing helper uses the final retai
176
248
 
177
249
  The model is not a macro calibration model and does not include diffraction, pupil magnification, aberrations, focus breathing, or lens-specific principal-plane behavior in its DOF criterion.
178
250
 
251
+ ### Focus-control state versus optical focus
252
+
253
+ Focus control is a camera-control state machine, not a blur algorithm.
254
+
255
+ The #104 layer resolves a target/control event into the existing #103 `FocusPlane`. Downstream thin-lens, defocus and PSF calculations therefore depend only on the resulting finite/infinity optical focus state, not on whether that state came from MF, AF-S, AF-C or focus lock.
256
+
257
+ Finite autofocus target distance uses the same longitudinal camera-space/conjugate distance convention as #103. Off-axis points on one fronto-parallel plane therefore resolve to the same ideal focus distance; renderer ray length is not an autofocus distance.
258
+
259
+ The first autofocus actuator is an explicitly ideal instantaneous approximation. It supplies deterministic state semantics without modeling motor dynamics, AF sensor error, hunting, subject-recognition quality, low-light behavior or branded-camera performance.
260
+
261
+ Single AF acquires once and holds. Continuous AF can consume time-ordered observations of one stable target identity. Target loss holds the last focus and requires an explicit reacquisition event; the engine never silently jumps to another subject.
262
+
263
+ Focus lock freezes the resolved optical state independently from AE, metering and white balance. Release-priority policy is evaluated by a separate gate and cannot alter the optical focus calculation.
264
+
179
265
  ### Defocus circle
180
266
 
181
267
  Defocus is calculated geometrically by comparing the selected sensor plane for the focus distance with the ideal image plane for the subject distance and projecting an ideal circular entrance-pupil cone to the sensor.
182
268
 
269
+ ### Real-lens sampled PSF and complex-pupil propagation
270
+
271
+ The #113 framework adds explicit combined primary-optical PSF representations without redefining the existing geometric-defocus or circular-Airy diagnostics.
272
+
273
+ A sampled PSF is a full 2D unit-energy intensity distribution in image-plane metric coordinates. Regular-grid interpolation is bounded across focal length, focus state, aperture, field X/Y, wavelength and signed image-plane defocus. The engine never extrapolates beyond declared profile support.
274
+
275
+ Field curvature and longitudinal chromatic focus are represented as field-/wavelength-dependent best-focus image-plane offsets. They do not modify distortion or lateral-CA coordinates.
276
+
277
+ A complex pupil stores relative amplitude plus optical-path difference. The reference evaluator uses scalar Fraunhofer propagation:
278
+
279
+ `PSF ∝ |FT{ A(x,y) exp(i 2π OPD(x,y)/λ) }|²`
280
+
281
+ and then normalizes the sampled intensity to unit energy. Diffraction and aberration are therefore evaluated together in this path rather than composed as two unrelated image-space blur kernels.
282
+
283
+ Mechanical pupil clipping may be represented in the pupil amplitude/PSF shape, but relative pupil throughput is an explicit separate factor. This prevents the normalized PSF from absorbing throughput that #110 would later apply again.
284
+
285
+ MTF magnitude alone cannot uniquely determine a PSF because phase is absent. Photivra therefore accepts MTF magnitude as diagnostic/validation data but never reconstructs a unique PSF from it.
286
+
287
+ Lens PSF remains upstream of the sensor optical stack, sensor sampling and reconstruction. Stray light is also separate because ghosts and veiling glare are not ordinary primary-image PSF blur.
288
+
183
289
  ### PSF/pupil foundation
184
290
 
185
291
  The engine now exposes a PSF/pupil foundation that evaluates existing geometric defocus and circular diffraction diagnostics in one explicit context while keeping the numerical contributions separate.
@@ -194,7 +300,7 @@ The context declares:
194
300
 
195
301
  The current foundation does **not** calculate a combined point-spread function or MTF. Defocus-circle diameter and Airy first-zero diameter are not added together or collapsed into one sharpness value.
196
302
 
197
- Reserved future contributions include non-circular diffraction, mechanical pupil clipping, field curvature, field-dependent aberration structure, and field-dependent bokeh.
303
+ The dedicated ideal-polygon API evaluates on-axis non-circular diffraction density; the real-lens framework owns explicitly profiled pupil clipping, field curvature, aberration and bokeh. None is silently combined by the legacy diagnostic calculator. See [PSF and Pupil Foundation](PSF_FOUNDATION.md).
198
304
 
199
305
  Illumination vignetting remains outside the PSF contribution list because it is currently modeled as throughput-only.
200
306
 
@@ -208,7 +314,7 @@ where `λ` is wavelength and `N` is f-number.
208
314
 
209
315
  This is a monochromatic, ideal-circular-pupil diagnostic.
210
316
 
211
- It is deliberately separate from regular-polygon aperture geometry used for bokeh/sunstar exploration. Supplying a polygon blade count does not convert the circular Airy result into a polygon-aperture diffraction PSF; a physically consistent non-circular diffraction model remains future work.
317
+ It is deliberately separate from regular-polygon aperture geometry used for bokeh/sunstar exploration. Supplying a polygon blade count does not convert the circular Airy result into a polygon-aperture diffraction PSF. Use `calculateIdealPolygonDiffractionPsf()` with an explicit physical equal-area pupil, propagation distance and wavelength for the ideal on-axis polygon model; arbitrary real diaphragms remain outside that model.
212
318
 
213
319
  ### Ideal diaphragm geometry and sunstar symmetry
214
320
 
@@ -228,11 +334,52 @@ The current model returns one global image-plane vector. It does not compute the
228
334
 
229
335
  Equivalent stabilization stops attenuate angular displacement by `2^-stops`; that attenuation is explicitly an educational approximation rather than a real IBIS/OIS or CIPA performance model.
230
336
 
337
+ ### Sensor stochastic readout and RAW boundary
338
+
339
+ The #14 closure separates deterministic expectation calculations from stochastic realizations and from digital encoding.
340
+
341
+ Expected photo, dark and additional stored charge remain upstream scientific quantities. A seeded realization may sample photo/dark Poisson statistics and explicitly declared additional-component statistics without mutating those expectation APIs.
342
+
343
+ Electronic read noise is a downstream input-referred stochastic contribution and remains separate from photon/dark shot noise. Multiple declared RMS read-noise components are sampled independently; their metadata is not collapsed into a claim about physical circuit origin unless evidence says so.
344
+
345
+ The electronic chain preserves separate saturation domains:
346
+
347
+ 1. physical charge-storage capacity;
348
+ 2. pre-ADC electron-equivalent saturation;
349
+ 3. ADC/digital code saturation.
350
+
351
+ A scalar clamp at physical capacity is not a blooming model. Blooming requires spatial charge-transfer/adjacency and anti-blooming semantics.
352
+
353
+ Conversion gain is expressed as electrons per digital code for one explicitly selected operating regime. The engine does not infer that regime from ISO, CMOS/CCD family, capture-mode labels, or product tier.
354
+
355
+ RAW codes retain absolute native sensor/CFA coordinates. Capture orientation and final output rotation do not rotate or re-phase the sensor mosaic.
356
+
357
+ The first reconstruction model is an explicit linear native-neighborhood transform tied to exact capture-mode and CFA identities. It is intentionally not a generic claim that a CFA name determines a demosaic algorithm. It also does not claim moiré/aliasing physics unless an adequate pre-sampling optical/scene spatial-frequency model exists.
358
+
359
+ ### ISO/exposure-index and sensor-readout boundary
360
+
361
+ ISO/exposure index is a camera control/reporting state, not a photon source.
362
+
363
+ For fixed scene radiance, aperture, shutter duration, optical transmission and sensor collection geometry, changing ISO does not change the number of photons that arrived during the exposure. Accordingly, #7 never modifies upstream photon/photoelectron expectation or photon shot-noise statistics merely because a different ISO/EI was selected.
364
+
365
+ The detailed ISO capability contract distinguishes:
366
+
367
+ - standard exposure-index settings;
368
+ - expanded low/high reported settings;
369
+ - Auto ISO eligibility/ranges;
370
+ - optional capture-mode restrictions.
371
+
372
+ It does not infer physical gain, conversion gain, read noise or saturation from those numbers.
373
+
374
+ When generic high-ISO behavior is needed, #7 maps an explicit ISO/capture-mode state to an explicit #14 readout regime. The selected regime—not the ISO number itself—contains the declared conversion gain, electronic read noise and downstream saturation/ADC behavior. This keeps piecewise or dual/multiple-gain behavior representable without smoothing it into a universal ISO→noise curve.
375
+
376
+ Good/Better/Best labels are convenience mappings to full signal-chain profile identities. They are not sensor equations and do not rank real cameras. Sensor size/resolution, photon shot noise, processed-image denoising/sharpening, and technology-family labels such as CMOS/CCD remain separate domains.
377
+
231
378
  ### Radiometry readiness boundary
232
379
 
233
380
  Absolute scene luminance or relative exposure alone is not enough to derive a defensible photon count.
234
381
 
235
- Before any future composed photon simulation, Photivra requires an explicit prerequisite package covering:
382
+ Before a composed photon simulation, Photivra requires an explicit prerequisite package covering:
236
383
 
237
384
  - scene spectral radiance or a documented spectral approximation;
238
385
  - optical transmission;
@@ -264,7 +411,7 @@ The contract intentionally avoids describing all image formation as independent
264
411
 
265
412
  Current analytical primitives remain valid and separately named. Adding a broader stage must not silently reinterpret existing focal length, defocus, diffraction, motion, crop, or sensor-sampling outputs.
266
413
 
267
- Reserved sensor stages in the contract are ordering placeholders only; they do not establish OLPF, CFA, photon, ADC, or reconstruction capabilities.
414
+ The static ordering contract retains broad foundation/reserved metadata. Those labels alone do not establish execution. Production plan 0.7.0 separately records actual bounded environment-route execution through sampling, photons, charge, ADC and reconstruction; broader unsupported models remain blocked.
268
415
 
269
416
  ## Source provenance
270
417
 
package/docs/POC_API.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Local POC Simulation API
2
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
+
3
5
  Photivra includes a minimal Node HTTP transport for proof-of-concept development and integration testing.
4
6
 
5
7
  It is **not** the recommended production runtime. Browser applications can consume the root `@photivra/engine` scientific surface directly; the production Photivra architecture is intended to keep the simulation math client-side rather than expose this unauthenticated POC server to the public internet.
@@ -0,0 +1,124 @@
1
+ # Request-local defocus projection reuse: #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
+ The measured candidate reuses the focus-plane image distance already calculated
6
+ inside `simulatePocCamera()` for its subject and defocus sweep. It is a small
7
+ private optimization against merged main
8
+ `c1374c31473f893310d1ce4f0d5a737aaba43ab5`. It consumes no pending tier/export draft.
9
+ Root API 0.103.0, POC API 0.20.0 and public scalar signatures/semantics stay unchanged.
10
+
11
+ ## Measurement and decision
12
+
13
+ [Recorded evidence](benchmarks/2026-10-02-poc-projection-reuse.json) contains two
14
+ independent ordinary paired runs and one GC-assisted paired run, all built with
15
+ `tsc`. Each path/scenario has 500 warmup calls and nine blocks of 1,000 whole
16
+ requests. Reference/candidate order alternates, scenario order rotates, and the
17
+ final recorded runs were performed after local tests finished, without concurrent
18
+ task benchmarks. Shared host activity remains uncontrolled.
19
+
20
+ Runtime was Node 24.19.0/V8 13.6.233.17-node.51 on Linux x64, reporting AMD EPYC 9V74
21
+ and 9 logical CPUs. Every run records runtime/hardware, baseline commit and SHA-256
22
+ fingerprints of both candidate runtime source files. The source identity is
23
+ operator-attested; fingerprints allow verification after commit. These are
24
+ public POC developer-consumer request shapes, not observed product traffic or
25
+ browser frame-time evidence.
26
+
27
+ | Whole request | Ordinary reference µs, run 1 | Candidate µs, run 1 | Candidate/reference, run 1 | Ratio, run 2 | GC-assisted ratio |
28
+ | --- | ---: | ---: | ---: | ---: | ---: |
29
+ | Base, no sweep | 11.11 | 11.29 | 1.017 | 1.014 | 0.989 |
30
+ | 1 defocus sample | 12.16 | 11.89 | 0.978 | 0.942 | 0.974 |
31
+ | 2 defocus samples | 13.20 | 11.85 | 0.897 | 0.950 | 0.980 |
32
+ | 4 defocus samples | 14.69 | 13.50 | 0.919 | 0.906 | 0.941 |
33
+ | 8 defocus samples | 18.37 | 16.67 | 0.907 | 0.856 | 0.952 |
34
+ | 16 defocus samples | 27.10 | 19.97 | 0.737 | 0.819 | 0.857 |
35
+ | 16 each defocus/size/motion | 56.33 | 50.52 | 0.897 | 0.902 | 0.880 |
36
+ | Portrait/off-center staged mixed | 95.54 | 90.79 | 0.950 | 0.924 | 0.970 |
37
+
38
+ A ratio below one means a shorter measured request. The two ordinary runs show
39
+ 18–26% improvement on the 16-defocus shape, about 10% on mixed samples and 5–8%
40
+ on staged capture. The base shape is about 0.16–0.18 µs slower (1.4–1.7%) in those
41
+ runs; no universal speedup or zero overhead is claimed. GC-assisted timings are
42
+ separate distributions and do not establish ordinary-vs-GC causality. Earlier
43
+ exploratory runs are excluded from the final evidence.
44
+
45
+ The decision is to retain this bounded private reuse candidate for human review.
46
+ The repeatable sweep/mixed improvement justifies it, with the small base-path
47
+ tradeoff explicitly visible. Further FOV/motion/sampling reuse or a generic
48
+ prepared public API is not justified by this experiment. #43 retains its separate
49
+ measurement/decision gate; this result does not establish its conclusion.
50
+
51
+ ## Preparation and memory
52
+
53
+ Context creation copies three scalar numbers into a frozen object only when a
54
+ non-empty defocus sweep is present. It adds no new thin-lens resolution: it borrows
55
+ the same request's existing calculated projection. It cannot survive the request,
56
+ is not returned in the response and has no global cache or cross-input lifetime.
57
+ No-sweep requests allocate no context. An isolated object/freeze probe measured
58
+ about 42–46 ns per preparation; its JIT/escape behavior can differ inside the
59
+ whole call, so it is not an independent cost/error bound.
60
+
61
+ Short sweeps are explicitly measured above; benefits increase enough at 16
62
+ samples to amortize the context in these workloads. A single sample is close to
63
+ noise, so no portable break-even count is asserted. Raw net retained-heap deltas
64
+ are preserved but are not allocation counts or persistent-context size estimates.
65
+
66
+ A separate V8 Inspector allocation-sampling pass measured 2,000 staged requests
67
+ per path at 32 KiB sampling intervals, requesting inclusion of objects collected
68
+ by both major and minor GC. Estimated sampled bytes were 593,837,880 for reference
69
+ and 551,945,312 for candidate (about 7% lower); inclusive thin-lens sampled bytes
70
+ were 177,301,960 and 138,224,096 (about 22% lower). These are statistical sampling
71
+ estimates, not exact allocation counters, GC-pause measurements or latency
72
+ attribution. Instrumented allocations are separate from all timing comparisons.
73
+ No raw inspector profile/private path is stored.
74
+
75
+ The sensor dimensions are an explicit 36×24 mm, 6000×4000 raster. This POC computes
76
+ analytical diagnostics; it does not execute 24 million image samples. Raster
77
+ size is therefore context, not a claim of full image-rendering throughput. The
78
+ canonical tiny #130 fixture is used only for correctness, never as the runtime
79
+ performance basis.
80
+
81
+ ## Correctness and boundary
82
+
83
+ The public scalar `calculateDefocusCircle()` uses the same shared implementation
84
+ without a borrowed projection. Its validation, arithmetic, result model,
85
+ assumptions and provenance remain authoritative. The internal borrowed context
86
+ requires exact physical focal/focus identity and positive finite projection.
87
+ The POC constructs it from its already validated thin-lens result, never from
88
+ serialized user projection values. Subject-plane projection still uses the
89
+ ordinary thin-lens calculation; no equation or scientific stage is replaced.
90
+
91
+ `test/fixtures/poc-projection-reuse-reference.json` stores 64 owned deterministic
92
+ inputs and complete response/provenance SHA-256 commitments generated from the
93
+ unchanged main reference build. The corpus includes all four orientations,
94
+ off-center captures, legacy crops, varied focal/focus/aperture state and sample
95
+ counts. Seed is `0x45c1374c`. Do not regenerate expectations from the candidate to
96
+ hide drift. #130 remains unchanged. Additional tests compare the scalar oracle,
97
+ invalid-input errors, stale context rejection and alternating request identities.
98
+
99
+ Browser-surface and package gates remain required. This is a Node-measured POC
100
+ optimization, not a browser-motivated public API; no browser performance or private
101
+ application claim is made. It does not activate production rendering/radiometry
102
+ or change capture/output/version contracts. Scientific/provenance review and
103
+ contribution-specific DCO certification remain required before merge.
104
+
105
+ ## Reproduction
106
+
107
+ Create an independent checkout of the recorded reference commit and build it with
108
+ `npm ci` / `npm run build`. Build the candidate checkout too. Run only the
109
+ benchmark during timing; replace the example reference-root with that checkout.
110
+ The tooling consumes the reference's `dist/index.js` and first verifies complete
111
+ response equivalence for every measured scenario.
112
+
113
+ ```sh
114
+ node scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5
115
+ node --expose-gc scripts/benchmark-poc-projection-reuse.mjs --reference-root=/path/to/reference --reference-commit=c1374c31473f893310d1ce4f0d5a737aaba43ab5 --allocation=sample
116
+ ```
117
+
118
+ Repeat ordinary runs separately. Build labels are not independently attested by
119
+ the script. There is no timing CI threshold, paid service, runtime dependency or
120
+ new third-party material. This tooling is Node-only and outside the public root.
121
+
122
+ ## Final V1 remeasurement
123
+
124
+ [Final V1 performance disposition](V1_PERFORMANCE_DISPOSITION.md) records current main #204, fresh paired timing/equivalence, preparation/memory profiles and dense executed environment-to-RAW evidence. PR #205 merged the final reviewed/signed no-further-change disposition; PR #206 merged final conformance. The measured engine commit remains the historical benchmark identity. Earlier candidate and pending-remeasurement statements above are historical.
@@ -0,0 +1,157 @@
1
+ # Processed camera output
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
+ Root API 0.115.0 completes the bounded SDR post-capture handoff for #112.
6
+ Production plan 0.6.0 adds explicit committed RAW processing. At introduction, package 0.6.0,
7
+ POC 0.20.0, capture, RAW, color, correction and SDR schemas remain unchanged.
8
+ This is the engine boundary used by preview and file consumers; integrating
9
+ commercial UI controls and browser presentation belongs to the apps repository.
10
+
11
+ ## Entry points and domains
12
+
13
+ | Authoritative input | Entry point | Semantic checks |
14
+ | --- | --- | --- |
15
+ | Scene-referred XYZ, virtual-camera channels or already transformed linear RGB | `calculateCaptureSdr()` | Exact #15 plane, profile/version, WB application history, channel order, reference white and raster binding |
16
+ | Capture-bound linear plane with selected corrections | `calculateCaptureCorrectedSdr()` | Same color/WB checks, exact capture/lens/time/geometry state, compatible correction domains and explicit sampling/support policy |
17
+ | Attached post-ADC native RAW | `calculateProcessedSensorRaw()` | Revalidated frame, explicit reconstruction kernels and coverage, registered RGB interpretation, resolved sensor gains, oriented crop and optional native correction |
18
+ | RAW plus file metadata/encoder policy | `createPhotographicExportPair()` | Uses `calculateProcessedSensorRaw()` for JPEG pixels; preserves exact native RAW for DNG |
19
+ | Committed production snapshot plus RAW policy | `createProductionImageFormationPlan()` | Optional `processedOutput: { outputStateId, processing }` binds attached capture, scene clock, seed, physical exposure, WB and available focus commits |
20
+
21
+ There is no untyped "linear RGB" input or screenshot/canvas source. A caller
22
+ with capture-linear data uses its declared #15 state. A RAW preview and paired
23
+ JPEG use the same explicit `ProcessedSensorRawInput`: reconstruction,
24
+ `ExportSensorColorProfile`, white-balance policy, `SdrRenderingProfile` and
25
+ optional correction. Metadata and JPEG quantization are separate file choices.
26
+ The returned arrays are high fidelity values before lossy JPEG packing, so a
27
+ JPEG decoder is not expected to reproduce them bit for bit.
28
+
29
+ The RAW result records input/output domains, color profile/evidence, WB policy
30
+ and disposition, child reconstruction/rendering/correction envelopes, native
31
+ DNG crop and processed output view. It owns copies of input values. Standalone
32
+ results are ordinary owned values; a production plan deep-freezes its copy.
33
+ Physical capture and actual display adaptation are explicitly unchanged.
34
+
35
+ ## Ordered processing
36
+
37
+ RAW processing delegates to existing implementations:
38
+
39
+ 1. Reconstruct exact attached native post-ADC codes; preserve signed normalized
40
+ shadows and per-site capture/readout diagnostics.
41
+ 2. Apply the explicit approximate sensor-channel interpretation and resolved
42
+ sensor WB gains once; develop XYZ/linear sRGB/D65.
43
+ 3. Without correction, map the committed orientation and 1:1 output crop. With
44
+ correction, build the oriented full-active linear RGB view, then delegate
45
+ native optical correction, joint-valid retained view and orientation to the
46
+ capture correction executor.
47
+ 4. Apply rendering exposure, declared tone curve, explicit component gamut
48
+ handling, sRGB transfer encoding and quantization through the SDR renderer.
49
+ 5. Return output-referred encoding to the consumer. File packing and platform
50
+ display/view adaptation remain distinct downstream operations.
51
+
52
+ The current correction executor supports its explicitly compatible RGB
53
+ geometry/CA mapping followed by linear gain. It rejects unsupported domains or
54
+ orders; it does not silently coerce reconstruction-adjacent channel correction
55
+ into post-color RGB. Existing #118 mapping/resampling diagnostics retain crop,
56
+ local Jacobian/stretch, support mask, interpolation/filter identity, gain/noise
57
+ costs, residual assumptions and clipping. RAW correction intent is informational;
58
+ DNG sensor codes are unchanged. Native prefiltering cannot be declared without
59
+ an implemented source prefilter.
60
+
61
+ Rendering controls never change aperture, shutter, ISO, focus, geometry,
62
+ photo/dark charge, noise realization, physical saturation or RAW codes. Metering
63
+ remains upstream: this API has no meter input, exposure resolver or feedback
64
+ path. Consumers must identify whether histograms/zebras analyze capture data or
65
+ these output-referred samples.
66
+
67
+ ## Encoding, clipping and future modes
68
+
69
+ The existing SDR profile fully declares deterministic exposure EV, identity or
70
+ positive per-channel Reinhard tone curve, clipping or rejection of out-of-range
71
+ components, sRGB transfer, 8/16-bit nearest-ties-up quantization and no dither.
72
+ Output explicitly records sRGB primaries, D65 and 80 cd/m² reference white.
73
+ Component clipping is range handling, not a perceptual wide-gamut transform.
74
+ See [SDR rendering](SDR_RENDERING.md) for equations and limitations.
75
+
76
+ RAW preview supports both SDR bit depths. Baseline JPEG requires 8 bits and
77
+ rejects a 16-bit profile; it never silently reduces the requested bit depth.
78
+ Full-well/ADC flags stay in RAW samples, correction-gain clipping stays in the
79
+ correction envelope, and rendering/tone/gamut counts stay in SDR diagnostics.
80
+ Actual display saturation is unknown because display adaptation is external.
81
+
82
+ HDR/PQ/HLG profiles fail validation. Future HDR encoding needs a separately
83
+ versioned transfer/primaries/reference/mastering contract and explicit display
84
+ semantics. Source float headroom does not become an HDR output declaration.
85
+ Picture styles, restoration, sharpening and denoise remain future rendering
86
+ choices, separately identified from sensor/optical quality.
87
+
88
+ ## Production plan and compatibility
89
+
90
+ With a valid attached RAW policy and declared renderer support, the existing
91
+ contract graph activates four executed downstream stages: `reconstruction`,
92
+ `physical-orientation-transform`, `output-crop-resample`, `display-processing`.
93
+ Each records model `processed-sensor-raw-sdr` 0.1.0 and attached frame identity.
94
+ The plan retains the complete processed result, profile identity, requested
95
+ output domain and approximate scientific status in its fingerprint. Scientific
96
+ assurance includes the approximate processing component and unpropagated
97
+ uncertainty, retaining color evidence and child results.
98
+
99
+ Missing or mismatched processing records `processed-output-evaluation-blocked`;
100
+ renderer stage declarations still gate each active stage. A request without an
101
+ attachment preserves prior unsupported downstream behavior. Existing inputs
102
+ remain valid; plan version and resulting fingerprints intentionally change.
103
+ Serialized consumers must understand plan 0.6.0 and its optional result field.
104
+
105
+ `outputStateId` explicitly binds numerical attached crop/raster policy to the
106
+ snapshot's committed output identity; it is a caller assertion, not an invented
107
+ geometry lookup. The RAW frame remains independently attached authoritative
108
+ capture data. Matching IDs do not prove its upstream source transport. PSF,
109
+ sensor-stack, photosite, charge, read-noise and ADC composition are still
110
+ separate upstream work: their missing-stage blockers remain. An executed
111
+ post-capture boundary does not make the whole production plan ready.
112
+
113
+ ## Bounded operating envelope
114
+
115
+ Existing reconstruction permits at most 4,096 native sites, registered dense
116
+ reference kernels, and complete required support. RAW output crop remains 1:1;
117
+ source reconstruction must cover it, or the whole active region for correction.
118
+ The color interpretation is explicit RGB-channel approximation, not sensor
119
+ calibration. General resizing, streaming/native camera resolution, arbitrary CFA
120
+ color models and external-editor qualification remain #16/#178 requirements.
121
+ This boundary introduces no renderer/provider, file IO or network dependency.
122
+
123
+ ## Acceptance evidence
124
+
125
+ | #112 requirement | Regression evidence |
126
+ | --- | --- |
127
+ | Tone/render EV cannot alter capture/noise/settings | `processed-sensor-raw.test.ts`, `raw-output-conformance.test.ts` |
128
+ | WB applied once; preserved RAW intent; upstream balanced state | `capture-sdr.test.ts`, `photographic-export-correction.test.ts` |
129
+ | Explicit image-state identity; reject unresolved/wrong domain | `capture-sdr.test.ts`, `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
130
+ | Separate tone/gamut/transfer/quantization; deterministic SDR | `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
131
+ | Primaries/reference white and explicit out-of-range policy | `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
132
+ | RAW/correction/output clipping remain distinct | `raw-output-conformance.test.ts`, `capture-corrected-sdr.test.ts`, `processed-sensor-raw.test.ts` |
133
+ | Metering remains pre-display | No processing API calls the upstream meter; `metering-equipment-integration.test.ts` preserves its separate domain |
134
+ | Same rendering intent for preview/JPEG without screenshots | `processed-sensor-raw.test.ts`, four-orientation/WB checks in `photographic-export-correction.test.ts` |
135
+ | HDR remains distinct; no implicit SDR reinterpretation | Profile rejection tests in `sdr-rendering.test.ts`, `processed-sensor-raw.test.ts` |
136
+ | Correction domains/support/costs and immutable plan binding | `capture-corrected-sdr.test.ts`, `production-image-formation-plan.test.ts` |
137
+
138
+ RAW/linear fixtures use the #130 canonical camera/seed through documented tiny
139
+ owned derived variants; test pixels and ideal color profiles are synthetic,
140
+ not measured/calibrated scene truth. Acceptance demonstrates the declared bounded
141
+ post-capture foundation, not Adobe compatibility or complete physical rendering.
142
+
143
+ This contribution independently composes existing Photivra APIs; it introduces
144
+ no new scientific equation, third-party code/data, look assets or dependency.
145
+ AI-assisted draft requires substantive owner review and contribution-specific
146
+ DCO certification before merge. External editor/high-resolution acceptance and
147
+ upstream physical activation retain their existing issue owners.
148
+
149
+ ## Executed upstream production handoff
150
+
151
+ Plan 0.7.0 additionally supports `environmentCapture.processing`. Its
152
+ reconstruction policy omits `rawFrame`: the plan supplies only the exact RAW
153
+ returned by its executed source-to-ADC pipeline. This route cannot be combined
154
+ with `processedOutput` or an independent physical scene sample. Existing
155
+ attached-RAW plan inputs and their conservative origin limitations remain valid.
156
+ See [production environment capture](PRODUCTION_ENVIRONMENT_CAPTURE.md) for
157
+ binding, replay, stage activation and migration details.