@photivra/engine 1.4.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1074) hide show
  1. package/CHANGELOG.md +401 -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 +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  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 +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  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/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,74 +0,0 @@
1
- # Nonstationary EQE exposure quadrature
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- `calculateSensorEqeTemporalExposure()` evaluates physical spectral irradiance at
6
- explicit local shutter midpoints, validates sensor response at every instant,
7
- and accumulates expected photons and photoelectrons. It reuses the instantaneous
8
- spatial/spectral reduction, applicability, operating-range, EQE and local binding
9
- steps used by `calculateSensorEqeLocalExposure()`. The stationary adapter's
10
- arithmetic, evidence and return shape remain unchanged.
11
-
12
- The shared input is the stationary adapter's input without `irradianceSamples`
13
- or `stationarityProfile`. Instead, `samples` holds `temporalSampleIndex`,
14
- `timeSecondsFromOpeningReference` and complete `irradianceSamples` for each time.
15
- All instants use the same site, profiles, native registration and shutter event.
16
- No stationarity profile is required or fabricated. Providers supply actual
17
- instant-specific values; this API does not execute a renderer or motion model.
18
-
19
- For local start `a`, duration `D` and `n` samples, temporal index `i` must have
20
- exact time `a + (i + 0.5) * (D / n)`. Times use the authoritative shutter's
21
- `first-opening-boundary-phase` reference, including rolling offsets. Callers
22
- must use this same arithmetic; a different/global clock or stale window fails.
23
- Times must be representable, interior and strictly increasing. Each node has
24
- integration measure `D/n` seconds and separate dimensionless average weight
25
- `1/n`. Only the seconds-valued measure multiplies the instantaneous rate.
26
-
27
- Expected counts are compensated sums of `photonRate_i * D/n` and
28
- `electronRate_i * D/n`. Counts retain fractional expectations. Spatial area,
29
- wavelength measure, response and temporal duration each apply once. Response
30
- operating validity is checked independently at every time; valid average
31
- irradiance cannot hide an invalid bright instant. AA/source support, response
32
- plane, per-bin validity and photon-energy basis retain the existing fail-closed
33
- rules. Child envelopes retain uncombined uncertainty and evidence.
34
-
35
- Coverage is complete and index-based; shuffled declarations produce identical
36
- canonical output. Missing, duplicate, sparse, out-of-range or mistimed samples
37
- reject. Execution allows 1–256 temporal samples and at most 100,000 supplied
38
- spatial × spectral × temporal irradiance nodes across the entire request.
39
- These are reference safety limits, not production-resolution performance claims.
40
-
41
- ## Result boundary
42
-
43
- The distinct kind `eqe-temporal-quadrature-expected-counts` reports integrated
44
- photo expectations with `timeStationarityEstablished: false` and
45
- `timeVaryingSignalIntegrated: true`. It is **not** the existing stationary
46
- `SensorEqeExposureIntegration`. Dark/charge/RAW consumers reject this full diagnostic record;
47
- do not cast it, synthesize stationarity fields or relabel its kind. The explicit
48
- [temporal photo-signal handoff](TEMPORAL_PHOTO_RAW.md), added at root API 0.110.0,
49
- recomputes physical input and produces a distinct validated compact record.
50
- Dark current, completeness, physical capacity, noise, readout and RAW remain
51
- separate responsibilities. Production gates are unchanged.
52
-
53
- The field samples remain declarations. This calculation does not establish
54
- scene projection/visibility/PSF/transport, calibrated source truth, scene
55
- stationarity, detector bandwidth, quadrature convergence or propagated
56
- uncertainty. Shared response state assumes the existing instantaneous EQE model
57
- is applicable at each time; it does not model temporal response lag or hysteresis.
58
- Uniform midpoint sampling can miss short pulses or discontinuities; increase
59
- resolution and measure convergence against the actual quantity, or use a future
60
- explicit breakpoint/pulse model. No error bound is inferred from sample count.
61
-
62
- Tests use owned synthetic fields and independent SI photon-energy/area/response
63
- arithmetic. Constant fields match stationary counts; a quadratic field shows
64
- expected midpoint convergence; rolling offsets and single-instant operating
65
- range failure are verified. These are mathematical regression evidence, not
66
- photographic calibration. Separate [handoff acceptance](https://github.com/Photivra/photivra/blob/main/test/temporal-photo-raw.test.ts)
67
- now covers nonstationary RAW/export from owned synthetic inputs.
68
-
69
- This additive API advances root API 0.108.0 to **0.109.0**, with model 0.1.0.
70
- Package, POC, production, capture/RAW schemas and noise identities are unchanged.
71
- Historical replay retains its stored root stamp and pinned paired-file hashes;
72
- new capture identities may include the new API stamp. No dependency or cost is
73
- introduced. Remaining #16/#178/#112 work includes source execution, PSF,
74
- production activation and editor/resolution acceptance; this slice closes no umbrella ticket.
@@ -1,90 +0,0 @@
1
- # Local sampled-PSF sensor quadrature
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- `calculateSensorPsfIrradianceQuadrature()` applies the existing #113 sampled PSF
6
- resolver to incident spectral irradiance at each pre-AA sensor quadrature point.
7
- It is an explicitly declared **destination-local shift-invariant approximation**,
8
- not a complete field-dependent forward optical transport solver. Production
9
- stages remain gated; provider/projection/visibility execution remains separate.
10
-
11
- ## Physical domains and coordinates
12
-
13
- Inputs are spatial/spectral sensor plans, `psf` resolver settings excluding the
14
- owned field position/wavelength, complete per-node `sourceSamples`, one finite
15
- `timeSecondsFromOpeningReference`, and evidence-backed `spatialModel` and
16
- `psfWavelengthBasis` declarations. `inputMeaning` must be
17
- `pre-psf-pre-sensor-stack-pre-aa-spectral-irradiance`.
18
-
19
- At every spatial/wavelength node, the destination is the sensor plan's
20
- `preAntiAliasingSourcePointMm` in **native +X-right/+Y-down** axes. The lens PSF
21
- query uses `{x: destination.x, y: -destination.y}` in **image-plane +Y-up** axes.
22
- Wavelength comes from that exact spectral node. Schema 0.1.0 sampled PSF profiles
23
- lack a wavelength-basis field, so the extra evidence declaration explicitly binds
24
- the source profile's wavelength meaning to the plan's air/vacuum basis. The
25
- adapter neither infers nor converts the basis.
26
-
27
- For kernel column `j` and row `k`, the image-plane displacement is
28
- `((j-centerX)*pitchX, (k-centerY)*pitchY)` in micrometres. Inverse sampling in native
29
- sensor millimetres therefore reads:
30
-
31
- ```text
32
- source.x = destination.x - (j-centerX)*pitchX/1000
33
- source.y = destination.y + (k-centerY)*pitchY/1000
34
- ```
35
-
36
- Each tap must have exactly that `sourcePointNativeSensorMm`, the same instantaneous
37
- time, unique integer X/Y kernel indices, and finite nonnegative **W/m²/nm**.
38
- All taps, including zero-weight taps, must be supplied. Array order is irrelevant;
39
- results retain canonical wavelength/spatial/kernel order and owned source copies.
40
- No off-sensor support is clamped, mirrored, repeated or dropped. Missing support
41
- fails; it never triggers renormalization or a smaller blur kernel.
42
-
43
- ## Weighting and downstream handoff
44
-
45
- The output at one node is `sum(kernel.normalizedIntensity[i] * E_lambda(source_i))`.
46
- The #113 resolver owns kernel interpolation/normalization and its finite-support
47
- meaning. These weights are discrete unit-energy shape weights, not irradiance
48
- density, area, optical transmission, QE or shutter measures. Do not multiply them
49
- by kernel cell area a second time.
50
-
51
- `relativePupilThroughputFactor` is retained in each resolved PSF child envelope
52
- and is **not applied** by this adapter. The upstream optical-throughput path must
53
- own it exactly once. Likewise, do not independently add diffraction/defocus/other
54
- effects already included by `responseIncludes`, or pass already blurred input
55
- under a pre-PSF declaration. Declarations do not establish upstream execution.
56
-
57
- The existing irradiance reducer applies sensor aperture/AA/spectral measures
58
- once to the resulting pre-AA samples. Its returned `reduction` is diagnostic;
59
- when handing `irradianceSamples` to `calculateSensorEqeTemporalExposure()`, use
60
- the samples directly without multiplying the diagnostic reduction again. Compute
61
- this PSF adapter separately at each exact local shutter midpoint; the downstream
62
- sensor adapter validates response and operating range before integrating EQE
63
- rates. Existing compact temporal photo/dark/charge/RAW/file contracts stay intact.
64
-
65
- ## Explicit limits
66
-
67
- `psfRedistributionApplied` is true only for this named local approximation.
68
- `localShiftInvarianceEstablished`, `globalFieldEnergyConservationEstablished`
69
- and `sceneProviderExecutionVerified` remain false. A kernel resolved at the
70
- destination is not equivalent to spatially varying forward transport
71
- `E_out(q)=integral E_in(s)*h_s(q-s) ds`; depth/visibility changes within its support
72
- also require a richer solver. The supplied limitation/evidence remains visible.
73
- No calibrated photographic accuracy, combined uncertainty, infinite-tail
74
- convergence or production capability is asserted.
75
-
76
- The aggregate spatial × spectral × kernel input budget is 100,000 source nodes,
77
- checked before per-node PSF resolution. Existing PSF profile and sensor plan
78
- validity/coverage gates remain unchanged. Approximation output retains all child
79
- PSF evidence/uncertainty and explicit basis/spatial-model declarations.
80
-
81
- Tests use owned synthetic profiles: uniform light preserves irradiance independent
82
- of pupil throughput; an asymmetric affine field independently predicts inverse
83
- X/Y offsets; distinct wavelength shapes remain distinct; temporal sensor handoff
84
- matches SI photon/EQE expectations. Missing/duplicate/sparse/negative support,
85
- coordinate/time/basis/stage/model/evidence drift and work overflow reject.
86
-
87
- Root API **0.111.0 → 0.112.0**, model 0.1.0. No existing public contract is
88
- reinterpreted; package/POC/production/RAW/noise versions are unchanged. Historical
89
- capture/file replay keeps its stored API stamp. No dependency, third-party asset,
90
- network access or cost is introduced. At this introduction checkpoint, #16/#178/#112 were open and V1 was 25/32. They are now reviewed/merged; final conformance is complete.
@@ -1,20 +0,0 @@
1
- # Native sensor RAW frame attachment
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
6
- limits, full-native counting and parser preflight behavior.
7
-
8
- `createSensorRawFrame()` commits #14 `SensorRawCaptureSample` values alongside one immutable #15 capture. `parseSensorRawFrameInput()` validates the untrusted attachment boundary. Schema `0.1.0`, historical introduction root API `0.98.0`; package/POC/capture/production contracts stay unchanged. The attachment is merged and current root API is 1.0.1.
9
-
10
- The first slice accepts single-frame native-effective capture modes with an explicitly evidenced one-site-per-native-sample binding and periodic mosaic topology. The entire native frame must be provided in native row-major order, one sample per site. Absolute CFA phase, site/channel assignment, capture-mode/profile/readout identity and every per-site seed are preserved. RAW samples are never rotated, cropped, demosaiced, balanced or tone-mapped. Active capture/output geometry stays in the attached metadata; it never resets CFA phase.
11
-
12
- The 16-bit container holds integer RAW codes without re-quantization. Black and digital-saturation codes remain per-site metadata, with a positive span. Codes below black are retained; their black-subtracted normalized values can be negative. A code cannot exceed its declared digital maximum. Stored codes and normalization must agree exactly with the existing #14 formula. Physical and digital saturation flags remain distinct. This does not infer ADC bit depth, physical full well, a spectral camera color matrix, or calibrated sensor behavior.
13
-
14
- The frame's `producerBinding` is explicitly `caller-declared-capture-attachment`. Validation proves structural consistency, not that a caller actually ran the engine or that supplied linear planes were reconstructed from these RAW samples. Consumers must carry an actual same-capture producer/reconstruction handoff before claiming a paired JPEG. The attachment does not render pixels, manufacture RAW by masking RGB, or certify DNG/editor interoperability.
15
-
16
- Structural attachment is limited to 65,536 native samples; reference producer/reconstruction/export execution is limited to 4,096. External storage, streaming/high-resolution writers, grouped/remosaiced/layered/multi-frame modes and alternate RAW packing require separately explicit contracts. A new frame copies and freezes all records; caller-owned arrays remain mutable. This conservative reference implementation performs per-site authoritative binding validation and is not a 24/45/60 MP memory/performance claim.
17
-
18
- This is a prerequisite slice of #16. Remaining work includes canonical export metadata/pairing, DNG tag/color/WB mapping and specification/patent-notice review, an optional writer, same-RAW reconstruction through #112, standalone JPEG encoding, independent decode/Adobe acceptance and measured memory limits. TIFF/Linear DNG cannot replace the required genuine RAW DNG + standalone JPEG pair. #165 C2PA stays post-V1.
19
-
20
- Implementation and structural fixtures are independently authored. Fixtures contain declared synthetic code records and are not a sensor calibration or evidence of RAW-to-RGB numerical agreement. No new dependency, third-party material, IO, service or cost is introduced.
@@ -1,77 +0,0 @@
1
- # Capture-owned native sensor RAW producer
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- See [Reference RAW frame compatibility](RAW_FRAME_ENVELOPE.md) for stage-specific
6
- limits, full-native counting and parser preflight behavior.
7
-
8
- ## Temporal photo signal — root API 0.110.0
9
-
10
- Producer result schema **0.3.0** accepts both the original stationary EQE result
11
- and the distinct compact `eqe-temporal-photo-signal` record. The latter requires
12
- validated ordered midpoint rates and exact count sums, no stationarity fields,
13
- and matching `temporalIntegrationId` on dark charge. See
14
- [TEMPORAL_PHOTO_RAW.md](TEMPORAL_PHOTO_RAW.md) for construction, type compatibility,
15
- global/rolling paired-file acceptance and scientific limits. Noise/readout
16
- identities, native seeds and stationary arithmetic are unchanged.
17
-
18
- ## Signed electronic shadows — root API 0.106.0
19
-
20
- The required `photivra-native-raw-noise` capture model is now **0.2.0**, preserving the existing per-site seed schedule while binding corrected readout behavior. `simulateSensorRawCode()` provenance uses `sensor-raw-code-stochastic-readout` model **2.0.0**. Physical stored charge remains nonnegative; after Gaussian electronic read noise, the signal may be negative. Apply only the upper pre-ADC saturation threshold, then conversion gain and black pedestal, round-half-up quantization, and clamp to `[0, digitalSaturationCode]`. Below-black integer codes survive when they fit the unsigned ADC range. `lowerCodeClampApplied` is true only when the quantized code is below zero. A negative electronic signal is not negative stored charge or physical saturation.
21
-
22
- Earlier behavior clamped the electronic signal to zero before adding the black pedestal, biasing shadows and making below-black producer values impossible. Positive electronic signals retain their code math, but result provenance and capture noise identities change. Replay requests carrying producer noise model 0.1.0 fail closed. For a deliberate recomputation, recreate the capture with model 0.2.0, keep its original seed, preserve the old artifact as historical output and record changed model/API identity. Do not relabel old codes as newly generated codes. Existing archived RAW-frame attachments remain a separate structural contract and are not automatically regenerated by this correction. Producer/profile/frame schema versions and package/POC versions do not change; the historical section below describes the original handoff.
23
-
24
- `simulateSensorRawFrame()` connects existing sensor charge/capacity/stochastic/readout contracts to `createSensorRawFrame()`. It computes codes rather than accepting fabricated site codes or masking an independent RGB plane. The returned frame feeds existing same-RAW reconstruction and `createPhotographicExportPair()` without another ADC quantization or RNG pass. This closes a bounded producer handoff gap, not the complete physical production composer or #16/V1 acceptance.
25
-
26
- Input has `frame` (the existing RAW-frame metadata/profile input without samples) and dense `sites` in full native row-major order, limited to 4,096 sites. Only single-frame native-effective periodic CFA with exactly one native sample per color site is accepted. Grouped/remosaiced/multi-frame acquisition is rejected. Full native coverage remains unchanged by active crop, output crop or orientation. Each site provides untreated EQE photo/dark exposure results, additional charge/completeness inputs, charge sampling and capacity profiles, explicit operating state, explicit readout profile and regime. No profile is inferred from ISO or copied from a different channel/site.
27
-
28
- The parser checks new fields and photo/dark result fields against allowlists, normalizes evidence through existing provenance parsers, and delegates existing profile/completeness rules to their existing parsers. Runtime checks reject already sampled/clipped/ADC/WB/processed substitutions, A/W charge, inconsistent constant-rate products or temporal rate integrals, missing/reordered/sparse sites and stale CFA/channel/event identity. A stationarity/completeness declaration remains evidence supplied by the upstream producer, not independent verification of pixel truth. The incident-count domain requires expected photoelectrons not exceed expected photons; effective gain/carrier models outside that EQE domain require a separate contract.
29
-
30
- Omitting `exposureWindow` preserves the **global exposure window**: all local windows are exactly 0 to committed `shutterSeconds` from `first-opening-boundary-phase`, with exact nominal duration and site binding ID.
31
-
32
- An explicit `exposureWindow` supplies shutter mechanism, sourced nominal duration, and opening/closing schedules from the existing exposure-window contract. Nominal duration must exactly match committed `shutterSeconds`. The producer owns the full native timing rectangle and row-major sample centers `(x+0.5,y+0.5)`; caller-supplied raster, active crop or sample coordinates are rejected. Full-native boundary traversal must be supplied explicitly; an active crop never scales it. The existing engine timing calculation validates affine extrema over the entire native rectangle and computes each local start/end/duration. Every photo/dark/additional/completeness event must match that exact site window. Stationarity remains a declaration for each local event, not a conclusion from rolling timing. The optional `localExposureWindows` child result preserves timing assumptions, evidence and computed windows.
33
-
34
- This accepts stationary or explicitly integrated temporal per-site photo expectations under simultaneous or uniform-linear electronic/mechanical/EFCS boundaries; it does not execute moving/time-varying scene transport, predict rolling-shutter geometry, synchronize data readout, or activate reserved production stages. Multi-frame and non-one-to-one timing remain unsupported. The RAW-frame schema and export metadata remain unchanged: `shutterSeconds` is nominal, not a claim that every local site duration equals it. Persist the producer timing result separately when local-window replay evidence is required. Timing evidence and upstream charge origin remain caller declarations, not independently verified transport truth. Capacity uses the supplied dark-result temperature and explicit operating state, independently from ISO. The engine re-composes total photo/dark/additional expectations and checks evidence-backed completeness before assessing capacity.
35
-
36
- Capture noise model must equal `SENSOR_RAW_PRODUCER_NOISE_MODEL` (`photivra-native-raw-noise`, version 0.2.0). Noise realization ID stays unchanged. The versioned seed schedule is charge seed `(capture.seedUint32 + 2*n) mod 2^32`, read-noise seed `(capture.seedUint32 + 2*n + 1) mod 2^32`, for native row-major index n. Both identities are preserved per RAW site, including unsigned wrap. Seeds are distinct within a frame; this is deterministic ownership, **not proof of statistical stream independence**. Existing Poisson and normal sampling implementations are reused, with their existing numerical/model limitations. No backend/global randomness is used.
37
-
38
- Order delegates to existing APIs: accumulated-charge completeness → physical-capacity assessment → stochastic charge realization → scalar physical saturation → read noise → pre-ADC saturation → conversion gain → ADC quantization/digital clamp → native CFA sample → immutable frame. Expected charge is never overwritten by realized/clipped charge. Physical scalar, pre-ADC, lower-code and digital saturation, overflow diagnostics and child provenance remain separate. Scalar saturation is the existing approximation, not a blooming/neighbor-transfer model. Capacity uncertainty is not propagated into stochastic saturation or output codes.
39
-
40
- All sites share the existing frame contract's readout profile ID/regime; channel-specific profile payloads remain explicitly bound to their respective channels. The original per-channel profiles are revalidated for each site, never rewritten from one channel to another. Uint16 storage requires ADC depth ≤16 and a positive black-to-digital-white span. Larger or varying readout identity/regime contracts need a separate RAW-frame schema; the producer does not bypass those constraints.
41
-
42
- Result schema 0.3.0 declares `codeProducer: "engine-charge-capacity-noise-adc"`, `upstreamOrigin: "declared-eqe-and-dark-exposure-results"`, `upstreamRadiometryVerified:false`. Child results preserve their own evidence/status; aggregate provenance is approximation. The existing attachment retains `producerBinding:"caller-declared-capture-attachment"` for compatibility: structural frame validity is not cryptographic evidence of upstream execution. Archive replay of a frame does not establish engine origin; downstream export's conservative origin-verification flag stays false.
43
-
44
- Independent float capture planes are not RAW inputs, are not replaced, and are not claimed reconstructed from generated RAW. The same-RAW exporter must consume the returned frame, whose JPEG derives from those exact stored codes. Capture exposure/focus/source/noise/geometry remain intact; no prepared production context or physical scene radiance is claimed by this adapter.
45
-
46
- Tests independently compare every generated site with existing per-site primitives, verify deterministic unsigned seed wrap and native CFA through all orientations, separate saturation stages, reject stale/treated/missing inputs and inspect DNG strip bytes from generated RAW plus deterministic same-RAW JPEG. Synthetic fixture EQE/dark/count/capacity/readout data is independently authored, not a measured calibration or externally validated radiance pipeline. No runtime dependency, third-party code/data or new cost is added.
47
-
48
- This additive timing handoff updates root API 0.103.0 → 0.104.0 and producer result schema 0.1.0 → 0.2.0. Existing input without timing remains valid with identical RAW codes/seed ownership. Package/POC/capture/RAW-frame/production and noise schedule versions are unchanged. Human science/provenance review and new contribution-specific DCO are required. Remaining work includes independently bound scene/spectral-response→exposure production input, source execution and PSF, reserved production-stage activation, broader output sampling support, high-resolution limits and Adobe/open-editor acceptance. None is marked complete here.
49
-
50
- Example timing override (schedules refer to the full native raster):
51
-
52
- ```ts
53
- const result = simulateSensorRawFrame({
54
- frame,
55
- sites, // Each declared charge event must already match its computed local window.
56
- exposureWindow: {
57
- shutterMechanism: "electronic",
58
- nominalExposureDurationSeconds: { value: frame.capture.exposure.shutterSeconds, unit: "s", evidence },
59
- opening: {
60
- kind: "uniform-linear-native-scan",
61
- directionNative: { value: "top-to-bottom", evidence },
62
- traversalDurationSeconds: { value: 0.001, unit: "s", evidence }
63
- },
64
- closing: {
65
- kind: "uniform-linear-native-scan",
66
- directionNative: { value: "top-to-bottom", evidence },
67
- traversalDurationSeconds: { value: 0.001, unit: "s", evidence }
68
- }
69
- }
70
- });
71
- ```
72
-
73
- The 1 ms traversal is an illustrative declared approximation, not camera calibration. Changing it requires corresponding per-site exposure results; this API does not rescale old charge counts.
74
-
75
- ## Irradiance-to-photo-exposure composition
76
-
77
- [`calculateSensorEqeLocalExposure()`](SENSOR_EQE_LOCAL_EXPOSURE.md) now produces the existing `charge.photoSignal` value from explicit irradiance nodes through response validity, EQE and stationary local integration. It retains child envelopes and declares scene/optics origin unverified. Dark/completeness and readout inputs remain explicit; this does not activate production stages or change the producer schema.
@@ -1,23 +0,0 @@
1
- # Signal cross-domain conformance (#131B)
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- `test/signal-conformance.test.ts` independently covers merged public APIs without consuming unmerged capture, output, optics or tier work. It complements the geometric conformance draft rather than depending on it. The canonical #130 fixture supplies wavelength and reference aperture/shutter/ISO settings; its source irradiance is **not** silently treated as detector energy.
6
-
7
- The explicit thought experiment supplies 4e-17 J already incident at one measurement region, constant test QE 0.5 and independent RMS read noise 3 electrons. These are Photivra-owned illustrative inputs, not calibrated equipment values. Vacuum wavelength is declared for this analytic variant. No photosite area is inferred from image sampling pitch, and no continuous spectral density is reinterpreted as a delta line.
8
-
9
- Independent expectations use exact SI h and c, E_photon = hc/lambda, mean electrons = incident energy / E_photon × QE, and SNR = mean electrons / sqrt(mean electrons + read noise squared). Relative optical exposure scales the supplied reference energy only under the explicitly stationary ideal t/N² thought experiment.
10
-
11
- Covered invariants:
12
-
13
- - Fractional mean electron counts survive without rounding; repeated evaluation is exact and deterministic.
14
- - Doubling duration doubles mean signal but increases shot-limited SNR by sqrt(2), not 2.
15
- - Half the exposure duration plus double nominal ISO preserves nominal rendered exposure, but not mean physical signal or signal-to-noise ratio. ISO does not create photons.
16
- - At fixed supplied energy, doubling vacuum wavelength doubles photon/electron expectations **only for this declared constant-QE experiment**, not a real sensor spectral response claim.
17
- - Zero QE produces JSON-safe zero SNR/null dB; invalid photon counts fail before downstream noise calculation.
18
-
19
- Normalized floating-point ratios use 13-decimal-place tolerances to avoid absolute tolerances inappropriate for joules around 1e-19. This is arithmetic/regression evidence, not a quantified physical uncertainty.
20
-
21
- This suite intentionally does not authorize a production radiance-to-RAW path. Spectral quadrature, response applicability, collection area, local exposure/stationarity, dark current, full-well, stochastic realizations, analog/ADC clipping and reconstruction keep their existing separate gates. The primitive calculation provenance does not upgrade these illustrative inputs to calibration. It does not exercise a sensor temperature or real-camera ISO mode.
22
-
23
- No API/runtime/version/dependency change. #131 closed through reviewed/signed PR #206; the final integrated conformance suite covers merged paths, outputs, presets and performance dispositions. This earlier slice remains independent evidence.
@@ -1,65 +0,0 @@
1
- # Authoritative simulated capture: #15A/#15B
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- The container commits a format-neutral float master manifest before tone mapping/LDR conversion. It does not itself generate or convert pixels. The separate [#15B color API](CAPTURE_COLOR.md) converts supported planes and [#15C encoding API](LINEAR_CAPTURE_ENCODING.md) quantizes them without mutating the master. TIFF/DNG serialization and production-stage activation remain separate. #15, #112 and #16 are merged. Their explicit adapters own rendering and paired export; the container alone performs neither.
6
-
7
- ## Image state and storage
8
-
9
- `createSimulatedCapture()` validates, copies and deeply freezes input. Its calculated provenance describes structural commitment; upstream model status/evidence identities are preserved independently, never upgraded to calibrated/radiometry-ready.
10
-
11
- Planes have separate IDs/image-state IDs, exact raster binding and co-sited, tightly interleaved channels. Row order is top-left origin, +X right/+Y down. Native CFA/mosaic semantics are not inferred from multiple channels.
12
-
13
- | State | Required meaning |
14
- | --- | --- |
15
- | scene-referred-xyz | X,Y,Z order; explicit cie-1931-2-degree-xyz profile 1.0.0 and normalized encoding white |
16
- | virtual-sensor-channels | Declared channels/source profile; colorimetric transform/encoding white unresolved |
17
- | color-transformed-linear-rgb | red,green,blue order; encoding profile/white and explicit linear-color transform history |
18
-
19
- Samples are relative linear values normalized by referenceWhiteValue, not absolute radiance, photons, electrons or measured commercial-camera RGB. Finite negative values/headroom remain unchanged; NaN/Infinity and sparse arrays fail. Inline signed zero becomes ordinary zero for semantic serialization.
20
-
21
- Inline Float64-valued JavaScript number arrays have a one-million-sample aggregate budget. Large images use external-float32/64 references: IEEE 754 little-endian scalars, no header/padding, tightly interleaved row/channel order, complete-plane sample count, opaque public artifact ID and lowercase SHA-256 over exact bytes. No path/URL/runtime IO is introduced. The engine does not read/verify external bytes, finite values, digest or source quality; a future loader must do so before consuming samples. Declared storage precision is not an assertion about renderer precision.
22
-
23
- XYZ observer identity documents meaning without spectral integration or copied color tables. RGB profile references are preserved, not resolved into a transform by #15A. A serializer cannot infer color coefficients from a profile name. `resolveSimulatedCapturePlane()` requires the exact requested image state.
24
-
25
- ## Geometry and deterministic commitment
26
-
27
- Reuse of ResolveCaptureGeometryInput preserves native, active, oriented and output geometry, off-center regions and four orientations. Planes must match oriented active capture or output dimensions. Exposure/focal metadata and finite/infinity focus remain explicit. The existing diagonal equivalent-focal-length calculator uses active physical capture; output crop never rewrites it.
28
-
29
- Scene time is seconds on the producer's scene clock. Fixed uint32 noise seed, realization/model identity, source checksums, public profile/evidence IDs and engine API version are retained. A seed alone does not prove pixel reproduction; the container does not rerun a renderer/noise generator.
30
-
31
- `parseSimulatedCapture()` recomputes and verifies derived geometry/focal equivalence and preserves historical creator API identity. `serializeSimulatedCapture()` emits normalized allowlisted JSON independent of input object property order; list order remains semantic. This is a manifest, not TIFF/DNG or a new cryptographic semantic hash.
32
-
33
- ## WB, whites and saturation
34
-
35
- `createCaptureWhiteBalanceIntent()` consumes #108 resolved state and copies public state/profile identity, source, lock and gains; measurement/debug/free-text extras are discarded. It introduces no AWB estimator or true-illumination oracle:
36
-
37
- ```ts
38
- import { resolveManualWhiteBalance, createCaptureWhiteBalanceIntent } from "@photivra/engine";
39
- const state = resolveManualWhiteBalance({
40
- stateId: "wb-1", channelGains: { red: 2, green: 1, blue: 0.5 }
41
- });
42
- const intent = createCaptureWhiteBalanceIntent({ state });
43
- ```
44
-
45
- Intent and plane application are separate: intent-only, applied-rgb-gains, applied-chromatic-adaptation or not-applicable. Applied gains require compatible RGB channels/resolved intent. Applied adaptation requires adopted white, transformed RGB and explicit adaptation history, independently of RGB intent. Recording does not verify upstream application; the separate #15B API performs actual conversion. Camera RGB gains cannot be directly declared applied to XYZ.
46
-
47
- Adopted white and encoding white remain separate normalized XYZ records (Y=1, positive X/Z). Null adopted white is unresolved, not an implicit D65/encoding white. No single physically unique white is claimed under mixed illumination.
48
-
49
- Source dynamic-range history is unknown, no-loss-declared or upstream-clipped. Float64 cannot recover prior clipping. Capture saturation is independently unmodeled or a declared virtual white level/upstream clipped-sample count. Reference white, capture saturation, future integer limits, rendering exposure and display white are separate. This API neither clamps samples nor infers clipped counts from values equal to white.
50
-
51
- ## Public metadata and limits
52
-
53
- Unknown fields fail at capture/source/geometry/exposure/model/plane/transform/storage/WB-manifest boundaries. Public opaque IDs/versions permit ASCII alphanumerics plus dot/underscore/colon/hyphen, maximum 128 characters. Paths, slash-bearing URLs and emails fail. No private paths, prompts, internal URLs, proprietary manifests, names/emails, precise locations or hidden debug fields are supported.
54
-
55
- Producers must select genuinely public, non-personal IDs. Syntax cannot prove an otherwise valid ID is non-sensitive. Public-ID registry/provenance review remains the producer's responsibility; no arbitrary free-text metadata bag exists.
56
-
57
- ## Versioning and evidence
58
-
59
- Schema is 0.2.0; legacy 0.1.0 archives normalize to 0.2.0 while preserving creator API identity. The new applied-chromatic-adaptation state cannot be declared in a 0.1.0 archive. Re-serialization emits the current schema, so archive bytes change on migration. Root API advances main 0.95.0 to 0.96.0. Package, POC and production contracts are unchanged. This independent branch consumes no pending #157/#158 code; reconcile API identity in final merge order.
60
-
61
- Tests reuse #130's canonical fixture for geometry/settings/seed, and cover unclamped data, immutable/canonical archive round trips, four orientations/off-center capture, active/output equivalence, WB sanitization/intent/application, image-state substitution, RGB history, large external planes, saturation distinction, private/malformed metadata, infinity and historical identity.
62
-
63
- Implementation/tests are independently authored; no third-party code, calibration data, color tables or protected prose included. Factual references: [CIE 1931 system](https://www.cie.co.at/eilvterm/17-23-045) establishes XYZ/observer semantics; [Academy encoding documentation](https://docs.acescentral.com/encodings/introduction/) distinguishes linear/interchange and downstream encoding. Neither provides coefficients or imposes ACES.
64
-
65
- AI-assisted draft requires substantive human science/provenance review and DCO certification under CONTRIBUTING.md/PROVENANCE.md before inclusion.
@@ -1,234 +0,0 @@
1
- # Camera Shake and Stabilization
2
-
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
-
5
- Photivra separates deterministic projection geometry from a deliberately simplified educational stabilization model.
6
-
7
- ## Controlled camera shake
8
-
9
- `estimateCameraShakeBlur()` accepts constant camera angular velocity around two axes:
10
-
11
- - yaw, in radians per second;
12
- - pitch, in radians per second.
13
-
14
- For shutter-open duration `t`, each angular displacement is:
15
-
16
- `theta = angularVelocity * t`
17
-
18
- The image-plane component is projected as:
19
-
20
- `d = v * tan(theta)`
21
-
22
- where `v` is the projection distance in millimetres.
23
-
24
- Projection has two modes:
25
-
26
- - without `focusDistanceM`, `v` is nominal focal length (the infinity-focus compatibility approximation);
27
- - with `focusDistanceM`, `v` is the ideal Gaussian thin-lens image distance for the selected focus plane.
28
-
29
- When pixel pitch is supplied, the same displacement is also reported in sensor pixels.
30
-
31
- The returned X/Y shake components are expressed in the primitive's sensor/image-plane axes. `estimateCameraShakeBlur()` does not accept `CaptureOrientation` and does not rotate its vector into portrait/oriented output coordinates. A caller combining this primitive with the capture-orientation layer must explicitly transform the vector with the orientation helpers.
32
-
33
- The supplied shake profile is synthetic input. The model is not an empirical statement about how much a particular photographer shakes.
34
-
35
- ### Spatial limitation and the separate rotation primitive
36
-
37
- `estimateCameraShakeBlur()` intentionally remains one global image-plane yaw/pitch vector for backwards compatibility with the existing stabilization-equivalent teaching model.
38
-
39
- The root engine now separately exposes `calculateCameraRotationImageMapping()`, which models field-position-dependent **pure camera rotation** for yaw/pitch/roll at arbitrary physical time from exposure start.
40
-
41
- The two APIs do not share sign semantics:
42
-
43
- - the legacy shake estimator preserves its historical direct image-plane displacement convention;
44
- - the spatial rotation primitive represents physical camera rotation using right-hand pitch/yaw/roll, then maps a stationary world ray through the inverse camera rotation.
45
-
46
- Do not substitute one result for the other without an explicit migration.
47
-
48
- The spatial primitive does not apply stabilization stops. The separate time-domain stabilization system now provides generic synthetic rotational IBIS/OIS/coordinated correction; translation/parallax and mechanism-specific ray-geometry effects remain separate.
49
-
50
- ## Time-domain physical stabilization system
51
-
52
- The #97 foundation adds a separate, versioned physical-stabilization model for time-varying rotational disturbance.
53
-
54
- It does **not** replace or reinterpret the legacy `estimateCameraShakeBlur()` API.
55
-
56
- ### Disturbance trajectory
57
-
58
- `parseStabilizationDisturbanceTrajectory()` describes camera rotational displacement over the same capture-reference clock used by #12:
59
-
60
- `first-opening-boundary-phase`
61
-
62
- The first schema requires:
63
-
64
- - a zero-displacement sample at `t = 0`;
65
- - strictly increasing sample times;
66
- - explicit pitch/yaw/roll displacement in radians;
67
- - no embedded subject motion;
68
- - no embedded camera translation;
69
- - no embedded support/tripod state.
70
-
71
- This preserves the architecture:
72
-
73
- ```text
74
- physical disturbance -> stabilization response -> residual rotation -> exposure-time image formation
75
- ```
76
-
77
- Stable support remains simply an explicit zero disturbance trajectory. It does not automatically switch stabilization on or off.
78
-
79
- ### Generic physical architectures
80
-
81
- `parseStabilizationSystemProfile()` supports generic synthetic:
82
-
83
- - `off`;
84
- - `sensor-shift`;
85
- - `lens-optical`;
86
- - `coordinated-physical`.
87
-
88
- Schema 0.1.0 deliberately does not claim branded camera/lens behavior.
89
-
90
- Each corrected axis can declare:
91
-
92
- - correction gain from 0 through 1;
93
- - response latency in seconds;
94
- - maximum image-equivalent angular correction in radians.
95
-
96
- The first dynamic response is:
97
-
98
- ```text
99
- requested correction(t)
100
- = gain × disturbance(t - latency)
101
-
102
- applied correction
103
- = symmetric clamp(requested correction, angular limit)
104
-
105
- residual
106
- = current disturbance(t) - applied correction
107
- ```
108
-
109
- Before the latency interval has elapsed, the delayed measurement is zero.
110
-
111
- This is an explicit generic approximation. It is not a CIPA stop-rating conversion, control-loop identification, or commercial IBIS/OIS calibration.
112
-
113
- ### Coordinated body + lens behavior
114
-
115
- A `coordinated-physical` profile includes explicit body/lens allocation fractions that sum to one.
116
-
117
- Those fractions describe ownership of **one total correction**. The engine does not apply body correction and lens correction independently and then add them again.
118
-
119
- This prevents coordinated stabilization from double-counting correction.
120
-
121
- ### Panning
122
-
123
- The model never infers pan intent.
124
-
125
- A profile may explicitly use:
126
-
127
- `declared-axis-bypass`
128
-
129
- for one pitch/yaw/roll axis. Correction on that axis is then suppressed while the other declared axes continue to use the selected response.
130
-
131
- ### Correction limits
132
-
133
- Angular travel/range limits are explicit.
134
-
135
- If requested correction exceeds an axis limit, the applied correction is clamped and the result reports `correctionLimitReached: true`.
136
-
137
- The engine does not produce unlimited correction merely because a profile has high gain.
138
-
139
- ### Capture-time sampling
140
-
141
- `calculateStabilizedCaptureTemporalSamples()` evaluates stabilization at deterministic midpoint nodes inside each committed #12 local exposure window.
142
-
143
- This is especially important for rolling/local exposure timing: two native sensor positions may evaluate the same disturbance/stabilizer at different capture times.
144
-
145
- Sensor **data-readout timing is not used as exposure timing**.
146
-
147
- The result reports disturbance, applied correction and residual rotation at each node. It does not itself calculate:
148
-
149
- - image-plane mapping;
150
- - radiance;
151
- - blur kernels;
152
- - PSF;
153
- - final pixels.
154
-
155
- Those remain downstream image-formation responsibilities.
156
-
157
- ### Explicit boundaries
158
-
159
- The first time-domain model does not include:
160
-
161
- - camera translation/parallax correction;
162
- - sensor-shift position within the lens image circle;
163
- - OIS lens-group ray-geometry changes;
164
- - spontaneous stabilizer drift;
165
- - settling/recentering transients beyond declared latency;
166
- - inferred panning;
167
- - support/tripod auto-detection;
168
- - shutter shock or wind/floor vibration generation;
169
- - digital/electronic stabilization.
170
-
171
- Digital stabilization remains downstream geometric warp/crop/resampling work and must preserve any field-of-view/crop consequences rather than being represented as physical residual camera motion.
172
-
173
- ## Ideal stable support boundary
174
-
175
- Photivra's current **ideal stable support** is an explicit zero-disturbance boundary condition, not a separate blur equation and not a claim that real tripods are vibration-free.
176
-
177
- Represent the boundary by supplying:
178
-
179
- ```ts
180
- angularVelocityRadPerSec: {
181
- yaw: 0,
182
- pitch: 0
183
- }
184
- ```
185
-
186
- With this explicit input:
187
-
188
- - unstabilized shake displacement is exactly zero;
189
- - stabilized shake displacement is also exactly zero for any `stabilizationStopsEquivalent`;
190
- - focal length, shutter duration, finite-focus projection, infinity/pinhole projection, and pixel pitch do not create motion from a zero-motion input;
191
- - subject motion remains independent;
192
- - physical orientation/output transforms preserve the zero vector.
193
-
194
- Do **not** represent stable support by an arbitrarily large stabilization-stop value. Stabilization attenuates supplied camera motion; it is not the source of the stable-support state.
195
-
196
- This boundary also does not silently remove disturbances that are not currently modeled, including shutter shock, release-button impulse, wind, floor/ground vibration, support flex/resonance, or future tripod dynamics. Those effects must enter through their own explicit motion/support models.
197
-
198
- Omitting the camera-shake input is semantically different from explicitly supplying zero motion: omission means the effect/input was not supplied, while explicit zero motion states the modeled stable-support boundary.
199
-
200
- Real-camera policies about whether IBIS/OIS should be enabled on a tripod are equipment/mode-specific and remain separate from this generic boundary.
201
-
202
- ## Equivalent stabilization stops
203
-
204
- The model accepts `stabilizationStopsEquivalent`.
205
-
206
- For educational exploration, the supplied angular displacement is attenuated by:
207
-
208
- `residualMotionFactor = 2 ^ (-stops)`
209
-
210
- For example, 3 equivalent stops produces a residual factor of 1/8 for the controlled synthetic shake profile.
211
-
212
- This attenuation is an **approximation**. It is useful for demonstrating the effect of reducing camera motion, but it is not a model of a particular IBIS/OIS implementation and does not imply that a real stabilization system deterministically reduces every motion path by that factor.
213
-
214
- Because the returned result combines this attenuation assumption with the geometric projection, the calculation envelope uses `provenance.kind = "approximation"`.
215
-
216
- ## CIPA reference
217
-
218
- CIPA publishes **DC-011-2024** for measurement and description of image-stabilization performance.
219
-
220
- Photivra is not affiliated with, sponsored by, endorsed by, certified by, or claimed to comply with CIPA. The current educational approximation does not implement the CIPA test method.
221
-
222
- Reference:
223
-
224
- - CIPA DC-011-2024 overview: https://www.cipa.jp/e/std/image-stabilization.html
225
-
226
- Only the public standard identifier and high-level terminology are referenced here; CIPA logos and protected standard content are not incorporated into this project.
227
-
228
- ## Not yet modeled
229
-
230
- The legacy stabilization-equivalent model intentionally remains limited to its original teaching contract. The separate #97 system adds rotational roll-capable time-domain correction, latency, axis limits, explicit panning-axis bypass, coordination, and #12 local-exposure sampling without changing legacy results.
231
-
232
- Still outside the current stabilization foundations are translational camera-shake correction, frequency-domain control-loop calibration, photographer-specific empirical motion, shutter-button impulse generation, realistic tripod/support mechanics, focal-length-dependent real-equipment calibration, mechanism-specific IBIS/OIS ray geometry, automatic pan detection, and digital-stabilization crop/warp behavior.
233
-
234
- Those capabilities should remain separate, documented models rather than being silently folded into either stabilization API.