@photivra/engine 0.5.1 → 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 (753) hide show
  1. package/AGENTS.md +674 -0
  2. package/CHANGELOG.md +218 -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 +157 -56
  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 +101 -7
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +99 -7
  205. package/dist/index.js.map +1 -1
  206. package/dist/motion/camera-rotation.d.ts +76 -0
  207. package/dist/motion/camera-rotation.d.ts.map +1 -1
  208. package/dist/motion/camera-rotation.js +111 -0
  209. package/dist/motion/camera-rotation.js.map +1 -1
  210. package/dist/motion/capture-rotation-inverse-mapping.d.ts +113 -0
  211. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -0
  212. package/dist/motion/capture-rotation-inverse-mapping.js +184 -0
  213. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -0
  214. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +104 -0
  215. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -0
  216. package/dist/motion/capture-rotation-temporal-quadrature.js +131 -0
  217. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -0
  218. package/dist/motion/capture-rotation-trajectory.d.ts +113 -0
  219. package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -0
  220. package/dist/motion/capture-rotation-trajectory.js +168 -0
  221. package/dist/motion/capture-rotation-trajectory.js.map +1 -0
  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 +23 -4
  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 +22 -2
  291. package/dist/optics/radial-distortion.d.ts.map +1 -1
  292. package/dist/optics/radial-distortion.js +101 -23
  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 +32 -11
  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 +212 -0
  393. package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -0
  394. package/dist/sensor/capture-color-sampling-binding.js +437 -0
  395. package/dist/sensor/capture-color-sampling-binding.js.map +1 -0
  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 +157 -0
  401. package/dist/sensor/capture-mode.d.ts.map +1 -0
  402. package/dist/sensor/capture-mode.js +447 -0
  403. package/dist/sensor/capture-mode.js.map +1 -0
  404. package/dist/sensor/color-sampling.d.ts +133 -0
  405. package/dist/sensor/color-sampling.d.ts.map +1 -0
  406. package/dist/sensor/color-sampling.js +245 -0
  407. package/dist/sensor/color-sampling.js.map +1 -0
  408. package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
  409. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
  410. package/dist/sensor/constant-rate-temporal-integration.js +382 -0
  411. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
  412. package/dist/sensor/dark-current.d.ts +169 -0
  413. package/dist/sensor/dark-current.d.ts.map +1 -0
  414. package/dist/sensor/dark-current.js +427 -0
  415. package/dist/sensor/dark-current.js.map +1 -0
  416. package/dist/sensor/environment-photo-signal.d.ts +123 -0
  417. package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
  418. package/dist/sensor/environment-photo-signal.js +186 -0
  419. package/dist/sensor/environment-photo-signal.js.map +1 -0
  420. package/dist/sensor/eqe-electron-rate.d.ts +107 -0
  421. package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
  422. package/dist/sensor/eqe-electron-rate.js +561 -0
  423. package/dist/sensor/eqe-electron-rate.js.map +1 -0
  424. package/dist/sensor/eqe-local-exposure.d.ts +65 -0
  425. package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
  426. package/dist/sensor/eqe-local-exposure.js +84 -0
  427. package/dist/sensor/eqe-local-exposure.js.map +1 -0
  428. package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
  429. package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
  430. package/dist/sensor/eqe-temporal-exposure.js +62 -0
  431. package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
  432. package/dist/sensor/exposure-window.d.ts +117 -0
  433. package/dist/sensor/exposure-window.d.ts.map +1 -0
  434. package/dist/sensor/exposure-window.js +305 -0
  435. package/dist/sensor/exposure-window.js.map +1 -0
  436. package/dist/sensor/iso-signal-chain.d.ts +148 -0
  437. package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
  438. package/dist/sensor/iso-signal-chain.js +411 -0
  439. package/dist/sensor/iso-signal-chain.js.map +1 -0
  440. package/dist/sensor/local-exposure-binding.d.ts +87 -0
  441. package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
  442. package/dist/sensor/local-exposure-binding.js +214 -0
  443. package/dist/sensor/local-exposure-binding.js.map +1 -0
  444. package/dist/sensor/optical-stack.d.ts +132 -0
  445. package/dist/sensor/optical-stack.d.ts.map +1 -0
  446. package/dist/sensor/optical-stack.js +303 -0
  447. package/dist/sensor/optical-stack.js.map +1 -0
  448. package/dist/sensor/photon-energy.d.ts +97 -0
  449. package/dist/sensor/photon-energy.d.ts.map +1 -0
  450. package/dist/sensor/photon-energy.js +390 -0
  451. package/dist/sensor/photon-energy.js.map +1 -0
  452. package/dist/sensor/physical-charge-capacity.d.ts +130 -0
  453. package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
  454. package/dist/sensor/physical-charge-capacity.js +345 -0
  455. package/dist/sensor/physical-charge-capacity.js.map +1 -0
  456. package/dist/sensor/pixel-pitch.d.ts +6 -0
  457. package/dist/sensor/pixel-pitch.d.ts.map +1 -1
  458. package/dist/sensor/pixel-pitch.js +6 -0
  459. package/dist/sensor/pixel-pitch.js.map +1 -1
  460. package/dist/sensor/radiometry-readiness.d.ts +10 -0
  461. package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
  462. package/dist/sensor/radiometry-readiness.js +10 -0
  463. package/dist/sensor/radiometry-readiness.js.map +1 -1
  464. package/dist/sensor/raw-readout.d.ts +314 -0
  465. package/dist/sensor/raw-readout.d.ts.map +1 -0
  466. package/dist/sensor/raw-readout.js +914 -0
  467. package/dist/sensor/raw-readout.js.map +1 -0
  468. package/dist/sensor/raw-reconstruction.d.ts +170 -0
  469. package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
  470. package/dist/sensor/raw-reconstruction.js +424 -0
  471. package/dist/sensor/raw-reconstruction.js.map +1 -0
  472. package/dist/sensor/readout-exposure-linkage.d.ts +123 -0
  473. package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -0
  474. package/dist/sensor/readout-exposure-linkage.js +222 -0
  475. package/dist/sensor/readout-exposure-linkage.js.map +1 -0
  476. package/dist/sensor/readout-timing.d.ts +137 -0
  477. package/dist/sensor/readout-timing.d.ts.map +1 -0
  478. package/dist/sensor/readout-timing.js +243 -0
  479. package/dist/sensor/readout-timing.js.map +1 -0
  480. package/dist/sensor/response-application-compatibility.d.ts +136 -0
  481. package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
  482. package/dist/sensor/response-application-compatibility.js +408 -0
  483. package/dist/sensor/response-application-compatibility.js.map +1 -0
  484. package/dist/sensor/response-operating-range.d.ts +173 -0
  485. package/dist/sensor/response-operating-range.d.ts.map +1 -0
  486. package/dist/sensor/response-operating-range.js +672 -0
  487. package/dist/sensor/response-operating-range.js.map +1 -0
  488. package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
  489. package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
  490. package/dist/sensor/responsivity-photocurrent.js +644 -0
  491. package/dist/sensor/responsivity-photocurrent.js.map +1 -0
  492. package/dist/sensor/sampling-aperture.d.ts +154 -0
  493. package/dist/sensor/sampling-aperture.d.ts.map +1 -0
  494. package/dist/sensor/sampling-aperture.js +388 -0
  495. package/dist/sensor/sampling-aperture.js.map +1 -0
  496. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
  497. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
  498. package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
  499. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
  500. package/dist/sensor/sensor-geometry.d.ts +12 -0
  501. package/dist/sensor/sensor-geometry.d.ts.map +1 -1
  502. package/dist/sensor/sensor-geometry.js +12 -0
  503. package/dist/sensor/sensor-geometry.js.map +1 -1
  504. package/dist/sensor/signal-noise.d.ts +10 -0
  505. package/dist/sensor/signal-noise.d.ts.map +1 -1
  506. package/dist/sensor/signal-noise.js +10 -0
  507. package/dist/sensor/signal-noise.js.map +1 -1
  508. package/dist/sensor/spatial-sample-reduction.d.ts +171 -0
  509. package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -0
  510. package/dist/sensor/spatial-sample-reduction.js +345 -0
  511. package/dist/sensor/spatial-sample-reduction.js.map +1 -0
  512. package/dist/sensor/spatial-sampling-quadrature.d.ts +179 -0
  513. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -0
  514. package/dist/sensor/spatial-sampling-quadrature.js +224 -0
  515. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -0
  516. package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
  517. package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
  518. package/dist/sensor/spatio-spectral-reduction.js +373 -0
  519. package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
  520. package/dist/sensor/spectral-coverage.d.ts +24 -0
  521. package/dist/sensor/spectral-coverage.d.ts.map +1 -0
  522. package/dist/sensor/spectral-coverage.js +86 -0
  523. package/dist/sensor/spectral-coverage.js.map +1 -0
  524. package/dist/sensor/spectral-quadrature.d.ts +169 -0
  525. package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
  526. package/dist/sensor/spectral-quadrature.js +542 -0
  527. package/dist/sensor/spectral-quadrature.js.map +1 -0
  528. package/dist/sensor/spectral-response.d.ts +192 -0
  529. package/dist/sensor/spectral-response.d.ts.map +1 -0
  530. package/dist/sensor/spectral-response.js +664 -0
  531. package/dist/sensor/spectral-response.js.map +1 -0
  532. package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
  533. package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
  534. package/dist/sensor/temporal-eqe-sum.js +30 -0
  535. package/dist/sensor/temporal-eqe-sum.js.map +1 -0
  536. package/dist/sensor/temporal-photo-signal.d.ts +38 -0
  537. package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
  538. package/dist/sensor/temporal-photo-signal.js +110 -0
  539. package/dist/sensor/temporal-photo-signal.js.map +1 -0
  540. package/dist/sensor/temporal-sample-binding.d.ts +6 -0
  541. package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
  542. package/dist/sensor/temporal-sample-binding.js +32 -0
  543. package/dist/sensor/temporal-sample-binding.js.map +1 -0
  544. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  545. package/dist/simulation/poc-simulation.js +34 -11
  546. package/dist/simulation/poc-simulation.js.map +1 -1
  547. package/dist/stabilization/camera-shake.d.ts +11 -0
  548. package/dist/stabilization/camera-shake.d.ts.map +1 -1
  549. package/dist/stabilization/camera-shake.js +11 -0
  550. package/dist/stabilization/camera-shake.js.map +1 -1
  551. package/dist/stabilization/system.d.ts +218 -0
  552. package/dist/stabilization/system.d.ts.map +1 -0
  553. package/dist/stabilization/system.js +695 -0
  554. package/dist/stabilization/system.js.map +1 -0
  555. package/docs/API_REFERENCE.md +2017 -0
  556. package/docs/API_STYLE.md +132 -0
  557. package/docs/ARCHITECTURE.md +150 -23
  558. package/docs/AUTOMATION_COORDINATION.md +190 -0
  559. package/docs/CAPTURE_COLOR.md +25 -0
  560. package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
  561. package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
  562. package/docs/CAPTURE_SDR.md +20 -0
  563. package/docs/DEVELOPERS.md +60 -0
  564. package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
  565. package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
  566. package/docs/EXPORT_ACCEPTANCE.md +133 -0
  567. package/docs/GENERIC_TIER_PRESETS.md +269 -0
  568. package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
  569. package/docs/IMAGE_FORMATION.md +105 -9
  570. package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
  571. package/docs/MOTION_AND_SIGNAL.md +145 -1
  572. package/docs/NUMERICAL_CORRECTNESS.md +191 -0
  573. package/docs/PERFORMANCE_BASELINE.md +56 -0
  574. package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
  575. package/docs/PHYSICS_FOUNDATION.md +152 -5
  576. package/docs/POC_API.md +2 -0
  577. package/docs/POC_PROJECTION_REUSE.md +124 -0
  578. package/docs/PROCESSED_OUTPUT.md +157 -0
  579. package/docs/PRODUCTION_COMPOSITION.md +373 -0
  580. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
  581. package/docs/PROVENANCE.md +4 -0
  582. package/docs/PSF_FOUNDATION.md +110 -88
  583. package/docs/RAW_FRAME_ENVELOPE.md +56 -0
  584. package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
  585. package/docs/RELEASE_1_0.md +65 -0
  586. package/docs/RELEASE_AUDIT.md +38 -0
  587. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
  588. package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
  589. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
  590. package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
  591. package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
  592. package/docs/SDR_RENDERING.md +33 -0
  593. package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
  594. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
  595. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
  596. package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
  597. package/docs/SENSOR_RAW_FRAME.md +20 -0
  598. package/docs/SENSOR_RAW_PRODUCER.md +77 -0
  599. package/docs/SIGNAL_CONFORMANCE.md +23 -0
  600. package/docs/SIMULATED_CAPTURE.md +65 -0
  601. package/docs/STABILIZATION.md +160 -17
  602. package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
  603. package/docs/TIER_ACCEPTANCE.md +129 -0
  604. package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
  605. package/docs/USAGE.md +5604 -331
  606. package/docs/V1_COMPOSITION_MAP.md +123 -0
  607. package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
  608. package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
  609. package/docs/api/camera-equivalent-focal-length.md +53 -0
  610. package/docs/api/camera-field-of-view.md +119 -0
  611. package/docs/api/camera-projected-object-size.md +54 -0
  612. package/docs/api/capture-capture-export-metadata.md +107 -0
  613. package/docs/api/capture-environment-raw-producer.md +56 -0
  614. package/docs/api/capture-focus-control.md +419 -0
  615. package/docs/api/capture-linear-encoding.md +99 -0
  616. package/docs/api/capture-photographic-export.md +172 -0
  617. package/docs/api/capture-raw-frame-reconstruction.md +87 -0
  618. package/docs/api/capture-release-sequence.md +252 -0
  619. package/docs/api/capture-sensor-raw-frame.md +66 -0
  620. package/docs/api/capture-sensor-raw-producer.md +98 -0
  621. package/docs/api/capture-simulated-capture.md +179 -0
  622. package/docs/api/color-capture-color.md +122 -0
  623. package/docs/api/color-white-balance.md +386 -0
  624. package/docs/api/composition-image-formation-plan.md +825 -0
  625. package/docs/api/composition-plan-consumer.md +98 -0
  626. package/docs/api/core-calculation-result.md +220 -0
  627. package/docs/api/core-configuration-error.md +19 -0
  628. package/docs/api/core-image-formation.md +204 -0
  629. package/docs/api/core-scientific-assurance.md +214 -0
  630. package/docs/api/core-spectral-composition.md +268 -0
  631. package/docs/api/core-spectral.md +78 -0
  632. package/docs/api/core-validation.md +34 -0
  633. package/docs/api/core-version.md +14 -0
  634. package/docs/api/equipment-exposure-capabilities.md +270 -0
  635. package/docs/api/equipment-generic-tier-assets.md +82 -0
  636. package/docs/api/equipment-generic-tier-presets.md +103 -0
  637. package/docs/api/equipment-iso-capabilities.md +295 -0
  638. package/docs/api/equipment-metering-capabilities.md +126 -0
  639. package/docs/api/equipment-release-capabilities.md +91 -0
  640. package/docs/api/exports.json +5656 -0
  641. package/docs/api/exposure-exposure-duration-control.md +115 -0
  642. package/docs/api/exposure-exposure-mode-resolver.md +966 -0
  643. package/docs/api/exposure-exposure.md +150 -0
  644. package/docs/api/exposure-flash.md +327 -0
  645. package/docs/api/exposure-metering-scene-radiance.md +154 -0
  646. package/docs/api/exposure-metering-target.md +134 -0
  647. package/docs/api/exposure-metering-temporal.md +77 -0
  648. package/docs/api/exposure-metering.md +172 -0
  649. package/docs/api/exposure-program-line.md +64 -0
  650. package/docs/api/motion-camera-rotation.md +215 -0
  651. package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
  652. package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
  653. package/docs/api/motion-capture-rotation-trajectory.md +132 -0
  654. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
  655. package/docs/api/motion-extended-object-projection.md +312 -0
  656. package/docs/api/motion-projected-motion.md +60 -0
  657. package/docs/api/optics-aperture.md +69 -0
  658. package/docs/api/optics-circle-of-confusion.md +46 -0
  659. package/docs/api/optics-complex-pupil-psf.md +193 -0
  660. package/docs/api/optics-depth-of-field.md +92 -0
  661. package/docs/api/optics-diffraction.md +46 -0
  662. package/docs/api/optics-focus-breathing.md +119 -0
  663. package/docs/api/optics-focus-state.md +64 -0
  664. package/docs/api/optics-front-of-lens-filter.md +263 -0
  665. package/docs/api/optics-illumination-vignetting.md +95 -0
  666. package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
  667. package/docs/api/optics-lens-psf-profile.md +380 -0
  668. package/docs/api/optics-polygon-diffraction.md +68 -0
  669. package/docs/api/optics-profile-contract.md +47 -0
  670. package/docs/api/optics-psf-foundation.md +181 -0
  671. package/docs/api/optics-radial-distortion.md +194 -0
  672. package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
  673. package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
  674. package/docs/api/optics-sensor-environment-query.md +58 -0
  675. package/docs/api/optics-sensor-psf-quadrature.md +81 -0
  676. package/docs/api/optics-stray-light.md +109 -0
  677. package/docs/api/optics-thin-lens.md +53 -0
  678. package/docs/api/output-capture-corrected-sdr.md +71 -0
  679. package/docs/api/output-capture-geometry.md +500 -0
  680. package/docs/api/output-capture-sdr.md +69 -0
  681. package/docs/api/output-crop.md +47 -0
  682. package/docs/api/output-geometric-transforms.md +199 -0
  683. package/docs/api/output-lens-corrections.md +162 -0
  684. package/docs/api/output-sdr-rendering.md +122 -0
  685. package/docs/api/output-subject-framing-crop.md +59 -0
  686. package/docs/api/schema-camera.md +84 -0
  687. package/docs/api/schema-illumination-spectral.md +77 -0
  688. package/docs/api/schema-illumination-temporal.md +289 -0
  689. package/docs/api/schema-illumination.md +246 -0
  690. package/docs/api/schema-scene-radiance-temporal.md +215 -0
  691. package/docs/api/schema-scene-radiance.md +415 -0
  692. package/docs/api/schema-scene.md +105 -0
  693. package/docs/api/schema-validation.md +25 -0
  694. package/docs/api/sensor-accumulated-charge.md +273 -0
  695. package/docs/api/sensor-architecture.md +155 -0
  696. package/docs/api/sensor-camera-saturation-capacity.md +215 -0
  697. package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
  698. package/docs/api/sensor-capture-mode-timing.md +123 -0
  699. package/docs/api/sensor-capture-mode.md +321 -0
  700. package/docs/api/sensor-color-sampling.md +228 -0
  701. package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
  702. package/docs/api/sensor-dark-current.md +227 -0
  703. package/docs/api/sensor-environment-photo-signal.md +77 -0
  704. package/docs/api/sensor-eqe-electron-rate.md +166 -0
  705. package/docs/api/sensor-eqe-local-exposure.md +68 -0
  706. package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
  707. package/docs/api/sensor-exposure-window.md +183 -0
  708. package/docs/api/sensor-iso-signal-chain.md +264 -0
  709. package/docs/api/sensor-local-exposure-binding.md +126 -0
  710. package/docs/api/sensor-optical-stack.md +211 -0
  711. package/docs/api/sensor-photon-energy.md +149 -0
  712. package/docs/api/sensor-physical-charge-capacity.md +196 -0
  713. package/docs/api/sensor-pixel-pitch.md +41 -0
  714. package/docs/api/sensor-radiometry-readiness.md +240 -0
  715. package/docs/api/sensor-raw-readout.md +499 -0
  716. package/docs/api/sensor-raw-reconstruction.md +260 -0
  717. package/docs/api/sensor-readout-exposure-linkage.md +172 -0
  718. package/docs/api/sensor-readout-timing.md +209 -0
  719. package/docs/api/sensor-response-application-compatibility.md +256 -0
  720. package/docs/api/sensor-response-operating-range.md +293 -0
  721. package/docs/api/sensor-responsivity-photocurrent.md +245 -0
  722. package/docs/api/sensor-sampling-aperture.md +221 -0
  723. package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
  724. package/docs/api/sensor-sensor-geometry.md +143 -0
  725. package/docs/api/sensor-signal-noise.md +75 -0
  726. package/docs/api/sensor-spatial-sample-reduction.md +186 -0
  727. package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
  728. package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
  729. package/docs/api/sensor-spectral-coverage.md +33 -0
  730. package/docs/api/sensor-spectral-quadrature.md +183 -0
  731. package/docs/api/sensor-spectral-response.md +291 -0
  732. package/docs/api/sensor-temporal-photo-signal.md +62 -0
  733. package/docs/api/simulation-poc-simulation.md +364 -0
  734. package/docs/api/stabilization-camera-shake.md +71 -0
  735. package/docs/api/stabilization-system.md +442 -0
  736. package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
  737. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
  738. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
  739. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
  740. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
  741. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
  742. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
  743. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
  744. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
  745. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
  746. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
  747. package/docs/examples/production-capture.mjs +34 -0
  748. package/docs/examples/production-request.json +4613 -0
  749. package/docs/examples/quick-start.mjs +12 -0
  750. package/docs/validation/documentation-fragments.json +212 -0
  751. package/docs/validation/release-audit-inventory.json +1306 -0
  752. package/docs/validation/tier-acceptance-report-v1.json +2538 -0
  753. package/package.json +18 -4
@@ -1,133 +1,155 @@
1
1
  # PSF and Pupil Foundation
2
2
 
3
- Photivra's PSF/pupil foundation keeps optical blur contributions **separate and explicitly contextualized** until a defensible composition model exists.
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
4
 
5
- Use:
5
+ Photivra has two complementary PSF layers.
6
6
 
7
- ```ts
8
- import {
9
- calculatePsfFoundationComponents,
10
- getPsfFoundationContract
11
- } from "@photivra/engine";
7
+ The legacy foundation keeps the ideal **geometric defocus-circle** and **circular Airy first-zero** diagnostics separately named and independently testable. The #113 real-lens framework adds explicitly profiled or pupil-derived **combined primary-optical PSFs** without converting those older diagnostics into a synthetic blur score.
12
8
 
13
- const contract = getPsfFoundationContract();
9
+ ## Legacy diagnostics
14
10
 
15
- const components = calculatePsfFoundationComponents({
16
- focalLengthMm: 85,
17
- aperture: 2.8,
18
- focusDistanceM: 10,
19
- subjectDistanceM: 20,
20
- fieldPointMm: { x: 12, y: 8 },
21
- fieldNormalizationRadiusMm: 21.6,
22
- spectralBasis: {
23
- kind: "monochromatic",
24
- wavelengthNm: 550
25
- }
26
- });
27
- ```
11
+ Use `getPsfFoundationContract()` and `calculatePsfFoundationComponents()` for the established diagnostics and common field/depth/wavelength/pupil context.
28
12
 
29
- ## What is implemented
13
+ The foundation contract is version `0.3.0`.
30
14
 
31
- The current foundation evaluates two existing diagnostics in one explicit context:
15
+ Implemented diagnostic contributions:
32
16
 
33
- - **geometric defocus circle** — the existing thin-lens defocus-circle diameter;
34
- - **circular diffraction first-zero diameter** — the existing ideal circular-pupil Airy diagnostic.
17
+ - geometric defocus circle;
18
+ - circular diffraction first-zero diameter.
35
19
 
36
- Each contribution retains the provenance of its underlying primitive.
20
+ Implemented framework contributions:
37
21
 
38
- The foundation records:
22
+ - ideal regular-polygon diffraction density (on-axis, in focus);
23
+ - mechanical pupil clipping / cat-eye PSF shape;
24
+ - field curvature;
25
+ - field-dependent aberration;
26
+ - field-dependent bokeh / signed-defocus response.
39
27
 
40
- - physical image-plane field position;
41
- - normalized field radius for comparison;
42
- - focus and subject depth;
43
- - monochromatic wavelength basis;
44
- - ideal circular f-number-derived pupil diameter.
28
+ Arbitrary curved-blade, off-axis and clipped-pupil diffraction is not inferred by the ideal polygon API.
45
29
 
46
- ## What is deliberately not calculated
30
+ The legacy component calculator still returns no combined PSF. That is intentional: a combined PSF is available only when an explicit #113 profile or complex pupil supplies the information needed to justify one.
47
31
 
48
- The foundation does **not** currently calculate:
32
+ ## Ideal polygon diffraction
49
33
 
50
- - a combined PSF;
51
- - a convolution kernel;
52
- - MTF;
53
- - one combined blur diameter;
54
- - a lens-sharpness score.
34
+ `calculateIdealPolygonDiffractionPsf()` reuses the regular-polygon geometry and image-plane conventions, but evaluates its continuous Fourier transform analytically rather than rasterizing the pupil into the bounded #113 DFT grid. This avoids a second sampled approximation of the same ideal aperture; #113 still owns arbitrary complex sampled pupils and aberration phase.
55
35
 
56
- Defocus and diffraction are independent diagnostics. A future combined PSF must document the mathematical composition method and assumptions rather than adding their diameters or scores ad hoc.
36
+ Inputs are explicit: equal-area physical pupil diameter, pupil-to-image propagation distance, wavelength and resolved air/vacuum basis, blade count/orientation, and image-plane displacements in micrometres (+X right, +Y up). A nonzero displacement is a location within the **on-axis PSF**, not an off-axis source field position. There is no implicit wavelength conversion or focus-to-propagation-distance conversion.
57
37
 
58
- ## Reserved contributions
38
+ For unit-circumradius area `A_unit = n sin(2π/n)/2`, the physical radius is `sqrt(A/A_unit)`, with `A = π(D_equal_area/2)²`. This fixes equal area, not equal circumradius/inradius. Under a declared nominal-area convention, a caller may use `D_equal_area = f/N`; that convention is not an inferred real-lens pupil calibration.
59
39
 
60
- The public contract reserves ownership for:
40
+ For dimensionless pupil coordinates `u`, the independently derived boundary integral follows the divergence theorem:
61
41
 
62
- - non-circular diffraction;
63
- - mechanical/pupil clipping;
64
- - field curvature;
65
- - field-dependent aberration/PSF structure;
66
- - field-dependent bokeh.
42
+ `F(q) = i/|q|² Σ_edges (qx Δy − qy Δx) exp(−i q·midpoint) sinc(q·edge/2)`.
43
+
44
+ The phase coordinate is `q = 2π R x/(λ L)`. The center uses the exact area limit. Subtracting each edge's constant term (which sums to zero on a closed contour), a cancellation-safe sinc-minus-one series and `cos(t)−1 = −2 sin²(t/2)` keep near-origin evaluation stable. There is no FFT, pupil rasterization or hidden pupil-grid convergence parameter.
45
+
46
+ Output gives both `|F/A_unit|²` (unity at center) and continuous intensity density `A |F/A_unit|²/(λ L)²`, converted from 1/mm² to **1/µm²**. Parseval's identity gives unit integral over the infinite image plane. Neither the density nor the peak-normalized intensity is a discrete probability weight. A finite point list is **not** renormalized to sum to one. Renderer quadrature must multiply density by image-plane area, measure support truncation and convergence, and explicitly own any finite-kernel normalization. Throughput stays separate.
47
+
48
+ Bounds: 3–1024 blades, 1–4096 image points per request, finite positive scales and dimensionless phase radius at most `1e6` (a computational envelope, not a calibrated accuracy claim). Unsupported fields, including aberration/clipping/field inputs, fail closed. Uniform unit amplitude and zero phase are fixed ideal-model assumptions; there is no defocus, curved-blade, field, polarization, sensor, stray-light or polychromatic claim. No quantified physical uncertainty is asserted.
49
+
50
+ Validation independently checks square sinc-squared response (absolute tolerance `5e-13`), rotated odd/even apertures, direct triangular-pupil quadrature refinement, the equal-area many-blade circular limit (absolute intensity tolerance `1e-7` at the tested points), and finite-support energy integration/refinement. Those tolerances describe test evidence, not universal real-lens accuracy bounds.
51
+
52
+ Mathematical reference: [Sillitto, Fraunhofer diffraction at straight-edged apertures (1979)](https://doi.org/10.1364/JOSA.69.000765), whose abstract establishes analytical polygon Fourier methods. The implementation and tests are independently authored from Fourier integration, the divergence theorem and Parseval's identity; no third-party implementation, tabulated data or protected exposition is incorporated. AI-assisted draft work still requires substantive human provenance/science review under `PROVENANCE.md` and DCO certification before inclusion.
53
+
54
+ The circular Airy diagnostic remains separate and unchanged. Do not convolve this diffraction PSF over a #113 kernel that already includes diffraction. This standalone API does not enable an uncomposed production-plan stage or change the POC.
55
+
56
+ ## Sampled real-lens PSFs
57
+
58
+ `LensSampledPsfProfile` stores full 2D intensity PSFs on an explicit regular calibration/simulation grid.
59
+
60
+ Profile axes:
61
+
62
+ - focal length;
63
+ - focus diopters (`0` = #103 optical infinity);
64
+ - f-number;
65
+ - image-plane field X/Y;
66
+ - wavelength;
67
+ - signed image-plane defocus.
68
+
69
+ Every node declares a unit-energy PSF kernel with physical X/Y sample pitch. All nodes in one interpolated profile must share the same kernel grid geometry.
70
+
71
+ `resolveLensSampledPsf()` reports either:
72
+
73
+ - `exact-grid-sample`; or
74
+ - `interpolated`.
75
+
76
+ No extrapolation is permitted.
77
+
78
+ The full 2D kernel preserves image-plane +X right / +Y up orientation, allowing off-axis sagittal/tangential/asymmetric structure instead of forcing radial symmetry.
79
+
80
+ ## Field curvature and longitudinal chromatic focus
81
+
82
+ Each sampled node carries `bestFocusImagePlaneOffsetMicrometers`.
83
+
84
+ That quantity may vary with:
85
+
86
+ - field position — field curvature;
87
+ - wavelength — longitudinal/axial chromatic focus;
88
+ - focal/aperture/focus configuration.
89
+
90
+ It is a focus/PSF quantity. It does not modify geometric distortion, lateral CA, or the selected camera focus-control state.
91
+
92
+ ## Complex pupil / wavefront reference
93
+
94
+ `LensComplexPupilProfile` represents one explicit primary-optical state as:
67
95
 
68
- A reserved contribution is not an implemented capability.
96
+ - relative pupil amplitude; and
97
+ - optical-path difference in micrometres.
69
98
 
70
- ## Field position
99
+ `calculateLensComplexPupilPsf()` performs deterministic scalar Fraunhofer propagation of that complex pupil.
71
100
 
72
- Field position uses physical image-plane coordinates:
101
+ This path evaluates diffraction and aberration in one pupil calculation. Do not stack another independent Airy or diffraction blur over its output.
73
102
 
74
- - optical axis at the origin;
75
- - +X right;
76
- - +Y up;
77
- - millimetres.
103
+ The output intensity PSF is normalized to unit energy.
78
104
 
79
- `fieldNormalizationRadiusMm` exists only to make center/mid/edge/corner comparisons reproducible. It is not a real-lens calibration or model-validity limit by itself.
105
+ ## Pupil clipping and throughput
80
106
 
81
- The current defocus and circular Airy diagnostics are field invariant. Recording field position now gives future field-dependent contributions a stable context without changing those existing calculations.
107
+ PSF energy normalization and optical throughput are separate.
82
108
 
83
- ## Spectral basis
109
+ A clipped pupil can change:
84
110
 
85
- The current foundation accepts an explicit monochromatic wavelength because the circular Airy diagnostic is wavelength dependent.
111
+ 1. the pupil/PSF shape; and
112
+ 2. the relative amount of transmitted light.
86
113
 
87
- This does not create:
114
+ The #113 profiles therefore keep `relativePupilThroughputFactor` separate from the normalized PSF kernel. The throughput factor belongs in the optical-throughput path (including #110 integration) and must be applied exactly once.
88
115
 
89
- - a spectral lens model;
90
- - longitudinal chromatic aberration;
91
- - sensor spectral response;
92
- - CFA/color calibration.
116
+ The existing illumination-vignetting primitive remains a separate throughput-only approximation; it does not become pupil clipping automatically.
93
117
 
94
- Future wavelength-dependent PSFs must declare their basis explicitly.
118
+ ## MTF boundary
95
119
 
96
- ## Pupil boundary
120
+ MTF magnitude is useful validation evidence, including sagittal/tangential trends.
97
121
 
98
- The current context records an ideal circular, f-number-derived pupil diameter because the existing defocus/Airy diagnostics use circular-pupil assumptions.
122
+ It does **not** uniquely determine a PSF without phase.
99
123
 
100
- Polygon aperture geometry is not automatically a non-circular diffraction PSF.
124
+ `assessMtfOnlyPsfRenderability()` therefore always blocks unique PSF reconstruction from magnitude-only MTF data while allowing diagnostic use.
101
125
 
102
- Mechanical/pupil vignetting is also separate from illumination vignetting:
126
+ ## Sensor and stray-light boundaries
103
127
 
104
- - illumination vignetting changes throughput only;
105
- - pupil clipping can change throughput **and** PSF/bokeh shape.
128
+ V1 lens PSF profiles are `lens-primary-optical-path-only`.
106
129
 
107
- ## Preview and reference fidelity
130
+ They exclude:
108
131
 
109
- Browser preview and higher-fidelity reference implementations may use different numerical approximations or sampling budgets.
132
+ - sensor OLPF;
133
+ - microlens response;
134
+ - CFA/spectral sensor response;
135
+ - sensor crosstalk;
136
+ - sensor sampling;
137
+ - RAW reconstruction/demosaic;
138
+ - sharpening/denoise;
139
+ - ghosting, flare and veiling glare.
110
140
 
111
- They must preserve the same:
141
+ A future combined camera-system response must be labeled separately rather than silently stored as a lens PSF.
112
142
 
113
- - contribution identities;
114
- - field/depth/spectral context;
115
- - pupil semantics;
116
- - engine-owned parameters;
117
- - scientific limitations.
143
+ #114 owns stray light.
118
144
 
119
- A preview approximation must not redefine the science merely because it is cheaper to render.
145
+ ## Preview and reference use
120
146
 
121
- ## Test Fixture relationship
147
+ The sampled-profile contract can be consumed by both preview and reference paths.
122
148
 
123
- Test Fixture v0.3 provides deterministic center/mid/edge/corner detail and point-highlight targets for integration regression.
149
+ The complex-pupil scalar Fraunhofer evaluator is a deterministic reference calculation. A preview implementation may use a validated approximation, but it must preserve the same profile semantics, field orientation, throughput ownership and limitations.
124
150
 
125
- It does not establish:
151
+ ## No scalar lens quality
126
152
 
127
- - calibrated MTF;
128
- - a measured real-lens PSF;
129
- - spectral lens behavior;
130
- - calibrated mechanical vignetting;
131
- - named-lens performance.
153
+ Photivra does not produce a universal lens sharpness or bokeh-quality score.
132
154
 
133
- Engine analytical/reference tests remain the scientific source of truth.
155
+ Real optical response remains field-, focus-, aperture-, wavelength-, pupil- and defocus-dependent. Generic equipment tiers may later choose different versioned profiles, but the tier label is not itself an optical algorithm.
@@ -0,0 +1,56 @@
1
+ # Reference RAW frame compatibility
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
+ A valid RAW attachment does not establish readiness for reconstruction or paired
6
+ export. The limits below apply to the current browser-safe reference adapters,
7
+ not a typical-camera-resolution production implementation. Count full native
8
+ sites before cropping; a small active area or output view never reduces that
9
+ count for producer/reconstruction admission.
10
+
11
+ | Boundary | Inclusive budget | Additional conditions |
12
+ | --- | --- | --- |
13
+ | `parseSensorRawFrameInput()` / `createSensorRawFrame()` | 65,536 full native sites | Dense row-major uint16 attachment; single-frame native-effective periodic CFA; explicit one-site binding and consistent codes/flags |
14
+ | `parseSensorRawProducerInput()` / `simulateSensorRawFrame()` | 4,096 full native sites | Complete per-site exposure/charge/readout declarations and existing noise/seed identities; upstream radiometry remains declared |
15
+ | `parseRawFrameReconstructionInput()` / `resolveRawFrameReconstruction()` | 4,096 full native sites | Native in-frame region; at most 64 CFA phases, 16 output channels and 256 contributions per phase profile; complete phase dispatch |
16
+ | `parsePhotographicExportInput()` / `createPhotographicExportPair()` | Inherits the 4,096 full-native-site reconstruction budget | Registered 2×2 RGB Bayer; ordered RGB reconstruction channels; 1:1 oriented crop/output sampling; reconstructed region covers the native final crop |
17
+ | Corrected paired export | Same full-native budget | Reconstruction covers the entire active native area, even when the final output crop is smaller; existing correction support/selection rules still apply |
18
+ | Internal baseline JPEG encoder | 4,096 output pixels | Its independent output/encoder budget; not the definition of native sensor coverage |
19
+
20
+ The attachment and reference execution budgets have distinct internal constants
21
+ in `src/capture/raw-frame-limits.ts`. Producer and reconstruction share the latter
22
+ because they admit the same full-native execution envelope. The JPEG output
23
+ budget retains its separate meaning even though its current numeric value is
24
+ the same. No safety limit is raised to make adjacent APIs appear identical.
25
+
26
+ For example, a complete 64×65 attachment can be structurally valid, but its 4,160
27
+ native sites exceed the reference reconstruction/producer budget even with a
28
+ 2×2 active/output crop. A 64×64 frame is within the inclusive 4,096-site budget;
29
+ that fact alone does not supply missing kernel support or calibrated color.
30
+
31
+ ## Preflight and compatibility
32
+
33
+ Call the existing stage parser before execution to discover incompatible
34
+ requests. Parsers revalidate untrusted data and can copy/validate native records;
35
+ this is not a constant-time dimensions-only capability query. Reconstruction
36
+ rejects oversized sample arrays before creating an attachment snapshot. Export
37
+ now rejects unsupported output resampling, uncovered final crop, incomplete
38
+ active coverage for correction, and non-Bayer topology during parsing, before
39
+ per-pixel reconstruction, rendering, hashes or file encoding. Bayer preflight
40
+ requires exactly one red, two green and one blue site; an extra channel is
41
+ rejected here rather than failing later during DNG packing.
42
+
43
+ These are necessary structural gates, not a promise that execution succeeds.
44
+ Kernel edge/source-channel support, DNG repeating black/common-white metadata,
45
+ color-neutral validity, correction support and metadata encoding constraints
46
+ retain their execution checks. Missing edge support still fails without
47
+ padding, clipping or renormalization.
48
+
49
+ Compatibility review: previously executable requests retain the same accepted
50
+ envelope, arithmetic, codes, hashes and bytes. The public export parser now
51
+ rejects these already-unsupported execution combinations earlier; when several
52
+ faults coexist, error precedence can change. Existing diagnostic text is kept.
53
+ No serialized field, schema or root API version changes, and no saved-data
54
+ migration is required. Package and POC versions remain independent and unchanged.
55
+
56
+ Larger/streaming execution remains unsupported. #16/#112/#178 are closed for their reviewed bounded scope; current execution/editor evidence is in [production capture](PRODUCTION_ENVIRONMENT_CAPTURE.md) and [export acceptance](EXPORT_ACCEPTANCE.md). Structural attachment alone does not establish that evidence for a new frame.
@@ -0,0 +1,30 @@
1
+ # Same-RAW reconstruction handoff (#16C)
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
+ See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
6
+ limits, full-native counting and parser preflight behavior.
7
+
8
+ `resolveRawFrameReconstruction()` derives a bounded contiguous native-region virtual-sensor-channel plane from a committed `SensorRawFrame`. It delegates every output pixel to the existing #14 `resolveSensorRawReconstruction()`, using only exact attached RAW samples. Independent float planes in the attached capture are retained as history/metadata and **never provide reconstructed values**.
9
+
10
+ This adapter and its RAW attachment predecessor are merged. Handoff schema 0.1.0 is retained; root API 0.99.0 was its historical introduction identity. Package 1.0.0 retains current root 0.116.0 and independent capture/production/POC contracts.
11
+
12
+ Inputs are `rawFrame`, `region: { x, y, width, height }`, and `phaseProfiles: [{ phaseX, phaseY, profile }]`. A region is a positive integer half-open rectangle in the full native raster, not crop-local or oriented output coordinates. RAW-frame flags, dimensions, full native coverage, exact site/channel/code normalization and IDs are revalidated through #166.
13
+
14
+ Every absolute CFA repeat phase must have exactly one explicit #14 reconstruction profile, matching the frame's capture-mode and color-sampling identities. All phase profiles expose the same output channels in the same order. Dispatch uses absolute native indices modulo the declared repeat dimensions; a cropped region never restarts phase. Input profile order is canonicalized to repeat-tile row-major phase order. No Bayer/X-Trans algorithm or RGB color basis is inferred from labels.
15
+
16
+ For each pixel, the adapter gathers the exact required sites from the attached frame and checks bounds/channel assignment before calling #14. Existing declared normalized kernel weights own linear reconstruction; negative weights are permitted by that existing contract. Source values are the existing signed `blackSubtractedNormalizedCode`, not raw storage codes divided by container maximum. No new black subtraction, saturation/noise/gain equation or quantization is introduced.
17
+
18
+ Missing edge sites fail closed. There is no edge replication, reflection, zero fill, dropped weight or renormalization. A caller may choose a smaller explicit region with fully available neighborhoods, but must not silently change intended final framing. Supplying a profile for every phase is not proof the kernel represents a calibrated or adequate reconstruction algorithm.
19
+
20
+ The result includes an immutable exact source RAW-frame snapshot, phase profiles, region, interleaved native-region row-major plane and child calculation envelopes with exact weighted source contributions. The top-level scientific status remains **approximation** even if a profile labels itself calibrated; child status and assumptions are retained. No aggregate uncertainty is fabricated.
21
+
22
+ `lineage = "engine-reconstructed-from-attached-raw"` means these returned values were actually computed from that returned RAW snapshot. `producerOriginVerified = false` retains #166's caller-declared producer boundary: no assertion is made that a caller originally ran the sensor pipeline. IDs alone do not establish equality; the exact snapshot and contributions remain inspectable. This is not cryptographic provenance, a signed certificate, RAW integrity metadata or a SimulationHash.
23
+
24
+ The plane's image state is `virtual-sensor-channels`, and its raster binding is `native-reconstruction-region`; it is deliberately **not** an already-oriented `CaptureLinearPlane`. No WB, color conversion, physical orientation, final crop/resampling, sharpening, denoising or JPEG pipeline is applied. Sensor-channel labels do not define calibrated RGB primaries. A downstream explicit color-profile and geometry bridge is required before #112/#164 can accept these values. Existing capture float planes must not be substituted at that boundary.
25
+
26
+ Reference safety limits: at most **4,096 full-native RAW sites**, **64 repeat phases**, **16 output channels**, and **256 total contributions per phase profile**. Region size cannot exceed that native frame. The reference adapter retains source snapshots and per-pixel traces and reparses lower-level profiles; it is not a 24/45/60 MP performance or memory claim. Larger/streaming execution requires measured separately reviewed work.
27
+
28
+ Tests reuse #130-derived capture metadata and the shared synthetic RAW fixture. Declared 2×2 tile-average kernels are intentionally simple regression policy, not manufacturer demosaic or calibrated sensor color. Tests independently check arithmetic, direct lower-level equivalence, RAW-code changes versus unrelated float-plane changes, native phase/orientation invariance, malformed/stale inputs, edge rejection and safety bounds.
29
+
30
+ Remaining #16/#112 work: producer-bound sensor execution, a defensible sensor color interpretation/profile, reconstruction-to-oriented-active/output geometry and color/WB processing handoff, metadata/hash/format mapping, DNG/JPEG writers and decoded/editor/memory acceptance. No issue is closed by this slice.
@@ -0,0 +1,65 @@
1
+ # 1.0.0 release contract and owner handoff
2
+
3
+ **Distribution:** `@photivra/engine@1.0.0` candidate. **Root API identity:** `0.116.0`. **Feature/science predecessor:** reviewed/signed main `34c6d9aca1c2e365b253c1562734d11bc8e0235f` (PR #206), tree `fa74373967843a1942206c26f5baa004e9a466fd`. Its post-merge CI 37032338620 passed Node 22.13.0/24 with 1,598 tests / 142 files. The release-preparation PR/CI identifies the exact new candidate; after signed squash merge, verify its tree equality and record final main SHA in the issue/PR handoff. A commit cannot contain its own cryptographic commit/tree identifier without a circular dependency.
4
+
5
+ ## What 1.0 contains
6
+
7
+ The V1 feature/science checklist is 32/32 and required defect #178 is closed. The root includes explicit camera/sensor/capture geometry, optics, focus, exposure control, registered illumination, bounded motion/stabilization, spectral/response/charge/noise/readout foundations, generic tier assets, immutable production plans, linear/color/SDR processing, and same-RAW paired DNG/JPEG export. See [developer navigation](DEVELOPERS.md) and [composition/consumer map](V1_COMPOSITION_MAP.md) for actual entry points and supported combinations.
8
+
9
+ The declared environment production route can execute all fourteen graph stages through native RAW and optional output. It retains a full-native 4,096-site budget and 100,000-provider-evaluation aggregate cap, exact one-to-one CFA timing, scene time zero, ideal environment projection/constant-axis rotation, explicit unity field throughput and optional destination-local sampled PSF. Paired reference export supports registered Bayer and 1:1 output cropping. Structural RAW attachment has a separate 65,536-site ceiling and does not authorize larger execution.
10
+
11
+ The package does not supply a general surface renderer/visibility solution, calibrated commercial profiles, full field-dependent PSF transport, megapixel processing, HDR output, multi-frame computational image combination, C2PA, hosted API or MCP server. Generic assets and provider output remain approximations. A stable API does not establish calibrated physical accuracy, universal tier ranking, combined uncertainty, browser frame time or typical-resolution peak memory. Export/editor evidence and limits remain in [acceptance](EXPORT_ACCEPTANCE.md).
12
+
13
+ ## Migration and independent identities
14
+
15
+ The distribution moves from 0.6.0 to 1.0.0. Root contract **0.116.0 is retained**, rather than mechanically reset to 1.0.0: no exported operation shape, scientific arithmetic, default, seed schedule or serialized capture identity changes in this preparation. This is an intentional independent contract identity under the package's new stable policy, not permission to keep making undocumented pre-1.0 breaks. Existing 0.116 callers require no code/data migration for this release preparation.
16
+
17
+ Users of earlier development contracts must apply their actual intervening migrations. In particular, old producer noise model 0.1.0 cannot silently replay the signed-shadow correction: current producer noise model is 0.2.0, readout provenance model 2.0.0. Deliberate recomputation preserves historical artifacts and records new identity. Capture schema 0.1.0 archives normalize to 0.2.0 while retaining creator API identity; normalized bytes change. Production plan 0.7.0 / consumer manifest 0.2.0 add bounded environment execution fields. See the governing capture/producer/composition guides and historical changelog. Do not compare version strings from different contracts as though they form one global schema version.
18
+
19
+ POC API 0.20.0, image-formation ordering 0.4.0, production capture snapshot 0.3.0, tier assets 1.0.0 and every other schema/model keep their existing independent values. Root API 0.116.0 still exports all original scientific operations. Documentation-only comments and reference generation do not authorize recomputation of historical calibrated data or fixture hashes.
20
+
21
+ After 1.0, compatible additions use package minor releases, compatible fixes/docs use patches, and breaking root exports, semantics or unsupported reinterpretation of previously valid data require a documented package major transition and relevant independent contract changes. Prefer additive deprecation with an explicit migration and documented removal version. No fixed deprecation duration is promised. Necessary scientific/security corrections must be explicit even when preserving incorrect behavior would appear easier. No substantial optional public-engine feature work starts by default after V1; maintenance, corrective science, validation and security continue.
22
+
23
+ ## Exact candidate verification
24
+
25
+ Use the lockfile and maintained Node 22/24 CI policy, preferably patched Node 24 for tooling:
26
+
27
+ ```sh
28
+ npm ci
29
+ npm run check
30
+ npm run coverage
31
+ npm run build
32
+ npm run pack:check
33
+ npm run docs:check
34
+ npm run release:consumer-check
35
+ npm run bench:image-formation:built
36
+ ```
37
+
38
+ `docs:check` verifies reference synchronization, local/public repository links, imported symbols and explicitly recorded complete/fragment examples. The consumer check packs once into a temporary directory, installs the tarball with scripts disabled, validates declarations with strict TypeScript and executes complete examples plus the bounded production/export example without a source checkout. CI runs these release-specific checks on both supported runtimes. Existing science/license/SPDX/browser/package/coverage gates remain unchanged.
39
+
40
+ Local macOS full tests retain the previously reproduced unchanged-main `equivalence-38` exact hash difference. No reference was regenerated. Linux CI is the exact-head full-suite authority; recorded cross-platform deterministic limitations must remain visible rather than weakening that assertion. Existing performance and external-editor acceptance evidence applies because runtime arithmetic and independent models are unchanged; release comments/version metadata are additionally checked against the packed artifact.
41
+
42
+ ## Owner-only tag and publish procedure
43
+
44
+ This ticket prepares the repository; it creates no tag, npm publication or GitHub release. First substantively review the release contribution and certify DCO 1.1 for the signed merge. Merge only the tested candidate, verify final-main CI and record its commit/tree. Confirm current main still equals that final commit immediately before tagging; keep it unchanged through workflow verification.
45
+
46
+ The current `.github/workflows/publish.yml` triggers on pushed `v*` tags. It requires **`v1.0.0`**, matching package/lock/citation metadata, at **current main**, with protected main and a protected tag. Public API inspection on 2026-10-02 confirmed main protected and an active tag ruleset applying to `refs/tags/v*`, blocking creation/update/deletion except authorized bypass. Only an authorized owner can create the release tag; do not weaken those controls.
47
+
48
+ From a clean owner checkout, replace `FINAL_MAIN_SHA` with the verified merged commit:
49
+
50
+ ```sh
51
+ git fetch origin main --tags
52
+ git switch main
53
+ git pull --ff-only origin main
54
+ test "$(git rev-parse HEAD)" = "FINAL_MAIN_SHA"
55
+ test "$(git rev-parse origin/main)" = "FINAL_MAIN_SHA"
56
+ test "$(node -p "require('./package.json').version")" = "1.0.0"
57
+ git tag -a v1.0.0 FINAL_MAIN_SHA -m "Photivra engine 1.0.0"
58
+ git push origin refs/tags/v1.0.0
59
+ ```
60
+
61
+ The **tag push automatically starts npm publication**; publishing a GitHub release alone does not. The workflow checks the maintained LTS policy, installs locked dependencies with scripts disabled, verifies science/coverage/static/docs/consumer/build/package gates, then packs the verified artifact. A separate minimal OIDC job downloads it, checks SHA-256 and publishes public npm only if that exact version is absent. It requires npm >=11.5.1 and the configured trusted publisher for this repository/workflow. That npm account-side configuration is not inspectable through the repository connector and is an owner account prerequisite; no credential or publishing identity is used during this ticket.
62
+
63
+ Watch the publish workflow until success. Verify npm reports 1.0.0 and record the published tarball integrity. Then create the owner GitHub release at `v1.0.0`, using these release notes and the final commit/check evidence. If verification fails, retain the failure and investigate; do not force-move a protected tag or bypass science/provenance gates.
64
+
65
+ The site-side handoff is in [developer navigation](DEVELOPERS.md); no website deployment or unpublished route is required. #165 remains post-V1.
@@ -0,0 +1,38 @@
1
+ # Final 1.0.0 preparation audit
2
+
3
+ Package **1.0.0 candidate**, root API **0.116.0**, based on reviewed/signed main **34c6d9aca1c2e365b253c1562734d11bc8e0235f**. No tag, npm publication or GitHub release is performed by this contribution. The review PR and exact-head CI identify the candidate; the final signed squash commit/tree and post-merge CI belong in the issue/PR handoff after owner approval. [Owner release steps](RELEASE_1_0.md) specify that boundary.
4
+
5
+ ## Inventory and corrections
6
+
7
+ [The audit inventory](validation/release-audit-inventory.json) records all **62 pre-existing human/agent Markdown documents** and **141 source modules**. It includes document hashes and normalized source-syntax hashes, not private filesystem paths. All source syntax is identical to the feature/science baseline when comments are removed. Source JSDoc grows from 814 to 1,060 blocks, including module integration notes, previously undocumented exported operations, central state records and non-obvious internal execution algorithms. Existing member unit/coordinate documentation is retained. [The generated reference](API_REFERENCE.md) resolves **1,130 root symbols across 126 modules**, including exact accepted unions, fields, signatures and independent constants; it is regenerated/checked against the compiler's actual root exports.
8
+
9
+ | Reviewed surface | Findings and disposition |
10
+ | --- | --- |
11
+ | README, usage and onboarding | Corrected pending SDR integration, closed editor acceptance, extended-motion/stabilization scope and obsolete package/stability statements. Added one developer entry point with capabilities, qualified models/runtime and executable packed examples. |
12
+ | Architecture, physics, stage/production contracts | Reconciled static broad foundation/reserved metadata versus route-specific plan 0.7.0 execution; preserved sample/attached-RAW blockers and all source/area/wavelength/time/calibration limits. No broader capability is inferred. |
13
+ | Capture, RAW, processing, export, color | Corrected unmerged-draft/old issue status; preserved same native RAW lineage, signed shadows, separate ideal virtual-camera versus sensor-channel interpretation, one-time WB, correction/order and bounded export envelope. |
14
+ | Tier/conformance/performance evidence | Reconciled reviewed/merged #116/#119/#43/#45/#131 and 32/32 status. Introduction IDs and measured commits remain historical; no fixture/golden/benchmark data is relabeled as new measurements. |
15
+ | External export evidence | Carried forward PR #201 owner Lightroom orientation/as-shot/exposure/WB and landscape Photoshop/Chrome screenshots. User-Mac hashes/builds and JPEG-variant coverage remain explicitly limited; templates remain templates. No new commercial tool installation or external result is claimed. |
16
+ | Source public/internal contracts | Added plain-language purpose/input/return/stage-limit explanations and non-obvious RNG/Poisson/normal, signed readout, compensated temporal sums, provider preflight, evidence composition, color conditioning and TIFF/JPEG encoding notes. 141-module comment-free syntax comparison confirms no runtime changes. |
17
+ | AGENTS/contributing/security/support | Removed obsolete pending integration ownership, aligned 1.0 compatibility and maintained Node policy, retained human review/DCO/science/provenance/private-data boundaries and loopback-only contributor transport. |
18
+ | Distribution/legal/provenance | Coordinated package/lock/citation 1.0.0, retained every independent contract version, kept no runtime dependencies and Apache/DNG notices, completed pinned artifact-action inventory, shipped readable policies and npm-safe README links. Existing license/SPDX/package/browser gates remain unchanged. |
19
+ | Automation/publishing/discovery | Added docs/packed-consumer verification to existing CI/publish verification jobs; retained separate minimal OIDC publish job, protected exact-main tag and tarball checksum controls. Confirmed public protected main and active v* tag ruleset. Account-side npm trusted publisher remains an owner publication prerequisite. |
20
+ | Site handoff | Engine repository/package/docs are public navigation destinations. Site-side discovery #45/navigation #298/environments #300 own hosting and links; no unpublished route/deployment is invented. Site content was not verified after HTTP 403. |
21
+
22
+ ## Examples, paths and package verification
23
+
24
+ The automated documentation checker validates **2,096 repository/local links** in the current Markdown tree and generated reference synchronization. It verifies every importing snippet's actual root symbols. **63 complete importing snippets** typecheck strictly and execute in an isolated ESM consumer installed from the real packed candidate, plus quick-start and production/paired-export examples. The latter uses the existing final-conformance fixture through the actual public package, not copied runtime algorithms or test-helper imports.
25
+
26
+ **26 composition fragments** have explicit prior-binding captions and [a dependency inventory](validation/documentation-fragments.json). These illustrate joining previously validated domain values; they are not claimed to run without those inputs. The public complete production example supplies actual owned synthetic data without inventing calibration or implicit defaults. Repository/local navigation is verified against actual paths/anchors, including public main-source links; external standards and archived references are citations rather than runtime fetches.
27
+
28
+ Pack checks retain root-only ESM/declaration surface and exclude `src/api`, source, tests and tooling. The package includes README, docs, examples, LICENSE/NOTICE and the referenced policy files so consumer links do not require a checkout. Documentation hosting and application implementation remain outside the package license boundary.
29
+
30
+ ## Validation and exact candidate evidence
31
+
32
+ - Exact locked dependencies; maintained Node policy unchanged, official lifecycle reviewed 2026-10-02 (22 Maintenance LTS / 24 Active LTS; 26 still Current).
33
+ - Static/type/lint, license allowlist, SPDX, identity and browser graph pass; 138 browser-reachable modules.
34
+ - Local full check and coverage: **1,597 passing / 1 known unchanged-main Mac `equivalence-38` exact hash failure**, 142 files. No golden, assertion, threshold, scientific tolerance or seed schedule is changed. Exact-head Linux CI on Node 22.13/24 remains the required passing full-suite authority; attach its outcome to the review PR before merge.
35
+ - Build, root/package-content check, documentation/reference check and real packed-consumer declaration/runtime checks pass. The informational existing image-formation benchmark completes. Recorded tier/performance/independent-reader/editor acceptance remains applicable within its prior explicit limits because runtime syntax and model identities are unchanged.
36
+ - Final diff preserves scientific execution syntax across all 141 modules. Source comments, distribution metadata, docs and release-verification tooling are the changes.
37
+
38
+ Substantive owner review and contribution-specific DCO 1.1 certification are still required for this release-preparation contribution. After signed merge, final-main CI and tested-tree equality must be recorded before #180 closes and the owner tags `v1.0.0`. This audit does not certify an untested later commit or publish any artifact.