@photivra/engine 1.5.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1085) hide show
  1. package/CHANGELOG.md +414 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/diffraction-provider.d.ts +30 -0
  236. package/dist/facade/diffraction-provider.js +127 -0
  237. package/dist/facade/diffraction-provider.js.map +1 -0
  238. package/dist/facade/host-yield.d.ts +7 -0
  239. package/dist/facade/host-yield.js +19 -0
  240. package/dist/facade/host-yield.js.map +1 -0
  241. package/dist/facade/scene-radiance.d.ts +117 -0
  242. package/dist/facade/scene-radiance.js +205 -0
  243. package/dist/facade/scene-radiance.js.map +1 -0
  244. package/dist/facade/simulate-capture.d.ts +363 -0
  245. package/dist/facade/simulate-capture.js +1281 -0
  246. package/dist/facade/simulate-capture.js.map +1 -0
  247. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  248. package/dist/gpu/chart-radiance-gpu.js +176 -0
  249. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  250. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  251. package/dist/gpu/image-kernel-accelerator.js +720 -0
  252. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  253. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  254. package/dist/gpu/image-kernel-execution.js +84 -0
  255. package/dist/gpu/image-kernel-execution.js.map +1 -0
  256. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  257. package/dist/gpu/sensor-stage-gpu.js +317 -0
  258. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  259. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  260. package/dist/gpu/temporal-sum-gpu.js +150 -0
  261. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  262. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  263. package/dist/gpu/webgpu-runtime.js +215 -0
  264. package/dist/gpu/webgpu-runtime.js.map +1 -0
  265. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  266. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  267. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  268. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  269. package/dist/gpu/wgsl-kernels.js +365 -0
  270. package/dist/gpu/wgsl-kernels.js.map +1 -0
  271. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  272. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  273. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  274. package/dist/index.d.ts +91 -25
  275. package/dist/index.js +60 -15
  276. package/dist/index.js.map +1 -1
  277. package/dist/motion/camera-rotation.d.ts +92 -40
  278. package/dist/motion/camera-rotation.js +84 -47
  279. package/dist/motion/camera-rotation.js.map +1 -1
  280. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  281. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  282. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  283. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  284. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  285. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  286. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  287. package/dist/motion/capture-rotation-trajectory.js +36 -26
  288. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  289. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  290. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  291. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  292. package/dist/motion/extended-object-projection.d.ts +19 -16
  293. package/dist/motion/extended-object-projection.js +38 -18
  294. package/dist/motion/extended-object-projection.js.map +1 -1
  295. package/dist/motion/projected-motion.d.ts +18 -17
  296. package/dist/motion/projected-motion.js +25 -17
  297. package/dist/motion/projected-motion.js.map +1 -1
  298. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  299. package/dist/motion/temporal-exposure-sum.js +141 -0
  300. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  301. package/dist/motion/video-sequence.d.ts +111 -0
  302. package/dist/motion/video-sequence.js +179 -0
  303. package/dist/motion/video-sequence.js.map +1 -0
  304. package/dist/optics/aperture.d.ts +14 -15
  305. package/dist/optics/aperture.js +13 -11
  306. package/dist/optics/aperture.js.map +1 -1
  307. package/dist/optics/atmospheric-haze.d.ts +83 -0
  308. package/dist/optics/atmospheric-haze.js +113 -0
  309. package/dist/optics/atmospheric-haze.js.map +1 -0
  310. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  311. package/dist/optics/brown-conrady-distortion.js +291 -0
  312. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  313. package/dist/optics/circle-of-confusion.d.ts +10 -10
  314. package/dist/optics/circle-of-confusion.js +15 -11
  315. package/dist/optics/circle-of-confusion.js.map +1 -1
  316. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  317. package/dist/optics/complex-pupil-psf.js +190 -98
  318. package/dist/optics/complex-pupil-psf.js.map +1 -1
  319. package/dist/optics/depth-of-field.d.ts +25 -15
  320. package/dist/optics/depth-of-field.js +67 -27
  321. package/dist/optics/depth-of-field.js.map +1 -1
  322. package/dist/optics/diffraction-psf-profile.d.ts +118 -0
  323. package/dist/optics/diffraction-psf-profile.js +252 -0
  324. package/dist/optics/diffraction-psf-profile.js.map +1 -0
  325. package/dist/optics/diffraction.d.ts +14 -13
  326. package/dist/optics/diffraction.js +14 -10
  327. package/dist/optics/diffraction.js.map +1 -1
  328. package/dist/optics/focus-breathing.d.ts +88 -27
  329. package/dist/optics/focus-breathing.js +114 -23
  330. package/dist/optics/focus-breathing.js.map +1 -1
  331. package/dist/optics/focus-state.d.ts +18 -18
  332. package/dist/optics/focus-state.js +21 -15
  333. package/dist/optics/focus-state.js.map +1 -1
  334. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  335. package/dist/optics/front-of-lens-filter.js +259 -88
  336. package/dist/optics/front-of-lens-filter.js.map +1 -1
  337. package/dist/optics/illumination-vignetting.d.ts +16 -17
  338. package/dist/optics/illumination-vignetting.js +40 -17
  339. package/dist/optics/illumination-vignetting.js.map +1 -1
  340. package/dist/optics/irradiance-convolution.d.ts +59 -0
  341. package/dist/optics/irradiance-convolution.js +138 -0
  342. package/dist/optics/irradiance-convolution.js.map +1 -0
  343. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  344. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  345. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  346. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  347. package/dist/optics/lens-psf-kernels.js +175 -0
  348. package/dist/optics/lens-psf-kernels.js.map +1 -0
  349. package/dist/optics/lens-psf-profile.d.ts +78 -46
  350. package/dist/optics/lens-psf-profile.js +335 -124
  351. package/dist/optics/lens-psf-profile.js.map +1 -1
  352. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  353. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  354. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  355. package/dist/optics/polygon-diffraction.d.ts +80 -23
  356. package/dist/optics/polygon-diffraction.js +130 -25
  357. package/dist/optics/polygon-diffraction.js.map +1 -1
  358. package/dist/optics/profile-contract.d.ts +5 -6
  359. package/dist/optics/profile-contract.js +14 -11
  360. package/dist/optics/profile-contract.js.map +1 -1
  361. package/dist/optics/psf-foundation.d.ts +23 -23
  362. package/dist/optics/psf-foundation.js +24 -21
  363. package/dist/optics/psf-foundation.js.map +1 -1
  364. package/dist/optics/pupil-vignetting.d.ts +118 -0
  365. package/dist/optics/pupil-vignetting.js +264 -0
  366. package/dist/optics/pupil-vignetting.js.map +1 -0
  367. package/dist/optics/radial-distortion.d.ts +34 -33
  368. package/dist/optics/radial-distortion.js +37 -30
  369. package/dist/optics/radial-distortion.js.map +1 -1
  370. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  371. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  372. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  373. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  374. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  375. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  376. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  377. package/dist/optics/sensor-aperture-rays.js +32 -14
  378. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  379. package/dist/optics/sensor-environment-query.d.ts +81 -16
  380. package/dist/optics/sensor-environment-query.js +145 -12
  381. package/dist/optics/sensor-environment-query.js.map +1 -1
  382. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  383. package/dist/optics/sensor-psf-quadrature.js +18 -11
  384. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  385. package/dist/optics/sensor-psf-support.d.ts +8 -6
  386. package/dist/optics/sensor-psf-support.js +8 -5
  387. package/dist/optics/sensor-psf-support.js.map +1 -1
  388. package/dist/optics/stray-light.d.ts +22 -19
  389. package/dist/optics/stray-light.js +18 -12
  390. package/dist/optics/stray-light.js.map +1 -1
  391. package/dist/optics/thin-lens.d.ts +10 -9
  392. package/dist/optics/thin-lens.js +12 -8
  393. package/dist/optics/thin-lens.js.map +1 -1
  394. package/dist/optics/zernike-wavefront.d.ts +154 -0
  395. package/dist/optics/zernike-wavefront.js +352 -0
  396. package/dist/optics/zernike-wavefront.js.map +1 -0
  397. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  398. package/dist/output/capture-corrected-sdr.js +16 -8
  399. package/dist/output/capture-corrected-sdr.js.map +1 -1
  400. package/dist/output/capture-geometry.d.ts +34 -36
  401. package/dist/output/capture-geometry.js +52 -32
  402. package/dist/output/capture-geometry.js.map +1 -1
  403. package/dist/output/capture-sdr.d.ts +7 -6
  404. package/dist/output/capture-sdr.js +11 -8
  405. package/dist/output/capture-sdr.js.map +1 -1
  406. package/dist/output/crop.d.ts +22 -6
  407. package/dist/output/crop.js +40 -6
  408. package/dist/output/crop.js.map +1 -1
  409. package/dist/output/geometric-transforms.d.ts +60 -23
  410. package/dist/output/geometric-transforms.js +111 -24
  411. package/dist/output/geometric-transforms.js.map +1 -1
  412. package/dist/output/lens-corrections.d.ts +27 -19
  413. package/dist/output/lens-corrections.js +29 -13
  414. package/dist/output/lens-corrections.js.map +1 -1
  415. package/dist/output/native-capture-sdr.d.ts +71 -16
  416. package/dist/output/native-capture-sdr.js +190 -33
  417. package/dist/output/native-capture-sdr.js.map +1 -1
  418. package/dist/output/png-encoder.d.ts +65 -0
  419. package/dist/output/png-encoder.js +461 -0
  420. package/dist/output/png-encoder.js.map +1 -0
  421. package/dist/output/print-contrast-reference.d.ts +10 -9
  422. package/dist/output/print-contrast-reference.js +10 -8
  423. package/dist/output/print-contrast-reference.js.map +1 -1
  424. package/dist/output/print-detail.d.ts +18 -17
  425. package/dist/output/print-detail.js +12 -10
  426. package/dist/output/print-detail.js.map +1 -1
  427. package/dist/output/print-jpeg.d.ts +26 -5
  428. package/dist/output/print-jpeg.js +117 -50
  429. package/dist/output/print-jpeg.js.map +1 -1
  430. package/dist/output/print-plan.d.ts +19 -19
  431. package/dist/output/print-plan.js +11 -10
  432. package/dist/output/print-plan.js.map +1 -1
  433. package/dist/output/print-region-statistics.d.ts +14 -15
  434. package/dist/output/print-region-statistics.js +11 -11
  435. package/dist/output/print-region-statistics.js.map +1 -1
  436. package/dist/output/sdr-rendering.d.ts +48 -10
  437. package/dist/output/sdr-rendering.js +114 -25
  438. package/dist/output/sdr-rendering.js.map +1 -1
  439. package/dist/output/subject-framing-crop.d.ts +6 -10
  440. package/dist/output/subject-framing-crop.js +23 -13
  441. package/dist/output/subject-framing-crop.js.map +1 -1
  442. package/dist/processing/demosaic.d.ts +90 -0
  443. package/dist/processing/demosaic.js +275 -0
  444. package/dist/processing/demosaic.js.map +1 -0
  445. package/dist/processing/denoise.d.ts +68 -0
  446. package/dist/processing/denoise.js +214 -0
  447. package/dist/processing/denoise.js.map +1 -0
  448. package/dist/processing/focus-stacking.d.ts +17 -0
  449. package/dist/processing/focus-stacking.js +80 -0
  450. package/dist/processing/focus-stacking.js.map +1 -0
  451. package/dist/processing/hdr.d.ts +54 -0
  452. package/dist/processing/hdr.js +172 -0
  453. package/dist/processing/hdr.js.map +1 -0
  454. package/dist/processing/image-ops.d.ts +66 -0
  455. package/dist/processing/image-ops.js +192 -0
  456. package/dist/processing/image-ops.js.map +1 -0
  457. package/dist/processing/panorama.d.ts +51 -0
  458. package/dist/processing/panorama.js +305 -0
  459. package/dist/processing/panorama.js.map +1 -0
  460. package/dist/processing/processing-task.d.ts +85 -0
  461. package/dist/processing/processing-task.js +164 -0
  462. package/dist/processing/processing-task.js.map +1 -0
  463. package/dist/processing/tone-mapping.d.ts +69 -0
  464. package/dist/processing/tone-mapping.js +310 -0
  465. package/dist/processing/tone-mapping.js.map +1 -0
  466. package/dist/schema/camera.d.ts +5 -4
  467. package/dist/schema/illumination-spectral.d.ts +13 -19
  468. package/dist/schema/illumination-spectral.js +23 -19
  469. package/dist/schema/illumination-spectral.js.map +1 -1
  470. package/dist/schema/illumination-temporal.d.ts +12 -15
  471. package/dist/schema/illumination-temporal.js +43 -28
  472. package/dist/schema/illumination-temporal.js.map +1 -1
  473. package/dist/schema/illumination.d.ts +5 -4
  474. package/dist/schema/illumination.js +55 -20
  475. package/dist/schema/illumination.js.map +1 -1
  476. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  477. package/dist/schema/scene-radiance-temporal.js +26 -23
  478. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  479. package/dist/schema/scene-radiance.d.ts +17 -17
  480. package/dist/schema/scene-radiance.js +56 -34
  481. package/dist/schema/scene-radiance.js.map +1 -1
  482. package/dist/schema/scene.d.ts +14 -13
  483. package/dist/schema/validation.d.ts +0 -1
  484. package/dist/schema/validation.js +17 -15
  485. package/dist/schema/validation.js.map +1 -1
  486. package/dist/sensor/accumulated-charge.d.ts +45 -64
  487. package/dist/sensor/accumulated-charge.js +41 -47
  488. package/dist/sensor/accumulated-charge.js.map +1 -1
  489. package/dist/sensor/architecture.d.ts +22 -25
  490. package/dist/sensor/architecture.js +17 -16
  491. package/dist/sensor/architecture.js.map +1 -1
  492. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  493. package/dist/sensor/camera-saturation-capacity.js +36 -34
  494. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  495. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  496. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  497. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  498. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  499. package/dist/sensor/capture-mode-timing.js +24 -21
  500. package/dist/sensor/capture-mode-timing.js.map +1 -1
  501. package/dist/sensor/capture-mode.d.ts +28 -30
  502. package/dist/sensor/capture-mode.js +33 -31
  503. package/dist/sensor/capture-mode.js.map +1 -1
  504. package/dist/sensor/color-sampling.d.ts +30 -33
  505. package/dist/sensor/color-sampling.js +32 -37
  506. package/dist/sensor/color-sampling.js.map +1 -1
  507. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  508. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  509. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  510. package/dist/sensor/dark-current.d.ts +53 -49
  511. package/dist/sensor/dark-current.js +87 -46
  512. package/dist/sensor/dark-current.js.map +1 -1
  513. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  514. package/dist/sensor/environment-photo-signal.js +127 -46
  515. package/dist/sensor/environment-photo-signal.js.map +1 -1
  516. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  517. package/dist/sensor/eqe-electron-rate.js +34 -14
  518. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  519. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  520. package/dist/sensor/eqe-local-exposure.js +15 -11
  521. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  522. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  523. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  524. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  525. package/dist/sensor/exposure-window.d.ts +48 -34
  526. package/dist/sensor/exposure-window.js +77 -36
  527. package/dist/sensor/exposure-window.js.map +1 -1
  528. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  529. package/dist/sensor/fixed-pattern-noise.js +166 -0
  530. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  531. package/dist/sensor/iso-gain.d.ts +44 -0
  532. package/dist/sensor/iso-gain.js +119 -0
  533. package/dist/sensor/iso-gain.js.map +1 -0
  534. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  535. package/dist/sensor/iso-signal-chain.js +52 -66
  536. package/dist/sensor/iso-signal-chain.js.map +1 -1
  537. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  538. package/dist/sensor/local-exposure-binding.js +22 -18
  539. package/dist/sensor/local-exposure-binding.js.map +1 -1
  540. package/dist/sensor/optical-stack.d.ts +36 -40
  541. package/dist/sensor/optical-stack.js +34 -37
  542. package/dist/sensor/optical-stack.js.map +1 -1
  543. package/dist/sensor/photon-energy.d.ts +22 -28
  544. package/dist/sensor/photon-energy.js +42 -34
  545. package/dist/sensor/photon-energy.js.map +1 -1
  546. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  547. package/dist/sensor/physical-charge-capacity.js +35 -36
  548. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  549. package/dist/sensor/pixel-pitch.d.ts +2 -3
  550. package/dist/sensor/pixel-pitch.js +4 -2
  551. package/dist/sensor/pixel-pitch.js.map +1 -1
  552. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  553. package/dist/sensor/radiometry-readiness.js +20 -17
  554. package/dist/sensor/radiometry-readiness.js.map +1 -1
  555. package/dist/sensor/raw-readout.d.ts +173 -83
  556. package/dist/sensor/raw-readout.js +425 -160
  557. package/dist/sensor/raw-readout.js.map +1 -1
  558. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  559. package/dist/sensor/raw-reconstruction.js +200 -47
  560. package/dist/sensor/raw-reconstruction.js.map +1 -1
  561. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  562. package/dist/sensor/readout-exposure-linkage.js +125 -27
  563. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  564. package/dist/sensor/readout-timing.d.ts +43 -44
  565. package/dist/sensor/readout-timing.js +38 -30
  566. package/dist/sensor/readout-timing.js.map +1 -1
  567. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  568. package/dist/sensor/response-application-compatibility.js +35 -34
  569. package/dist/sensor/response-application-compatibility.js.map +1 -1
  570. package/dist/sensor/response-operating-range.d.ts +26 -35
  571. package/dist/sensor/response-operating-range.js +40 -39
  572. package/dist/sensor/response-operating-range.js.map +1 -1
  573. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  574. package/dist/sensor/responsivity-photocurrent.js +57 -40
  575. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  576. package/dist/sensor/sampling-aperture.d.ts +21 -25
  577. package/dist/sensor/sampling-aperture.js +29 -28
  578. package/dist/sensor/sampling-aperture.js.map +1 -1
  579. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  580. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  581. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  582. package/dist/sensor/sensor-geometry.d.ts +28 -32
  583. package/dist/sensor/sensor-geometry.js +35 -20
  584. package/dist/sensor/sensor-geometry.js.map +1 -1
  585. package/dist/sensor/signal-noise.d.ts +14 -16
  586. package/dist/sensor/signal-noise.js +15 -13
  587. package/dist/sensor/signal-noise.js.map +1 -1
  588. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  589. package/dist/sensor/spatial-sample-reduction.js +39 -48
  590. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  591. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  592. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  593. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  594. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  595. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  596. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  597. package/dist/sensor/spectral-coverage.d.ts +6 -9
  598. package/dist/sensor/spectral-coverage.js +9 -6
  599. package/dist/sensor/spectral-coverage.js.map +1 -1
  600. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  601. package/dist/sensor/spectral-quadrature.js +38 -48
  602. package/dist/sensor/spectral-quadrature.js.map +1 -1
  603. package/dist/sensor/spectral-response.d.ts +53 -41
  604. package/dist/sensor/spectral-response.js +80 -47
  605. package/dist/sensor/spectral-response.js.map +1 -1
  606. package/dist/sensor/stochastic-seed.d.ts +50 -0
  607. package/dist/sensor/stochastic-seed.js +123 -0
  608. package/dist/sensor/stochastic-seed.js.map +1 -0
  609. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  610. package/dist/sensor/temporal-eqe-sum.js +5 -6
  611. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  612. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  613. package/dist/sensor/temporal-photo-signal.js +11 -10
  614. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  615. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  616. package/dist/sensor/temporal-sample-binding.js +3 -3
  617. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  618. package/dist/simulation/poc-simulation.d.ts +16 -16
  619. package/dist/simulation/poc-simulation.js +20 -15
  620. package/dist/simulation/poc-simulation.js.map +1 -1
  621. package/dist/stabilization/camera-shake.d.ts +42 -18
  622. package/dist/stabilization/camera-shake.js +43 -20
  623. package/dist/stabilization/camera-shake.js.map +1 -1
  624. package/dist/stabilization/system.d.ts +44 -41
  625. package/dist/stabilization/system.js +196 -108
  626. package/dist/stabilization/system.js.map +1 -1
  627. package/docs/AGENT_GUIDE.md +183 -0
  628. package/docs/API_REFERENCE.md +777 -2
  629. package/docs/QUICK_START.md +663 -0
  630. package/docs/USAGE.md +1719 -714
  631. package/docs/api/camera-equivalent-focal-length.md +6 -7
  632. package/docs/api/camera-field-of-view.md +16 -8
  633. package/docs/api/camera-lens-projection.md +246 -0
  634. package/docs/api/camera-projected-object-size.md +6 -5
  635. package/docs/api/capture-capture-export-metadata.md +10 -10
  636. package/docs/api/capture-dng-import.md +134 -0
  637. package/docs/api/capture-environment-raw-producer.md +17 -11
  638. package/docs/api/capture-export-jpeg.md +16 -0
  639. package/docs/api/capture-focus-control.md +25 -47
  640. package/docs/api/capture-linear-encoding.md +21 -12
  641. package/docs/api/capture-lossless-jpeg.md +49 -0
  642. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  643. package/docs/api/capture-native-environment-raw.md +161 -4
  644. package/docs/api/capture-native-raw-development.md +69 -8
  645. package/docs/api/capture-native-raw-dng.md +84 -0
  646. package/docs/api/capture-native-raw.md +21 -10
  647. package/docs/api/capture-packed-sensor-raw.md +156 -0
  648. package/docs/api/capture-photographic-export.md +69 -31
  649. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  650. package/docs/api/capture-raw-white-level.md +37 -0
  651. package/docs/api/capture-release-sequence.md +6 -7
  652. package/docs/api/capture-sensor-raw-frame.md +6 -6
  653. package/docs/api/capture-sensor-raw-producer.md +17 -11
  654. package/docs/api/capture-simulated-capture.md +15 -15
  655. package/docs/api/color-camera-color-matrix.md +103 -0
  656. package/docs/api/color-capture-color.md +22 -11
  657. package/docs/api/color-chromatic-adaptation.md +82 -0
  658. package/docs/api/color-color-difference.md +134 -0
  659. package/docs/api/color-color-matching-functions.md +259 -0
  660. package/docs/api/color-colorimetry-math.md +54 -0
  661. package/docs/api/color-gamut-mapping.md +72 -0
  662. package/docs/api/color-illuminants.md +280 -0
  663. package/docs/api/color-rgb-color-spaces.md +151 -0
  664. package/docs/api/color-sensor-color-development.md +27 -0
  665. package/docs/api/color-srgb-icc.md +2 -4
  666. package/docs/api/color-white-balance.md +95 -19
  667. package/docs/api/composition-image-formation-plan.md +124 -95
  668. package/docs/api/composition-plan-consumer.md +7 -7
  669. package/docs/api/core-calculation-result.md +18 -14
  670. package/docs/api/core-configuration-error.md +1 -1
  671. package/docs/api/core-image-formation.md +7 -7
  672. package/docs/api/core-scientific-assurance.md +12 -10
  673. package/docs/api/core-spectral-composition.md +14 -14
  674. package/docs/api/core-spectral.md +6 -6
  675. package/docs/api/core-validation.md +3 -3
  676. package/docs/api/core-version.md +7 -6
  677. package/docs/api/equipment-exposure-capabilities.md +11 -10
  678. package/docs/api/equipment-generic-tier-assets.md +7 -2
  679. package/docs/api/equipment-generic-tier-presets.md +6 -6
  680. package/docs/api/equipment-iso-capabilities.md +18 -18
  681. package/docs/api/equipment-metering-capabilities.md +6 -6
  682. package/docs/api/equipment-release-capabilities.md +4 -4
  683. package/docs/api/exports.json +2253 -3
  684. package/docs/api/exposure-exposure-duration-control.md +9 -9
  685. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  686. package/docs/api/exposure-exposure.md +10 -10
  687. package/docs/api/exposure-flash-ttl.md +182 -0
  688. package/docs/api/exposure-flash.md +183 -28
  689. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  690. package/docs/api/exposure-metering-target.md +9 -8
  691. package/docs/api/exposure-metering-temporal.md +8 -8
  692. package/docs/api/exposure-metering.md +69 -9
  693. package/docs/api/exposure-program-line.md +6 -5
  694. package/docs/api/facade-chart-radiance-batch.md +96 -0
  695. package/docs/api/facade-chart-scenes.md +240 -0
  696. package/docs/api/facade-scene-radiance.md +122 -0
  697. package/docs/api/facade-simulate-capture.md +397 -0
  698. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  699. package/docs/api/gpu-image-kernel-execution.md +152 -0
  700. package/docs/api/motion-camera-rotation.md +43 -26
  701. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  702. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  703. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  704. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  705. package/docs/api/motion-extended-object-projection.md +10 -8
  706. package/docs/api/motion-projected-motion.md +8 -8
  707. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  708. package/docs/api/motion-video-sequence.md +159 -0
  709. package/docs/api/optics-aperture.md +8 -8
  710. package/docs/api/optics-atmospheric-haze.md +104 -0
  711. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  712. package/docs/api/optics-circle-of-confusion.md +5 -4
  713. package/docs/api/optics-complex-pupil-psf.md +57 -16
  714. package/docs/api/optics-depth-of-field.md +12 -6
  715. package/docs/api/optics-diffraction-psf-profile.md +96 -0
  716. package/docs/api/optics-diffraction.md +8 -7
  717. package/docs/api/optics-focus-breathing.md +104 -16
  718. package/docs/api/optics-focus-state.md +9 -10
  719. package/docs/api/optics-front-of-lens-filter.md +72 -14
  720. package/docs/api/optics-illumination-vignetting.md +10 -10
  721. package/docs/api/optics-irradiance-convolution.md +95 -0
  722. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  723. package/docs/api/optics-lens-psf-kernels.md +72 -0
  724. package/docs/api/optics-lens-psf-profile.md +48 -26
  725. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  726. package/docs/api/optics-polygon-diffraction.md +78 -13
  727. package/docs/api/optics-profile-contract.md +4 -4
  728. package/docs/api/optics-psf-foundation.md +12 -12
  729. package/docs/api/optics-pupil-vignetting.md +132 -0
  730. package/docs/api/optics-radial-distortion.md +12 -12
  731. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  732. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  733. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  734. package/docs/api/optics-sensor-environment-query.md +52 -9
  735. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  736. package/docs/api/optics-stray-light.md +12 -11
  737. package/docs/api/optics-thin-lens.md +4 -3
  738. package/docs/api/optics-zernike-wavefront.md +229 -0
  739. package/docs/api/output-capture-corrected-sdr.md +10 -7
  740. package/docs/api/output-capture-geometry.md +35 -36
  741. package/docs/api/output-capture-sdr.md +4 -4
  742. package/docs/api/output-crop.md +7 -4
  743. package/docs/api/output-geometric-transforms.md +65 -19
  744. package/docs/api/output-lens-corrections.md +17 -15
  745. package/docs/api/output-native-capture-sdr.md +26 -13
  746. package/docs/api/output-png-encoder.md +105 -0
  747. package/docs/api/output-print-contrast-reference.md +8 -8
  748. package/docs/api/output-print-detail.md +14 -14
  749. package/docs/api/output-print-jpeg.md +22 -5
  750. package/docs/api/output-print-plan.md +18 -18
  751. package/docs/api/output-print-region-statistics.md +14 -14
  752. package/docs/api/output-sdr-rendering.md +52 -10
  753. package/docs/api/output-subject-framing-crop.md +5 -6
  754. package/docs/api/processing-demosaic.md +120 -0
  755. package/docs/api/processing-denoise.md +148 -0
  756. package/docs/api/processing-focus-stacking.md +41 -0
  757. package/docs/api/processing-hdr.md +113 -0
  758. package/docs/api/processing-panorama.md +82 -0
  759. package/docs/api/processing-processing-task.md +107 -0
  760. package/docs/api/processing-tone-mapping.md +142 -0
  761. package/docs/api/schema-camera.md +6 -4
  762. package/docs/api/schema-illumination-spectral.md +10 -11
  763. package/docs/api/schema-illumination-temporal.md +13 -15
  764. package/docs/api/schema-illumination.md +4 -4
  765. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  766. package/docs/api/schema-scene-radiance.md +18 -17
  767. package/docs/api/schema-scene.md +9 -9
  768. package/docs/api/schema-validation.md +1 -1
  769. package/docs/api/sensor-accumulated-charge.md +12 -20
  770. package/docs/api/sensor-architecture.md +15 -16
  771. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  772. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  773. package/docs/api/sensor-capture-mode-timing.md +9 -9
  774. package/docs/api/sensor-capture-mode.md +29 -30
  775. package/docs/api/sensor-color-sampling.md +31 -33
  776. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  777. package/docs/api/sensor-dark-current.md +30 -14
  778. package/docs/api/sensor-environment-photo-signal.md +13 -6
  779. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  780. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  781. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  782. package/docs/api/sensor-exposure-window.md +24 -24
  783. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  784. package/docs/api/sensor-iso-gain.md +63 -0
  785. package/docs/api/sensor-iso-signal-chain.md +13 -22
  786. package/docs/api/sensor-local-exposure-binding.md +12 -13
  787. package/docs/api/sensor-optical-stack.md +37 -40
  788. package/docs/api/sensor-photon-energy.md +10 -11
  789. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  790. package/docs/api/sensor-pixel-pitch.md +1 -1
  791. package/docs/api/sensor-radiometry-readiness.md +9 -9
  792. package/docs/api/sensor-raw-readout.md +118 -52
  793. package/docs/api/sensor-raw-reconstruction.md +97 -20
  794. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  795. package/docs/api/sensor-readout-timing.md +33 -35
  796. package/docs/api/sensor-response-application-compatibility.md +9 -11
  797. package/docs/api/sensor-response-operating-range.md +14 -18
  798. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  799. package/docs/api/sensor-sampling-aperture.md +22 -25
  800. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  801. package/docs/api/sensor-sensor-geometry.md +23 -24
  802. package/docs/api/sensor-signal-noise.md +10 -10
  803. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  804. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  805. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  806. package/docs/api/sensor-spectral-coverage.md +5 -5
  807. package/docs/api/sensor-spectral-quadrature.md +33 -35
  808. package/docs/api/sensor-spectral-response.md +28 -16
  809. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  810. package/docs/api/simulation-poc-simulation.md +17 -16
  811. package/docs/api/stabilization-camera-shake.md +29 -10
  812. package/docs/api/stabilization-system.md +25 -21
  813. package/docs/examples/production-request.json +3821 -2157
  814. package/docs/examples/simulate-capture.mjs +14 -0
  815. package/llms.txt +35 -0
  816. package/package.json +32 -11
  817. package/AGENTS.md +0 -674
  818. package/CONTRIBUTING.md +0 -76
  819. package/DCO +0 -33
  820. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  821. package/dist/camera/field-of-view.d.ts.map +0 -1
  822. package/dist/camera/projected-object-size.d.ts.map +0 -1
  823. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  824. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  825. package/dist/capture/export-jpeg.d.ts.map +0 -1
  826. package/dist/capture/export-tiff.d.ts.map +0 -1
  827. package/dist/capture/focus-control.d.ts.map +0 -1
  828. package/dist/capture/linear-encoding.d.ts.map +0 -1
  829. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  830. package/dist/capture/native-raw-development.d.ts.map +0 -1
  831. package/dist/capture/native-raw.d.ts.map +0 -1
  832. package/dist/capture/photographic-export.d.ts.map +0 -1
  833. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  834. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  835. package/dist/capture/release-sequence.d.ts.map +0 -1
  836. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  837. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  838. package/dist/capture/simulated-capture.d.ts.map +0 -1
  839. package/dist/color/capture-color.d.ts.map +0 -1
  840. package/dist/color/sensor-color-development.d.ts.map +0 -1
  841. package/dist/color/srgb-icc.d.ts.map +0 -1
  842. package/dist/color/srgb-transfer.d.ts.map +0 -1
  843. package/dist/color/white-balance.d.ts.map +0 -1
  844. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  845. package/dist/composition/plan-consumer.d.ts.map +0 -1
  846. package/dist/core/calculation-result.d.ts.map +0 -1
  847. package/dist/core/canonical-json.d.ts.map +0 -1
  848. package/dist/core/configuration-error.d.ts.map +0 -1
  849. package/dist/core/evidence-provenance.d.ts.map +0 -1
  850. package/dist/core/image-formation.d.ts.map +0 -1
  851. package/dist/core/owned-data.d.ts.map +0 -1
  852. package/dist/core/record-validation.d.ts.map +0 -1
  853. package/dist/core/scientific-assurance.d.ts.map +0 -1
  854. package/dist/core/spectral-composition.d.ts.map +0 -1
  855. package/dist/core/spectral.d.ts.map +0 -1
  856. package/dist/core/validation.d.ts.map +0 -1
  857. package/dist/core/version.d.ts.map +0 -1
  858. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  859. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  860. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  861. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  862. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  863. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  864. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  865. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  866. package/dist/exposure/exposure.d.ts.map +0 -1
  867. package/dist/exposure/flash.d.ts.map +0 -1
  868. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  869. package/dist/exposure/metering-target.d.ts.map +0 -1
  870. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  871. package/dist/exposure/metering.d.ts.map +0 -1
  872. package/dist/exposure/program-line.d.ts.map +0 -1
  873. package/dist/index.d.ts.map +0 -1
  874. package/dist/motion/camera-rotation.d.ts.map +0 -1
  875. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  876. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  877. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  878. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  879. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  880. package/dist/motion/projected-motion.d.ts.map +0 -1
  881. package/dist/optics/aperture.d.ts.map +0 -1
  882. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  883. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  884. package/dist/optics/depth-of-field.d.ts.map +0 -1
  885. package/dist/optics/diffraction.d.ts.map +0 -1
  886. package/dist/optics/focus-breathing.d.ts.map +0 -1
  887. package/dist/optics/focus-state.d.ts.map +0 -1
  888. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  889. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  890. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  891. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  892. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  893. package/dist/optics/profile-contract.d.ts.map +0 -1
  894. package/dist/optics/psf-foundation.d.ts.map +0 -1
  895. package/dist/optics/radial-distortion.d.ts.map +0 -1
  896. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  897. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  898. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  899. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  900. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  901. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  902. package/dist/optics/stray-light.d.ts.map +0 -1
  903. package/dist/optics/thin-lens.d.ts.map +0 -1
  904. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  905. package/dist/output/capture-geometry.d.ts.map +0 -1
  906. package/dist/output/capture-sdr.d.ts.map +0 -1
  907. package/dist/output/crop.d.ts.map +0 -1
  908. package/dist/output/geometric-transforms.d.ts.map +0 -1
  909. package/dist/output/lens-corrections.d.ts.map +0 -1
  910. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  911. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  912. package/dist/output/print-detail.d.ts.map +0 -1
  913. package/dist/output/print-jpeg.d.ts.map +0 -1
  914. package/dist/output/print-plan.d.ts.map +0 -1
  915. package/dist/output/print-region-statistics.d.ts.map +0 -1
  916. package/dist/output/sdr-rendering.d.ts.map +0 -1
  917. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  918. package/dist/schema/camera.d.ts.map +0 -1
  919. package/dist/schema/camera.js +0 -3
  920. package/dist/schema/camera.js.map +0 -1
  921. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  922. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  923. package/dist/schema/illumination.d.ts.map +0 -1
  924. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  925. package/dist/schema/scene-radiance.d.ts.map +0 -1
  926. package/dist/schema/scene.d.ts.map +0 -1
  927. package/dist/schema/scene.js +0 -3
  928. package/dist/schema/scene.js.map +0 -1
  929. package/dist/schema/validation.d.ts.map +0 -1
  930. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  931. package/dist/sensor/architecture.d.ts.map +0 -1
  932. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  933. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  934. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  935. package/dist/sensor/capture-mode.d.ts.map +0 -1
  936. package/dist/sensor/color-sampling.d.ts.map +0 -1
  937. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  938. package/dist/sensor/dark-current.d.ts.map +0 -1
  939. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  940. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  941. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  942. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  943. package/dist/sensor/exposure-window.d.ts.map +0 -1
  944. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  945. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  946. package/dist/sensor/optical-stack.d.ts.map +0 -1
  947. package/dist/sensor/photon-energy.d.ts.map +0 -1
  948. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  949. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  950. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  951. package/dist/sensor/raw-readout.d.ts.map +0 -1
  952. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  953. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  954. package/dist/sensor/readout-timing.d.ts.map +0 -1
  955. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  956. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  957. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  958. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  959. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  960. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  961. package/dist/sensor/signal-noise.d.ts.map +0 -1
  962. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  963. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  964. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  965. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  966. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  967. package/dist/sensor/spectral-response.d.ts.map +0 -1
  968. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  969. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  970. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  971. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  972. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  973. package/dist/stabilization/system.d.ts.map +0 -1
  974. package/docs/API_STYLE.md +0 -235
  975. package/docs/ARCHITECTURE.md +0 -356
  976. package/docs/AUTOMATION_COORDINATION.md +0 -190
  977. package/docs/CAPTURE_COLOR.md +0 -25
  978. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  979. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  980. package/docs/CAPTURE_SDR.md +0 -22
  981. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  982. package/docs/DEVELOPERS.md +0 -68
  983. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  984. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  985. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  986. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  987. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  988. package/docs/IMAGE_FORMATION.md +0 -247
  989. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  990. package/docs/MOTION_AND_SIGNAL.md +0 -250
  991. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  992. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  993. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  994. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  995. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  996. package/docs/PERFORMANCE_BASELINE.md +0 -56
  997. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  998. package/docs/PHYSICS_FOUNDATION.md +0 -426
  999. package/docs/POC_API.md +0 -278
  1000. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  1001. package/docs/POC_PROJECTION_REUSE.md +0 -124
  1002. package/docs/PRINT_195_196_REVIEW.md +0 -93
  1003. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  1004. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  1005. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  1006. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1007. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1008. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1009. package/docs/PRINT_PLANNING.md +0 -75
  1010. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1011. package/docs/PROCESSED_OUTPUT.md +0 -157
  1012. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1013. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1014. package/docs/PROVENANCE.md +0 -115
  1015. package/docs/PSF_FOUNDATION.md +0 -165
  1016. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1017. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1018. package/docs/RELEASE_1_0.md +0 -66
  1019. package/docs/RELEASE_1_0_1.md +0 -61
  1020. package/docs/RELEASE_1_1_0.md +0 -25
  1021. package/docs/RELEASE_1_2_0.md +0 -51
  1022. package/docs/RELEASE_1_3_0.md +0 -15
  1023. package/docs/RELEASE_1_4_0.md +0 -23
  1024. package/docs/RELEASE_1_5_0.md +0 -105
  1025. package/docs/RELEASE_AUDIT.md +0 -39
  1026. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1027. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1028. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1029. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1030. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1031. package/docs/SDR_RENDERING.md +0 -33
  1032. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1033. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1034. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1035. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1036. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1037. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1038. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1039. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1040. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1041. package/docs/SIMULATED_CAPTURE.md +0 -65
  1042. package/docs/STABILIZATION.md +0 -234
  1043. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1044. package/docs/TIER_ACCEPTANCE.md +0 -129
  1045. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1046. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1047. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1048. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1049. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1050. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1051. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1052. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1053. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1054. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1055. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1056. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1057. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1058. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1059. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1060. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1061. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1062. package/docs/validation/documentation-fragments.json +0 -212
  1063. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1064. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1065. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1069. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1071. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1072. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1073. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1074. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1075. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1076. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1077. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1078. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1079. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1080. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1081. package/docs/validation/print-detail-capabilities.json +0 -103
  1082. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1083. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1084. package/docs/validation/release-audit-inventory.json +0 -1306
  1085. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1,18 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Evaluates depth-dependent translational parallax at deterministic midpoint nodes over each scene
5
- * point's authoritative local exposure window. The model is deliberately per point. Camera translation
6
- * and optional subject translation coexist through relative linear motion; neither is redefined as the
7
- * other. Camera rotation and visibility/occlusion remain separate models.
8
- * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
- * limits.
3
+ * Parallax from camera movement (translation): nearer points shift more in the image than distant
4
+ * ones. It is evaluated at deterministic midpoint time samples across each scene point's local
5
+ * exposure window.
6
+ *
7
+ * The model works point by point, on purpose. Camera movement and optional subject movement combine
8
+ * as relative linear motion; neither is recast as the other. Camera rotation, and visibility or
9
+ * occlusion, are separate models.
10
+ * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
11
+ * and support limits.
10
12
  */
11
13
  import { approximationResult } from "../core/calculation-result.js";
12
14
  import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
13
15
  import { transformNativeRasterVectorToOriented } from "../output/capture-geometry.js";
14
16
  import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
17
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
15
19
  function requireFiniteVector(value, path) {
20
+ requireInputObject(value, path);
16
21
  for (const axis of ["x", "y", "z"]) {
17
22
  if (!Number.isFinite(value[axis])) {
18
23
  throw new InvalidScientificInputError(path +
@@ -28,7 +33,7 @@ function requireFiniteVector(value, path) {
28
33
  function requireNonEmptyString(value, path) {
29
34
  if (typeof value !== "string" ||
30
35
  value.trim().length === 0) {
31
- throw new InvalidScientificInputError(path +
36
+ throw new InvalidConfigurationError(path +
32
37
  " must be a non-empty string.");
33
38
  }
34
39
  return value.trim();
@@ -58,6 +63,7 @@ function projectPoint(positionM, projectionDistanceMm, path) {
58
63
  return mapped;
59
64
  }
60
65
  function localExposureForPoint(timing, point) {
66
+ requireInputObject(point, "destinationPointNative");
61
67
  const matches = timing.exposureWindows.samples.filter((sample) => samePoint(sample.pointNative, point));
62
68
  if (matches.length !== 1) {
63
69
  throw new InvalidScientificInputError("Each translation/parallax scene sample must match exactly one committed exposure-window sample point.");
@@ -65,22 +71,35 @@ function localExposureForPoint(timing, point) {
65
71
  return matches[0];
66
72
  }
67
73
  /**
68
- * Evaluates depth-dependent translational parallax at deterministic midpoint
69
- * nodes over each scene point's authoritative local exposure window.
74
+ * Evaluates depth-dependent parallax from camera movement at deterministic
75
+ * midpoint time samples across each scene point's local exposure window.
70
76
  *
71
- * The model is deliberately per point. Camera translation and optional subject
72
- * translation coexist through relative linear motion; neither is redefined as
73
- * the other. Camera rotation and visibility/occlusion remain separate models.
77
+ * The model works point by point, on purpose. Camera movement and optional
78
+ * subject movement combine as relative linear motion; neither is recast as
79
+ * the other. Camera rotation, and visibility or occlusion, are separate
80
+ * models.
74
81
  */
75
82
  export function calculateCaptureTranslationParallaxTemporalQuadrature(input) {
83
+ requireInputKeys(input, "calculateCaptureTranslationParallaxTemporalQuadrature", ["timing", "imagingArea", "focalLengthMm", "focusDistanceM", "orientation", "cameraTranslationVelocityMps", "temporalSampleCount", "sceneSamples"]);
84
+ requireInputObject(input.imagingArea, "imagingArea");
85
+ requireInputObject(input.timing, "timing");
86
+ requireInputObject(input.timing.nativeRaster, "timing.nativeRaster");
87
+ requireInputObject(input.timing.exposureWindows, "timing.exposureWindows");
88
+ if (!Array.isArray(input.timing.exposureWindows.samples))
89
+ throw new InvalidConfigurationError("timing.exposureWindows.samples must be an array.");
90
+ input.timing.exposureWindows.samples.forEach((sample, index) => {
91
+ requireInputObject(sample, "timing.exposureWindows.samples[" + index + "]");
92
+ requireInputObject(sample.pointNative, "timing.exposureWindows.samples[" + index + "].pointNative");
93
+ });
76
94
  requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
77
95
  requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
78
96
  requirePositiveFinite("focalLengthMm", input.focalLengthMm);
79
97
  requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
80
98
  if (!Array.isArray(input.sceneSamples) ||
81
99
  input.sceneSamples.length === 0) {
82
- throw new InvalidScientificInputError("sceneSamples must be a non-empty array.");
100
+ throw new InvalidConfigurationError("sceneSamples must be a non-empty array.");
83
101
  }
102
+ input.sceneSamples.forEach((sample, index) => requireInputObject(sample, "sceneSamples[" + index + "]"));
84
103
  const ids = input.sceneSamples.map((sample) => requireNonEmptyString(sample.sampleId, "sceneSamples[].sampleId"));
85
104
  if (new Set(ids).size !==
86
105
  ids.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"capture-translation-parallax-temporal-quadrature.js","sourceRoot":"","sources":["../../src/motion/capture-translation-parallax-temporal-quadrature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-translation-parallax-temporal-quadrature.js","sourceRoot":"","sources":["../../src/motion/capture-translation-parallax-temporal-quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Parallax from camera movement (translation): nearer points shift more in the image than distant\n * ones. It is evaluated at deterministic midpoint time samples across each scene point's local\n * exposure window.\n *\n * The model works point by point, on purpose. Camera movement and optional subject movement combine\n * as relative linear motion; neither is recast as the other. Camera rotation, and visibility or\n * occlusion, are separate models.\n * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport {\n transformNativeRasterVectorToOriented,\n type CaptureOrientation,\n type RasterPoint\n} from \"../output/capture-geometry.js\";\nimport { calculateThinLensImageDistance } from \"../optics/thin-lens.js\";\nimport type { Vector3 } from \"../schema/scene.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport type {\n SensorImagingArea\n} from \"../sensor/sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface CaptureTranslationParallaxSceneSample {\n sampleId: string;\n /**\n * Native destination point. Its local exposure window applies to this scene\n * sample.\n */\n destinationPointNative:\n RasterPoint;\n /**\n * Point position in metres, in the camera axes at the first opening-boundary\n * phase. +X right, +Y up, +Z forward (away from the camera).\n */\n positionCameraM: Vector3;\n /**\n * Optional constant velocity of the subject (world point), in the same\n * starting camera axes. If omitted, the world point is still.\n */\n subjectVelocityMps?: Vector3;\n}\n\nexport interface CalculateCaptureTranslationParallaxTemporalQuadratureInput {\n timing:\n ResolvedCaptureModeTiming;\n imagingArea:\n SensorImagingArea;\n focalLengthMm: number;\n focusDistanceM?: number;\n orientation:\n CaptureOrientation;\n /**\n * Constant movement of the camera centre, in camera axes at the capture\n * reference phase. Rotation is handled separately, on purpose.\n */\n cameraTranslationVelocityMps:\n Vector3;\n temporalSampleCount: number;\n sceneSamples:\n readonly CaptureTranslationParallaxSceneSample[];\n}\n\nexport interface CaptureTranslationParallaxTemporalNode {\n temporalSampleIndex: number;\n localExposurePhase: number;\n captureTimeSecondsFromReference:\n number;\n normalizedTimeWeight: number;\n timeMeasureSeconds: number;\n relativePositionCameraM:\n Vector3;\n mappedImagePointMm: {\n x: number;\n y: number;\n };\n deltaFromReferenceImagePlaneMm: {\n x: number;\n y: number;\n distance: number;\n };\n deltaNativeSamples: {\n x: number;\n y: number;\n distance: number;\n };\n deltaOrientedSamples: {\n x: number;\n y: number;\n distance: number;\n };\n}\n\nexport interface CaptureTranslationParallaxTemporalSample {\n sampleId: string;\n destinationPointNative:\n RasterPoint;\n referencePositionCameraM:\n Vector3;\n subjectVelocityMps: Vector3;\n localExposureWindow: {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n nodes:\n readonly CaptureTranslationParallaxTemporalNode[];\n}\n\nexport interface CaptureTranslationParallaxTemporalQuadrature {\n timeReference:\n \"first-opening-boundary-phase\";\n timingProfileIdentity: {\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n };\n orientation:\n CaptureOrientation;\n projectionDistanceMm: number;\n temporalSampleCount: number;\n cameraTranslationVelocityMps:\n Vector3;\n samples:\n readonly CaptureTranslationParallaxTemporalSample[];\n geometryModel:\n \"metric-depth-dependent-constant-linear-translation\";\n relativeMotionComposition:\n \"subject-minus-camera-translation\";\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized: false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n}\n\nfunction requireFiniteVector(\n value: Vector3,\n path: string\n): Vector3 {\n requireInputObject(value, path);\n for (\n const axis of\n [\"x\", \"y\", \"z\"] as const\n ) {\n if (\n !Number.isFinite(\n value[axis]\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n axis +\n \" must be finite.\"\n );\n }\n }\n return {\n ...value\n };\n}\n\nfunction requireNonEmptyString(\n value: string,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction samePoint(\n a: RasterPoint,\n b: RasterPoint\n): boolean {\n return (\n a.x === b.x &&\n a.y === b.y\n );\n}\n\nfunction projectPoint(\n positionM: Vector3,\n projectionDistanceMm: number,\n path: string\n): {\n x: number;\n y: number;\n} {\n if (\n positionM.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must remain in front of the camera plane.\"\n );\n }\n const mapped = {\n x:\n projectionDistanceMm *\n (positionM.x /\n positionM.z),\n y:\n projectionDistanceMm *\n (positionM.y /\n positionM.z)\n };\n if (\n !Number.isFinite(mapped.x) ||\n !Number.isFinite(mapped.y)\n ) {\n throw new InvalidScientificInputError(\n path +\n \" projection must remain finite.\"\n );\n }\n return mapped;\n}\n\nfunction localExposureForPoint(\n timing:\n ResolvedCaptureModeTiming,\n point:\n RasterPoint\n): ResolvedCaptureModeTiming[\"exposureWindows\"][\"samples\"][number] {\n requireInputObject(point, \"destinationPointNative\");\n const matches =\n timing.exposureWindows.samples.filter(\n (sample) =>\n samePoint(\n sample.pointNative,\n point\n )\n );\n if (matches.length !== 1) {\n throw new InvalidScientificInputError(\n \"Each translation/parallax scene sample must match exactly one committed exposure-window sample point.\"\n );\n }\n return matches[0]!;\n}\n\n/**\n * Evaluates depth-dependent parallax from camera movement at deterministic\n * midpoint time samples across each scene point's local exposure window.\n *\n * The model works point by point, on purpose. Camera movement and optional\n * subject movement combine as relative linear motion; neither is recast as\n * the other. Camera rotation, and visibility or occlusion, are separate\n * models.\n */\nexport function calculateCaptureTranslationParallaxTemporalQuadrature(\n input:\n CalculateCaptureTranslationParallaxTemporalQuadratureInput\n): CalculationResult<CaptureTranslationParallaxTemporalQuadrature> {\n requireInputKeys(input, \"calculateCaptureTranslationParallaxTemporalQuadrature\", [\"timing\", \"imagingArea\", \"focalLengthMm\", \"focusDistanceM\", \"orientation\", \"cameraTranslationVelocityMps\", \"temporalSampleCount\", \"sceneSamples\"]);\n requireInputObject(input.imagingArea, \"imagingArea\");\n requireInputObject(input.timing, \"timing\");\n requireInputObject(input.timing.nativeRaster, \"timing.nativeRaster\");\n requireInputObject(input.timing.exposureWindows, \"timing.exposureWindows\");\n if (!Array.isArray(input.timing.exposureWindows.samples)) throw new InvalidConfigurationError(\"timing.exposureWindows.samples must be an array.\");\n input.timing.exposureWindows.samples.forEach((sample, index) => {\n requireInputObject(sample, \"timing.exposureWindows.samples[\" + index + \"]\");\n requireInputObject(sample.pointNative, \"timing.exposureWindows.samples[\" + index + \"].pointNative\");\n });\n requirePositiveFinite(\n \"imagingArea.widthMm\",\n input.imagingArea.widthMm\n );\n requirePositiveFinite(\n \"imagingArea.heightMm\",\n input.imagingArea.heightMm\n );\n requirePositiveFinite(\n \"focalLengthMm\",\n input.focalLengthMm\n );\n requirePositiveInteger(\n \"temporalSampleCount\",\n input.temporalSampleCount\n );\n\n if (\n !Array.isArray(\n input.sceneSamples\n ) ||\n input.sceneSamples.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sceneSamples must be a non-empty array.\"\n );\n }\n\n input.sceneSamples.forEach((sample, index) => requireInputObject(sample, \"sceneSamples[\" + index + \"]\"));\n const ids =\n input.sceneSamples.map(\n (sample) =>\n requireNonEmptyString(\n sample.sampleId,\n \"sceneSamples[].sampleId\"\n )\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidScientificInputError(\n \"sceneSamples must not contain duplicate sampleId values.\"\n );\n }\n\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n\n const projectionDistanceMm =\n input.focusDistanceM ===\n undefined\n ? input.focalLengthMm\n : calculateThinLensImageDistance({\n focalLengthMm:\n input.focalLengthMm,\n objectDistanceM:\n input.focusDistanceM\n }).value.imageDistanceMm;\n\n const pitchX =\n input.imagingArea.widthMm /\n input.timing.nativeRaster\n .pixelWidth;\n const pitchY =\n input.imagingArea.heightMm /\n input.timing.nativeRaster\n .pixelHeight;\n\n if (\n !Number.isFinite(pitchX) ||\n !Number.isFinite(pitchY) ||\n pitchX <= 0 ||\n pitchY <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Resolved translation/parallax sampling pitch must remain finite and positive.\"\n );\n }\n\n const samples =\n input.sceneSamples.map(\n (sceneSample, sampleIndex) => {\n const samplePath =\n \"sceneSamples[\" +\n sampleIndex +\n \"]\";\n const sampleId =\n requireNonEmptyString(\n sceneSample.sampleId,\n samplePath +\n \".sampleId\"\n );\n const referencePosition =\n requireFiniteVector(\n sceneSample\n .positionCameraM,\n samplePath +\n \".positionCameraM\"\n );\n if (\n referencePosition.z <= 0\n ) {\n throw new InvalidScientificInputError(\n samplePath +\n \".positionCameraM.z must place the scene point in front of the camera.\"\n );\n }\n const subjectVelocity =\n sceneSample\n .subjectVelocityMps ===\n undefined\n ? {\n x: 0,\n y: 0,\n z: 0\n }\n : requireFiniteVector(\n sceneSample\n .subjectVelocityMps,\n samplePath +\n \".subjectVelocityMps\"\n );\n\n const exposure =\n localExposureForPoint(\n input.timing,\n sceneSample\n .destinationPointNative\n );\n const duration =\n exposure\n .localExposureDurationSeconds;\n if (\n !Number.isFinite(\n duration\n ) ||\n duration <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Translation/parallax requires a positive finite local exposure duration.\"\n );\n }\n\n const referenceImagePoint =\n projectPoint(\n referencePosition,\n projectionDistanceMm,\n samplePath +\n \".positionCameraM\"\n );\n\n const normalizedTimeWeight =\n 1 /\n input.temporalSampleCount;\n const timeMeasureSeconds =\n duration /\n input.temporalSampleCount;\n\n const nodes =\n Array.from(\n {\n length:\n input.temporalSampleCount\n },\n (\n _,\n temporalSampleIndex\n ) => {\n const localExposurePhase =\n (temporalSampleIndex +\n 0.5) /\n input.temporalSampleCount;\n const captureTime =\n exposure\n .startOffsetSecondsFromOpeningReference +\n localExposurePhase *\n duration;\n\n const relativePosition = {\n x:\n referencePosition.x +\n (subjectVelocity.x -\n cameraVelocity.x) *\n captureTime,\n y:\n referencePosition.y +\n (subjectVelocity.y -\n cameraVelocity.y) *\n captureTime,\n z:\n referencePosition.z +\n (subjectVelocity.z -\n cameraVelocity.z) *\n captureTime\n };\n\n const mapped =\n projectPoint(\n relativePosition,\n projectionDistanceMm,\n samplePath +\n \".relativePositionCameraM\"\n );\n const deltaMm = {\n x:\n mapped.x -\n referenceImagePoint.x,\n y:\n mapped.y -\n referenceImagePoint.y\n };\n const deltaNative = {\n x:\n deltaMm.x /\n pitchX,\n y:\n -deltaMm.y /\n pitchY\n };\n const oriented =\n transformNativeRasterVectorToOriented({\n vector:\n deltaNative,\n orientation:\n input.orientation\n });\n\n return {\n temporalSampleIndex,\n localExposurePhase,\n captureTimeSecondsFromReference:\n captureTime,\n normalizedTimeWeight,\n timeMeasureSeconds,\n relativePositionCameraM:\n relativePosition,\n mappedImagePointMm:\n mapped,\n deltaFromReferenceImagePlaneMm: {\n ...deltaMm,\n distance:\n Math.hypot(\n deltaMm.x,\n deltaMm.y\n )\n },\n deltaNativeSamples: {\n ...deltaNative,\n distance:\n Math.hypot(\n deltaNative.x,\n deltaNative.y\n )\n },\n deltaOrientedSamples: {\n ...oriented,\n distance:\n Math.hypot(\n oriented.x,\n oriented.y\n )\n }\n };\n }\n );\n\n return {\n sampleId,\n destinationPointNative: {\n ...sceneSample\n .destinationPointNative\n },\n referencePositionCameraM:\n referencePosition,\n subjectVelocityMps:\n subjectVelocity,\n localExposureWindow: {\n startSecondsFromCaptureReference:\n exposure\n .startOffsetSecondsFromOpeningReference,\n endSecondsFromCaptureReference:\n exposure\n .endOffsetSecondsFromOpeningReference,\n durationSeconds:\n duration\n },\n referenceImagePointMm:\n referenceImagePoint,\n nodes\n };\n }\n );\n\n return approximationResult(\n {\n timeReference:\n \"first-opening-boundary-phase\",\n timingProfileIdentity: {\n profileId:\n input.timing\n .timingProfileId,\n profileVersion:\n input.timing\n .timingProfileVersion,\n captureModeId:\n input.timing\n .captureModeId\n },\n orientation:\n input.orientation,\n projectionDistanceMm,\n temporalSampleCount:\n input.temporalSampleCount,\n cameraTranslationVelocityMps:\n cameraVelocity,\n samples,\n geometryModel:\n \"metric-depth-dependent-constant-linear-translation\",\n relativeMotionComposition:\n \"subject-minus-camera-translation\",\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n sensorReadoutTimingUsedAsExposureTiming:\n false\n },\n \"capture-translation-parallax-temporal-quadrature\",\n \"1.0.0\",\n [\n \"Translation is evaluated independently for each metric scene point because translational image motion depends on depth.\",\n \"Camera and subject translation coexist as explicit relative linear motion; subject motion is not reclassified as camera motion.\",\n \"The camera-axis basis is fixed at the first-opening-boundary phase; camera rotation remains a separate model.\",\n \"The destination native point selects the authoritative local exposure window; sensor data-readout timing is not substituted for exposure time.\",\n \"Oriented sample displacement is a coordinate transform of the same physical image-plane mapping and does not change the translation physics.\",\n \"No one global homography/warp is authorized for arbitrary 3D scenes.\",\n \"Visibility, occlusion, deformation, acceleration and rolling scene geometry remain outside this model.\"\n ]\n );\n}\n"]}
@@ -1,12 +1,14 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Evaluates multiple explicit metric points on one rigidly translating object at deterministic
4
- * physical times. This is geometry only. It does not synthesize a blur kernel, visibility, radiance
5
- * integration, deformation, camera rotation or a universal scale.
6
- * Evaluates extended-object projection at deterministic midpoint nodes inside each point's
7
- * authoritative #12 local exposure window.
8
- * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
- * limits.
2
+ * Projection of an extended object: several explicit points (in metres) on one rigid object that
3
+ * moves in a straight line.
4
+ *
5
+ * The points are evaluated at deterministic physical times, or at deterministic midpoint time
6
+ * samples inside each point's local exposure window (from the capture exposure schedule).
7
+ *
8
+ * This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,
9
+ * deform the object, rotate the camera or apply a universal scale.
10
+ * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
11
+ * and support limits.
10
12
  */
11
13
  import { type CalculationResult } from "../core/calculation-result.js";
12
14
  import type { RasterPoint } from "../output/capture-geometry.js";
@@ -15,7 +17,7 @@ import type { ResolvedCaptureModeTiming } from "../sensor/capture-mode-timing.js
15
17
  export interface ExtendedObjectMetricPoint {
16
18
  pointId: string;
17
19
  /**
18
- * Metric camera-space point at the common reference phase.
20
+ * Point in camera space, in metres, at the shared reference phase.
19
21
  *
20
22
  * +X right, +Y up, +Z forward/away from the camera.
21
23
  */
@@ -95,8 +97,8 @@ export interface ExtendedObjectProjectionTrajectory {
95
97
  }
96
98
  export interface CaptureExtendedObjectMetricPoint extends ExtendedObjectMetricPoint {
97
99
  /**
98
- * Native destination point selecting the authoritative #12 local exposure
99
- * window for this object point.
100
+ * Native destination point. It selects the local exposure window (from the
101
+ * capture exposure schedule) for this object point.
100
102
  */
101
103
  destinationPointNative: RasterPoint;
102
104
  }
@@ -163,13 +165,14 @@ export interface CaptureExtendedObjectTemporalProjection {
163
165
  * Evaluates multiple explicit metric points on one rigidly translating object
164
166
  * at deterministic physical times.
165
167
  *
166
- * This is geometry only. It does not synthesize a blur kernel, visibility,
167
- * radiance integration, deformation, camera rotation or a universal scale.
168
+ * This is geometry only. It does not build a blur kernel, decide visibility,
169
+ * integrate radiance, deform the object, rotate the camera or apply a
170
+ * universal scale.
168
171
  */
169
172
  export declare function calculateExtendedObjectProjectionTrajectory(input: CalculateExtendedObjectProjectionTrajectoryInput): CalculationResult<ExtendedObjectProjectionTrajectory>;
170
173
  /**
171
- * Evaluates extended-object projection at deterministic midpoint nodes inside
172
- * each point's authoritative #12 local exposure window.
174
+ * Evaluates extended-object projection at deterministic midpoint time samples
175
+ * inside each point's local exposure window (from the capture exposure
176
+ * schedule).
173
177
  */
174
178
  export declare function calculateCaptureExtendedObjectTemporalProjection(input: CalculateCaptureExtendedObjectTemporalProjectionInput): CalculationResult<CaptureExtendedObjectTemporalProjection>;
175
- //# sourceMappingURL=extended-object-projection.d.ts.map
@@ -1,26 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Evaluates multiple explicit metric points on one rigidly translating object at deterministic
5
- * physical times. This is geometry only. It does not synthesize a blur kernel, visibility, radiance
6
- * integration, deformation, camera rotation or a universal scale.
7
- * Evaluates extended-object projection at deterministic midpoint nodes inside each point's
8
- * authoritative #12 local exposure window.
9
- * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
10
- * limits.
3
+ * Projection of an extended object: several explicit points (in metres) on one rigid object that
4
+ * moves in a straight line.
5
+ *
6
+ * The points are evaluated at deterministic physical times, or at deterministic midpoint time
7
+ * samples inside each point's local exposure window (from the capture exposure schedule).
8
+ *
9
+ * This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,
10
+ * deform the object, rotate the camera or apply a universal scale.
11
+ * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
12
+ * and support limits.
11
13
  */
12
14
  import { approximationResult } from "../core/calculation-result.js";
13
15
  import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
14
16
  import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
17
+ import { requireInputKeys, requireInputObject } from "../core/record-validation.js";
18
+ import { InvalidConfigurationError } from "../core/configuration-error.js";
15
19
  function requireNonEmptyString(value, path) {
16
20
  if (typeof value !== "string" ||
17
21
  value.trim().length === 0) {
18
- throw new InvalidScientificInputError(path +
22
+ throw new InvalidConfigurationError(path +
19
23
  " must be a non-empty string.");
20
24
  }
21
25
  return value.trim();
22
26
  }
23
27
  function requireFiniteVector(value, path) {
28
+ requireInputObject(value, path);
24
29
  for (const axis of ["x", "y", "z"]) {
25
30
  if (!Number.isFinite(value[axis])) {
26
31
  throw new InvalidScientificInputError(path +
@@ -80,12 +85,13 @@ function projectMetricPoint(positionCameraM, projectionDistanceMm, path) {
80
85
  function validateUniquePoints(points) {
81
86
  if (!Array.isArray(points) ||
82
87
  points.length === 0) {
83
- throw new InvalidScientificInputError("points must be a non-empty array.");
88
+ throw new InvalidConfigurationError("points must be a non-empty array.");
84
89
  }
85
90
  const parsed = points.map((point, index) => {
86
91
  const path = "points[" +
87
92
  index +
88
93
  "]";
94
+ requireInputObject(point, path);
89
95
  const pointId = requireNonEmptyString(point.pointId, path + ".pointId");
90
96
  const referencePosition = requireFiniteVector(point.positionCameraM, path +
91
97
  ".positionCameraM");
@@ -109,7 +115,7 @@ function validateUniquePoints(points) {
109
115
  function validateSampleTimes(times) {
110
116
  if (!Array.isArray(times) ||
111
117
  times.length === 0) {
112
- throw new InvalidScientificInputError("sampleTimesSecondsFromReference must be a non-empty array.");
118
+ throw new InvalidConfigurationError("sampleTimesSecondsFromReference must be a non-empty array.");
113
119
  }
114
120
  let prior = Number.NEGATIVE_INFINITY;
115
121
  return times.map((value, index) => {
@@ -150,9 +156,10 @@ function validatePlanarDeclaration(declaration, points) {
150
156
  if (declaration === undefined) {
151
157
  return null;
152
158
  }
159
+ requireInputObject(declaration, "frontoparallelPlane");
153
160
  if (declaration.kind !==
154
161
  "fronto-parallel-planar-patch") {
155
- throw new InvalidScientificInputError("frontoparallelPlane.kind is invalid.");
162
+ throw new InvalidConfigurationError("frontoparallelPlane.kind is invalid.");
156
163
  }
157
164
  requirePositiveFinite("frontoparallelPlane.referenceDepthM", declaration.referenceDepthM);
158
165
  for (const entry of points) {
@@ -203,10 +210,12 @@ function createPointTrajectory(pointId, referencePosition, relativeTranslationVe
203
210
  * Evaluates multiple explicit metric points on one rigidly translating object
204
211
  * at deterministic physical times.
205
212
  *
206
- * This is geometry only. It does not synthesize a blur kernel, visibility,
207
- * radiance integration, deformation, camera rotation or a universal scale.
213
+ * This is geometry only. It does not build a blur kernel, decide visibility,
214
+ * integrate radiance, deform the object, rotate the camera or apply a
215
+ * universal scale.
208
216
  */
209
217
  export function calculateExtendedObjectProjectionTrajectory(input) {
218
+ requireInputKeys(input, "calculateExtendedObjectProjectionTrajectory", ["objectId", "focalLengthMm", "focusDistanceM", "objectTranslationVelocityMps", "cameraTranslationVelocityMps", "sampleTimesSecondsFromReference", "points", "frontoparallelPlane"]);
210
219
  const objectId = requireNonEmptyString(input.objectId, "objectId");
211
220
  const projectionDistanceMm = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
212
221
  const objectVelocity = requireFiniteVector(input
@@ -281,17 +290,28 @@ function samePoint(a, b) {
281
290
  a.y === b.y);
282
291
  }
283
292
  function localExposureForPoint(timing, point) {
293
+ requireInputObject(timing, "timing");
294
+ requireInputObject(timing.exposureWindows, "timing.exposureWindows");
295
+ if (!Array.isArray(timing.exposureWindows.samples))
296
+ throw new InvalidConfigurationError("timing.exposureWindows.samples must be an array.");
297
+ timing.exposureWindows.samples.forEach((sample, index) => {
298
+ requireInputObject(sample, "timing.exposureWindows.samples[" + index + "]");
299
+ requireInputObject(sample.pointNative, "timing.exposureWindows.samples[" + index + "].pointNative");
300
+ });
301
+ requireInputObject(point, "destinationPointNative");
284
302
  const matches = timing.exposureWindows.samples.filter((sample) => samePoint(sample.pointNative, point));
285
303
  if (matches.length !== 1) {
286
- throw new InvalidScientificInputError("Each extended-object capture point must match exactly one committed #12 exposure-window sample point.");
304
+ throw new InvalidScientificInputError("Each extended-object capture point must match exactly one committed exposure-window sample point.");
287
305
  }
288
306
  return matches[0];
289
307
  }
290
308
  /**
291
- * Evaluates extended-object projection at deterministic midpoint nodes inside
292
- * each point's authoritative #12 local exposure window.
309
+ * Evaluates extended-object projection at deterministic midpoint time samples
310
+ * inside each point's local exposure window (from the capture exposure
311
+ * schedule).
293
312
  */
294
313
  export function calculateCaptureExtendedObjectTemporalProjection(input) {
314
+ requireInputKeys(input, "calculateCaptureExtendedObjectTemporalProjection", ["objectId", "timing", "focalLengthMm", "focusDistanceM", "objectTranslationVelocityMps", "cameraTranslationVelocityMps", "temporalSampleCount", "points", "frontoparallelPlane"]);
295
315
  requirePositiveInteger("temporalSampleCount", input.temporalSampleCount);
296
316
  const objectId = requireNonEmptyString(input.objectId, "objectId");
297
317
  const projectionDistanceMm = resolveProjectionDistanceMm(input.focalLengthMm, input.focusDistanceM);
@@ -391,7 +411,7 @@ export function calculateCaptureExtendedObjectTemporalProjection(input) {
391
411
  sensorReadoutTimingUsedAsExposureTiming: false,
392
412
  timeVaryingDefocusMayBeRequired: relative.z !== 0
393
413
  }, "capture-local-extended-object-time-varying-projection", "1.0.0", [
394
- "Every point is evaluated at deterministic midpoint nodes in its own authoritative #12 local exposure interval.",
414
+ "Every point is evaluated at deterministic midpoint nodes in its own authoritative local exposure interval of the exposure-window model.",
395
415
  "Sensor data-readout timing is not substituted for exposure time.",
396
416
  "Rolling/local exposure may cause different native destinations to integrate different portions of the same rigid object trajectory.",
397
417
  "The result remains geometry only and does not authorize endpoint interpolation as a complete visibility/radiance blur solution.",
@@ -1 +1 @@
1
- {"version":3,"file":"extended-object-projection.js","sourceRoot":"","sources":["../../src/motion/extended-object-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extended-object-projection.js","sourceRoot":"","sources":["../../src/motion/extended-object-projection.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Projection of an extended object: several explicit points (in metres) on one rigid object that\n * moves in a straight line.\n *\n * The points are evaluated at deterministic physical times, or at deterministic midpoint time\n * samples inside each point's local exposure window (from the capture exposure schedule).\n *\n * This is geometry only. It does not build a blur kernel, decide visibility, integrate radiance,\n * deform the object, rotate the camera or apply a universal scale.\n * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport type {\n RasterPoint\n} from \"../output/capture-geometry.js\";\nimport {\n calculateThinLensImageDistance\n} from \"../optics/thin-lens.js\";\nimport type {\n Vector3\n} from \"../schema/scene.js\";\nimport type {\n ResolvedCaptureModeTiming\n} from \"../sensor/capture-mode-timing.js\";\nimport { requireInputKeys, requireInputObject } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport interface ExtendedObjectMetricPoint {\n pointId: string;\n /**\n * Point in camera space, in metres, at the shared reference phase.\n *\n * +X right, +Y up, +Z forward/away from the camera.\n */\n positionCameraM: Vector3;\n}\n\nexport interface ExtendedObjectFrontoparallelPlaneDeclaration {\n kind: \"fronto-parallel-planar-patch\";\n referenceDepthM: number;\n}\n\nexport interface CalculateExtendedObjectProjectionTrajectoryInput {\n objectId: string;\n focalLengthMm: number;\n focusDistanceM?: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n sampleTimesSecondsFromReference:\n readonly number[];\n points:\n readonly ExtendedObjectMetricPoint[];\n frontoparallelPlane?:\n ExtendedObjectFrontoparallelPlaneDeclaration;\n}\n\nexport interface ExtendedObjectProjectionNode {\n sampleIndex: number;\n timeSecondsFromReference: number;\n relativePositionCameraM:\n Vector3;\n mappedImagePointMm: {\n x: number;\n y: number;\n };\n deltaFromReferenceImagePlaneMm: {\n x: number;\n y: number;\n distance: number;\n };\n depthM: number;\n planarMagnificationScaleFromReference:\n number | null;\n}\n\nexport interface ExtendedObjectPointProjectionTrajectory {\n pointId: string;\n referencePositionCameraM:\n Vector3;\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n nodes:\n readonly ExtendedObjectProjectionNode[];\n}\n\nexport interface ExtendedObjectPlanarMagnificationDiagnostic {\n geometry:\n \"declared-fronto-parallel-planar-patch\";\n referenceDepthM: number;\n uniformScaleAuthorizedWithinDeclaredPatch:\n true;\n scaleByTime:\n readonly {\n sampleIndex: number;\n timeSecondsFromReference:\n number;\n scaleFromReference: number;\n }[];\n lateralRigidTranslationDoesNotChangePatchScale:\n true;\n notAuthorizedForArbitrary3dGeometry:\n true;\n}\n\nexport interface ExtendedObjectProjectionTrajectory {\n objectId: string;\n timeReference:\n \"caller-declared-common-reference-phase\";\n projectionDistanceMm: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n relativeTranslationVelocityMps:\n Vector3;\n rigidTranslationOnly: true;\n pointTrajectories:\n readonly ExtendedObjectPointProjectionTrajectory[];\n planarMagnificationDiagnostic:\n ExtendedObjectPlanarMagnificationDiagnostic | null;\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized:\n false;\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n deformationModeled: false;\n accelerationModeled: false;\n blurKernelCalculated: false;\n radianceIntegrated: false;\n timeVaryingDefocusMayBeRequired:\n boolean;\n}\n\nexport interface CaptureExtendedObjectMetricPoint\n extends ExtendedObjectMetricPoint {\n /**\n * Native destination point. It selects the local exposure window (from the\n * capture exposure schedule) for this object point.\n */\n destinationPointNative:\n RasterPoint;\n}\n\nexport interface CalculateCaptureExtendedObjectTemporalProjectionInput {\n objectId: string;\n timing:\n ResolvedCaptureModeTiming;\n focalLengthMm: number;\n focusDistanceM?: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n temporalSampleCount: number;\n points:\n readonly CaptureExtendedObjectMetricPoint[];\n frontoparallelPlane?:\n ExtendedObjectFrontoparallelPlaneDeclaration;\n}\n\nexport interface CaptureExtendedObjectTemporalNode\n extends ExtendedObjectProjectionNode {\n localExposurePhase: number;\n normalizedTimeWeight: number;\n timeMeasureSeconds: number;\n}\n\nexport interface CaptureExtendedObjectPointTrajectory {\n pointId: string;\n destinationPointNative:\n RasterPoint;\n referencePositionCameraM:\n Vector3;\n referenceImagePointMm: {\n x: number;\n y: number;\n };\n localExposureWindow: {\n startSecondsFromCaptureReference:\n number;\n endSecondsFromCaptureReference:\n number;\n durationSeconds: number;\n };\n nodes:\n readonly CaptureExtendedObjectTemporalNode[];\n}\n\nexport interface CaptureExtendedObjectTemporalProjection {\n objectId: string;\n timeReference:\n \"first-opening-boundary-phase\";\n timingProfileIdentity: {\n profileId: string;\n profileVersion: string;\n captureModeId: string;\n };\n projectionDistanceMm: number;\n temporalSampleCount: number;\n objectTranslationVelocityMps:\n Vector3;\n cameraTranslationVelocityMps:\n Vector3;\n relativeTranslationVelocityMps:\n Vector3;\n rigidTranslationOnly: true;\n pointTrajectories:\n readonly CaptureExtendedObjectPointTrajectory[];\n planarMagnificationDiagnosticAvailable:\n boolean;\n metricSceneDepthRequired: true;\n oneGlobalHomographyAuthorized:\n false;\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false;\n cameraRotationComposed: false;\n visibilityOcclusionModeled: false;\n deformationModeled: false;\n accelerationModeled: false;\n blurKernelCalculated: false;\n radianceIntegrated: false;\n sensorReadoutTimingUsedAsExposureTiming:\n false;\n timeVaryingDefocusMayBeRequired:\n boolean;\n}\n\nfunction requireNonEmptyString(\n value: string,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requireFiniteVector(\n value: Vector3,\n path: string\n): Vector3 {\n requireInputObject(value, path);\n for (\n const axis of\n [\"x\", \"y\", \"z\"] as const\n ) {\n if (\n !Number.isFinite(\n value[axis]\n )\n ) {\n throw new InvalidScientificInputError(\n path +\n \".\" +\n axis +\n \" must be finite.\"\n );\n }\n }\n return {\n ...value\n };\n}\n\nfunction requireFiniteTime(\n value: number,\n path: string\n): number {\n if (!Number.isFinite(value)) {\n throw new InvalidScientificInputError(\n path + \" must be finite.\"\n );\n }\n return value;\n}\n\nfunction approximatelyEqual(\n a: number,\n b: number\n): boolean {\n const scale =\n Math.max(\n 1,\n Math.abs(a),\n Math.abs(b)\n );\n return (\n Math.abs(a - b) <=\n Number.EPSILON *\n 32 *\n scale\n );\n}\n\nfunction resolveProjectionDistanceMm(\n focalLengthMm: number,\n focusDistanceM:\n number | undefined\n): number {\n requirePositiveFinite(\n \"focalLengthMm\",\n focalLengthMm\n );\n return focusDistanceM ===\n undefined\n ? focalLengthMm\n : calculateThinLensImageDistance({\n focalLengthMm,\n objectDistanceM:\n focusDistanceM\n }).value.imageDistanceMm;\n}\n\nfunction projectMetricPoint(\n positionCameraM:\n Vector3,\n projectionDistanceMm: number,\n path: string\n): {\n x: number;\n y: number;\n} {\n if (\n !Number.isFinite(\n positionCameraM.z\n ) ||\n positionCameraM.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must remain in front of the camera plane.\"\n );\n }\n\n const mapped = {\n x:\n projectionDistanceMm *\n (\n positionCameraM.x /\n positionCameraM.z\n ),\n y:\n projectionDistanceMm *\n (\n positionCameraM.y /\n positionCameraM.z\n )\n };\n if (\n !Number.isFinite(mapped.x) ||\n !Number.isFinite(mapped.y)\n ) {\n throw new InvalidScientificInputError(\n path +\n \" projection must remain finite.\"\n );\n }\n return mapped;\n}\n\nfunction validateUniquePoints<T extends ExtendedObjectMetricPoint>(\n points: readonly T[]\n): readonly {\n point:\n T;\n pointId: string;\n referencePosition:\n Vector3;\n}[] {\n if (\n !Array.isArray(points) ||\n points.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"points must be a non-empty array.\"\n );\n }\n\n const parsed =\n points.map(\n (point, index) => {\n const path =\n \"points[\" +\n index +\n \"]\";\n requireInputObject(point, path);\n const pointId =\n requireNonEmptyString(\n point.pointId,\n path + \".pointId\"\n );\n const referencePosition =\n requireFiniteVector(\n point.positionCameraM,\n path +\n \".positionCameraM\"\n );\n if (\n referencePosition.z <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \".positionCameraM.z must place the point in front of the camera.\"\n );\n }\n return {\n point,\n pointId,\n referencePosition\n };\n }\n );\n\n const ids =\n parsed.map(\n (entry) =>\n entry.pointId\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidScientificInputError(\n \"points must not contain duplicate pointId values.\"\n );\n }\n return parsed;\n}\n\nfunction validateSampleTimes(\n times:\n readonly number[]\n): readonly number[] {\n if (\n !Array.isArray(times) ||\n times.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sampleTimesSecondsFromReference must be a non-empty array.\"\n );\n }\n let prior =\n Number.NEGATIVE_INFINITY;\n return times.map(\n (value, index) => {\n const time =\n requireFiniteTime(\n value,\n \"sampleTimesSecondsFromReference[\" +\n index +\n \"]\"\n );\n if (time <= prior) {\n throw new InvalidScientificInputError(\n \"sampleTimesSecondsFromReference must be strictly increasing.\"\n );\n }\n prior = time;\n return time;\n }\n );\n}\n\nfunction relativeVelocity(\n objectVelocity:\n Vector3,\n cameraVelocity:\n Vector3\n): Vector3 {\n return {\n x:\n objectVelocity.x -\n cameraVelocity.x,\n y:\n objectVelocity.y -\n cameraVelocity.y,\n z:\n objectVelocity.z -\n cameraVelocity.z\n };\n}\n\nfunction positionAtTime(\n reference:\n Vector3,\n velocity:\n Vector3,\n timeSeconds: number\n): Vector3 {\n return {\n x:\n reference.x +\n velocity.x *\n timeSeconds,\n y:\n reference.y +\n velocity.y *\n timeSeconds,\n z:\n reference.z +\n velocity.z *\n timeSeconds\n };\n}\n\nfunction validatePlanarDeclaration(\n declaration:\n ExtendedObjectFrontoparallelPlaneDeclaration |\n undefined,\n points:\n readonly {\n referencePosition:\n Vector3;\n }[]\n): number | null {\n if (\n declaration === undefined\n ) {\n return null;\n }\n requireInputObject(declaration, \"frontoparallelPlane\");\n if (\n declaration.kind !==\n \"fronto-parallel-planar-patch\"\n ) {\n throw new InvalidConfigurationError(\n \"frontoparallelPlane.kind is invalid.\"\n );\n }\n requirePositiveFinite(\n \"frontoparallelPlane.referenceDepthM\",\n declaration.referenceDepthM\n );\n for (\n const entry of points\n ) {\n if (\n !approximatelyEqual(\n entry.referencePosition.z,\n declaration.referenceDepthM\n )\n ) {\n throw new InvalidScientificInputError(\n \"Every declared fronto-parallel point must lie at frontoparallelPlane.referenceDepthM.\"\n );\n }\n }\n return declaration\n .referenceDepthM;\n}\n\nfunction createPointTrajectory(\n pointId: string,\n referencePosition:\n Vector3,\n relativeTranslationVelocityMps:\n Vector3,\n sampleTimes:\n readonly number[],\n projectionDistanceMm:\n number,\n planarReferenceDepthM:\n number | null,\n path: string\n): ExtendedObjectPointProjectionTrajectory {\n const referenceImagePoint =\n projectMetricPoint(\n referencePosition,\n projectionDistanceMm,\n path +\n \".positionCameraM\"\n );\n\n const nodes =\n sampleTimes.map(\n (\n timeSeconds,\n sampleIndex\n ) => {\n const position =\n positionAtTime(\n referencePosition,\n relativeTranslationVelocityMps,\n timeSeconds\n );\n const mapped =\n projectMetricPoint(\n position,\n projectionDistanceMm,\n path +\n \".positionAtTime\"\n );\n const deltaX =\n mapped.x -\n referenceImagePoint.x;\n const deltaY =\n mapped.y -\n referenceImagePoint.y;\n\n return {\n sampleIndex,\n timeSecondsFromReference:\n timeSeconds,\n relativePositionCameraM:\n position,\n mappedImagePointMm:\n mapped,\n deltaFromReferenceImagePlaneMm: {\n x: deltaX,\n y: deltaY,\n distance:\n Math.hypot(\n deltaX,\n deltaY\n )\n },\n depthM:\n position.z,\n planarMagnificationScaleFromReference:\n planarReferenceDepthM ===\n null\n ? null\n : planarReferenceDepthM /\n position.z\n };\n }\n );\n\n return {\n pointId,\n referencePositionCameraM:\n referencePosition,\n referenceImagePointMm:\n referenceImagePoint,\n nodes\n };\n}\n\n/**\n * Evaluates multiple explicit metric points on one rigidly translating object\n * at deterministic physical times.\n *\n * This is geometry only. It does not build a blur kernel, decide visibility,\n * integrate radiance, deform the object, rotate the camera or apply a\n * universal scale.\n */\nexport function calculateExtendedObjectProjectionTrajectory(\n input:\n CalculateExtendedObjectProjectionTrajectoryInput\n): CalculationResult<ExtendedObjectProjectionTrajectory> {\n requireInputKeys(input, \"calculateExtendedObjectProjectionTrajectory\", [\"objectId\", \"focalLengthMm\", \"focusDistanceM\", \"objectTranslationVelocityMps\", \"cameraTranslationVelocityMps\", \"sampleTimesSecondsFromReference\", \"points\", \"frontoparallelPlane\"]);\n const objectId =\n requireNonEmptyString(\n input.objectId,\n \"objectId\"\n );\n const projectionDistanceMm =\n resolveProjectionDistanceMm(\n input.focalLengthMm,\n input.focusDistanceM\n );\n const objectVelocity =\n requireFiniteVector(\n input\n .objectTranslationVelocityMps,\n \"objectTranslationVelocityMps\"\n );\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n const relative =\n relativeVelocity(\n objectVelocity,\n cameraVelocity\n );\n const sampleTimes =\n validateSampleTimes(\n input\n .sampleTimesSecondsFromReference\n );\n const points =\n validateUniquePoints(\n input.points\n );\n const planarDepth =\n validatePlanarDeclaration(\n input.frontoparallelPlane,\n points\n );\n\n const pointTrajectories =\n points.map(\n (\n entry,\n pointIndex\n ) =>\n createPointTrajectory(\n entry.pointId,\n entry.referencePosition,\n relative,\n sampleTimes,\n projectionDistanceMm,\n planarDepth,\n \"points[\" +\n pointIndex +\n \"]\"\n )\n );\n\n const scaleByTime =\n planarDepth === null\n ? null\n : sampleTimes.map(\n (\n timeSeconds,\n sampleIndex\n ) => {\n const currentDepth =\n planarDepth +\n relative.z *\n timeSeconds;\n if (\n currentDepth <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Declared fronto-parallel patch reaches or crosses the camera plane.\"\n );\n }\n return {\n sampleIndex,\n timeSecondsFromReference:\n timeSeconds,\n scaleFromReference:\n planarDepth /\n currentDepth\n };\n }\n );\n\n return approximationResult(\n {\n objectId,\n timeReference:\n \"caller-declared-common-reference-phase\",\n projectionDistanceMm,\n objectTranslationVelocityMps:\n objectVelocity,\n cameraTranslationVelocityMps:\n cameraVelocity,\n relativeTranslationVelocityMps:\n relative,\n rigidTranslationOnly: true,\n pointTrajectories,\n planarMagnificationDiagnostic:\n scaleByTime === null\n ? null\n : {\n geometry:\n \"declared-fronto-parallel-planar-patch\",\n referenceDepthM:\n planarDepth!,\n uniformScaleAuthorizedWithinDeclaredPatch:\n true,\n scaleByTime,\n lateralRigidTranslationDoesNotChangePatchScale:\n true,\n notAuthorizedForArbitrary3dGeometry:\n true\n },\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n deformationModeled: false,\n accelerationModeled: false,\n blurKernelCalculated:\n false,\n radianceIntegrated: false,\n timeVaryingDefocusMayBeRequired:\n relative.z !== 0\n },\n \"extended-object-time-varying-projection\",\n \"1.0.0\",\n [\n \"Every object point is projected independently from explicit metric camera-space depth.\",\n \"Object and camera translation remain separate inputs and compose only as object-minus-camera relative translation.\",\n \"One global homography or one global scale is not authorized for arbitrary 3D geometry.\",\n \"A uniform magnification diagnostic is emitted only for an explicitly declared and validated fronto-parallel planar patch under the shared rigid-translation model.\",\n \"Constant rigid translation is the only object motion modeled; acceleration, rotation, articulation and deformation are excluded.\",\n \"Visibility, occlusion/disocclusion, frame-boundary coverage, radiance integration and blur-kernel synthesis remain downstream.\",\n \"When relative Z translation is nonzero, downstream defocus/PSF state may also vary with time.\"\n ]\n );\n}\n\nfunction samePoint(\n a: RasterPoint,\n b: RasterPoint\n): boolean {\n return (\n a.x === b.x &&\n a.y === b.y\n );\n}\n\nfunction localExposureForPoint(\n timing:\n ResolvedCaptureModeTiming,\n point:\n RasterPoint\n): ResolvedCaptureModeTiming[\"exposureWindows\"][\"samples\"][number] {\n requireInputObject(timing, \"timing\");\n requireInputObject(timing.exposureWindows, \"timing.exposureWindows\");\n if (!Array.isArray(timing.exposureWindows.samples)) throw new InvalidConfigurationError(\"timing.exposureWindows.samples must be an array.\");\n timing.exposureWindows.samples.forEach((sample, index) => {\n requireInputObject(sample, \"timing.exposureWindows.samples[\" + index + \"]\");\n requireInputObject(sample.pointNative, \"timing.exposureWindows.samples[\" + index + \"].pointNative\");\n });\n requireInputObject(point, \"destinationPointNative\");\n const matches =\n timing.exposureWindows.samples.filter(\n (sample) =>\n samePoint(\n sample.pointNative,\n point\n )\n );\n if (matches.length !== 1) {\n throw new InvalidScientificInputError(\n \"Each extended-object capture point must match exactly one committed exposure-window sample point.\"\n );\n }\n return matches[0]!;\n}\n\n/**\n * Evaluates extended-object projection at deterministic midpoint time samples\n * inside each point's local exposure window (from the capture exposure\n * schedule).\n */\nexport function calculateCaptureExtendedObjectTemporalProjection(\n input:\n CalculateCaptureExtendedObjectTemporalProjectionInput\n): CalculationResult<CaptureExtendedObjectTemporalProjection> {\n requireInputKeys(input, \"calculateCaptureExtendedObjectTemporalProjection\", [\"objectId\", \"timing\", \"focalLengthMm\", \"focusDistanceM\", \"objectTranslationVelocityMps\", \"cameraTranslationVelocityMps\", \"temporalSampleCount\", \"points\", \"frontoparallelPlane\"]);\n requirePositiveInteger(\n \"temporalSampleCount\",\n input.temporalSampleCount\n );\n const objectId =\n requireNonEmptyString(\n input.objectId,\n \"objectId\"\n );\n const projectionDistanceMm =\n resolveProjectionDistanceMm(\n input.focalLengthMm,\n input.focusDistanceM\n );\n const objectVelocity =\n requireFiniteVector(\n input\n .objectTranslationVelocityMps,\n \"objectTranslationVelocityMps\"\n );\n const cameraVelocity =\n requireFiniteVector(\n input\n .cameraTranslationVelocityMps,\n \"cameraTranslationVelocityMps\"\n );\n const relative =\n relativeVelocity(\n objectVelocity,\n cameraVelocity\n );\n const points =\n validateUniquePoints(\n input.points\n );\n const planarDepth =\n validatePlanarDeclaration(\n input.frontoparallelPlane,\n points\n );\n\n const totalNodeCount =\n input.temporalSampleCount *\n points.length;\n if (\n !Number.isSafeInteger(\n totalNodeCount\n )\n ) {\n throw new InvalidScientificInputError(\n \"temporalSampleCount × points.length must remain a safe integer.\"\n );\n }\n\n const pointTrajectories =\n points.map(\n (\n entry,\n pointIndex\n ) => {\n const capturePoint =\n entry.point as\n CaptureExtendedObjectMetricPoint;\n const exposure =\n localExposureForPoint(\n input.timing,\n capturePoint\n .destinationPointNative\n );\n const duration =\n exposure\n .localExposureDurationSeconds;\n if (\n !Number.isFinite(\n duration\n ) ||\n duration <= 0\n ) {\n throw new InvalidScientificInputError(\n \"Extended-object capture projection requires a positive finite local exposure duration.\"\n );\n }\n\n const times =\n Array.from(\n {\n length:\n input.temporalSampleCount\n },\n (\n _,\n temporalSampleIndex\n ) =>\n exposure\n .startOffsetSecondsFromOpeningReference +\n (\n temporalSampleIndex +\n 0.5\n ) /\n input.temporalSampleCount *\n duration\n );\n const trajectory =\n createPointTrajectory(\n entry.pointId,\n entry.referencePosition,\n relative,\n times,\n projectionDistanceMm,\n planarDepth,\n \"points[\" +\n pointIndex +\n \"]\"\n );\n const normalizedTimeWeight =\n 1 /\n input.temporalSampleCount;\n const timeMeasureSeconds =\n duration /\n input.temporalSampleCount;\n\n return {\n pointId:\n entry.pointId,\n destinationPointNative: {\n ...capturePoint\n .destinationPointNative\n },\n referencePositionCameraM:\n trajectory\n .referencePositionCameraM,\n referenceImagePointMm:\n trajectory\n .referenceImagePointMm,\n localExposureWindow: {\n startSecondsFromCaptureReference:\n exposure\n .startOffsetSecondsFromOpeningReference,\n endSecondsFromCaptureReference:\n exposure\n .endOffsetSecondsFromOpeningReference,\n durationSeconds:\n duration\n },\n nodes:\n trajectory.nodes.map(\n (\n node,\n temporalSampleIndex\n ) => ({\n ...node,\n localExposurePhase:\n (\n temporalSampleIndex +\n 0.5\n ) /\n input\n .temporalSampleCount,\n normalizedTimeWeight,\n timeMeasureSeconds\n })\n )\n };\n }\n );\n\n return approximationResult(\n {\n objectId,\n timeReference:\n \"first-opening-boundary-phase\",\n timingProfileIdentity: {\n profileId:\n input.timing\n .timingProfileId,\n profileVersion:\n input.timing\n .timingProfileVersion,\n captureModeId:\n input.timing\n .captureModeId\n },\n projectionDistanceMm,\n temporalSampleCount:\n input.temporalSampleCount,\n objectTranslationVelocityMps:\n objectVelocity,\n cameraTranslationVelocityMps:\n cameraVelocity,\n relativeTranslationVelocityMps:\n relative,\n rigidTranslationOnly: true,\n pointTrajectories,\n planarMagnificationDiagnosticAvailable:\n planarDepth !== null,\n metricSceneDepthRequired:\n true,\n oneGlobalHomographyAuthorized:\n false,\n oneGlobalScaleAuthorizedForArbitrary3dGeometry:\n false,\n cameraRotationComposed:\n false,\n visibilityOcclusionModeled:\n false,\n deformationModeled: false,\n accelerationModeled: false,\n blurKernelCalculated:\n false,\n radianceIntegrated: false,\n sensorReadoutTimingUsedAsExposureTiming:\n false,\n timeVaryingDefocusMayBeRequired:\n relative.z !== 0\n },\n \"capture-local-extended-object-time-varying-projection\",\n \"1.0.0\",\n [\n \"Every point is evaluated at deterministic midpoint nodes in its own authoritative local exposure interval of the exposure-window model.\",\n \"Sensor data-readout timing is not substituted for exposure time.\",\n \"Rolling/local exposure may cause different native destinations to integrate different portions of the same rigid object trajectory.\",\n \"The result remains geometry only and does not authorize endpoint interpolation as a complete visibility/radiance blur solution.\",\n \"Camera rotation and subject deformation remain separate; object and camera translation compose only through explicit relative translation.\",\n \"When relative depth changes, downstream defocus/PSF evaluation may need to vary at the same physical-time nodes.\"\n ]\n );\n}\n"]}
@@ -1,13 +1,15 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Calculates sensor-plane motion during an exposure using ideal rectilinear projection and constant
4
- * linear object velocity. Without focusDistanceM, nominal focal length is the backwards-compatible
5
- * pinhole projection distance. With focusDistanceM, the selected thin-lens sensor-plane image distance
6
- * is used. The calculation projects the object's shutter-open and shutter-close positions onto the
7
- * image plane and measures the displacement between them. It therefore handles lateral and
8
- * depth-direction motion without relying on a generic "subject speed" category.
9
- * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
10
- * limits.
2
+ * How far a moving object travels across the sensor during an exposure. Uses ideal rectilinear
3
+ * projection and a constant straight-line object velocity.
4
+ * - Without focusDistanceM, the projection distance is the nominal focal length (the older pinhole
5
+ * behaviour).
6
+ * - With focusDistanceM, it is the thin-lens image distance for that focus.
7
+ *
8
+ * The object's positions when the shutter opens and closes are both projected onto the image plane,
9
+ * and the distance between them is measured. So sideways motion and motion toward or away from the
10
+ * camera are both handled, without a generic "subject speed" category.
11
+ * @see docs/MOTION_AND_SIGNAL.md for the equations, units, coordinate conventions, known blockers
12
+ * and support limits.
11
13
  */
12
14
  import { type CalculationResult } from "../core/calculation-result.js";
13
15
  import type { Vector3 } from "../schema/scene.js";
@@ -36,17 +38,16 @@ export interface ProjectedMotionBlur {
36
38
  * Calculates sensor-plane motion during an exposure using ideal rectilinear
37
39
  * projection and constant linear object velocity.
38
40
  *
39
- * Without focusDistanceM, nominal focal length is the backwards-compatible
40
- * pinhole projection distance. With focusDistanceM, the selected thin-lens
41
- * sensor-plane image distance is used.
41
+ * Without focusDistanceM, the projection distance is the nominal focal length
42
+ * (the older pinhole behaviour). With focusDistanceM, it is the thin-lens
43
+ * image distance for that focus.
42
44
  *
43
- * The calculation projects the object's shutter-open and shutter-close
44
- * positions onto the image plane and measures the displacement between them.
45
- * It therefore handles lateral and depth-direction motion without relying on a
46
- * generic "subject speed" category.
45
+ * The object's positions when the shutter opens and closes are both projected
46
+ * onto the image plane, and the distance between them is measured. So
47
+ * sideways motion and motion toward or away from the camera are both handled,
48
+ * without a generic "subject speed" category.
47
49
  *
48
50
  * @param input Camera, exposure, object-position, and velocity inputs.
49
51
  * @returns Projected sensor-plane displacement.
50
52
  */
51
53
  export declare function calculateProjectedMotionBlur(input: CalculateProjectedMotionBlurInput): CalculationResult<ProjectedMotionBlur>;
52
- //# sourceMappingURL=projected-motion.d.ts.map