@photivra/engine 1.5.0 → 2.1.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 (1085) hide show
  1. package/CHANGELOG.md +414 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/diffraction-provider.d.ts +30 -0
  236. package/dist/facade/diffraction-provider.js +127 -0
  237. package/dist/facade/diffraction-provider.js.map +1 -0
  238. package/dist/facade/host-yield.d.ts +7 -0
  239. package/dist/facade/host-yield.js +19 -0
  240. package/dist/facade/host-yield.js.map +1 -0
  241. package/dist/facade/scene-radiance.d.ts +117 -0
  242. package/dist/facade/scene-radiance.js +205 -0
  243. package/dist/facade/scene-radiance.js.map +1 -0
  244. package/dist/facade/simulate-capture.d.ts +363 -0
  245. package/dist/facade/simulate-capture.js +1281 -0
  246. package/dist/facade/simulate-capture.js.map +1 -0
  247. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  248. package/dist/gpu/chart-radiance-gpu.js +176 -0
  249. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  250. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  251. package/dist/gpu/image-kernel-accelerator.js +720 -0
  252. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  253. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  254. package/dist/gpu/image-kernel-execution.js +84 -0
  255. package/dist/gpu/image-kernel-execution.js.map +1 -0
  256. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  257. package/dist/gpu/sensor-stage-gpu.js +317 -0
  258. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  259. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  260. package/dist/gpu/temporal-sum-gpu.js +150 -0
  261. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  262. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  263. package/dist/gpu/webgpu-runtime.js +215 -0
  264. package/dist/gpu/webgpu-runtime.js.map +1 -0
  265. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  266. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  267. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  268. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  269. package/dist/gpu/wgsl-kernels.js +365 -0
  270. package/dist/gpu/wgsl-kernels.js.map +1 -0
  271. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  272. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  273. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  274. package/dist/index.d.ts +91 -25
  275. package/dist/index.js +60 -15
  276. package/dist/index.js.map +1 -1
  277. package/dist/motion/camera-rotation.d.ts +92 -40
  278. package/dist/motion/camera-rotation.js +84 -47
  279. package/dist/motion/camera-rotation.js.map +1 -1
  280. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  281. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  282. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  283. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  284. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  285. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  286. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  287. package/dist/motion/capture-rotation-trajectory.js +36 -26
  288. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  289. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  290. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  291. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  292. package/dist/motion/extended-object-projection.d.ts +19 -16
  293. package/dist/motion/extended-object-projection.js +38 -18
  294. package/dist/motion/extended-object-projection.js.map +1 -1
  295. package/dist/motion/projected-motion.d.ts +18 -17
  296. package/dist/motion/projected-motion.js +25 -17
  297. package/dist/motion/projected-motion.js.map +1 -1
  298. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  299. package/dist/motion/temporal-exposure-sum.js +141 -0
  300. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  301. package/dist/motion/video-sequence.d.ts +111 -0
  302. package/dist/motion/video-sequence.js +179 -0
  303. package/dist/motion/video-sequence.js.map +1 -0
  304. package/dist/optics/aperture.d.ts +14 -15
  305. package/dist/optics/aperture.js +13 -11
  306. package/dist/optics/aperture.js.map +1 -1
  307. package/dist/optics/atmospheric-haze.d.ts +83 -0
  308. package/dist/optics/atmospheric-haze.js +113 -0
  309. package/dist/optics/atmospheric-haze.js.map +1 -0
  310. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  311. package/dist/optics/brown-conrady-distortion.js +291 -0
  312. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  313. package/dist/optics/circle-of-confusion.d.ts +10 -10
  314. package/dist/optics/circle-of-confusion.js +15 -11
  315. package/dist/optics/circle-of-confusion.js.map +1 -1
  316. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  317. package/dist/optics/complex-pupil-psf.js +190 -98
  318. package/dist/optics/complex-pupil-psf.js.map +1 -1
  319. package/dist/optics/depth-of-field.d.ts +25 -15
  320. package/dist/optics/depth-of-field.js +67 -27
  321. package/dist/optics/depth-of-field.js.map +1 -1
  322. package/dist/optics/diffraction-psf-profile.d.ts +118 -0
  323. package/dist/optics/diffraction-psf-profile.js +252 -0
  324. package/dist/optics/diffraction-psf-profile.js.map +1 -0
  325. package/dist/optics/diffraction.d.ts +14 -13
  326. package/dist/optics/diffraction.js +14 -10
  327. package/dist/optics/diffraction.js.map +1 -1
  328. package/dist/optics/focus-breathing.d.ts +88 -27
  329. package/dist/optics/focus-breathing.js +114 -23
  330. package/dist/optics/focus-breathing.js.map +1 -1
  331. package/dist/optics/focus-state.d.ts +18 -18
  332. package/dist/optics/focus-state.js +21 -15
  333. package/dist/optics/focus-state.js.map +1 -1
  334. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  335. package/dist/optics/front-of-lens-filter.js +259 -88
  336. package/dist/optics/front-of-lens-filter.js.map +1 -1
  337. package/dist/optics/illumination-vignetting.d.ts +16 -17
  338. package/dist/optics/illumination-vignetting.js +40 -17
  339. package/dist/optics/illumination-vignetting.js.map +1 -1
  340. package/dist/optics/irradiance-convolution.d.ts +59 -0
  341. package/dist/optics/irradiance-convolution.js +138 -0
  342. package/dist/optics/irradiance-convolution.js.map +1 -0
  343. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  344. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  345. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  346. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  347. package/dist/optics/lens-psf-kernels.js +175 -0
  348. package/dist/optics/lens-psf-kernels.js.map +1 -0
  349. package/dist/optics/lens-psf-profile.d.ts +78 -46
  350. package/dist/optics/lens-psf-profile.js +335 -124
  351. package/dist/optics/lens-psf-profile.js.map +1 -1
  352. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  353. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  354. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  355. package/dist/optics/polygon-diffraction.d.ts +80 -23
  356. package/dist/optics/polygon-diffraction.js +130 -25
  357. package/dist/optics/polygon-diffraction.js.map +1 -1
  358. package/dist/optics/profile-contract.d.ts +5 -6
  359. package/dist/optics/profile-contract.js +14 -11
  360. package/dist/optics/profile-contract.js.map +1 -1
  361. package/dist/optics/psf-foundation.d.ts +23 -23
  362. package/dist/optics/psf-foundation.js +24 -21
  363. package/dist/optics/psf-foundation.js.map +1 -1
  364. package/dist/optics/pupil-vignetting.d.ts +118 -0
  365. package/dist/optics/pupil-vignetting.js +264 -0
  366. package/dist/optics/pupil-vignetting.js.map +1 -0
  367. package/dist/optics/radial-distortion.d.ts +34 -33
  368. package/dist/optics/radial-distortion.js +37 -30
  369. package/dist/optics/radial-distortion.js.map +1 -1
  370. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  371. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  372. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  373. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  374. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  375. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  376. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  377. package/dist/optics/sensor-aperture-rays.js +32 -14
  378. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  379. package/dist/optics/sensor-environment-query.d.ts +81 -16
  380. package/dist/optics/sensor-environment-query.js +145 -12
  381. package/dist/optics/sensor-environment-query.js.map +1 -1
  382. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  383. package/dist/optics/sensor-psf-quadrature.js +18 -11
  384. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  385. package/dist/optics/sensor-psf-support.d.ts +8 -6
  386. package/dist/optics/sensor-psf-support.js +8 -5
  387. package/dist/optics/sensor-psf-support.js.map +1 -1
  388. package/dist/optics/stray-light.d.ts +22 -19
  389. package/dist/optics/stray-light.js +18 -12
  390. package/dist/optics/stray-light.js.map +1 -1
  391. package/dist/optics/thin-lens.d.ts +10 -9
  392. package/dist/optics/thin-lens.js +12 -8
  393. package/dist/optics/thin-lens.js.map +1 -1
  394. package/dist/optics/zernike-wavefront.d.ts +154 -0
  395. package/dist/optics/zernike-wavefront.js +352 -0
  396. package/dist/optics/zernike-wavefront.js.map +1 -0
  397. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  398. package/dist/output/capture-corrected-sdr.js +16 -8
  399. package/dist/output/capture-corrected-sdr.js.map +1 -1
  400. package/dist/output/capture-geometry.d.ts +34 -36
  401. package/dist/output/capture-geometry.js +52 -32
  402. package/dist/output/capture-geometry.js.map +1 -1
  403. package/dist/output/capture-sdr.d.ts +7 -6
  404. package/dist/output/capture-sdr.js +11 -8
  405. package/dist/output/capture-sdr.js.map +1 -1
  406. package/dist/output/crop.d.ts +22 -6
  407. package/dist/output/crop.js +40 -6
  408. package/dist/output/crop.js.map +1 -1
  409. package/dist/output/geometric-transforms.d.ts +60 -23
  410. package/dist/output/geometric-transforms.js +111 -24
  411. package/dist/output/geometric-transforms.js.map +1 -1
  412. package/dist/output/lens-corrections.d.ts +27 -19
  413. package/dist/output/lens-corrections.js +29 -13
  414. package/dist/output/lens-corrections.js.map +1 -1
  415. package/dist/output/native-capture-sdr.d.ts +71 -16
  416. package/dist/output/native-capture-sdr.js +190 -33
  417. package/dist/output/native-capture-sdr.js.map +1 -1
  418. package/dist/output/png-encoder.d.ts +65 -0
  419. package/dist/output/png-encoder.js +461 -0
  420. package/dist/output/png-encoder.js.map +1 -0
  421. package/dist/output/print-contrast-reference.d.ts +10 -9
  422. package/dist/output/print-contrast-reference.js +10 -8
  423. package/dist/output/print-contrast-reference.js.map +1 -1
  424. package/dist/output/print-detail.d.ts +18 -17
  425. package/dist/output/print-detail.js +12 -10
  426. package/dist/output/print-detail.js.map +1 -1
  427. package/dist/output/print-jpeg.d.ts +26 -5
  428. package/dist/output/print-jpeg.js +117 -50
  429. package/dist/output/print-jpeg.js.map +1 -1
  430. package/dist/output/print-plan.d.ts +19 -19
  431. package/dist/output/print-plan.js +11 -10
  432. package/dist/output/print-plan.js.map +1 -1
  433. package/dist/output/print-region-statistics.d.ts +14 -15
  434. package/dist/output/print-region-statistics.js +11 -11
  435. package/dist/output/print-region-statistics.js.map +1 -1
  436. package/dist/output/sdr-rendering.d.ts +48 -10
  437. package/dist/output/sdr-rendering.js +114 -25
  438. package/dist/output/sdr-rendering.js.map +1 -1
  439. package/dist/output/subject-framing-crop.d.ts +6 -10
  440. package/dist/output/subject-framing-crop.js +23 -13
  441. package/dist/output/subject-framing-crop.js.map +1 -1
  442. package/dist/processing/demosaic.d.ts +90 -0
  443. package/dist/processing/demosaic.js +275 -0
  444. package/dist/processing/demosaic.js.map +1 -0
  445. package/dist/processing/denoise.d.ts +68 -0
  446. package/dist/processing/denoise.js +214 -0
  447. package/dist/processing/denoise.js.map +1 -0
  448. package/dist/processing/focus-stacking.d.ts +17 -0
  449. package/dist/processing/focus-stacking.js +80 -0
  450. package/dist/processing/focus-stacking.js.map +1 -0
  451. package/dist/processing/hdr.d.ts +54 -0
  452. package/dist/processing/hdr.js +172 -0
  453. package/dist/processing/hdr.js.map +1 -0
  454. package/dist/processing/image-ops.d.ts +66 -0
  455. package/dist/processing/image-ops.js +192 -0
  456. package/dist/processing/image-ops.js.map +1 -0
  457. package/dist/processing/panorama.d.ts +51 -0
  458. package/dist/processing/panorama.js +305 -0
  459. package/dist/processing/panorama.js.map +1 -0
  460. package/dist/processing/processing-task.d.ts +85 -0
  461. package/dist/processing/processing-task.js +164 -0
  462. package/dist/processing/processing-task.js.map +1 -0
  463. package/dist/processing/tone-mapping.d.ts +69 -0
  464. package/dist/processing/tone-mapping.js +310 -0
  465. package/dist/processing/tone-mapping.js.map +1 -0
  466. package/dist/schema/camera.d.ts +5 -4
  467. package/dist/schema/illumination-spectral.d.ts +13 -19
  468. package/dist/schema/illumination-spectral.js +23 -19
  469. package/dist/schema/illumination-spectral.js.map +1 -1
  470. package/dist/schema/illumination-temporal.d.ts +12 -15
  471. package/dist/schema/illumination-temporal.js +43 -28
  472. package/dist/schema/illumination-temporal.js.map +1 -1
  473. package/dist/schema/illumination.d.ts +5 -4
  474. package/dist/schema/illumination.js +55 -20
  475. package/dist/schema/illumination.js.map +1 -1
  476. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  477. package/dist/schema/scene-radiance-temporal.js +26 -23
  478. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  479. package/dist/schema/scene-radiance.d.ts +17 -17
  480. package/dist/schema/scene-radiance.js +56 -34
  481. package/dist/schema/scene-radiance.js.map +1 -1
  482. package/dist/schema/scene.d.ts +14 -13
  483. package/dist/schema/validation.d.ts +0 -1
  484. package/dist/schema/validation.js +17 -15
  485. package/dist/schema/validation.js.map +1 -1
  486. package/dist/sensor/accumulated-charge.d.ts +45 -64
  487. package/dist/sensor/accumulated-charge.js +41 -47
  488. package/dist/sensor/accumulated-charge.js.map +1 -1
  489. package/dist/sensor/architecture.d.ts +22 -25
  490. package/dist/sensor/architecture.js +17 -16
  491. package/dist/sensor/architecture.js.map +1 -1
  492. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  493. package/dist/sensor/camera-saturation-capacity.js +36 -34
  494. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  495. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  496. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  497. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  498. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  499. package/dist/sensor/capture-mode-timing.js +24 -21
  500. package/dist/sensor/capture-mode-timing.js.map +1 -1
  501. package/dist/sensor/capture-mode.d.ts +28 -30
  502. package/dist/sensor/capture-mode.js +33 -31
  503. package/dist/sensor/capture-mode.js.map +1 -1
  504. package/dist/sensor/color-sampling.d.ts +30 -33
  505. package/dist/sensor/color-sampling.js +32 -37
  506. package/dist/sensor/color-sampling.js.map +1 -1
  507. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  508. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  509. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  510. package/dist/sensor/dark-current.d.ts +53 -49
  511. package/dist/sensor/dark-current.js +87 -46
  512. package/dist/sensor/dark-current.js.map +1 -1
  513. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  514. package/dist/sensor/environment-photo-signal.js +127 -46
  515. package/dist/sensor/environment-photo-signal.js.map +1 -1
  516. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  517. package/dist/sensor/eqe-electron-rate.js +34 -14
  518. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  519. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  520. package/dist/sensor/eqe-local-exposure.js +15 -11
  521. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  522. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  523. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  524. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  525. package/dist/sensor/exposure-window.d.ts +48 -34
  526. package/dist/sensor/exposure-window.js +77 -36
  527. package/dist/sensor/exposure-window.js.map +1 -1
  528. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  529. package/dist/sensor/fixed-pattern-noise.js +166 -0
  530. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  531. package/dist/sensor/iso-gain.d.ts +44 -0
  532. package/dist/sensor/iso-gain.js +119 -0
  533. package/dist/sensor/iso-gain.js.map +1 -0
  534. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  535. package/dist/sensor/iso-signal-chain.js +52 -66
  536. package/dist/sensor/iso-signal-chain.js.map +1 -1
  537. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  538. package/dist/sensor/local-exposure-binding.js +22 -18
  539. package/dist/sensor/local-exposure-binding.js.map +1 -1
  540. package/dist/sensor/optical-stack.d.ts +36 -40
  541. package/dist/sensor/optical-stack.js +34 -37
  542. package/dist/sensor/optical-stack.js.map +1 -1
  543. package/dist/sensor/photon-energy.d.ts +22 -28
  544. package/dist/sensor/photon-energy.js +42 -34
  545. package/dist/sensor/photon-energy.js.map +1 -1
  546. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  547. package/dist/sensor/physical-charge-capacity.js +35 -36
  548. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  549. package/dist/sensor/pixel-pitch.d.ts +2 -3
  550. package/dist/sensor/pixel-pitch.js +4 -2
  551. package/dist/sensor/pixel-pitch.js.map +1 -1
  552. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  553. package/dist/sensor/radiometry-readiness.js +20 -17
  554. package/dist/sensor/radiometry-readiness.js.map +1 -1
  555. package/dist/sensor/raw-readout.d.ts +173 -83
  556. package/dist/sensor/raw-readout.js +425 -160
  557. package/dist/sensor/raw-readout.js.map +1 -1
  558. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  559. package/dist/sensor/raw-reconstruction.js +200 -47
  560. package/dist/sensor/raw-reconstruction.js.map +1 -1
  561. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  562. package/dist/sensor/readout-exposure-linkage.js +125 -27
  563. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  564. package/dist/sensor/readout-timing.d.ts +43 -44
  565. package/dist/sensor/readout-timing.js +38 -30
  566. package/dist/sensor/readout-timing.js.map +1 -1
  567. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  568. package/dist/sensor/response-application-compatibility.js +35 -34
  569. package/dist/sensor/response-application-compatibility.js.map +1 -1
  570. package/dist/sensor/response-operating-range.d.ts +26 -35
  571. package/dist/sensor/response-operating-range.js +40 -39
  572. package/dist/sensor/response-operating-range.js.map +1 -1
  573. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  574. package/dist/sensor/responsivity-photocurrent.js +57 -40
  575. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  576. package/dist/sensor/sampling-aperture.d.ts +21 -25
  577. package/dist/sensor/sampling-aperture.js +29 -28
  578. package/dist/sensor/sampling-aperture.js.map +1 -1
  579. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  580. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  581. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  582. package/dist/sensor/sensor-geometry.d.ts +28 -32
  583. package/dist/sensor/sensor-geometry.js +35 -20
  584. package/dist/sensor/sensor-geometry.js.map +1 -1
  585. package/dist/sensor/signal-noise.d.ts +14 -16
  586. package/dist/sensor/signal-noise.js +15 -13
  587. package/dist/sensor/signal-noise.js.map +1 -1
  588. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  589. package/dist/sensor/spatial-sample-reduction.js +39 -48
  590. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  591. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  592. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  593. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  594. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  595. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  596. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  597. package/dist/sensor/spectral-coverage.d.ts +6 -9
  598. package/dist/sensor/spectral-coverage.js +9 -6
  599. package/dist/sensor/spectral-coverage.js.map +1 -1
  600. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  601. package/dist/sensor/spectral-quadrature.js +38 -48
  602. package/dist/sensor/spectral-quadrature.js.map +1 -1
  603. package/dist/sensor/spectral-response.d.ts +53 -41
  604. package/dist/sensor/spectral-response.js +80 -47
  605. package/dist/sensor/spectral-response.js.map +1 -1
  606. package/dist/sensor/stochastic-seed.d.ts +50 -0
  607. package/dist/sensor/stochastic-seed.js +123 -0
  608. package/dist/sensor/stochastic-seed.js.map +1 -0
  609. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  610. package/dist/sensor/temporal-eqe-sum.js +5 -6
  611. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  612. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  613. package/dist/sensor/temporal-photo-signal.js +11 -10
  614. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  615. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  616. package/dist/sensor/temporal-sample-binding.js +3 -3
  617. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  618. package/dist/simulation/poc-simulation.d.ts +16 -16
  619. package/dist/simulation/poc-simulation.js +20 -15
  620. package/dist/simulation/poc-simulation.js.map +1 -1
  621. package/dist/stabilization/camera-shake.d.ts +42 -18
  622. package/dist/stabilization/camera-shake.js +43 -20
  623. package/dist/stabilization/camera-shake.js.map +1 -1
  624. package/dist/stabilization/system.d.ts +44 -41
  625. package/dist/stabilization/system.js +196 -108
  626. package/dist/stabilization/system.js.map +1 -1
  627. package/docs/AGENT_GUIDE.md +183 -0
  628. package/docs/API_REFERENCE.md +777 -2
  629. package/docs/QUICK_START.md +663 -0
  630. package/docs/USAGE.md +1719 -714
  631. package/docs/api/camera-equivalent-focal-length.md +6 -7
  632. package/docs/api/camera-field-of-view.md +16 -8
  633. package/docs/api/camera-lens-projection.md +246 -0
  634. package/docs/api/camera-projected-object-size.md +6 -5
  635. package/docs/api/capture-capture-export-metadata.md +10 -10
  636. package/docs/api/capture-dng-import.md +134 -0
  637. package/docs/api/capture-environment-raw-producer.md +17 -11
  638. package/docs/api/capture-export-jpeg.md +16 -0
  639. package/docs/api/capture-focus-control.md +25 -47
  640. package/docs/api/capture-linear-encoding.md +21 -12
  641. package/docs/api/capture-lossless-jpeg.md +49 -0
  642. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  643. package/docs/api/capture-native-environment-raw.md +161 -4
  644. package/docs/api/capture-native-raw-development.md +69 -8
  645. package/docs/api/capture-native-raw-dng.md +84 -0
  646. package/docs/api/capture-native-raw.md +21 -10
  647. package/docs/api/capture-packed-sensor-raw.md +156 -0
  648. package/docs/api/capture-photographic-export.md +69 -31
  649. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  650. package/docs/api/capture-raw-white-level.md +37 -0
  651. package/docs/api/capture-release-sequence.md +6 -7
  652. package/docs/api/capture-sensor-raw-frame.md +6 -6
  653. package/docs/api/capture-sensor-raw-producer.md +17 -11
  654. package/docs/api/capture-simulated-capture.md +15 -15
  655. package/docs/api/color-camera-color-matrix.md +103 -0
  656. package/docs/api/color-capture-color.md +22 -11
  657. package/docs/api/color-chromatic-adaptation.md +82 -0
  658. package/docs/api/color-color-difference.md +134 -0
  659. package/docs/api/color-color-matching-functions.md +259 -0
  660. package/docs/api/color-colorimetry-math.md +54 -0
  661. package/docs/api/color-gamut-mapping.md +72 -0
  662. package/docs/api/color-illuminants.md +280 -0
  663. package/docs/api/color-rgb-color-spaces.md +151 -0
  664. package/docs/api/color-sensor-color-development.md +27 -0
  665. package/docs/api/color-srgb-icc.md +2 -4
  666. package/docs/api/color-white-balance.md +95 -19
  667. package/docs/api/composition-image-formation-plan.md +124 -95
  668. package/docs/api/composition-plan-consumer.md +7 -7
  669. package/docs/api/core-calculation-result.md +18 -14
  670. package/docs/api/core-configuration-error.md +1 -1
  671. package/docs/api/core-image-formation.md +7 -7
  672. package/docs/api/core-scientific-assurance.md +12 -10
  673. package/docs/api/core-spectral-composition.md +14 -14
  674. package/docs/api/core-spectral.md +6 -6
  675. package/docs/api/core-validation.md +3 -3
  676. package/docs/api/core-version.md +7 -6
  677. package/docs/api/equipment-exposure-capabilities.md +11 -10
  678. package/docs/api/equipment-generic-tier-assets.md +7 -2
  679. package/docs/api/equipment-generic-tier-presets.md +6 -6
  680. package/docs/api/equipment-iso-capabilities.md +18 -18
  681. package/docs/api/equipment-metering-capabilities.md +6 -6
  682. package/docs/api/equipment-release-capabilities.md +4 -4
  683. package/docs/api/exports.json +2253 -3
  684. package/docs/api/exposure-exposure-duration-control.md +9 -9
  685. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  686. package/docs/api/exposure-exposure.md +10 -10
  687. package/docs/api/exposure-flash-ttl.md +182 -0
  688. package/docs/api/exposure-flash.md +183 -28
  689. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  690. package/docs/api/exposure-metering-target.md +9 -8
  691. package/docs/api/exposure-metering-temporal.md +8 -8
  692. package/docs/api/exposure-metering.md +69 -9
  693. package/docs/api/exposure-program-line.md +6 -5
  694. package/docs/api/facade-chart-radiance-batch.md +96 -0
  695. package/docs/api/facade-chart-scenes.md +240 -0
  696. package/docs/api/facade-scene-radiance.md +122 -0
  697. package/docs/api/facade-simulate-capture.md +397 -0
  698. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  699. package/docs/api/gpu-image-kernel-execution.md +152 -0
  700. package/docs/api/motion-camera-rotation.md +43 -26
  701. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  702. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  703. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  704. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  705. package/docs/api/motion-extended-object-projection.md +10 -8
  706. package/docs/api/motion-projected-motion.md +8 -8
  707. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  708. package/docs/api/motion-video-sequence.md +159 -0
  709. package/docs/api/optics-aperture.md +8 -8
  710. package/docs/api/optics-atmospheric-haze.md +104 -0
  711. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  712. package/docs/api/optics-circle-of-confusion.md +5 -4
  713. package/docs/api/optics-complex-pupil-psf.md +57 -16
  714. package/docs/api/optics-depth-of-field.md +12 -6
  715. package/docs/api/optics-diffraction-psf-profile.md +96 -0
  716. package/docs/api/optics-diffraction.md +8 -7
  717. package/docs/api/optics-focus-breathing.md +104 -16
  718. package/docs/api/optics-focus-state.md +9 -10
  719. package/docs/api/optics-front-of-lens-filter.md +72 -14
  720. package/docs/api/optics-illumination-vignetting.md +10 -10
  721. package/docs/api/optics-irradiance-convolution.md +95 -0
  722. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  723. package/docs/api/optics-lens-psf-kernels.md +72 -0
  724. package/docs/api/optics-lens-psf-profile.md +48 -26
  725. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  726. package/docs/api/optics-polygon-diffraction.md +78 -13
  727. package/docs/api/optics-profile-contract.md +4 -4
  728. package/docs/api/optics-psf-foundation.md +12 -12
  729. package/docs/api/optics-pupil-vignetting.md +132 -0
  730. package/docs/api/optics-radial-distortion.md +12 -12
  731. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  732. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  733. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  734. package/docs/api/optics-sensor-environment-query.md +52 -9
  735. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  736. package/docs/api/optics-stray-light.md +12 -11
  737. package/docs/api/optics-thin-lens.md +4 -3
  738. package/docs/api/optics-zernike-wavefront.md +229 -0
  739. package/docs/api/output-capture-corrected-sdr.md +10 -7
  740. package/docs/api/output-capture-geometry.md +35 -36
  741. package/docs/api/output-capture-sdr.md +4 -4
  742. package/docs/api/output-crop.md +7 -4
  743. package/docs/api/output-geometric-transforms.md +65 -19
  744. package/docs/api/output-lens-corrections.md +17 -15
  745. package/docs/api/output-native-capture-sdr.md +26 -13
  746. package/docs/api/output-png-encoder.md +105 -0
  747. package/docs/api/output-print-contrast-reference.md +8 -8
  748. package/docs/api/output-print-detail.md +14 -14
  749. package/docs/api/output-print-jpeg.md +22 -5
  750. package/docs/api/output-print-plan.md +18 -18
  751. package/docs/api/output-print-region-statistics.md +14 -14
  752. package/docs/api/output-sdr-rendering.md +52 -10
  753. package/docs/api/output-subject-framing-crop.md +5 -6
  754. package/docs/api/processing-demosaic.md +120 -0
  755. package/docs/api/processing-denoise.md +148 -0
  756. package/docs/api/processing-focus-stacking.md +41 -0
  757. package/docs/api/processing-hdr.md +113 -0
  758. package/docs/api/processing-panorama.md +82 -0
  759. package/docs/api/processing-processing-task.md +107 -0
  760. package/docs/api/processing-tone-mapping.md +142 -0
  761. package/docs/api/schema-camera.md +6 -4
  762. package/docs/api/schema-illumination-spectral.md +10 -11
  763. package/docs/api/schema-illumination-temporal.md +13 -15
  764. package/docs/api/schema-illumination.md +4 -4
  765. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  766. package/docs/api/schema-scene-radiance.md +18 -17
  767. package/docs/api/schema-scene.md +9 -9
  768. package/docs/api/schema-validation.md +1 -1
  769. package/docs/api/sensor-accumulated-charge.md +12 -20
  770. package/docs/api/sensor-architecture.md +15 -16
  771. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  772. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  773. package/docs/api/sensor-capture-mode-timing.md +9 -9
  774. package/docs/api/sensor-capture-mode.md +29 -30
  775. package/docs/api/sensor-color-sampling.md +31 -33
  776. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  777. package/docs/api/sensor-dark-current.md +30 -14
  778. package/docs/api/sensor-environment-photo-signal.md +13 -6
  779. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  780. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  781. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  782. package/docs/api/sensor-exposure-window.md +24 -24
  783. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  784. package/docs/api/sensor-iso-gain.md +63 -0
  785. package/docs/api/sensor-iso-signal-chain.md +13 -22
  786. package/docs/api/sensor-local-exposure-binding.md +12 -13
  787. package/docs/api/sensor-optical-stack.md +37 -40
  788. package/docs/api/sensor-photon-energy.md +10 -11
  789. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  790. package/docs/api/sensor-pixel-pitch.md +1 -1
  791. package/docs/api/sensor-radiometry-readiness.md +9 -9
  792. package/docs/api/sensor-raw-readout.md +118 -52
  793. package/docs/api/sensor-raw-reconstruction.md +97 -20
  794. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  795. package/docs/api/sensor-readout-timing.md +33 -35
  796. package/docs/api/sensor-response-application-compatibility.md +9 -11
  797. package/docs/api/sensor-response-operating-range.md +14 -18
  798. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  799. package/docs/api/sensor-sampling-aperture.md +22 -25
  800. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  801. package/docs/api/sensor-sensor-geometry.md +23 -24
  802. package/docs/api/sensor-signal-noise.md +10 -10
  803. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  804. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  805. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  806. package/docs/api/sensor-spectral-coverage.md +5 -5
  807. package/docs/api/sensor-spectral-quadrature.md +33 -35
  808. package/docs/api/sensor-spectral-response.md +28 -16
  809. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  810. package/docs/api/simulation-poc-simulation.md +17 -16
  811. package/docs/api/stabilization-camera-shake.md +29 -10
  812. package/docs/api/stabilization-system.md +25 -21
  813. package/docs/examples/production-request.json +3821 -2157
  814. package/docs/examples/simulate-capture.mjs +14 -0
  815. package/llms.txt +35 -0
  816. package/package.json +32 -11
  817. package/AGENTS.md +0 -674
  818. package/CONTRIBUTING.md +0 -76
  819. package/DCO +0 -33
  820. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  821. package/dist/camera/field-of-view.d.ts.map +0 -1
  822. package/dist/camera/projected-object-size.d.ts.map +0 -1
  823. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  824. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  825. package/dist/capture/export-jpeg.d.ts.map +0 -1
  826. package/dist/capture/export-tiff.d.ts.map +0 -1
  827. package/dist/capture/focus-control.d.ts.map +0 -1
  828. package/dist/capture/linear-encoding.d.ts.map +0 -1
  829. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  830. package/dist/capture/native-raw-development.d.ts.map +0 -1
  831. package/dist/capture/native-raw.d.ts.map +0 -1
  832. package/dist/capture/photographic-export.d.ts.map +0 -1
  833. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  834. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  835. package/dist/capture/release-sequence.d.ts.map +0 -1
  836. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  837. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  838. package/dist/capture/simulated-capture.d.ts.map +0 -1
  839. package/dist/color/capture-color.d.ts.map +0 -1
  840. package/dist/color/sensor-color-development.d.ts.map +0 -1
  841. package/dist/color/srgb-icc.d.ts.map +0 -1
  842. package/dist/color/srgb-transfer.d.ts.map +0 -1
  843. package/dist/color/white-balance.d.ts.map +0 -1
  844. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  845. package/dist/composition/plan-consumer.d.ts.map +0 -1
  846. package/dist/core/calculation-result.d.ts.map +0 -1
  847. package/dist/core/canonical-json.d.ts.map +0 -1
  848. package/dist/core/configuration-error.d.ts.map +0 -1
  849. package/dist/core/evidence-provenance.d.ts.map +0 -1
  850. package/dist/core/image-formation.d.ts.map +0 -1
  851. package/dist/core/owned-data.d.ts.map +0 -1
  852. package/dist/core/record-validation.d.ts.map +0 -1
  853. package/dist/core/scientific-assurance.d.ts.map +0 -1
  854. package/dist/core/spectral-composition.d.ts.map +0 -1
  855. package/dist/core/spectral.d.ts.map +0 -1
  856. package/dist/core/validation.d.ts.map +0 -1
  857. package/dist/core/version.d.ts.map +0 -1
  858. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  859. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  860. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  861. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  862. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  863. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  864. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  865. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  866. package/dist/exposure/exposure.d.ts.map +0 -1
  867. package/dist/exposure/flash.d.ts.map +0 -1
  868. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  869. package/dist/exposure/metering-target.d.ts.map +0 -1
  870. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  871. package/dist/exposure/metering.d.ts.map +0 -1
  872. package/dist/exposure/program-line.d.ts.map +0 -1
  873. package/dist/index.d.ts.map +0 -1
  874. package/dist/motion/camera-rotation.d.ts.map +0 -1
  875. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  876. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  877. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  878. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  879. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  880. package/dist/motion/projected-motion.d.ts.map +0 -1
  881. package/dist/optics/aperture.d.ts.map +0 -1
  882. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  883. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  884. package/dist/optics/depth-of-field.d.ts.map +0 -1
  885. package/dist/optics/diffraction.d.ts.map +0 -1
  886. package/dist/optics/focus-breathing.d.ts.map +0 -1
  887. package/dist/optics/focus-state.d.ts.map +0 -1
  888. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  889. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  890. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  891. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  892. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  893. package/dist/optics/profile-contract.d.ts.map +0 -1
  894. package/dist/optics/psf-foundation.d.ts.map +0 -1
  895. package/dist/optics/radial-distortion.d.ts.map +0 -1
  896. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  897. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  898. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  899. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  900. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  901. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  902. package/dist/optics/stray-light.d.ts.map +0 -1
  903. package/dist/optics/thin-lens.d.ts.map +0 -1
  904. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  905. package/dist/output/capture-geometry.d.ts.map +0 -1
  906. package/dist/output/capture-sdr.d.ts.map +0 -1
  907. package/dist/output/crop.d.ts.map +0 -1
  908. package/dist/output/geometric-transforms.d.ts.map +0 -1
  909. package/dist/output/lens-corrections.d.ts.map +0 -1
  910. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  911. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  912. package/dist/output/print-detail.d.ts.map +0 -1
  913. package/dist/output/print-jpeg.d.ts.map +0 -1
  914. package/dist/output/print-plan.d.ts.map +0 -1
  915. package/dist/output/print-region-statistics.d.ts.map +0 -1
  916. package/dist/output/sdr-rendering.d.ts.map +0 -1
  917. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  918. package/dist/schema/camera.d.ts.map +0 -1
  919. package/dist/schema/camera.js +0 -3
  920. package/dist/schema/camera.js.map +0 -1
  921. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  922. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  923. package/dist/schema/illumination.d.ts.map +0 -1
  924. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  925. package/dist/schema/scene-radiance.d.ts.map +0 -1
  926. package/dist/schema/scene.d.ts.map +0 -1
  927. package/dist/schema/scene.js +0 -3
  928. package/dist/schema/scene.js.map +0 -1
  929. package/dist/schema/validation.d.ts.map +0 -1
  930. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  931. package/dist/sensor/architecture.d.ts.map +0 -1
  932. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  933. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  934. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  935. package/dist/sensor/capture-mode.d.ts.map +0 -1
  936. package/dist/sensor/color-sampling.d.ts.map +0 -1
  937. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  938. package/dist/sensor/dark-current.d.ts.map +0 -1
  939. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  940. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  941. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  942. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  943. package/dist/sensor/exposure-window.d.ts.map +0 -1
  944. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  945. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  946. package/dist/sensor/optical-stack.d.ts.map +0 -1
  947. package/dist/sensor/photon-energy.d.ts.map +0 -1
  948. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  949. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  950. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  951. package/dist/sensor/raw-readout.d.ts.map +0 -1
  952. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  953. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  954. package/dist/sensor/readout-timing.d.ts.map +0 -1
  955. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  956. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  957. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  958. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  959. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  960. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  961. package/dist/sensor/signal-noise.d.ts.map +0 -1
  962. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  963. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  964. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  965. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  966. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  967. package/dist/sensor/spectral-response.d.ts.map +0 -1
  968. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  969. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  970. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  971. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  972. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  973. package/dist/stabilization/system.d.ts.map +0 -1
  974. package/docs/API_STYLE.md +0 -235
  975. package/docs/ARCHITECTURE.md +0 -356
  976. package/docs/AUTOMATION_COORDINATION.md +0 -190
  977. package/docs/CAPTURE_COLOR.md +0 -25
  978. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  979. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  980. package/docs/CAPTURE_SDR.md +0 -22
  981. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  982. package/docs/DEVELOPERS.md +0 -68
  983. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  984. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  985. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  986. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  987. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  988. package/docs/IMAGE_FORMATION.md +0 -247
  989. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  990. package/docs/MOTION_AND_SIGNAL.md +0 -250
  991. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  992. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  993. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  994. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  995. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  996. package/docs/PERFORMANCE_BASELINE.md +0 -56
  997. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  998. package/docs/PHYSICS_FOUNDATION.md +0 -426
  999. package/docs/POC_API.md +0 -278
  1000. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  1001. package/docs/POC_PROJECTION_REUSE.md +0 -124
  1002. package/docs/PRINT_195_196_REVIEW.md +0 -93
  1003. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  1004. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  1005. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  1006. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1007. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1008. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1009. package/docs/PRINT_PLANNING.md +0 -75
  1010. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1011. package/docs/PROCESSED_OUTPUT.md +0 -157
  1012. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1013. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1014. package/docs/PROVENANCE.md +0 -115
  1015. package/docs/PSF_FOUNDATION.md +0 -165
  1016. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1017. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1018. package/docs/RELEASE_1_0.md +0 -66
  1019. package/docs/RELEASE_1_0_1.md +0 -61
  1020. package/docs/RELEASE_1_1_0.md +0 -25
  1021. package/docs/RELEASE_1_2_0.md +0 -51
  1022. package/docs/RELEASE_1_3_0.md +0 -15
  1023. package/docs/RELEASE_1_4_0.md +0 -23
  1024. package/docs/RELEASE_1_5_0.md +0 -105
  1025. package/docs/RELEASE_AUDIT.md +0 -39
  1026. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1027. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1028. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1029. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1030. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1031. package/docs/SDR_RENDERING.md +0 -33
  1032. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1033. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1034. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1035. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1036. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1037. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1038. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1039. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1040. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1041. package/docs/SIMULATED_CAPTURE.md +0 -65
  1042. package/docs/STABILIZATION.md +0 -234
  1043. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1044. package/docs/TIER_ACCEPTANCE.md +0 -129
  1045. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1046. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1047. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1048. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1049. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1050. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1051. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1052. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1053. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1054. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1055. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1056. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1057. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1058. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1059. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1060. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1061. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1062. package/docs/validation/documentation-fragments.json +0 -212
  1063. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1064. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1065. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1069. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1071. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1072. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1073. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1074. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1075. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1076. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1077. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1078. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1079. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1080. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1081. package/docs/validation/print-detail-capabilities.json +0 -103
  1082. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1083. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1084. package/docs/validation/release-audit-inventory.json +0 -1306
  1085. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
package/README.md CHANGED
@@ -4,28 +4,62 @@ Photivra is an open TypeScript engine for the science and mathematics of photogr
4
4
 
5
5
  **Pronunciation (IPA):** /foʊˈtɪvɹə/
6
6
 
7
- Photivra provides a reusable, tested API for camera geometry, optics, focus and depth of field, exposure, subject and camera motion, sensor sampling, diffraction, cropping and framing, stabilization approximations, and signal/noise calculations.
7
+ Photivra gives you a reusable, tested API for:
8
8
 
9
- Its calculations use explicit units, documented assumptions, validation, provenance, and clearly labeled approximations so results are reproducible and their limitations are understandable.
9
+ - camera geometry and optics;
10
+ - focus and depth of field;
11
+ - exposure;
12
+ - subject and camera motion;
13
+ - sensor sampling;
14
+ - diffraction;
15
+ - cropping and framing;
16
+ - stabilization approximations;
17
+ - signal and noise.
10
18
 
11
- The source is licensed under Apache-2.0.
19
+ Every calculation uses explicit units, documented assumptions, validation and provenance (a record of how the result was produced). Approximations are clearly labelled. Results are reproducible, and their limits are written down.
12
20
 
13
- Standalone stray-light irradiance, composed digital geometry and generic camera lens-correction APIs are documented in [Digital optics foundations](https://github.com/Photivra/photivra/blob/main/docs/DIGITAL_OPTICS_FOUNDATION.md). They preserve optical/sensor capture authority and explicit sampling/noise costs; production composition remains separate.
14
- The standalone [SimulatedCapture contract](https://github.com/Photivra/photivra/blob/main/docs/SIMULATED_CAPTURE.md) commits format-neutral linear float master data and public metadata. Its [virtual-camera color model](https://github.com/Photivra/photivra/blob/main/docs/CAPTURE_COLOR.md) provides explicit linear color conversion and resolved-WB application; [linear encoding](https://github.com/Photivra/photivra/blob/main/docs/LINEAR_CAPTURE_ENCODING.md) defines deterministic 16-bit quantization. File serialization remains a subsequent stage.
21
+ The source is licensed under Apache-2.0.
15
22
 
16
- The standalone [SDR rendering foundation](https://github.com/Photivra/photivra/blob/main/docs/SDR_RENDERING.md) separates post-capture rendering, output encoding and external display adaptation. Capture/WB/correction integration is available through the [processed output contract](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md), with explicit input domains and bounded support.
23
+ ### Related foundations
17
24
 
18
- The standalone [Print planner](https://github.com/Photivra/photivra/blob/main/docs/PRINT_PLANNING.md) derives native-only printer-file geometry from physical image size, independent viewing distance and explicit sampling conventions. Captured detail and print quality remain unassessed.
25
+ - [Digital optics foundations](https://github.com/Photivra/photivra/blob/main/docs/DIGITAL_OPTICS_FOUNDATION.md) document the standalone stray-light irradiance, composed digital geometry and generic lens-correction APIs. They keep the optical/sensor capture model in charge, and make sampling and noise costs explicit. Production composition is separate.
26
+ - The standalone [SimulatedCapture contract](https://github.com/Photivra/photivra/blob/main/docs/SIMULATED_CAPTURE.md) stores format-neutral linear floating-point master data plus public metadata.
27
+ - Its [virtual-camera colour model](https://github.com/Photivra/photivra/blob/main/docs/CAPTURE_COLOR.md) provides explicit linear colour conversion and applies a resolved white balance (WB).
28
+ - [Linear encoding](https://github.com/Photivra/photivra/blob/main/docs/LINEAR_CAPTURE_ENCODING.md) defines deterministic 16-bit quantization.
29
+ - Writing files is a later stage.
30
+ - The standalone [SDR rendering foundation](https://github.com/Photivra/photivra/blob/main/docs/SDR_RENDERING.md) keeps three steps apart: rendering after capture, output encoding, and adaptation to an external display. (SDR = standard dynamic range.) The [processed output contract](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md) connects capture, WB and correction, with explicit input domains and bounded support.
31
+ - The standalone [Print planner](https://github.com/Photivra/photivra/blob/main/docs/PRINT_PLANNING.md) works out printer-file geometry from native pixels only. It uses the physical image size, an independent viewing distance and explicit sampling conventions. It does not assess captured detail or print quality.
19
32
 
20
33
  ## Quick start
21
34
 
22
- After owner publication, install the ESM package below. During candidate review, use the verified tarball from the [release guide](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_3_0.md):
35
+ Install the published ESM package below. The [2.1.0 release record](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_2_1_0.md) and [changelog](https://github.com/Photivra/photivra/blob/main/CHANGELOG.md) describe the current release:
23
36
 
24
37
  ```sh
25
- npm install @photivra/engine@1.3.0
38
+ npm install @photivra/engine@2.1.0
39
+ ```
40
+
41
+ Simulate a photograph of a test chart with a generic camera, then read the developed sRGB pixels:
42
+
43
+ ```ts
44
+ import { simulateCapture } from "@photivra/engine";
45
+
46
+ const capture = await simulateCapture({
47
+ camera: "professional",
48
+ lens: { fNumber: 8 },
49
+ exposure: { mode: "manual", iso: 100, shutterSeconds: 1 / 125 },
50
+ scene: { preset: "slanted-edge" },
51
+ output: { width: 16, height: 16 }
52
+ });
53
+
54
+ console.log(capture.image.samples.length, capture.exposure.settings);
55
+ console.log(capture.assumptions.map((a) => `${a.id}: ${a.explanation}`));
26
56
  ```
27
57
 
28
- Calculate horizontal field of view for a 36 mm sensor dimension and 50 mm focal length:
58
+ `simulateCapture()` runs the full physical pipeline through the engine's existing contracts: scene radiance, lens, spectral sensor, noise, RAW readout, RAW development and optional JPEG. It lists every default and modelling choice it made in `assumptions`.
59
+
60
+ The [Quick Start](https://github.com/Photivra/photivra/blob/main/docs/QUICK_START.md) covers the inputs, the chart presets (slanted edge, Siemens star, step wedge, grey ramp, checkerboard, point grid, caller patches), illuminants, white balance and limits.
61
+
62
+ The individual calculations are still available as small functions. For example, the horizontal field of view for a 36 mm sensor dimension and a 50 mm focal length:
29
63
 
30
64
  ```ts
31
65
  import { calculateFieldOfView } from "@photivra/engine";
@@ -39,10 +73,14 @@ console.log(horizontal.value.degrees);
39
73
  console.log(horizontal.provenance);
40
74
  ```
41
75
 
42
- Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md), then use the [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md) and [export-derived API reference](https://github.com/Photivra/photivra/blob/main/docs/API_REFERENCE.md). These documents describe the unpublished 1.3.0 candidate; use the published 1.2.0 baseline until 1.3.0 publication.
76
+ Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/docs/DEVELOPERS.md). Then use the [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md) and the [API reference](https://github.com/Photivra/photivra/blob/main/docs/API_REFERENCE.md), which is generated from the package exports.
77
+
78
+ Repository `main` may describe newer, unreleased work. For the stable contract, use the docs bundled in the published package, or the exact `v2.1.0` tag.
43
79
 
44
80
  ## Documentation
45
81
 
82
+ - [Quick Start: simulate a capture](https://github.com/Photivra/photivra/blob/main/docs/QUICK_START.md)
83
+ - [Using Photivra from an agent](https://github.com/Photivra/photivra/blob/main/docs/AGENT_GUIDE.md)
46
84
  - [Usage Guide](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md)
47
85
  - [Architecture](https://github.com/Photivra/photivra/blob/main/docs/ARCHITECTURE.md)
48
86
  - [Contributor Guide](https://github.com/Photivra/photivra/blob/main/CONTRIBUTING.md)
@@ -62,159 +100,217 @@ Start with the [Developer Guide](https://github.com/Photivra/photivra/blob/main/
62
100
 
63
101
  ## Getting help
64
102
 
65
- Use [GitHub Issues](https://github.com/photivra/photivra/issues) for reproducible bugs, documentation problems, and feature discussions. For security vulnerabilities, follow [SECURITY.md](https://github.com/Photivra/photivra/blob/main/SECURITY.md).
103
+ Use [GitHub Issues](https://github.com/photivra/photivra/issues) for reproducible bugs, documentation problems and feature discussions. For security vulnerabilities, follow [SECURITY.md](https://github.com/Photivra/photivra/blob/main/SECURITY.md).
66
104
 
67
105
  ## What is implemented
68
106
 
69
- The root package exports deterministic or explicitly labeled approximate models across four areas.
107
+ The root package exports models in four areas. Each model is either deterministic or explicitly labelled as an approximation.
108
+
109
+ A few abbreviations used below: FOV (field of view), PSF (point-spread function: how a lens spreads one point of light), MTF (modulation transfer function), CA (chromatic aberration), AA (anti-aliasing filter), CFA (colour filter array, such as a Bayer mosaic), QE / EQE (quantum efficiency / external quantum efficiency), A/W (amperes per watt, a detector's responsivity), ADC (analog-to-digital converter), AE / AF / WB (auto-exposure / autofocus / white balance).
70
110
 
71
111
  ### Optics and geometry
72
112
 
73
- - [generic MF / single-AF / continuous-AF focus control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-control-mf-single-af-continuous-af-and-lock), with explicit acquisition/loss/lock state, renderer-neutral longitudinal target distance, strict target-loss/reacquisition semantics, and a separate focus-vs-release priority gate;
74
- - [explicit finite/infinity focus-plane state](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#explicit-finite-and-infinity-focus-state), without non-finite or fabricated focus distances;
75
- - [centered and asymmetric rectilinear field of view, with optional focus-aware thin-lens projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#field-of-view);
76
- - [physical vs diagonal-based 35 mm-equivalent focal length](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#actual-and-35-mm-equivalent-focal-length);
77
- - [caller-declared focus-breathing projection/FOV approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-breathing-projection);
78
- - [generic invertible radial distortion mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radial-lens-distortion-mapping), including multi-point inverse batch sampling;
79
- - [generic RGB-channel lateral chromatic-aberration field mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#lateral-chromatic-aberration-mapping);
80
- - [generic linear-light illumination-vignetting approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#illumination-vignetting);
81
- - [front-of-lens filter transmission](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#front-of-lens-filter-transmission) for generic neutral-linear, neutral optical-density, and wavelength-resolved passive filters without polarization claims;
82
- - [scene-radiance to sensor-irradiance optical bridge](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-to-sensor-irradiance), composing explicit pupil acceptance, lens transmission or working-T-stop approximation, optional front-filter transmission, and exactly one field-throughput term while stopping before the sensor optical stack;
83
- - [Gaussian thin-lens image distance and magnification](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#thin-lens-image-distance-and-magnification);
84
- - [geometric depth of field and defocus-circle diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-of-field-and-defocus);
85
- - [ideal circular-aperture first-zero Airy diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#circular-aperture-diffraction);
86
- - [real-lens sampled PSF and complex-pupil framework](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#real-lens-psf-profiles-and-complex-pupil-reference), with full-2D directional kernels, bounded field/focus/aperture/wavelength/defocus interpolation, explicit field-curvature/longitudinal-focus offsets, unit-energy PSF shape, separate pupil throughput, and an MTF-only fail-closed boundary;
87
- - [separated PSF/pupil contribution foundation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#psf-and-pupil-foundation);
88
- - [ideal regular-polygon aperture geometry and sunstar direction symmetry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-geometry-and-sunstar-directions).
113
+ - [Generic focus control: MF, single AF and continuous AF](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-control-mf-single-af-continuous-af-and-lock). Explicit acquisition, loss and lock state; a renderer-neutral target distance along the lens axis; strict rules for losing and reacquiring a target; and a separate gate for focus-priority versus release-priority.
114
+ - [Explicit finite and infinity focus-plane state](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#explicit-finite-and-infinity-focus-state), with no non-finite or made-up focus distances.
115
+ - [Field of view](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#field-of-view) for centered and asymmetric rectilinear framing, with optional focus-aware thin-lens projection.
116
+ - [Physical versus diagonal-based 35 mm-equivalent focal length](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#actual-and-35-mm-equivalent-focal-length).
117
+ - [Focus-breathing approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#focus-breathing-projection) of projection and FOV, using a scale the caller declares.
118
+ - [Generic invertible radial distortion mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radial-lens-distortion-mapping), including batch inverse sampling of many points.
119
+ - [Generic lateral CA field mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#lateral-chromatic-aberration-mapping) per RGB channel.
120
+ - [Generic illumination-vignetting approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#illumination-vignetting) in linear light.
121
+ - [Front-of-lens filter transmission](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#front-of-lens-filter-transmission) for generic passive filters: neutral (linear), neutral optical density, and wavelength-resolved. No polarization claims.
122
+ - [Scene radiance to sensor irradiance](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-to-sensor-irradiance): an optical bridge from the light leaving the scene to the light arriving at the sensor. It combines explicit pupil acceptance, lens transmission or a working-T-stop approximation, optional front-filter transmission, and exactly one field-throughput term. It stops before the sensor's own optical stack.
123
+ - [Gaussian thin-lens image distance and magnification](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#thin-lens-image-distance-and-magnification).
124
+ - [Geometric depth of field and defocus-circle diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-of-field-and-defocus).
125
+ - [First-zero Airy diameter](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#circular-aperture-diffraction) for an ideal circular aperture.
126
+ - [Real-lens sampled PSF and complex-pupil framework](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#real-lens-psf-profiles-and-complex-pupil-reference):
127
+ - full 2D directional kernels;
128
+ - bounded interpolation over field, focus, aperture, wavelength and defocus;
129
+ - explicit field-curvature and longitudinal-focus offsets;
130
+ - PSF shape normalized to unit energy, with pupil throughput kept separate;
131
+ - MTF-only data fails closed: it lacks phase and spatial information, so it returns blockers instead of a guessed PSF.
132
+ - [Separated PSF/pupil contribution foundation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#psf-and-pupil-foundation).
133
+ - [Ideal regular-polygon aperture geometry and sunstar direction symmetry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-geometry-and-sunstar-directions).
89
134
 
90
135
  ### Exposure and motion
91
136
 
92
- - [scene-to-sensor irradiance quadrature](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_QUADRATURE.md), binding declared spectral scene samples to exact pre-AA coordinates, wavelengths and time through the existing optical bridge;
93
- - [temporal scene-to-sensor EQE composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md), applying optics and response validity independently at every local shutter midpoint;
94
- - [local sampled-PSF sensor quadrature](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_PSF_QUADRATURE.md), applying wavelength-resolved normalized PSF shape with explicit native/image axes and complete source support;
95
- - [sensor-to-environment projection queries](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_ENVIRONMENT_QUERY.md), deriving scene request directions from physical optical support and analytic camera rotation;
96
- - [executed environment capture to native RAW](https://github.com/Photivra/photivra/blob/main/docs/ENVIRONMENT_RAW_CAPTURE.md), joining provider calls, optional local PSF, temporal EQE and existing seeded RAW generation with paired export handoff;
97
- - [temporal EQE photo signal to RAW](https://github.com/Photivra/photivra/blob/main/docs/TEMPORAL_PHOTO_RAW.md), carrying validated changing-light midpoint counts through exact-event dark/accumulated charge, native RAW and paired files;
98
- - [irradiance-to-EQE local exposure composition](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_EQE_LOCAL_EXPOSURE.md), validating explicit physical node samples through response applicability/range and stationary local integration before the existing RAW producer;
99
- - [generic equipment exposure capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#generic-equipment-exposure-capabilities), separating generic body/lens capability facts from selected camera state and resolving focal-length-specific aperture plus shutter/ISO envelopes for downstream #99 control policy;
100
- - [detailed ISO/exposure-index capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain), representing standard and expanded settings, Auto ISO bounds, and optional capture-mode restrictions without inferring physical gain/noise behavior;
101
- - [generic ISO/high-ISO signal-chain profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain), mapping explicit ISO/capture-mode states to #14 readout regimes while preserving upstream photons/shot noise and keeping Good/Better/Best as convenience profile selectors rather than real-camera rankings;
102
- - [Manual and Manual + Auto ISO exposure resolution](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-and-auto-iso-exposure-resolution), consuming the typed meter target and resolved equipment envelope while preserving manual aperture/shutter ownership and reporting ISO quantization/limit residuals explicitly;
103
- - [Aperture Priority with manual ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-priority-with-manual-iso), preserving caller-selected aperture/ISO while resolving only shutter against the same typed target/reference/capability contracts;
104
- - [priority modes with Auto ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#priority-modes-with-auto-iso), adding explicit minimum-shutter and aperture-first two-auto-axis policies plus Shutter Priority with manual/automatic ISO without inventing new exposure equations;
105
- - [Program Auto and Full Auto exposure](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#program-auto-and-full-auto-exposure), using versioned generic program lines to choose aperture/shutter while keeping ISO policy explicit and limiting Full Auto to exposure axes only;
106
- - [Bulb, Time, and long-exposure control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#bulb-time-and-long-exposure-control), resolving control events to concrete elapsed seconds before the existing exposure-window/charge pipeline without inventing a special long-exposure physics path;
107
- - [EV100, relative optical exposure, relative rendered exposure, and equivalent ISO compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#exposure-and-iso-relations);
108
- - [relative pre-exposure metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#relative-pre-exposure-metering), with explicit generic multi-zone, center-weighted, spot, and highlight-weighted policies over the oriented active capture frame, plus generic body metering capability/profile compatibility and a frozen target seam into automatic exposure;
109
- - [scene-radiance-derived and explicit temporal metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-derived-and-temporal-metering), binding relative meter samples to the #85 provider/material/illumination context and requiring declared time averaging for time-varying illumination without inventing a spectral-to-luminance conversion;
110
- - [manual ordinary flash + front/rear sync](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-flash-and-ordinary-sync), registering a spatial #85 scene-light source and explicit pulse waveform to #12 exposure-window timing, preserving ambient temporal illumination, and failing closed when an ordinary pulse cannot fit a real whole-frame-open interval; HSS/TTL are not faked;
111
- - [stable meter targets and exposure compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#meter-target-and-exposure-compensation), freezing metering identity for AE lock and shifting the automatic-exposure target downstream without mutating the underlying meter result;
112
- - [deterministic logical release sequencing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#logical-release-sequences) for single, burst, self-timer and exposure/focus bracket timing;
113
- - [extended-object time-varying projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#extended-object-time-varying-projection), projecting explicit metric object points under shared rigid translation, optionally validating fronto-parallel magnification, and binding the same geometry to #12 local exposure windows without claiming visibility or a finished blur kernel;
114
- - [constant-velocity projected point motion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-subject-motion);
115
- - [time-parameterized spatial camera-rotation mapping](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#spatial-camera-rotation-mapping) for yaw/pitch/roll;
116
- - [capture-local pure-rotation exposure trajectories](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-exposure-trajectories), evaluated at each native point's local exposure start/end without claiming a finished rolling-shutter warp;
117
- - [capture-mode-bound shutter/readout timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-bound-shutterreadout-timing), binding timing evidence to one exact capture-mode/profile identity while keeping sensor readout separate from exposure boundaries and failing closed on unsupported non-uniform schedules;
118
- - [depth-aware capture translation/parallax temporal geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-aware-translationparallax-temporal-geometry), requiring metric scene depth, preserving camera and subject translation independently, and explicitly prohibiting one global 3D-scene translation homography;
119
- - [temporal scene-radiance sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#temporal-scene-radiance-sampling), generating deterministic provider-evaluation nodes on each point's authoritative local exposure clock and reducing only identity/time-matched radiance results;
120
- - [capture-local pure-rotation temporal quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-temporal-quadrature), using deterministic midpoint nodes plus separate normalized-average and seconds-valued temporal measures without calculating radiance or blur;
121
- - [instantaneous inverse capture-scan mapping under pure rotation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#instantaneous-capture-rotation-inverse-mapping), with an explicit local-exposure phase and analytic destination-to-reference ray inversion;
122
- - [time-domain physical stabilization system](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md#time-domain-physical-stabilization-system), with generic synthetic sensor-shift/OIS/coordinated rotational correction, explicit latency/gain/limits, declared panning-axis bypass, and #12 local-exposure sampling without consuming tripod/support state or stop ratings;
123
- - [the existing controlled yaw/pitch camera-shake and stabilization-equivalent approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-shake-and-stabilization-equivalent-approximation).
137
+ - [Scene-to-sensor irradiance quadrature](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_QUADRATURE.md). Binds declared spectral scene samples to exact pre-AA coordinates, wavelengths and times through the existing optical bridge. ("Quadrature" means numerical integration over chosen sample points.)
138
+ - [Temporal scene-to-sensor EQE composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md). Applies optics and response validity independently at every local shutter midpoint.
139
+ - [Local sampled-PSF sensor quadrature](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_PSF_QUADRATURE.md). Applies a wavelength-resolved, normalized PSF shape with explicit native and image axes and complete source support.
140
+ - [Sensor-to-environment projection queries](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_ENVIRONMENT_QUERY.md). Derives the scene directions to request from physical optical support and analytic camera rotation.
141
+ - [Executed environment capture to native RAW](https://github.com/Photivra/photivra/blob/main/docs/ENVIRONMENT_RAW_CAPTURE.md). Joins provider calls, an optional local PSF, temporal EQE and the existing seeded RAW generation, then hands off to paired export.
142
+ - [Temporal EQE photo signal to RAW](https://github.com/Photivra/photivra/blob/main/docs/TEMPORAL_PHOTO_RAW.md). Carries validated midpoint counts under changing light through exact-event dark and accumulated charge, to native RAW and paired files.
143
+ - [Irradiance-to-EQE local exposure composition](https://github.com/Photivra/photivra/blob/main/docs/SENSOR_EQE_LOCAL_EXPOSURE.md). Validates explicit physical node samples through response applicability and range, and stationary local integration, before the existing RAW producer.
144
+ - [Generic equipment exposure capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#generic-equipment-exposure-capabilities). Keeps generic body and lens capability facts separate from the selected camera state. Resolves the aperture range at a given focal length, plus shutter and ISO envelopes, for exposure-control policy (#99).
145
+ - [Detailed ISO/exposure-index capabilities](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain). Represents standard and expanded settings, Auto ISO bounds and optional capture-mode restrictions, without inferring physical gain or noise behaviour.
146
+ - [Generic ISO/high-ISO signal-chain profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#isoexposure-index-capabilities-and-generic-high-iso-signal-chain). Maps explicit ISO/capture-mode states to sensor readout regimes (#14), while keeping the upstream photons and shot noise unchanged. Good/Better/Best are convenience profile selectors, not rankings of real cameras.
147
+ - [Manual and Manual + Auto ISO exposure resolution](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-and-auto-iso-exposure-resolution). Uses the typed meter target and the resolved equipment envelope. Aperture and shutter stay under manual control. ISO quantization and limit residuals are reported explicitly.
148
+ - [Aperture Priority with manual ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aperture-priority-with-manual-iso). Keeps the caller's aperture and ISO, and resolves only the shutter, using the same typed target, reference and capability contracts.
149
+ - [Priority modes with Auto ISO](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#priority-modes-with-auto-iso). Adds explicit minimum-shutter and aperture-first policies for modes with two automatic axes, plus Shutter Priority with manual or automatic ISO. No new exposure equations.
150
+ - [Program Auto and Full Auto exposure](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#program-auto-and-full-auto-exposure). Versioned generic program lines choose aperture and shutter. ISO policy stays explicit. Full Auto covers the exposure axes only.
151
+ - [Bulb, Time and long-exposure control](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#bulb-time-and-long-exposure-control). Turns control events into a concrete number of elapsed seconds before the existing exposure-window and charge pipeline. There is no special long-exposure physics path.
152
+ - [EV100, relative optical exposure, relative rendered exposure, and equivalent ISO compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#exposure-and-iso-relations).
153
+ - [Relative pre-exposure metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#relative-pre-exposure-metering). Explicit generic multi-zone, center-weighted, spot and highlight-weighted policies over the oriented active capture frame. Also: generic body metering capability/profile compatibility, and a frozen target handed to automatic exposure.
154
+ - [Scene-radiance-derived and explicit temporal metering](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#scene-radiance-derived-and-temporal-metering). Binds relative meter samples to the scene-radiance provider, material and illumination context (#85). Time-varying illumination needs a declared time-averaging policy. No spectral-to-luminance conversion is invented.
155
+ - [Manual ordinary flash with front/rear sync](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#manual-flash-and-ordinary-sync).
156
+ - Registers a spatial scene-light source (#85) and an explicit pulse waveform against the exposure-window timing (#12).
157
+ - Keeps ambient temporal illumination.
158
+ - Fails closed when an ordinary pulse cannot fit inside a real interval where the whole frame is open.
159
+ - HSS (high-speed sync) and TTL (through-the-lens) flash are not faked.
160
+ - [Stable meter targets and exposure compensation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#meter-target-and-exposure-compensation). Freezes the metering identity for AE lock, and shifts the automatic-exposure target downstream without changing the underlying meter result.
161
+ - [Deterministic logical release sequencing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#logical-release-sequences) for single shots, bursts, the self-timer, and exposure/focus bracket timing.
162
+ - [Extended-object time-varying projection](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#extended-object-time-varying-projection). Projects explicit metric object points under a shared rigid translation. Optionally validates fronto-parallel magnification. Binds the same geometry to the local exposure windows (#12). Does not claim visibility or a finished blur kernel.
163
+ - [Constant-velocity projected point motion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-subject-motion).
164
+ - [Spatial camera-rotation mapping over time](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#spatial-camera-rotation-mapping) for yaw, pitch and roll.
165
+ - [Capture-local pure-rotation exposure trajectories](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-exposure-trajectories), evaluated at each native point's local exposure start and end. Not a finished rolling-shutter warp.
166
+ - [Capture-mode-bound shutter/readout timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-bound-shutterreadout-timing). Binds timing evidence to one exact capture-mode/profile identity. Keeps sensor readout separate from exposure boundaries. Fails closed on unsupported non-uniform schedules.
167
+ - [Depth-aware translation/parallax temporal geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#depth-aware-translationparallax-temporal-geometry). Requires metric scene depth. Keeps camera translation and subject translation independent. Explicitly forbids using one global homography for a translating 3D scene.
168
+ - [Temporal scene-radiance sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#temporal-scene-radiance-sampling). Generates deterministic provider-evaluation nodes on each point's own local exposure clock, and reduces only radiance results whose identity and time match.
169
+ - [Capture-local pure-rotation temporal quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-rotation-temporal-quadrature). Deterministic midpoint nodes, with separate normalized-average and seconds-valued time measures. Does not calculate radiance or blur.
170
+ - [Instantaneous inverse capture-scan mapping under pure rotation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#instantaneous-capture-rotation-inverse-mapping), with an explicit phase within the local exposure and analytic destination-to-reference ray inversion.
171
+ - [Time-domain physical stabilization system](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md#time-domain-physical-stabilization-system).
172
+ - Generic synthetic sensor-shift, OIS (optical image stabilization) and coordinated rotational correction.
173
+ - Explicit latency, gain and limits, and a declared panning-axis bypass.
174
+ - Samples the local exposure windows (#12).
175
+ - Does not use tripod/support state or "stops of stabilization" ratings.
176
+ - [The existing controlled yaw/pitch camera-shake and stabilization-equivalent approximation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-shake-and-stabilization-equivalent-approximation).
124
177
 
125
178
  ### Color controls
126
179
 
127
- - [white-balance control and Auto WB](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#white-balance-and-auto-wb), including generic profile-owned presets, manual gains, independent CCT+tint intent, custom measurement, deterministic AWB priorities, and AWB lock without modifying scene illumination or RAW-like capture.
180
+ - [White-balance control and Auto WB](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#white-balance-and-auto-wb). Generic presets owned by the profile, manual gains, independent CCT (correlated colour temperature) plus tint, custom measurement, deterministic AWB priorities and AWB lock. Scene illumination and the RAW-like capture are never changed.
181
+ - [Image processing](https://github.com/Photivra/photivra/blob/main/docs/PROCESSING.md). All of these are cancellable approximations:
182
+ - built-in bilinear Bayer demosaic kernels with mirrored borders, and AHD demosaic;
183
+ - noise-optimal linear merge of a RAW HDR (high dynamic range) bracket;
184
+ - conversion of merged radiance to linear BT.2020 (PQ and HLG are not part of 2.0; see `THIRD_PARTY.md`);
185
+ - Reinhard and Durand–Dorsey tone mapping;
186
+ - Mertens exposure fusion;
187
+ - focus stacking;
188
+ - panorama from known rotations;
189
+ - bilateral and non-local-means denoise;
190
+ - unsharp mask;
191
+ - clearly synthetic film grain.
192
+ - [Colorimetry](https://github.com/Photivra/photivra/blob/main/docs/COLORIMETRY.md):
193
+ - a labelled analytic approximation of the CIE 1931 colour-matching functions (CMFs), or CMF tables you supply;
194
+ - spectral integration;
195
+ - Planckian, illuminant A and CIE daylight illuminants;
196
+ - CCT and Duv;
197
+ - Bradford and CAT16 chromatic adaptation;
198
+ - Kelvin + tint WB gains;
199
+ - CIELAB and ΔE76/94/2000;
200
+ - camera-matrix fitting;
201
+ - Display P3 and Rec.2020 matrices;
202
+ - sRGB, BT.709 and BT.1886 transfer functions;
203
+ - hue-preserving gamut mapping.
204
+
205
+ CIE and ColorChecker tables are not bundled.
128
206
 
129
207
  ### Sensor and output
130
208
 
131
- - [projected fronto-parallel object size and sensor-pixel sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-object-size-and-sensor-sampling);
132
- - [pixel pitch](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#pixel-pitch);
133
- - [sensor imaging-area, native-raster, crop-factor, megapixel, and 2D sampling metrics](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-imaging-area-and-native-raster);
134
- - [provenance-aware sensor architecture/capability metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-architecture-metadata), including independent optional CMOS/CCD technology-family identity;
135
- - [exact color-sampling topology profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#color-sampling-topology), supporting monochrome and arbitrary periodic mosaics on a sensor-anchored abstract sampling-site lattice while keeping spectral response and raster/photodiode binding separate;
136
- - [capture-mode/color-sampling structural bindings](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-modecolor-sampling-binding), explicitly relating one exact native effective raster to the color-site lattice and resolving compact pre-reconstruction source regions without inventing signal weights;
137
- - [sensor optical-stack profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-optical-stack), separating physical stack-component metadata from effective AA spatial response, with explicit absent/unknown/unresolved distinctions and arbitrary normalized point-splitting kernels;
138
- - [sensor sampling-aperture profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-sampling-aperture), explicitly registering color-site centers in native sensor physical space and resolving geometric sensitive rectangles without conflating pitch, fill area, QE, microlenses, or radiometry;
139
- - [sensor spatial-sampling quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sampling-quadrature), combining AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights;
140
- - [sensor spatial-sample reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sample-reduction), reducing explicitly identified nonnegative linear node values in relative or physical irradiance domains without claiming CFA spectral filtering or RAW conversion;
141
- - [sensor spectral-response profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-response), binding reusable wavelength-dependent channel response data to exact color-sampling IDs without inferring spectra from CFA labels;
142
- - [sensor spectral quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-quadrature), creating response-knot-aware, bounded-midpoint wavelength plans with explicit dλ while keeping response application and source-spectrum integration separate;
143
- - [sensor spatio-spectral irradiance reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatio-spectral-irradiance-reduction), composing explicit W/m^2/nm source samples over spatial and wavelength quadrature into pre-response irradiance/incident-flux integrals;
144
- - [sensor-response application compatibility](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-application-compatibility), fail-closed matching of response plane, area normalization, spatial separability, profile identity, and reference conditions before any QE/A/W conversion;
145
- - [sensor-response operating-range assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-operating-range), preserving calibrated power/irradiance domain, wavelength applicability, reference conditions, and nonlinearity criterion before any instantaneous response-rate conversion;
146
- - [photon-energy wavelength basis](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photon-energy-wavelength-basis), deriving photon energy from vacuum wavelength with exact SI constants and requiring explicit refractive-index/atmosphere handling for air wavelengths;
147
- - [EQE electron-rate conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#eqe-electron-rate-conversion), applying authorized effective QE per wavelength node to convert geometric-aperture spectral power into incident-photon and expected-electron rates without exposure integration;
148
- - [A/W responsivity photocurrent conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aw-responsivity-photocurrent-conversion), applying calibrated spectral responsivity per wavelength node to produce detector-terminal photocurrent magnitude under explicit electrical operating conditions without transimpedance or temporal integration;
149
- - [dark-current charge accumulation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#dark-current-charge), integrating evidence-backed pre-compensation thermal electron rate over the exact local EQE exposure without inventing a universal temperature law or full-well assessment;
150
- - [accumulated-charge completeness](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#accumulated-charge-completeness), binding photo, dark, and explicitly incremental other stored-electron contributors to one exact exposure before physical full-well assessment can be authorized;
151
- - [physical charge-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#physical-charge-capacity), comparing complete expected stored electrons with an evidence-backed physical storage capacity without conflating it with camera/digital saturation or inventing blooming/clamping;
152
- - [stochastic sensor charge and RAW-code readout](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#stochastic-charge-conversion-adc-and-raw-code), with deterministic seeded photo/dark shot-noise, explicit additional-charge sampling policies, separate electronic read-noise components, explicit conversion-gain regimes, black offset, pre-ADC saturation, ADC quantization, and digital saturation without inferring behavior from ISO;
153
- - [capture-mode/CFA-bound RAW samples and reconstruction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#raw-capture-samples-and-reconstruction), preserving absolute native CFA phase, failing closed for grouped/remosaic modes without explicit combination math, and using evidence-backed capture-mode/CFA-specific linear reconstruction kernels without claiming aliasing or moiré modeling;
154
- - [camera saturation-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-saturation-capacity), comparing dark-corrected photo-signal electron-equivalent expectation against an evidence-backed camera response-chain saturation capacity without reusing total stored charge or inferring the limiting clipping stage;
155
- - [local sensor-rate/exposure binding](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#local-sensor-rateexposure-binding), mapping an exact response-rate color site through an evidenced one-to-one native-effective-raster relationship to its local shutter window without yet authorizing rate×duration integration;
156
- - [constant-rate local-exposure integration](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#constant-rate-local-exposure-integration), requiring stationarity evidence for the exact local window before producing EQE expected counts or A/W photocurrent charge while keeping saturation unauthorized;
157
- - [processed camera output](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md), sharing explicit RAW-derived SDR development between preview, paired JPEG and committed production-plan output stages;
158
- - [orthogonal capture-mode profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-profiles), separating acquisition sequence, per-frame sampling, sensor-shift sequence, reconstruction stages, processed raster, and final output geometry;
159
- - [capture-specific native sensor readout scan timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-readout-timing), with separately evidenced total data-readout duration and rolling spatial timing skew;
160
- - [readout/exposure spatial linkage assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#readoutexposure-spatial-linkage), for evidence-backed same/reversed normalized phase relationships between rolling readout and electronic exposure boundaries without asserting absolute synchronization;
161
- - [capture exposure-window timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-exposure-window-timing), with independent opening/closing boundary schedules and local-duration validation;
162
- - [capture orientation, active sensor area, and output geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-orientation-active-area-and-output-geometry);
163
- - explicit oriented-physical-raster ↔ pre-orientation image-plane metric coordinate transforms for renderer/lens-field integration;
164
- - [centered crop and subject-height framing crop](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#centered-crop-and-subject-framing-crop);
165
- - [radiometry prerequisite/readiness assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radiometry-readiness);
166
- - [mean photoelectron conversion and basic shot-noise/read-noise SNR primitives](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photoelectron-and-snr-primitives).
209
+ - [Projected fronto-parallel object size and sensor-pixel sampling](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#projected-object-size-and-sensor-sampling).
210
+ - [Pixel pitch](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#pixel-pitch).
211
+ - [Sensor imaging area, native raster, crop factor, megapixels, and 2D sampling metrics](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-imaging-area-and-native-raster).
212
+ - [Sensor architecture and capability metadata, with provenance](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-architecture-metadata), including an independent, optional CMOS/CCD technology-family identity.
213
+ - [Exact colour-sampling topology profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#color-sampling-topology). Supports monochrome and any periodic mosaic on an abstract lattice of sampling sites anchored to the sensor. Spectral response, and binding to the raster or photodiodes, are kept separate.
214
+ - [Capture-mode / colour-sampling structural bindings](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-modecolor-sampling-binding). Explicitly relates one exact native effective raster to the colour-site lattice, and resolves compact source regions before reconstruction, without inventing signal weights.
215
+ - [Sensor optical-stack profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-optical-stack). Keeps physical stack-component metadata separate from the effective AA spatial response. Absent, unknown and unresolved are distinct states. Supports any normalized point-splitting kernel.
216
+ - [Sensor sampling-aperture profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-sampling-aperture). Explicitly registers colour-site centers in native sensor physical space, and resolves geometric sensitive rectangles. Pitch, fill area, QE, microlenses and radiometry are not mixed together.
217
+ - [Sensor spatial-sampling quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sampling-quadrature). Combines AA point splitting with geometric aperture integration into deterministic native-physical source nodes and weights.
218
+ - [Sensor spatial-sample reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatial-sample-reduction). Reduces explicitly identified non-negative linear node values in relative or physical irradiance domains. Does not claim CFA spectral filtering or RAW conversion.
219
+ - [Sensor spectral-response profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-response). Binds reusable, wavelength-dependent channel response data to exact colour-sampling IDs. Spectra are never guessed from CFA labels.
220
+ - [Sensor spectral quadrature](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spectral-quadrature). Builds wavelength plans that respect response knots, using bounded midpoints with an explicit dλ. Applying the response and integrating the source spectrum stay separate steps.
221
+ - [Sensor spatio-spectral irradiance reduction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-spatio-spectral-irradiance-reduction). Combines explicit W/m^2/nm source samples over spatial and wavelength quadrature into irradiance and incident-flux integrals, before any response is applied.
222
+ - [Sensor-response application compatibility](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-application-compatibility). Fail-closed matching of response plane, area normalization, spatial separability, profile identity and reference conditions, before any QE or A/W conversion.
223
+ - [Sensor-response operating-range assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-response-operating-range). Keeps the calibrated power/irradiance domain, wavelength applicability, reference conditions and nonlinearity criterion, before any instantaneous response-rate conversion.
224
+ - [Photon-energy wavelength basis](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photon-energy-wavelength-basis). Derives photon energy from the vacuum wavelength with exact SI constants. Air wavelengths need explicit refractive-index and atmosphere handling.
225
+ - [EQE electron-rate conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#eqe-electron-rate-conversion). Applies authorized effective QE at each wavelength node, converting spectral power on the geometric aperture into incident-photon and expected-electron rates. No exposure integration.
226
+ - [A/W responsivity photocurrent conversion](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#aw-responsivity-photocurrent-conversion). Applies calibrated spectral responsivity at each wavelength node to give the photocurrent magnitude at the detector terminal, under explicit electrical operating conditions. No transimpedance or time integration.
227
+ - [Dark-current charge accumulation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#dark-current-charge). Integrates an evidence-backed thermal electron rate (before compensation) over the exact local EQE exposure. No universal temperature law and no full-well assessment are invented.
228
+ - [Accumulated-charge completeness](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#accumulated-charge-completeness). Binds photo, dark and explicitly incremental other stored-electron contributions to one exact exposure, before a physical full-well assessment can be allowed.
229
+ - [Physical charge-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#physical-charge-capacity). Compares the complete expected stored electrons with an evidence-backed physical storage capacity. Not confused with camera/digital saturation. No invented blooming or clamping.
230
+ - [Stochastic sensor charge and RAW-code readout](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#stochastic-charge-conversion-adc-and-raw-code):
231
+ - deterministic, seeded photo and dark shot noise;
232
+ - explicit sampling policies for additional charge;
233
+ - separate electronic read-noise components;
234
+ - explicit conversion-gain regimes;
235
+ - black offset, saturation before the ADC, ADC quantization, and digital saturation;
236
+ - nothing inferred from ISO.
237
+ - [Capture-mode/CFA-bound RAW samples and reconstruction](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#raw-capture-samples-and-reconstruction). Keeps the absolute native CFA phase. Fails closed for grouped or remosaic modes without explicit combination maths. Uses evidence-backed linear reconstruction kernels specific to the capture mode and CFA. Does not claim to model aliasing or moiré.
238
+ - [Camera saturation-capacity assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-saturation-capacity). Compares the expected dark-corrected photo signal (in electron equivalents) with an evidence-backed saturation capacity of the camera's response chain. Does not reuse total stored charge or guess which stage clips.
239
+ - [Local sensor-rate/exposure binding](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#local-sensor-rateexposure-binding). Maps one exact response-rate colour site, through an evidenced one-to-one relationship with the native effective raster, to its local shutter window. Does not yet allow rate × duration integration.
240
+ - [Constant-rate local-exposure integration](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#constant-rate-local-exposure-integration). Requires evidence that the rate is stationary over the exact local window before producing EQE expected counts or A/W photocurrent charge. Saturation stays unauthorized.
241
+ - [Processed camera output](https://github.com/Photivra/photivra/blob/main/docs/PROCESSED_OUTPUT.md). One explicit RAW-derived SDR development shared by preview, paired JPEG and committed production-plan output.
242
+ - [Orthogonal capture-mode profiles](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-mode-profiles). Keeps apart: acquisition sequence, per-frame sampling, sensor-shift sequence, reconstruction stages, processed raster and final output geometry.
243
+ - [Capture-specific native sensor readout scan timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#sensor-readout-timing), with total data-readout duration and rolling spatial timing skew evidenced separately.
244
+ - [Readout/exposure spatial linkage assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#readoutexposure-spatial-linkage), for evidence-backed same or reversed normalized phase relationships between rolling readout and electronic exposure boundaries. Does not assert absolute synchronization.
245
+ - [Capture exposure-window timing](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-exposure-window-timing), with independent opening and closing boundary schedules and validation of local duration.
246
+ - [Capture orientation, active sensor area, and output geometry](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#capture-orientation-active-area-and-output-geometry).
247
+ - Explicit metric coordinate transforms between the oriented physical raster and the image plane before orientation, for renderer and lens-field integration.
248
+ - [Centered crop and subject-height framing crop](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#centered-crop-and-subject-framing-crop).
249
+ - [Radiometry prerequisite/readiness assessment](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#radiometry-readiness).
250
+ - [Mean photoelectron conversion, and basic shot-noise / read-noise SNR primitives](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#photoelectron-and-snr-primitives). (SNR = signal-to-noise ratio.)
167
251
 
168
252
  ### Data, validation, and composition
169
253
 
170
- - [shared spectral wavelength primitives and scene illumination-source profiles](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md), keeping source metadata distinct from outgoing scene radiance while preserving explicit source-specific units, approximation/calibration status, provenance, and renderer-independent source identities;
171
- - [scene material-response and radiance-provider contracts](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#scene-radiance-provider-and-material-response-boundary), validating renderer/provider fidelity, exact scene/profile/sample binding, wavelength/time/direction identity, and W/m²/sr/nm output without treating provider output as calibrated sensor input;
172
- - [shared continuous spectral coverage and discrete-line composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#shared-spectral-composition), intersecting explicit scene/optics/sensor wavelength support and preserving delta-like integrated line measures separately from continuous per-nanometre quadrature;
173
- - [temporal illumination waveforms and capture-time registration](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#temporal-illumination), evaluating flash/flicker relative multipliers in seconds against authoritative local exposure windows without conflating sensor readout, metering, or automatic exposure policy;
174
- - [image-formation ownership/order contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md), including coordinate, temporal, renderer, and reserved sensor-stage semantics;
175
- - [production image-formation plan](https://github.com/Photivra/photivra/blob/main/docs/PRODUCTION_COMPOSITION.md), separating prepared static context from immutable capture snapshots, binding committed #105 release-frame and #108 WB state, expanding stage dependencies from the authoritative graph, composing the #110 physical path plus mature temporal timing/rotation foundations, preserving cross-engine scientific assurance/evidence/uncertainty, surfacing renderer/engine fidelity blockers, and providing shared optimized/reference consumer manifests without modifying the POC;
176
- - [camera/scene schemas and runtime validation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-and-scene-schema-validation);
177
- - [provenance plus optional uncertainty/quality metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#provenance-uncertainty-and-quality-metadata);
178
- - [the composed `simulatePocCamera()` proof-of-concept calculation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#composed-poc-simulation).
254
+ - [Shared spectral wavelength primitives and scene illumination-source profiles](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md). Light-source metadata is kept separate from the light leaving the scene (outgoing scene radiance). Source-specific units, approximation/calibration status, provenance and renderer-independent source identities are preserved.
255
+ - [Scene material-response and radiance-provider contracts](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#scene-radiance-provider-and-material-response-boundary). Validates renderer/provider fidelity; exact scene, profile and sample binding; wavelength, time and direction identity; and output in W/m²/sr/nm. Provider output is not treated as calibrated sensor input.
256
+ - [Shared continuous spectral coverage and discrete-line composition](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#shared-spectral-composition). Intersects the explicit scene, optics and sensor wavelength ranges. Keeps delta-like integrated line measures separate from continuous per-nanometre quadrature.
257
+ - [Temporal illumination waveforms and capture-time registration](https://github.com/Photivra/photivra/blob/main/docs/SCENE_RADIANCE_AND_ILLUMINATION.md#temporal-illumination). Evaluates flash and flicker as relative multipliers, in seconds, against the authoritative local exposure windows. Sensor readout, metering and automatic exposure policy are not mixed in.
258
+ - [Image-formation ownership and order contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md), including coordinate, time, renderer and reserved sensor-stage meanings.
259
+ - [Production image-formation plan](https://github.com/Photivra/photivra/blob/main/docs/PRODUCTION_COMPOSITION.md):
260
+ - separates prepared static context from immutable per-capture snapshots;
261
+ - binds the committed release-frame state (#105) and WB state (#108);
262
+ - expands stage dependencies from the authoritative graph;
263
+ - composes the physical optics path (#110) plus the mature timing and rotation foundations;
264
+ - preserves scientific assurance, evidence and uncertainty across engines;
265
+ - surfaces renderer and engine fidelity blockers;
266
+ - provides shared manifests for optimized and reference consumers, without changing the POC.
267
+ - [Camera and scene schemas, with runtime validation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#camera-and-scene-schema-validation).
268
+ - [Provenance plus optional uncertainty/quality metadata](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#provenance-uncertainty-and-quality-metadata).
269
+ - [The composed `simulatePocCamera()` proof-of-concept calculation](https://github.com/Photivra/photivra/blob/main/docs/USAGE.md#composed-poc-simulation).
179
270
 
180
271
  The package has no runtime npm dependencies.
181
272
 
182
273
  ## Sensor/capture integration status
183
274
 
184
- The sensor/capture foundations are intentionally **additive**.
275
+ The sensor and capture foundations are deliberately **additive**: they add new APIs without changing existing ones.
185
276
 
186
- The root engine now exposes standalone APIs for:
277
+ The root engine exposes standalone APIs for:
187
278
 
188
279
  - physical sensor imaging area and native raster metrics;
189
- - independent X/Y geometric sampling pitch;
280
+ - independent X and Y geometric sampling pitch;
190
281
  - active-capture rectangles and physical camera orientation;
191
- - native↔oriented point/vector/rectangle transforms;
192
- - off-center/asymmetric active-capture FOV;
282
+ - native ↔ oriented transforms for points, vectors and rectangles;
283
+ - FOV for off-center and asymmetric active capture;
193
284
  - diagonal-based 35 mm-equivalent focal length;
194
285
  - evidence-backed sensor architecture metadata;
195
- - evidence-backed color-sampling topology profiles for monochrome, arbitrary periodic mosaics, and structural-only layered color declarations;
196
- - evidence-backed native-effective-raster ↔ color-site-grid bindings plus capture-mode structural-source resolution with explicit grouped-mode phase and channel-site counts;
197
- - evidence-backed sensor optical-stack profiles with ordered physical components, microlens presence metadata, and separately declared effective anti-aliasing spatial response;
198
- - evidence-backed sensor site-center registration plus geometric sampling-aperture profiles with unresolved/resolved footprint semantics and derived geometric sensitive-area fraction;
199
- - evidence-backed sensor spectral-response profiles plus deterministic bounded spectral-quadrature plans that preserve wavelength measure separately from response application and source-spectrum integration;
200
- - evidence-backed capture-mode profiles with single/fixed/variable multi-frame acquisition, native/grouped/declared per-frame sampling, optional sensor-shift offsets, reconstruction stages, and processed-image raster separation;
201
- - capture-specific native readout scan timing with explicit provenance and no output-resolution inference;
202
- - capture exposure-window timing with independent opening/closing boundary schedules;
203
- - capture-local stationary-ray rotation trajectories driven by exposure windows, with sensor readout intentionally excluded;
204
- - instantaneous inverse capture-scan rotation mapping at a caller-selected local-exposure phase, still independent from sensor data-readout timing;
286
+ - evidence-backed colour-sampling topology profiles: monochrome, any periodic mosaic, and structural-only layered colour declarations;
287
+ - evidence-backed bindings between the native effective raster and the colour-site grid, plus capture-mode resolution of structural sources with an explicit grouped-mode phase and channel-site counts;
288
+ - evidence-backed sensor optical-stack profiles: ordered physical components, microlens presence, and a separately declared effective anti-aliasing spatial response;
289
+ - evidence-backed registration of sensor site centers, plus geometric sampling-aperture profiles (unresolved or resolved footprint) and the derived geometric sensitive-area fraction;
290
+ - evidence-backed sensor spectral-response profiles, plus deterministic bounded spectral-quadrature plans that keep the wavelength measure separate from applying the response and from integrating the source spectrum;
291
+ - evidence-backed capture-mode profiles: single, fixed or variable multi-frame acquisition; native, grouped or declared per-frame sampling; optional sensor-shift offsets; reconstruction stages; and a separate processed-image raster;
292
+ - capture-specific native readout scan timing, with explicit provenance and no inference from output resolution;
293
+ - capture exposure-window timing with independent opening and closing boundary schedules;
294
+ - capture-local rotation trajectories for a stationary ray, driven by exposure windows (sensor readout deliberately excluded);
295
+ - instantaneous inverse capture-scan rotation mapping at a caller-selected phase within the local exposure, still independent of sensor data-readout timing;
205
296
  - radiometry prerequisite/readiness assessment.
206
297
 
207
- These contracts are **not all composed into `simulatePocCamera()` yet**. POC API 0.20 now composes staged capture geometry through final output/viewing semantics: orientation, active-capture rectangles, output crop/raster, active/output FOV, active-capture 35 mm-equivalent focal length, viewing-based CoC against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling. Sensor-architecture metadata, color-sampling topology profiles, native-effective-raster/color-site bindings, sensor optical-stack profiles, sensor sampling-aperture profiles, capture-mode profiles, sensor readout scan timing, capture exposure-window timing, and radiometry-readiness profiles remain uncomposed into the legacy POC. The separate production plan 0.7.0 executes its bounded declared environment/sensor/RAW/output route. Readout timing stays in invariant native sensor coordinates; physical orientation is an explicit downstream transform.
298
+ These contracts are **not all composed into `simulatePocCamera()` yet**.
299
+
300
+ - POC API 0.20 composes staged capture geometry through final output and viewing: orientation, active-capture rectangles, output crop/raster, active/output FOV, 35 mm-equivalent focal length of the active capture, viewing-based CoC (circle of confusion) against the final retained physical area, orientation-aware subject framing, and explicit output pixel scaling.
301
+ - Still not composed into the legacy POC: sensor-architecture metadata, colour-sampling topology profiles, native-effective-raster/colour-site bindings, sensor optical-stack profiles, sensor sampling-aperture profiles, capture-mode profiles, sensor readout scan timing, capture exposure-window timing, and radiometry-readiness profiles.
302
+ - The separate production plan 0.7.0 runs its bounded, declared environment → sensor → RAW → output route.
303
+ - Readout timing stays in invariant native sensor coordinates. Physical orientation is an explicit later transform.
208
304
 
209
- The POC exposes X/Y sampling diagnostics but still uses one representative horizontal pitch internally for several pixel-domain calculations; it therefore rejects geometry whose X/Y pitch differs by more than 1% rather than silently producing directional error.
305
+ The POC reports X/Y sampling diagnostics, but still uses one representative horizontal pitch internally for several pixel-domain calculations. It therefore rejects geometry whose X and Y pitch differ by more than 1%, instead of silently producing a directional error.
210
306
 
211
- Likewise, radiometry readiness does not enable photon/noise output in the POC. Integration of these foundations is separate future work and should happen explicitly rather than by silently changing existing request semantics.
307
+ Likewise, radiometry readiness does not turn on photon/noise output in the POC. Integrating these foundations is separate future work, and should happen explicitly, not by silently changing what existing requests mean.
212
308
 
213
309
  ## Sample use case
214
310
 
215
311
  A developer wants to model how a change in camera settings affects an image.
216
312
 
217
- Using Photivra, the application can provide camera and scene parameters—such as sensor dimensions, focal length, aperture, shutter speed, focus distance, subject distance, and motion—and receive structured scientific results describing effects such as:
313
+ The application gives Photivra camera and scene parameters — sensor dimensions, focal length, aperture, shutter speed, focus distance, subject distance and motion. It gets back structured scientific results describing effects such as:
218
314
 
219
315
  - field of view;
220
316
  - projected subject size;
@@ -225,9 +321,9 @@ Using Photivra, the application can provide camera and scene parameters—such a
225
321
  - pixel sampling;
226
322
  - crop and framing;
227
323
  - exposure relationships;
228
- - basic signal and noise behavior.
324
+ - basic signal and noise behaviour.
229
325
 
230
- Each result includes explicit units and model provenance, with approximations clearly identified rather than presented as exact physical measurements.
326
+ Each result carries explicit units and model provenance. Approximations are clearly identified, not presented as exact physical measurements.
231
327
 
232
328
  ```ts
233
329
  import {
@@ -263,70 +359,89 @@ console.log(depthOfField.value);
263
359
  console.log(motion.value);
264
360
  ```
265
361
 
266
- The calling application can then use those results while keeping the underlying photography calculations centralized, tested, and reproducible.
362
+ The application can then use those results, while the photography calculations themselves stay in one central, tested, reproducible place.
267
363
 
268
364
  ## Status
269
365
 
270
- - Repository package version: `1.3.0` (release candidate; publication is separate)
271
- - Engine API contract: `1.3.0`
366
+ - Repository package version: `2.1.0` (release candidate prepared October 17, 2026; publication is separate)
367
+ - Engine API contract: `2.1.0`
272
368
  - Versioned generic tier reference assets: [GENERIC_TIER_PRESETS.md](https://github.com/Photivra/photivra/blob/main/docs/GENERIC_TIER_PRESETS.md).
273
- - Composed POC simulation API contract: `0.20.0`
369
+ - Composed POC simulation API contract: `1.0.0`
274
370
  - Stability: 1.0 root-package compatibility policy; bounded scientific models and independent POC contract
275
371
 
276
- From 1.0.1, package version and `ENGINE_API_VERSION` are equal. New captures/plans record 1.3.0; existing archives retain their original creator identities. Schema, model and POC contract versions remain independent. Breaking root contracts now require a package major release; additive and corrective changes follow [compatibility and migration](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_3_0.md). A 1.0 package is not a claim of calibrated physical accuracy.
372
+ From 1.0.1, the package version and `ENGINE_API_VERSION` are equal. New captures/plans record 2.1.0; existing archives keep their original creator identities. Schema, model and POC contract versions stay independent.
277
373
 
278
- Creating a GitHub release/tag and publishing `@photivra/engine` are separate release actions. The tag-triggered publish workflow verifies that the `vX.Y.Z` tag matches the package version before publishing.
374
+ A breaking change to the root contracts now needs a new package major version. Additive and corrective changes follow [compatibility and migration](https://github.com/Photivra/photivra/blob/main/docs/RELEASE_1_3_0.md). A 1.0 package is not a claim of calibrated physical accuracy.
375
+
376
+ Creating a GitHub release/tag and publishing `@photivra/engine` are separate release actions. The publish workflow, triggered by the tag, checks that the `vX.Y.Z` tag matches the package version before publishing.
279
377
 
280
378
  ## Image-formation integration boundary
281
379
 
282
- The root engine now exports `getImageFormationContract()` as a descriptive public contract for scientific domain ownership, coordinate spaces, stage dependencies/couplings, temporal basis, renderer warp/compositing semantics, and reserved sensor ordering.
380
+ The root engine exports `getImageFormationContract()`. It is a descriptive public contract covering: which scientific domain owns what, coordinate spaces, stage dependencies and couplings, the time basis, renderer warp/compositing rules, and the reserved order of sensor stages.
283
381
 
284
- The contract does **not** claim that every listed stage is implemented. Reserved stages remain future work, and `simulatePocCamera()` is unchanged at API 0.20. See [Image-Formation Contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md).
382
+ The contract does **not** claim that every listed stage is implemented. Reserved stages are future work, and `simulatePocCamera()` is unchanged at API 0.20. See [Image-Formation Contract](https://github.com/Photivra/photivra/blob/main/docs/IMAGE_FORMATION.md).
285
383
 
286
384
  ## Important scientific limits
287
385
 
288
- Photivra deliberately avoids claiming more than the current models support.
289
-
290
- - Focus-aware projection is ideal paraxial thin-lens geometry by default. A separate declared-scale focus-breathing approximation can alter projection/framing for one focus state, but Photivra does not infer a breathing curve or claim named-lens calibration.
291
- - Generic radial distortion is a caller-parameterized field mapping with an explicit physical normalization radius and invertible operating envelope. Decentering/tangential distortion and named-lens calibration are not yet modeled.
292
- - Generic illumination vignetting is a field-dependent scene-linear/channel-linear attenuation model only; it does not model pupil clipping, cat's-eye bokeh, PSF changes, or calibrated lens radiometry.
293
- - Generic lateral CA is represented as independent radial field mapping for abstract RGB renderer channels. It is not a spectral lens model, sensor-CFA calibration, longitudinal-CA model, or named-lens profile.
294
- - The legacy projected-motion primitive follows one representative point. Separate extended-object/depth-direction temporal projection supports declared rigid reference geometry and constant linear motion; visibility, deformation and radiance accumulation remain external responsibilities.
295
- - The legacy stabilization-equivalent camera-shake API remains one global yaw/pitch image-plane vector. A separate low-level rotation-only mapping now models field-position-dependent yaw/pitch/roll image motion; separate depth-aware translation/parallax quadrature and generic response/latency/limit stabilization models are available. Neither models calibrated commercial IBIS/OIS, and the bounded production environment route consumes only its declared constant-axis rotation.
296
- - Native sensor readout timing currently uses a caller-declared uniform-linear single-axis spatial phase approximation. Capture data-readout duration and rolling spatial skew are distinct evidence-backed facts; the model does not infer one effective raster row/column as one physical hardware readout line and does not yet model non-uniform/segmented readout or rolling-shutter image distortion.
297
- - Readout/exposure linkage can assert only a normalized native spatial-phase/order relationship to an electronic exposure boundary. It does not establish absolute readout-vs-exposure timing, and equal directions or equal timing spans are never treated as proof of synchronization.
298
- - Capture exposure-window timing models opening and closing boundaries independently as simultaneous or uniform-linear native scans. It validates positive local duration across the full active rectangle, but does not itself model curtain acceleration, segmented/nonlinear electronic timing, shutter shock, EFCS-specific pupil/bokeh behavior, or automatically equate exposure boundaries with sensor readout. The separate manual-flash foundation registers a pulse against this timing without redefining the #12 exposure-window contract.
299
- - Capture rotation trajectories evaluate a stationary reference ray at local exposure start/end under pure constant camera rotation. The endpoint chord is not an integrated blur kernel, and the API is not an inverse destination-to-source rolling-shutter warp; separate instantaneous inverse mapping and midpoint temporal quadrature provide those geometric seams. Executed environment capture integrates declared radiance at its supported local shutter nodes.
300
- - Capture rotation temporal quadrature supplies deterministic midpoint geometry samples across each local exposure. It does not sample scene radiance, output an averaged coordinate/blur radius, model shutter-transmission ramps, or claim a geometry-only error bound; downstream radiance integration remains separate.
301
- - Instantaneous capture-rotation inverse mapping now provides destination-to-reference geometry at an explicit phase within each local exposure window. Pure rotation is inverted analytically, not iteratively. The result is still not a finite-exposure image or blur model; reference rays may validly fall outside the active source frame and are not clamped.
302
- - The Airy diagnostic remains a separately named ideal circular-pupil size diagnostic. `calculateIdealPolygonDiffractionPsf()` adds continuous unit-energy density for ideal on-axis regular polygon pupils with explicit equal-area physical scaling; blade geometry alone does not supply a physical PSF. The real-lens framework owns explicitly profiled combined primary-optical PSFs and complex-pupil/wavefront propagation. Do not stack polygon diffraction over a kernel that already includes diffraction.
303
- - Capture-mode profiles describe acquisition/sampling/reconstruction structure only. Grouped sampling does not imply charge-domain binning unless that domain is separately evidenced; processed-image resolution does not change FOV, physical sensor identity, or establish physical photosite count. Pixel-shift offsets are expressed in native effective-sampling-pitch units and do not claim photodiode pitch.
304
- - Color-sampling topology is independent from `NativeImageRaster`: periodic mosaic phase is anchored to absolute native sensor sampling-site indices, not crop-local coordinates. Channel IDs are semantic labels rather than spectral response curves. Layered color uses a separate unresolved spatial reference and remains structural-only until per-layer sampling density/registration is explicit; sparse non-periodic exceptions such as PDAF/masked/defect sites are not represented by schema 0.1.0.
305
- - Native-effective-raster/color-site binding requires its own evidence and is tied to one exact native raster; matching dimensions alone never prove 1:1 CFA correspondence. Grouped capture modes also require an evidenced full-frame top-left grouping phase. The bridge reports compact pre-reconstruction source rectangles and channel-site counts only—no sum/average weights, spectral response, downstream reconstructed-pixel dependency, or photodiode count. Pixel-shift offsets do not change CFA channel assignment because sensor and CFA move together.
306
- - Sensor optical-stack schema 0.1.0 separates physical component presence from effective anti-aliasing response. Omitted AA response means unknown, while explicit `absent` means no intentional AA spatial-splitting term in this contract—not an identity whole-stack PSF or zero aliasing risk. Point-splitting kernels are normalized spatial redistribution only and exclude throughput, spectral transmission, field/wavelength/polarization dependence, cover-glass refraction, and microlens behavior.
307
- - Sensor sampling-aperture schema 0.1.0 keeps color-site physical registration separate from both `NativeImageRaster` and radiometry. Site pitch/origin must be explicitly evidenced; aperture geometry is not inferred from pitch or fill fraction. The first resolved aperture is a uniform axis-aligned geometric sensitive rectangle contained within one lattice cell. Its derived sensitive-area fraction is a geometry diagnostic only—not QE, effective collection area, microlens behavior, charge diffusion/crosstalk, spectral response, or optical throughput.
308
- - Sensor spatial quadrature inverse-samples the pre-AA optical field through the declared AA split and geometric aperture. Destination CFA channel remains authoritative for all nodes; pre-AA source coordinates never reassign CFA color. Off-imaging-area source support is exposed rather than clamped/dropped, normalized weights remain unchanged, and square-micrometre measures remain geometric—not radiometric collection area.
309
- - Sensor spectral-response schema 0.1.0 treats channel IDs as labels until explicit wavelength-dependent data is supplied. Direct effective EQE, direct A/W responsivity, and explicitly separable filter×detector-QE are distinct representations; response curves require reusable-data/Photivra-owned provenance, never extrapolate outside their wavelength range, never convert air/vacuum wavelength coordinates implicitly, and do not model field-angle/temperature/polarization dependence or perform wavelength/photon/electron integration.
310
- - Signal/noise primitives require caller-supplied photon/electron quantities. The radiometry-readiness API can assess declared prerequisites, but it does not derive photons or enable photon/noise output in the composed POC.
311
- - The composed POC still uses one representative pixel-pitch path internally and therefore rejects sensor geometry whose X/Y sample pitch differs by more than 1%; lower-level geometry APIs already preserve independent X/Y pitch.
312
- - No named commercial camera or lens performance is claimed.
386
+ Photivra deliberately avoids claiming more than its current models support.
387
+
388
+ - **Focus-aware projection** is ideal paraxial thin-lens geometry by default. A separate focus-breathing approximation, with a declared scale, can change projection and framing for one focus state. Photivra does not infer a breathing curve or claim calibration for any named lens.
389
+ - **Generic radial distortion** is a field mapping parameterized by the caller, with an explicit physical normalization radius and an operating range in which it can be inverted. Decentering/tangential distortion and named-lens calibration are not modelled yet.
390
+ - **Generic illumination vignetting** is only a field-dependent attenuation, linear in scene light and per channel. It does not model pupil clipping, cat's-eye bokeh, PSF changes or calibrated lens radiometry.
391
+ - **Generic lateral CA** is an independent radial field mapping for abstract RGB renderer channels. It is not a spectral lens model, a sensor-CFA calibration, a longitudinal-CA model or a named-lens profile.
392
+ - **The legacy projected-motion primitive** follows one representative point. Separate extended-object and depth-direction temporal projection supports declared rigid reference geometry and constant linear motion. Visibility, deformation and radiance accumulation remain the caller's responsibility.
393
+ - **The legacy stabilization-equivalent camera-shake API** is still one global yaw/pitch image-plane vector. Separately:
394
+ - a low-level rotation-only mapping models yaw/pitch/roll image motion that depends on field position;
395
+ - depth-aware translation/parallax quadrature is available;
396
+ - generic stabilization models with response, latency and limits are available.
397
+
398
+ Neither models calibrated commercial IBIS/OIS (in-body / optical image stabilization). The bounded production environment route uses only its declared constant-axis rotation.
399
+ - **Native sensor readout timing** uses a caller-declared, uniform, linear, single-axis spatial phase approximation. Capture data-readout duration and rolling spatial skew are separate evidence-backed facts. The model does not treat one effective raster row or column as one physical hardware readout line, and does not yet model non-uniform or segmented readout or rolling-shutter image distortion.
400
+ - **Readout/exposure linkage** can assert only a normalized native spatial-phase/order relationship to an electronic exposure boundary. It does not establish absolute readout-versus-exposure timing. Equal directions or equal timing spans are never treated as proof of synchronization.
401
+ - **Capture exposure-window timing** models opening and closing boundaries independently, as simultaneous or uniform-linear native scans. It checks that the local duration is positive across the whole active rectangle. It does not itself model curtain acceleration, segmented or nonlinear electronic timing, shutter shock, EFCS-specific (electronic first-curtain shutter) pupil/bokeh behaviour, or automatically equate exposure boundaries with sensor readout. The separate manual-flash foundation registers a pulse against this timing without redefining the exposure-window contract (#12).
402
+ - **Capture rotation trajectories** evaluate a stationary reference ray at local exposure start and end under pure, constant camera rotation. The chord between the endpoints is not an integrated blur kernel, and the API is not an inverse destination-to-source rolling-shutter warp. Separate instantaneous inverse mapping and midpoint temporal quadrature provide those geometric pieces. Executed environment capture integrates declared radiance at its supported local shutter nodes.
403
+ - **Capture rotation temporal quadrature** supplies deterministic midpoint geometry samples across each local exposure. It does not sample scene radiance, output an averaged coordinate or blur radius, model shutter-transmission ramps, or claim a geometry-only error bound. Radiance integration happens later and separately.
404
+ - **Instantaneous capture-rotation inverse mapping** gives destination-to-reference geometry at an explicit phase within each local exposure window. Pure rotation is inverted analytically, not iteratively. The result is still not a finite-exposure image or a blur model. Reference rays may legitimately fall outside the active source frame and are not clamped.
405
+ - **The Airy diagnostic** stays a separately named size diagnostic for an ideal circular pupil.
406
+ - `calculateIdealPolygonDiffractionPsf()` adds a continuous, unit-energy density for ideal on-axis regular-polygon pupils, with explicit equal-area physical scaling. Blade geometry alone does not give a physical PSF.
407
+ - The real-lens framework owns explicitly profiled, combined primary-optics PSFs and complex-pupil/wavefront propagation.
408
+ - Do not stack polygon diffraction on top of a kernel that already includes diffraction.
409
+ - **Capture-mode profiles** describe acquisition, sampling and reconstruction structure only. Grouped sampling does not imply charge-domain binning unless that is separately evidenced. Processed-image resolution does not change FOV or the physical sensor identity, and does not establish the physical photosite count. Pixel-shift offsets are in units of the native effective sampling pitch and do not claim a photodiode pitch.
410
+ - **Colour-sampling topology** is independent from `NativeImageRaster`. Periodic mosaic phase is anchored to absolute native sensor sampling-site indices, not to crop-local coordinates. Channel IDs are labels, not spectral response curves. Layered colour uses a separate unresolved spatial reference and stays structural-only until per-layer sampling density and registration are explicit. Sparse, non-periodic exceptions such as PDAF (phase-detection autofocus), masked or defective sites are not represented by schema 0.1.0.
411
+ - **Native-effective-raster / colour-site binding** needs its own evidence and is tied to one exact native raster. Matching dimensions alone never prove a 1:1 CFA correspondence. Grouped capture modes also need an evidenced full-frame top-left grouping phase. The bridge reports only compact pre-reconstruction source rectangles and channel-site counts — no sum/average weights, spectral response, downstream reconstructed-pixel dependency or photodiode count. Pixel-shift offsets do not change CFA channel assignment, because the sensor and CFA move together.
412
+ - **Sensor optical-stack schema 0.1.0** separates physical component presence from the effective anti-aliasing response. An omitted AA response means unknown. An explicit `absent` means there is no intentional AA spatial-splitting term in this contract; it does not mean an identity whole-stack PSF or zero aliasing risk. Point-splitting kernels are normalized spatial redistribution only. They exclude throughput, spectral transmission, field/wavelength/polarization dependence, cover-glass refraction and microlens behaviour.
413
+ - **Sensor sampling-aperture schema 0.1.0** keeps the physical registration of colour sites separate from both `NativeImageRaster` and radiometry. Site pitch and origin must be explicitly evidenced; aperture geometry is not inferred from pitch or fill fraction. The first resolved aperture is a uniform, axis-aligned geometric sensitive rectangle inside one lattice cell. Its derived sensitive-area fraction is a geometry diagnostic only — not QE, effective collection area, microlens behaviour, charge diffusion/crosstalk, spectral response or optical throughput.
414
+ - **Sensor spatial quadrature** inverse-samples the pre-AA optical field through the declared AA split and geometric aperture. The destination CFA channel stays authoritative for all nodes; pre-AA source coordinates never reassign CFA colour. Source support that falls off the imaging area is exposed, not clamped or dropped. Normalized weights stay unchanged, and square-micrometre measures stay geometric — they are not radiometric collection area.
415
+ - **Sensor spectral-response schema 0.1.0** treats channel IDs as labels until explicit wavelength-dependent data is supplied.
416
+ - Direct effective EQE, direct A/W responsivity, and explicitly separable filter × detector-QE are different representations.
417
+ - Response curves need reusable-data or Photivra-owned provenance.
418
+ - They never extrapolate outside their wavelength range, and never convert between air and vacuum wavelength coordinates implicitly.
419
+ - They do not model field-angle, temperature or polarization dependence, and do not integrate over wavelength, photons or electrons.
420
+ - **Signal/noise primitives** need photon or electron quantities supplied by the caller. The radiometry-readiness API can assess declared prerequisites, but it does not derive photons or turn on photon/noise output in the composed POC.
421
+ - **The composed POC** still uses one representative pixel-pitch path internally, so it rejects sensor geometry whose X/Y sample pitch differs by more than 1%. The lower-level geometry APIs already keep X and Y pitch independent.
422
+ - **No named commercial camera or lens performance** is claimed.
313
423
 
314
424
  See [Physics Foundation](https://github.com/Photivra/photivra/blob/main/docs/PHYSICS_FOUNDATION.md), [Motion and Signal Foundation](https://github.com/Photivra/photivra/blob/main/docs/MOTION_AND_SIGNAL.md), and [Camera Shake and Stabilization](https://github.com/Photivra/photivra/blob/main/docs/STABILIZATION.md) for details.
315
425
 
316
426
  ## Principles
317
427
 
318
- - Independently implement established photography, optics, sensor, motion, and imaging mathematics.
319
- - Do not copy code, datasets, calibration tables, model weights, or protected technical expression unless reuse rights are explicit and compatible with Apache-2.0 distribution.
320
- - Treat publicly viewable material as reference material only; public availability is not permission to copy, and independent implementation does not by itself resolve third-party patent rights.
321
- - Keep calculations deterministic and testable where the model itself is deterministic.
322
- - Prefer explicit units, versioned schemas, consistent public APIs, and reproducible results.
323
- - Label results by provenance: calculated, calibrated, estimated, or approximation.
324
- - Report uncertainty/accuracy metadata only when it is defensible; never invent aggregate confidence or error bars.
325
- - Keep the repository focused on reusable scientific/business logic, validation, schemas, tests, documentation, and contributor tooling.
428
+ - Implement established photography, optics, sensor, motion and imaging mathematics independently.
429
+ - Do not copy code, datasets, calibration tables, model weights or protected technical expression unless the reuse rights are explicit and compatible with Apache-2.0 distribution.
430
+ - Treat publicly viewable material as reference material only. Being public is not permission to copy. Independent implementation does not, by itself, resolve third-party patent rights.
431
+ - Keep calculations deterministic and testable wherever the model itself is deterministic.
432
+ - Prefer explicit units, versioned schemas, consistent public APIs and reproducible results.
433
+ - Label results by provenance: calculated, calibrated, estimated or approximation.
434
+ - Report uncertainty or accuracy metadata only when it can be defended. Never invent an aggregate confidence or error bars.
435
+ - Keep the repository focused on reusable scientific/business logic, validation, schemas, tests, documentation and contributor tooling.
326
436
 
327
437
  ## Runtime surfaces
328
438
 
329
- The package is ESM-only.
439
+ The package is ESM.
440
+
441
+ - From 2.0.0, its export map also has a `default` condition. CommonJS code on Node 22.12 or later can therefore `require("@photivra/engine")` through Node's `require(esm)` support.
442
+ - `@photivra/engine/package.json` is exported.
443
+ - The published JavaScript source maps embed their TypeScript sources.
444
+ - The declarations type-check with `lib: ["es2022"]` alone. DOM and `@types/node` are not required; the package declares the one minimal `AbortSignal` member it uses.
330
445
 
331
446
  The root export is the runtime-neutral scientific surface:
332
447
 
@@ -337,15 +452,17 @@ import {
337
452
  } from "@photivra/engine";
338
453
  ```
339
454
 
340
- The root dependency graph is checked in CI so Node-only modules and the repository-local HTTP POC server cannot become reachable from that browser-facing surface.
455
+ CI checks the root dependency graph, so Node-only modules and the repository-local HTTP POC server cannot become reachable from this browser-facing surface.
341
456
 
342
- The open repository still contains a minimal Node HTTP POC server under `src/api` for contributor integration testing. It is deliberately **not** exported by `@photivra/engine` and is excluded from the published npm package. It is unauthenticated and is **not** a production hosting recommendation.
457
+ The open repository still contains a minimal Node HTTP POC server under `src/api`, for contributor integration testing. It is deliberately **not** exported by `@photivra/engine` and is left out of the published npm package. It has no authentication and is **not** a production hosting recommendation.
343
458
 
344
- When the package is installed directly from a Git repository using normal npm lifecycle scripts, `prepare` builds `dist` before consumption.
459
+ From 2.0.0, the published manifest declares no `prepare` or other install lifecycle scripts. Install the npm package. A Git checkout must be built explicitly with `npm ci && npm run build` before use.
345
460
 
346
461
  ## Development
347
462
 
348
- Development and Node-only tooling support maintained Node.js 22 (minimum 22.13), maintained 24, and 26 Current. Prefer patched Node 24 for builds. CI verifies Node.js 22.13 (minimum), patched 22 and 24 LTS, and 26 Current under [the runtime policy](NODE_SUPPORT.md).
463
+ Development and Node-only tooling support maintained Node.js 22 (minimum 22.13), maintained 24, and 26 Current. Patched Node 24 is preferred for builds.
464
+
465
+ CI checks the 22.13 minimum, plus the newest maintained LTS lines and the newest Current release (today: patched 22 and 24 LTS, and 26 Current), under [the runtime policy](NODE_SUPPORT.md).
349
466
 
350
467
  The reproducible npm workflow uses the committed lockfile:
351
468
 
@@ -364,25 +481,27 @@ Coverage gates are currently:
364
481
  - 90% functions;
365
482
  - 80% branches.
366
483
 
367
- The deterministic fuzz/property suite uses fixed seeds so failures are reproducible.
484
+ The deterministic fuzz/property tests use fixed seeds, so failures can be reproduced.
368
485
 
369
- Yarn and pnpm may be used for development, but the repository's release/CI dependency resolution is defined by `package-lock.json` and `npm ci`.
486
+ You may use Yarn or pnpm for development. Release and CI dependency resolution is defined by `package-lock.json` and `npm ci`.
370
487
 
371
488
  ## Validation boundaries
372
489
 
373
- TypeScript types are not treated as validation for untrusted data.
490
+ TypeScript types are not validation for untrusted data.
374
491
 
375
- - Use `parseCameraConfiguration()`, `parseSceneDefinition()`, `parseSensorArchitectureProfile()`, and `parseRadiometryReadinessProfile()` for their respective external JSON/configuration boundaries.
376
- - The repository-local Node POC HTTP layer has its own structural request parser before invoking `simulatePocCamera()`.
377
- - Scientific range/domain validation remains in the calculation modules.
492
+ - Use `parseCameraConfiguration()`, `parseSceneDefinition()`, `parseSensorArchitectureProfile()` and `parseRadiometryReadinessProfile()` at their external JSON/configuration boundaries.
493
+ - The repository-local Node POC HTTP layer has its own structural request parser, which runs before `simulatePocCamera()`.
494
+ - Scientific range and domain validation stays in the calculation modules.
378
495
  - Public `CalculationResult<T>` envelopes reject non-finite numeric output.
379
496
 
380
497
  ## Citation
381
498
 
382
- GitHub can generate citation text from [CITATION.cff](https://github.com/Photivra/photivra/blob/main/CITATION.cff). Use that metadata when citing Photivra in research, technical documentation, or reproducible analyses.
499
+ GitHub can generate citation text from [CITATION.cff](https://github.com/Photivra/photivra/blob/main/CITATION.cff). Use that metadata when citing Photivra in research, technical documentation or reproducible analyses.
383
500
 
384
501
  ## Licensing
385
502
 
386
503
  Source code in this repository is licensed under Apache-2.0 unless a file clearly states otherwise. See [LICENSE](https://github.com/Photivra/photivra/blob/main/LICENSE), [NOTICE](https://github.com/Photivra/photivra/blob/main/NOTICE), and [THIRD_PARTY.md](https://github.com/Photivra/photivra/blob/main/THIRD_PARTY.md).
387
504
 
388
- The Apache license does not grant trademark rights to the Photivra name, logos, or branding except as allowed by applicable law and the license itself.
505
+ This product includes DNG technology under license by Adobe.
506
+
507
+ The Apache license does not grant trademark rights to the Photivra name, logos or branding, except as allowed by applicable law and the license itself.