@photivra/engine 1.5.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -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/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"capture-geometry.js","sourceRoot":"","sources":["../../src/output/capture-geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-geometry.js","sourceRoot":"","sources":["../../src/output/capture-geometry.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Capture geometry: how the native sensor, the active capture area, the camera's physical\n * orientation and the final output crop relate to each other.\n *\n * It converts points, vectors and rectangles between native and oriented pixel coordinates,\n * maps oriented positions to the optical image plane and back, and computes field of view (FOV)\n * for the active capture and the final output.\n * @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n calculateFieldOfViewBounds\n} from \"../camera/field-of-view.js\";\nimport {\n calculatedResult,\n type CalculationProvenance,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport {\n type NativeImageRaster,\n type RasterDimensions,\n type SensorImagingArea\n} from \"../sensor/sensor-geometry.js\";\nimport { requireInputKeys, requireInputObject } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nexport type CaptureOrientation =\n | \"landscape\"\n | \"portrait-clockwise\"\n | \"landscape-inverted\"\n | \"portrait-counter-clockwise\";\n\nconst CAPTURE_ORIENTATIONS = new Set<CaptureOrientation>([\n \"landscape\",\n \"portrait-clockwise\",\n \"landscape-inverted\",\n \"portrait-counter-clockwise\"\n]);\n\nexport interface RasterPoint {\n x: number;\n y: number;\n}\n\nexport interface RasterVector {\n x: number;\n y: number;\n}\n\n/**\n * Integer half-open rectangle in raster coordinates.\n *\n * Coordinates use a top-left origin with +X to the right and +Y downward.\n * The covered extent is [x, x + width) × [y, y + height).\n */\nexport interface RasterRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface PhysicalBoundsFromOpticalAxisMm {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface NormalizedRasterUv {\n /** 0 at the left edge, 1 at the right edge. */\n u: number;\n /** 0 at the top edge, 1 at the bottom edge. */\n v: number;\n}\n\n/**\n * A point on the optical image plane, in millimetres, before camera orientation is applied.\n *\n * The origin is the optical axis. +X points right and +Y points up.\n */\nexport interface ImagePlaneMetricPointMm {\n x: number;\n y: number;\n}\n\nexport interface MapOrientedPhysicalUvToImagePlaneInput {\n uv: NormalizedRasterUv;\n /**\n * Physical region represented by the normalized raster, after physical\n * camera orientation, using the capture contract's +Y-down physical basis.\n */\n orientedPhysicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;\n orientation: CaptureOrientation;\n}\n\nexport interface MapImagePlanePointToOrientedPhysicalUvInput {\n imagePlanePointMm: ImagePlaneMetricPointMm;\n /**\n * Physical region represented by the normalized raster, after physical\n * camera orientation, using the capture contract's +Y-down physical basis.\n */\n orientedPhysicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;\n orientation: CaptureOrientation;\n}\n\nexport interface ResolveCaptureGeometryInput {\n imagingArea: SensorImagingArea;\n nativeRaster: NativeImageRaster;\n orientation: CaptureOrientation;\n /**\n * Active capture rectangle in native sensor raster coordinates.\n *\n * Defaults to the full native raster.\n */\n activeCaptureRect?: RasterRect;\n /**\n * Final digital (output) crop, in oriented active-capture pixel coordinates.\n *\n * Defaults to the full oriented active capture.\n */\n outputCropRect?: RasterRect;\n /**\n * Final output image size after the optional digital crop and resampling.\n *\n * Defaults to the output-crop size. The output must keep the crop's aspect\n * ratio, allowing only a small tolerance for integer rounding.\n */\n outputRaster?: RasterDimensions;\n}\n\nexport interface ResolvedCaptureGeometry {\n native: {\n imagingArea: SensorImagingArea;\n raster: NativeImageRaster;\n };\n activeCapture: {\n nativeRect: RasterRect;\n imagingArea: SensorImagingArea;\n /**\n * Top-left active-area offset from the native imaging-area top-left.\n */\n physicalOffsetMm: {\n x: number;\n y: number;\n };\n /** Active-area center relative to the native optical axis. */\n centerOffsetFromOpticalAxisMm: RasterVector;\n /** Native physical bounds relative to the optical axis. */\n physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;\n /**\n * The current generic model assumes the native pixels evenly cover the\n * declared physical imaging area.\n */\n imagingAreaDerivation: \"uniform-native-raster\";\n raster: RasterDimensions;\n };\n orientedCapture: {\n orientation: CaptureOrientation;\n imagingArea: SensorImagingArea;\n /** Oriented physical bounds relative to the optical axis. */\n physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;\n raster: RasterDimensions;\n };\n output: {\n /**\n * Digital (output) crop, in oriented active-capture coordinates.\n *\n * This crop does not change the physical sensor or the active-capture\n * geometry.\n */\n cropRect: RasterRect;\n raster: RasterDimensions;\n /** Physical region retained by the digital/output crop. */\n imagingArea: SensorImagingArea;\n physicalBoundsFromOpticalAxisMm: PhysicalBoundsFromOpticalAxisMm;\n centerOffsetFromOpticalAxisMm: RasterVector;\n sourceRetainedAreaFraction: number;\n /** Pixel resampling from the oriented active capture to the output image. */\n orientedCaptureToOutputScale: {\n x: number;\n y: number;\n axisRelativeDifference: number;\n };\n };\n}\n\nexport interface TransformRasterPointInput {\n point: RasterPoint;\n nativeRaster: NativeImageRaster;\n orientation: CaptureOrientation;\n}\n\nexport interface TransformRasterVectorInput {\n vector: RasterVector;\n orientation: CaptureOrientation;\n}\n\nexport interface TransformRasterRectInput {\n rect: RasterRect;\n nativeRaster: NativeImageRaster;\n orientation: CaptureOrientation;\n}\n\nexport interface CalculateActiveCaptureFieldOfViewInput {\n imagingArea: SensorImagingArea;\n nativeRaster: NativeImageRaster;\n orientation: CaptureOrientation;\n activeCaptureRect?: RasterRect;\n focalLengthMm: number;\n focusDistanceM?: number;\n}\n\nexport interface CalculateOutputFieldOfViewInput {\n imagingArea: SensorImagingArea;\n nativeRaster: NativeImageRaster;\n orientation: CaptureOrientation;\n activeCaptureRect?: RasterRect;\n outputCropRect?: RasterRect;\n focalLengthMm: number;\n focusDistanceM?: number;\n}\n\nexport interface ActiveCaptureFieldOfView {\n orientation: CaptureOrientation;\n horizontalDegrees: number;\n verticalDegrees: number;\n /**\n * The larger of the two corner-to-corner diagonal angles. For a centred\n * crop the two diagonals are equal.\n */\n diagonalDegrees: number;\n horizontalBoundsDegrees: {\n minimum: number;\n maximum: number;\n };\n verticalBoundsDegrees: {\n minimum: number;\n maximum: number;\n };\n diagonalDegreesByCornerPair: {\n topLeftToBottomRight: number;\n topRightToBottomLeft: number;\n };\n activeImagingArea: SensorImagingArea;\n centerOffsetFromOpticalAxisMm: RasterVector;\n projection: {\n projectionDistanceMm: number;\n provenance: CalculationProvenance;\n };\n}\n\nexport interface OutputFieldOfView {\n orientation: CaptureOrientation;\n horizontalDegrees: number;\n verticalDegrees: number;\n diagonalDegrees: number;\n horizontalBoundsDegrees: {\n minimum: number;\n maximum: number;\n };\n verticalBoundsDegrees: {\n minimum: number;\n maximum: number;\n };\n diagonalDegreesByCornerPair: {\n topLeftToBottomRight: number;\n topRightToBottomLeft: number;\n };\n outputImagingArea: SensorImagingArea;\n centerOffsetFromOpticalAxisMm: RasterVector;\n projection: {\n projectionDistanceMm: number;\n provenance: CalculationProvenance;\n };\n}\n\nfunction requireCaptureOrientation(\n value: unknown\n): asserts value is CaptureOrientation {\n if (\n typeof value !== \"string\" ||\n !CAPTURE_ORIENTATIONS.has(value as CaptureOrientation)\n ) {\n throw new InvalidConfigurationError(\"orientation is invalid.\");\n }\n}\n\nfunction requireRasterDimensions(\n name: string,\n raster: RasterDimensions\n): void {\n requireInputObject(raster, name);\n requirePositiveInteger(`${name}.pixelWidth`, raster.pixelWidth);\n requirePositiveInteger(`${name}.pixelHeight`, raster.pixelHeight);\n}\n\nfunction requireNonNegativeInteger(name: string, value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new InvalidScientificInputError(\n `${name} must be a non-negative safe integer.`\n );\n }\n}\n\nfunction validateRasterRect(\n name: string,\n rect: RasterRect,\n bounds: RasterDimensions\n): void {\n requireInputObject(rect, name);\n requireNonNegativeInteger(`${name}.x`, rect.x);\n requireNonNegativeInteger(`${name}.y`, rect.y);\n requirePositiveInteger(`${name}.width`, rect.width);\n requirePositiveInteger(`${name}.height`, rect.height);\n\n if (\n rect.x + rect.width > bounds.pixelWidth ||\n rect.y + rect.height > bounds.pixelHeight\n ) {\n throw new InvalidScientificInputError(\n `${name} must fit entirely within its raster bounds.`\n );\n }\n}\n\nfunction validateRasterPoint(\n name: string,\n point: RasterPoint,\n bounds: RasterDimensions\n): void {\n requireInputObject(point, name);\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n throw new InvalidScientificInputError(\n `${name} coordinates must be finite.`\n );\n }\n if (\n point.x < 0 ||\n point.y < 0 ||\n point.x > bounds.pixelWidth ||\n point.y > bounds.pixelHeight\n ) {\n throw new InvalidScientificInputError(\n `${name} must lie within the raster edge-coordinate bounds.`\n );\n }\n}\n\nfunction validateRasterVector(name: string, vector: RasterVector): void {\n requireInputObject(vector, name);\n if (!Number.isFinite(vector.x) || !Number.isFinite(vector.y)) {\n throw new InvalidScientificInputError(\n `${name} coordinates must be finite.`\n );\n }\n}\n\nconst PHYSICAL_EDGE_TOLERANCE_ULPS = 16;\n\nfunction physicalCoordinateTolerance(\n value: number,\n minimum: number,\n maximum: number\n): number {\n const span = maximum - minimum;\n const scale = Math.max(\n Math.abs(value),\n Math.abs(minimum),\n Math.abs(maximum),\n Math.abs(span),\n Number.MIN_VALUE\n );\n return Number.EPSILON * PHYSICAL_EDGE_TOLERANCE_ULPS * scale;\n}\n\nfunction validatePhysicalBounds(\n name: string,\n bounds: PhysicalBoundsFromOpticalAxisMm\n): void {\n requireInputObject(bounds, name);\n for (const key of [\"left\", \"right\", \"top\", \"bottom\"] as const) {\n if (!Number.isFinite(bounds[key])) {\n throw new InvalidScientificInputError(\n `${name}.${key} must be finite.`\n );\n }\n }\n if (bounds.right <= bounds.left) {\n throw new InvalidScientificInputError(\n `${name} must have right greater than left.`\n );\n }\n if (bounds.bottom <= bounds.top) {\n throw new InvalidScientificInputError(\n `${name} must have bottom greater than top.`\n );\n }\n\n const horizontalSpan = bounds.right - bounds.left;\n const verticalSpan = bounds.bottom - bounds.top;\n if (\n !Number.isFinite(horizontalSpan) ||\n !Number.isFinite(verticalSpan) ||\n horizontalSpan <=\n physicalCoordinateTolerance(bounds.left, bounds.left, bounds.right) ||\n verticalSpan <=\n physicalCoordinateTolerance(bounds.top, bounds.top, bounds.bottom)\n ) {\n throw new InvalidScientificInputError(\n `${name} must have numerically resolvable finite spans relative to the optical-axis coordinate magnitude.`\n );\n }\n}\n\nfunction validateNormalizedUv(name: string, uv: NormalizedRasterUv): void {\n requireInputObject(uv, name);\n if (!Number.isFinite(uv.u) || !Number.isFinite(uv.v)) {\n throw new InvalidScientificInputError(\n `${name} coordinates must be finite.`\n );\n }\n if (uv.u < 0 || uv.u > 1 || uv.v < 0 || uv.v > 1) {\n throw new InvalidScientificInputError(\n `${name} coordinates must lie within [0, 1].`\n );\n }\n}\n\nfunction normalizePhysicalCoordinateToUv(\n name: string,\n value: number,\n minimum: number,\n maximum: number\n): number {\n if (!Number.isFinite(value)) {\n throw new InvalidScientificInputError(`${name} must be finite.`);\n }\n\n const span = maximum - minimum;\n const tolerance = physicalCoordinateTolerance(\n value,\n minimum,\n maximum\n );\n\n if (value < minimum - tolerance || value > maximum + tolerance) {\n throw new InvalidScientificInputError(\n `${name} must lie within the supplied oriented physical bounds.`\n );\n }\n\n const clamped = Math.max(minimum, Math.min(maximum, value));\n return (clamped - minimum) / span;\n}\n\nfunction fullRect(raster: RasterDimensions): RasterRect {\n return {\n x: 0,\n y: 0,\n width: raster.pixelWidth,\n height: raster.pixelHeight\n };\n}\n\nfunction orientRaster(\n raster: RasterDimensions,\n orientation: CaptureOrientation\n): RasterDimensions {\n return orientation === \"portrait-clockwise\" ||\n orientation === \"portrait-counter-clockwise\"\n ? {\n pixelWidth: raster.pixelHeight,\n pixelHeight: raster.pixelWidth\n }\n : {\n pixelWidth: raster.pixelWidth,\n pixelHeight: raster.pixelHeight\n };\n}\n\nfunction rotateVector(\n vector: RasterVector,\n orientation: CaptureOrientation\n): RasterVector {\n switch (orientation) {\n case \"landscape\":\n return { x: vector.x, y: vector.y };\n case \"portrait-clockwise\":\n return { x: -vector.y, y: vector.x };\n case \"landscape-inverted\":\n return { x: -vector.x, y: -vector.y };\n case \"portrait-counter-clockwise\":\n return { x: vector.y, y: -vector.x };\n }\n}\n\nfunction inverseRotateVector(\n vector: RasterVector,\n orientation: CaptureOrientation\n): RasterVector {\n switch (orientation) {\n case \"landscape\":\n return { x: vector.x, y: vector.y };\n case \"portrait-clockwise\":\n return { x: vector.y, y: -vector.x };\n case \"landscape-inverted\":\n return { x: -vector.x, y: -vector.y };\n case \"portrait-counter-clockwise\":\n return { x: -vector.y, y: vector.x };\n }\n}\n\n/**\n * Converts a point in native pixel coordinates to oriented capture coordinates.\n * Coordinates are continuous and measured from pixel edges, so a pixel centre is at +0.5.\n */\nexport function transformNativeRasterPointToOriented(\n input: TransformRasterPointInput\n): RasterPoint {\n requireInputKeys(input, \"transformNativeRasterPointToOriented\", [\"point\", \"nativeRaster\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n requireRasterDimensions(\"nativeRaster\", input.nativeRaster);\n validateRasterPoint(\"point\", input.point, input.nativeRaster);\n\n const { pixelWidth: width, pixelHeight: height } = input.nativeRaster;\n switch (input.orientation) {\n case \"landscape\":\n return { ...input.point };\n case \"portrait-clockwise\":\n return { x: height - input.point.y, y: input.point.x };\n case \"landscape-inverted\":\n return { x: width - input.point.x, y: height - input.point.y };\n case \"portrait-counter-clockwise\":\n return { x: input.point.y, y: width - input.point.x };\n }\n}\n\n/** Converts a point in oriented pixel coordinates (measured from pixel edges) back to native coordinates. */\nexport function transformOrientedRasterPointToNative(\n input: TransformRasterPointInput\n): RasterPoint {\n requireInputKeys(input, \"transformOrientedRasterPointToNative\", [\"point\", \"nativeRaster\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n requireRasterDimensions(\"nativeRaster\", input.nativeRaster);\n const orientedRaster = orientRaster(input.nativeRaster, input.orientation);\n validateRasterPoint(\"point\", input.point, orientedRaster);\n\n const { pixelWidth: width, pixelHeight: height } = input.nativeRaster;\n switch (input.orientation) {\n case \"landscape\":\n return { ...input.point };\n case \"portrait-clockwise\":\n return { x: input.point.y, y: height - input.point.x };\n case \"landscape-inverted\":\n return { x: width - input.point.x, y: height - input.point.y };\n case \"portrait-counter-clockwise\":\n return { x: width - input.point.y, y: input.point.x };\n }\n}\n\n/** Rotates a native raster vector into oriented coordinates. */\nexport function transformNativeRasterVectorToOriented(\n input: TransformRasterVectorInput\n): RasterVector {\n requireInputKeys(input, \"transformNativeRasterVectorToOriented\", [\"vector\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n validateRasterVector(\"vector\", input.vector);\n return rotateVector(input.vector, input.orientation);\n}\n\n/** Rotates an oriented raster vector back into native coordinates. */\nexport function transformOrientedRasterVectorToNative(\n input: TransformRasterVectorInput\n): RasterVector {\n requireInputKeys(input, \"transformOrientedRasterVectorToNative\", [\"vector\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n validateRasterVector(\"vector\", input.vector);\n return inverseRotateVector(input.vector, input.orientation);\n}\n\n/**\n * Maps normalized (0–1) coordinates in an oriented physical image region to the\n * optical image plane used by the lens-field and camera-mapping APIs, before\n * camera orientation.\n *\n * The input bounds are after camera orientation and use +Y down. The returned\n * point has its origin on the optical axis, with +X right and +Y up. No lens or\n * projection equation is applied.\n */\nexport function mapOrientedPhysicalUvToImagePlanePoint(\n input: MapOrientedPhysicalUvToImagePlaneInput\n): ImagePlaneMetricPointMm {\n requireInputKeys(input, \"mapOrientedPhysicalUvToImagePlanePoint\", [\"uv\", \"orientedPhysicalBoundsFromOpticalAxisMm\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n validateNormalizedUv(\"uv\", input.uv);\n validatePhysicalBounds(\n \"orientedPhysicalBoundsFromOpticalAxisMm\",\n input.orientedPhysicalBoundsFromOpticalAxisMm\n );\n\n const bounds = input.orientedPhysicalBoundsFromOpticalAxisMm;\n const orientedPhysicalPoint = {\n x: bounds.left + input.uv.u * (bounds.right - bounds.left),\n y: bounds.top + input.uv.v * (bounds.bottom - bounds.top)\n };\n const nativePhysicalPoint = inverseRotateVector(\n orientedPhysicalPoint,\n input.orientation\n );\n\n return {\n x: nativePhysicalPoint.x,\n y: -nativePhysicalPoint.y\n };\n}\n\n/**\n * Maps an optical image-plane point (before camera orientation) to normalized\n * coordinates in an oriented physical image region.\n *\n * This is the exact inverse of mapOrientedPhysicalUvToImagePlanePoint(). A point\n * outside the region is rejected. A tiny tolerance only absorbs floating-point\n * round-trip error at an edge.\n */\nexport function mapImagePlanePointToOrientedPhysicalUv(\n input: MapImagePlanePointToOrientedPhysicalUvInput\n): NormalizedRasterUv {\n requireInputKeys(input, \"mapImagePlanePointToOrientedPhysicalUv\", [\"imagePlanePointMm\", \"orientedPhysicalBoundsFromOpticalAxisMm\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n validateRasterVector(\"imagePlanePointMm\", input.imagePlanePointMm);\n validatePhysicalBounds(\n \"orientedPhysicalBoundsFromOpticalAxisMm\",\n input.orientedPhysicalBoundsFromOpticalAxisMm\n );\n\n const bounds = input.orientedPhysicalBoundsFromOpticalAxisMm;\n const nativePhysicalPoint = {\n x: input.imagePlanePointMm.x,\n y: -input.imagePlanePointMm.y\n };\n const orientedPhysicalPoint = rotateVector(\n nativePhysicalPoint,\n input.orientation\n );\n return {\n u: normalizePhysicalCoordinateToUv(\n \"imagePlanePointMm.x\",\n orientedPhysicalPoint.x,\n bounds.left,\n bounds.right\n ),\n v: normalizePhysicalCoordinateToUv(\n \"imagePlanePointMm.y\",\n orientedPhysicalPoint.y,\n bounds.top,\n bounds.bottom\n )\n };\n}\n\n/** Transforms an integer half-open native raster rectangle into oriented coordinates. */\nexport function transformNativeRasterRectToOriented(\n input: TransformRasterRectInput\n): RasterRect {\n requireInputKeys(input, \"transformNativeRasterRectToOriented\", [\"rect\", \"nativeRaster\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n requireRasterDimensions(\"nativeRaster\", input.nativeRaster);\n validateRasterRect(\"rect\", input.rect, input.nativeRaster);\n\n const { pixelWidth: width, pixelHeight: height } = input.nativeRaster;\n const { x, y, width: rectWidth, height: rectHeight } = input.rect;\n switch (input.orientation) {\n case \"landscape\":\n return { ...input.rect };\n case \"portrait-clockwise\":\n return {\n x: height - (y + rectHeight),\n y: x,\n width: rectHeight,\n height: rectWidth\n };\n case \"landscape-inverted\":\n return {\n x: width - (x + rectWidth),\n y: height - (y + rectHeight),\n width: rectWidth,\n height: rectHeight\n };\n case \"portrait-counter-clockwise\":\n return {\n x: y,\n y: width - (x + rectWidth),\n width: rectHeight,\n height: rectWidth\n };\n }\n}\n\n/** Transforms an oriented integer half-open rectangle back to native coordinates. */\nexport function transformOrientedRasterRectToNative(\n input: TransformRasterRectInput\n): RasterRect {\n requireInputKeys(input, \"transformOrientedRasterRectToNative\", [\"rect\", \"nativeRaster\", \"orientation\"]);\n requireCaptureOrientation(input.orientation);\n requireRasterDimensions(\"nativeRaster\", input.nativeRaster);\n const orientedRaster = orientRaster(input.nativeRaster, input.orientation);\n validateRasterRect(\"rect\", input.rect, orientedRaster);\n\n const { pixelWidth: width, pixelHeight: height } = input.nativeRaster;\n const { x, y, width: rectWidth, height: rectHeight } = input.rect;\n switch (input.orientation) {\n case \"landscape\":\n return { ...input.rect };\n case \"portrait-clockwise\":\n return {\n x: y,\n y: height - (x + rectWidth),\n width: rectHeight,\n height: rectWidth\n };\n case \"landscape-inverted\":\n return {\n x: width - (x + rectWidth),\n y: height - (y + rectHeight),\n width: rectWidth,\n height: rectHeight\n };\n case \"portrait-counter-clockwise\":\n return {\n x: width - (y + rectHeight),\n y: x,\n width: rectHeight,\n height: rectWidth\n };\n }\n}\n\nfunction nativePhysicalBoundsFromRect(\n imagingArea: SensorImagingArea,\n nativeRaster: NativeImageRaster,\n rect: RasterRect\n): PhysicalBoundsFromOpticalAxisMm {\n const pitchX = imagingArea.widthMm / nativeRaster.pixelWidth;\n const pitchY = imagingArea.heightMm / nativeRaster.pixelHeight;\n\n return {\n left: rect.x * pitchX - imagingArea.widthMm / 2,\n right:\n (rect.x + rect.width) * pitchX - imagingArea.widthMm / 2,\n top: rect.y * pitchY - imagingArea.heightMm / 2,\n bottom:\n (rect.y + rect.height) * pitchY - imagingArea.heightMm / 2\n };\n}\n\nfunction orientPhysicalBounds(\n bounds: PhysicalBoundsFromOpticalAxisMm,\n orientation: CaptureOrientation\n): PhysicalBoundsFromOpticalAxisMm {\n const corners = [\n { x: bounds.left, y: bounds.top },\n { x: bounds.right, y: bounds.top },\n { x: bounds.right, y: bounds.bottom },\n { x: bounds.left, y: bounds.bottom }\n ].map((corner) => rotateVector(corner, orientation));\n\n return {\n left: Math.min(...corners.map((corner) => corner.x)),\n right: Math.max(...corners.map((corner) => corner.x)),\n top: Math.min(...corners.map((corner) => corner.y)),\n bottom: Math.max(...corners.map((corner) => corner.y))\n };\n}\n\nfunction physicalBoundsFromRectWithinBounds(\n sourceBounds: PhysicalBoundsFromOpticalAxisMm,\n sourceRaster: RasterDimensions,\n rect: RasterRect\n): PhysicalBoundsFromOpticalAxisMm {\n const pitchX =\n (sourceBounds.right - sourceBounds.left) / sourceRaster.pixelWidth;\n const pitchY =\n (sourceBounds.bottom - sourceBounds.top) / sourceRaster.pixelHeight;\n\n return {\n left: sourceBounds.left + rect.x * pitchX,\n right: sourceBounds.left + (rect.x + rect.width) * pitchX,\n top: sourceBounds.top + rect.y * pitchY,\n bottom: sourceBounds.top + (rect.y + rect.height) * pitchY\n };\n}\n\nfunction validateOutputAspectRatio(\n cropRect: RasterRect,\n outputRaster: RasterDimensions\n): void {\n // Keep one scale factor for both axes. Allow only the sub-pixel mismatch that\n // comes from rounding an ideal scaled size to whole pixels. A fixed percentage\n // tolerance would allow visible stretching along one axis at large sizes.\n const widthScaleMinimum =\n (outputRaster.pixelWidth - 0.5) / cropRect.width;\n const widthScaleMaximum =\n (outputRaster.pixelWidth + 0.5) / cropRect.width;\n const heightScaleMinimum =\n (outputRaster.pixelHeight - 0.5) / cropRect.height;\n const heightScaleMaximum =\n (outputRaster.pixelHeight + 0.5) / cropRect.height;\n\n const minimumCommonScale = Math.max(\n widthScaleMinimum,\n heightScaleMinimum\n );\n const maximumCommonScale = Math.min(\n widthScaleMaximum,\n heightScaleMaximum\n );\n\n if (minimumCommonScale > maximumCommonScale) {\n throw new InvalidScientificInputError(\n \"outputRaster must preserve outputCropRect aspect ratio within nearest-integer raster rounding; implicit geometric stretching is not supported.\"\n );\n }\n}\n\nfunction angleBetweenSensorRaysDegrees(\n first: RasterVector,\n second: RasterVector,\n projectionDistanceMm: number\n): number {\n const firstLength = Math.hypot(\n first.x,\n first.y,\n projectionDistanceMm\n );\n const secondLength = Math.hypot(\n second.x,\n second.y,\n projectionDistanceMm\n );\n const dot =\n first.x * second.x +\n first.y * second.y +\n projectionDistanceMm * projectionDistanceMm;\n const cosine = Math.max(\n -1,\n Math.min(1, dot / (firstLength * secondLength))\n );\n return (Math.acos(cosine) * 180) / Math.PI;\n}\n\nfunction calculateBoundsFieldOfView(\n bounds: PhysicalBoundsFromOpticalAxisMm,\n focalLengthMm: number,\n focusDistanceM: number | undefined\n): {\n horizontalDegrees: number;\n verticalDegrees: number;\n diagonalDegrees: number;\n horizontalBoundsDegrees: { minimum: number; maximum: number };\n verticalBoundsDegrees: { minimum: number; maximum: number };\n diagonalDegreesByCornerPair: {\n topLeftToBottomRight: number;\n topRightToBottomLeft: number;\n };\n projection: {\n projectionDistanceMm: number;\n provenance: CalculationProvenance;\n };\n} {\n const fovInput = {\n focalLengthMm,\n ...(focusDistanceM === undefined ? {} : { focusDistanceM })\n };\n const horizontal = calculateFieldOfViewBounds({\n ...fovInput,\n minimumSensorCoordinateMm: bounds.left,\n maximumSensorCoordinateMm: bounds.right\n });\n const vertical = calculateFieldOfViewBounds({\n ...fovInput,\n minimumSensorCoordinateMm: bounds.top,\n maximumSensorCoordinateMm: bounds.bottom\n });\n const projectionDistanceMm = horizontal.value.projectionDistanceMm;\n const topLeft = { x: bounds.left, y: bounds.top };\n const topRight = { x: bounds.right, y: bounds.top };\n const bottomRight = { x: bounds.right, y: bounds.bottom };\n const bottomLeft = { x: bounds.left, y: bounds.bottom };\n const topLeftToBottomRight = angleBetweenSensorRaysDegrees(\n topLeft,\n bottomRight,\n projectionDistanceMm\n );\n const topRightToBottomLeft = angleBetweenSensorRaysDegrees(\n topRight,\n bottomLeft,\n projectionDistanceMm\n );\n\n return {\n horizontalDegrees: horizontal.value.degrees,\n verticalDegrees: vertical.value.degrees,\n diagonalDegrees: Math.max(\n topLeftToBottomRight,\n topRightToBottomLeft\n ),\n horizontalBoundsDegrees: {\n minimum: horizontal.value.minimumDegrees,\n maximum: horizontal.value.maximumDegrees\n },\n verticalBoundsDegrees: {\n minimum: vertical.value.minimumDegrees,\n maximum: vertical.value.maximumDegrees\n },\n diagonalDegreesByCornerPair: {\n topLeftToBottomRight,\n topRightToBottomLeft\n },\n projection: {\n projectionDistanceMm,\n provenance: horizontal.provenance\n }\n };\n}\n\n/**\n * Resolves native sensor geometry, active capture area, physical camera orientation\n * and final digital (output) geometry, keeping each one distinct.\n */\nexport function resolveCaptureGeometry(\n input: ResolveCaptureGeometryInput\n): CalculationResult<ResolvedCaptureGeometry> {\n requireInputKeys(input, \"resolveCaptureGeometry\", [\"imagingArea\", \"nativeRaster\", \"orientation\", \"activeCaptureRect\", \"outputCropRect\", \"outputRaster\"]);\n requireCaptureOrientation(input.orientation);\n requireInputObject(input.imagingArea, \"imagingArea\");\n requirePositiveFinite(\"imagingArea.widthMm\", input.imagingArea.widthMm);\n requirePositiveFinite(\"imagingArea.heightMm\", input.imagingArea.heightMm);\n requireRasterDimensions(\"nativeRaster\", input.nativeRaster);\n\n const activeCaptureRect =\n input.activeCaptureRect ?? fullRect(input.nativeRaster);\n validateRasterRect(\n \"activeCaptureRect\",\n activeCaptureRect,\n input.nativeRaster\n );\n\n const nativeBounds = nativePhysicalBoundsFromRect(\n input.imagingArea,\n input.nativeRaster,\n activeCaptureRect\n );\n const activeImagingArea: SensorImagingArea = {\n widthMm: nativeBounds.right - nativeBounds.left,\n heightMm: nativeBounds.bottom - nativeBounds.top\n };\n const activeRaster: RasterDimensions = {\n pixelWidth: activeCaptureRect.width,\n pixelHeight: activeCaptureRect.height\n };\n const orientedBounds = orientPhysicalBounds(\n nativeBounds,\n input.orientation\n );\n const orientedRaster = orientRaster(activeRaster, input.orientation);\n const orientedImagingArea: SensorImagingArea = {\n widthMm: orientedBounds.right - orientedBounds.left,\n heightMm: orientedBounds.bottom - orientedBounds.top\n };\n\n const outputCropRect =\n input.outputCropRect ?? fullRect(orientedRaster);\n validateRasterRect(\n \"outputCropRect\",\n outputCropRect,\n orientedRaster\n );\n\n const outputRaster: RasterDimensions = input.outputRaster ?? {\n pixelWidth: outputCropRect.width,\n pixelHeight: outputCropRect.height\n };\n requireRasterDimensions(\"outputRaster\", outputRaster);\n validateOutputAspectRatio(outputCropRect, outputRaster);\n\n const outputBounds = physicalBoundsFromRectWithinBounds(\n orientedBounds,\n orientedRaster,\n outputCropRect\n );\n const outputImagingArea: SensorImagingArea = {\n widthMm: outputBounds.right - outputBounds.left,\n heightMm: outputBounds.bottom - outputBounds.top\n };\n const outputScaleX = outputRaster.pixelWidth / outputCropRect.width;\n const outputScaleY = outputRaster.pixelHeight / outputCropRect.height;\n const outputScaleAxisRelativeDifference =\n Math.abs(outputScaleX - outputScaleY) /\n ((outputScaleX + outputScaleY) / 2);\n\n return calculatedResult(\n {\n native: {\n imagingArea: { ...input.imagingArea },\n raster: { ...input.nativeRaster }\n },\n activeCapture: {\n nativeRect: { ...activeCaptureRect },\n imagingArea: activeImagingArea,\n physicalOffsetMm: {\n x: nativeBounds.left + input.imagingArea.widthMm / 2,\n y: nativeBounds.top + input.imagingArea.heightMm / 2\n },\n centerOffsetFromOpticalAxisMm: {\n x: (nativeBounds.left + nativeBounds.right) / 2,\n y: (nativeBounds.top + nativeBounds.bottom) / 2\n },\n physicalBoundsFromOpticalAxisMm: nativeBounds,\n imagingAreaDerivation: \"uniform-native-raster\",\n raster: activeRaster\n },\n orientedCapture: {\n orientation: input.orientation,\n imagingArea: orientedImagingArea,\n physicalBoundsFromOpticalAxisMm: orientedBounds,\n raster: orientedRaster\n },\n output: {\n cropRect: { ...outputCropRect },\n raster: { ...outputRaster },\n imagingArea: outputImagingArea,\n physicalBoundsFromOpticalAxisMm: outputBounds,\n centerOffsetFromOpticalAxisMm: {\n x: (outputBounds.left + outputBounds.right) / 2,\n y: (outputBounds.top + outputBounds.bottom) / 2\n },\n sourceRetainedAreaFraction:\n (outputCropRect.width * outputCropRect.height) /\n (orientedRaster.pixelWidth * orientedRaster.pixelHeight),\n orientedCaptureToOutputScale: {\n x: outputScaleX,\n y: outputScaleY,\n axisRelativeDifference: outputScaleAxisRelativeDifference\n }\n }\n },\n \"capture-geometry-pipeline\",\n \"1.2.0\",\n [\n \"Native sensor raster coordinates use a top-left origin with +X right and +Y down.\",\n \"Raster rectangles are integer half-open extents.\",\n \"Physical camera orientation does not rotate or redefine the native sensor coordinate system.\",\n \"The generic active physical area is derived by assuming native image samples uniformly span the declared physical imaging area.\",\n \"Output crop/resampling is digital geometry and does not mutate physical sensor or active-capture identity.\",\n \"The physical image region retained by output crop is tracked explicitly for final framing and equivalent-viewing calculations.\",\n \"Output raster aspect ratio must remain consistent with the output crop; implicit geometric stretching is rejected.\"\n ]\n );\n}\n\n/**\n * Calculates the field of view (FOV) of the active physical capture area after\n * camera orientation. Horizontal and vertical FOV can be asymmetric about the\n * optical axis; both corner-to-corner diagonals are reported.\n *\n * The final digital (output) crop is deliberately not included.\n */\nexport function calculateActiveCaptureFieldOfView(\n input: CalculateActiveCaptureFieldOfViewInput\n): CalculationResult<ActiveCaptureFieldOfView> {\n requireInputKeys(input, \"calculateActiveCaptureFieldOfView\", [\"imagingArea\", \"nativeRaster\", \"orientation\", \"activeCaptureRect\", \"focalLengthMm\", \"focusDistanceM\"]);\n requirePositiveFinite(\"focalLengthMm\", input.focalLengthMm);\n\n const geometry = resolveCaptureGeometry({\n imagingArea: input.imagingArea,\n nativeRaster: input.nativeRaster,\n orientation: input.orientation,\n ...(input.activeCaptureRect === undefined\n ? {}\n : { activeCaptureRect: input.activeCaptureRect })\n }).value;\n\n const bounds =\n geometry.orientedCapture.physicalBoundsFromOpticalAxisMm;\n const fieldOfView = calculateBoundsFieldOfView(\n bounds,\n input.focalLengthMm,\n input.focusDistanceM\n );\n\n return calculatedResult(\n {\n orientation: input.orientation,\n ...fieldOfView,\n activeImagingArea: {\n ...geometry.orientedCapture.imagingArea\n },\n centerOffsetFromOpticalAxisMm: rotateVector(\n geometry.activeCapture.centerOffsetFromOpticalAxisMm,\n input.orientation\n )\n },\n \"oriented-active-capture-field-of-view\",\n \"1.1.0\",\n [\n \"Rectilinear projection is evaluated from signed active-area bounds relative to the optical axis.\",\n \"Off-center active crops preserve asymmetric angular bounds rather than being treated as centered.\",\n \"Camera orientation rotates physical bounds while leaving the native sensor coordinate system unchanged.\",\n \"For off-center rectangles the two opposite-corner diagonal spans may differ; diagonalDegrees reports the larger span.\",\n \"Final digital/output crop is excluded from active-capture FOV.\"\n ]\n );\n}\n\n/**\n * Calculates the final visible field of view after the active capture area,\n * orientation and digital (output) crop. Output resolution does not affect it.\n */\nexport function calculateOutputFieldOfView(\n input: CalculateOutputFieldOfViewInput\n): CalculationResult<OutputFieldOfView> {\n requireInputKeys(input, \"calculateOutputFieldOfView\", [\"imagingArea\", \"nativeRaster\", \"orientation\", \"activeCaptureRect\", \"outputCropRect\", \"focalLengthMm\", \"focusDistanceM\"]);\n requirePositiveFinite(\"focalLengthMm\", input.focalLengthMm);\n\n const geometry = resolveCaptureGeometry({\n imagingArea: input.imagingArea,\n nativeRaster: input.nativeRaster,\n orientation: input.orientation,\n ...(input.activeCaptureRect === undefined\n ? {}\n : { activeCaptureRect: input.activeCaptureRect }),\n ...(input.outputCropRect === undefined\n ? {}\n : { outputCropRect: input.outputCropRect })\n }).value;\n const fieldOfView = calculateBoundsFieldOfView(\n geometry.output.physicalBoundsFromOpticalAxisMm,\n input.focalLengthMm,\n input.focusDistanceM\n );\n\n return calculatedResult(\n {\n orientation: input.orientation,\n ...fieldOfView,\n outputImagingArea: { ...geometry.output.imagingArea },\n centerOffsetFromOpticalAxisMm: {\n ...geometry.output.centerOffsetFromOpticalAxisMm\n }\n },\n \"oriented-output-field-of-view\",\n \"1.0.0\",\n [\n \"Final visible FOV is derived from the physical image region retained by active capture and digital/output crop.\",\n \"Output raster resolution does not change field of view.\",\n \"Off-center output crops preserve asymmetric angular bounds.\",\n \"Physical sensor identity and active-capture 35 mm-equivalent focal length are unchanged by final digital crop.\"\n ]\n );\n}\n\n"]}
@@ -3,7 +3,7 @@ import { type SimulatedCapture, type CaptureLinearPlane } from "../capture/simul
3
3
  import { type CaptureColorTransformInput, type CaptureColorTransformResult } from "../color/capture-color.js";
4
4
  import { type SdrRenderingProfile, type SdrRenderingResult } from "./sdr-rendering.js";
5
5
  export declare const CAPTURE_SDR_SCHEMA_VERSION: "0.1.0";
6
- /** Select an existing RGB state or explicitly derive one; never estimate WB here. */
6
+ /** Either select an existing RGB image state or derive one explicitly. White balance is never estimated here. */
7
7
  export interface CaptureSdrInput {
8
8
  capture: SimulatedCapture;
9
9
  sourcePlaneId: string;
@@ -17,7 +17,7 @@ export interface CaptureSdrInput {
17
17
  };
18
18
  profile: SdrRenderingProfile;
19
19
  }
20
- /** Keeps source capture history, optional color derivation and SDR diagnostics distinct. */
20
+ /** Result. The source capture history, the optional colour derivation and the SDR diagnostics are kept separate. */
21
21
  export interface CaptureSdrResult {
22
22
  schemaVersion: typeof CAPTURE_SDR_SCHEMA_VERSION;
23
23
  captureId: string;
@@ -31,11 +31,13 @@ export interface CaptureSdrResult {
31
31
  color: CalculationResult<CaptureColorTransformResult> | null;
32
32
  rendering: CalculationResult<SdrRenderingResult>;
33
33
  }
34
- /** Validates the capture and explicit color/render choices at an untrusted boundary. */
34
+ /** Validates untrusted input: the capture and the explicit colour and rendering choices. */
35
35
  export declare function parseCaptureSdrInput(value: unknown): CaptureSdrInput;
36
36
  /**
37
- * Bounded capture → explicit color/WB → SDR adapter. No resampling, correction,
38
- * physical exposure, metering, external IO or production-plan activation occurs.
37
+ * Renders a bounded capture to SDR via an explicit colour/WB step.
38
+ *
39
+ * No resampling, lens correction, physical exposure, metering or external I/O
40
+ * happens, and the production image-formation plan is not run.
39
41
  */
40
42
  export declare function prepareCaptureSdrSource(input: CaptureSdrInput): {
41
43
  value: CaptureSdrInput;
@@ -46,4 +48,3 @@ export declare function prepareCaptureSdrSource(input: CaptureSdrInput): {
46
48
  };
47
49
  /** Renders the validated capture color state without correction or resampling. */
48
50
  export declare function calculateCaptureSdr(input: CaptureSdrInput): CalculationResult<CaptureSdrResult>;
49
- //# sourceMappingURL=capture-sdr.d.ts.map
@@ -1,9 +1,10 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validates the capture and explicit color/render choices at an untrusted boundary.
5
- * Bounded capture → explicit color/WB → SDR adapter. No resampling, correction, physical exposure,
6
- * metering, external IO or production-plan activation occurs.
3
+ * SDR (standard dynamic range) output from a simulated capture: capture → explicit colour and
4
+ * white balance (WB) → SDR rendering.
5
+ *
6
+ * It does no resampling, lens correction, physical exposure, metering or external I/O, and it
7
+ * does not run the production image-formation plan.
7
8
  * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support
8
9
  * limits.
9
10
  */
@@ -17,7 +18,7 @@ export const CAPTURE_SDR_SCHEMA_VERSION = "0.1.0";
17
18
  function object(value, keys) {
18
19
  return requireAllowlistedRecord(value, keys, "Invalid capture-SDR fields.");
19
20
  }
20
- /** Validates the capture and explicit color/render choices at an untrusted boundary. */
21
+ /** Validates untrusted input: the capture and the explicit colour and rendering choices. */
21
22
  export function parseCaptureSdrInput(value) {
22
23
  const r = object(value, ["capture", "sourcePlaneId", "color", "profile"]);
23
24
  const capture = parseSimulatedCapture(r.capture);
@@ -39,8 +40,10 @@ export function parseCaptureSdrInput(value) {
39
40
  return { capture, sourcePlaneId: r.sourcePlaneId, color, profile: parseSdrRenderingProfile(r.profile) };
40
41
  }
41
42
  /**
42
- * Bounded capture → explicit color/WB → SDR adapter. No resampling, correction,
43
- * physical exposure, metering, external IO or production-plan activation occurs.
43
+ * Renders a bounded capture to SDR via an explicit colour/WB step.
44
+ *
45
+ * No resampling, lens correction, physical exposure, metering or external I/O
46
+ * happens, and the production image-formation plan is not run.
44
47
  */
45
48
  export function prepareCaptureSdrSource(input) {
46
49
  const value = parseCaptureSdrInput(input), source = value.capture.planes.find((p) => p.id === value.sourcePlaneId);
@@ -58,7 +61,7 @@ export function prepareCaptureSdrSource(input) {
58
61
  (plane.whiteBalanceApplication === "not-applicable" && value.capture.whiteBalanceIntent !== null)) {
59
62
  throw new InvalidConfigurationError("Capture-SDR requires exact linear-sRGB/D65 and resolved WB; intent is not application.");
60
63
  }
61
- // The derived color parser guarantees inline storage; no external source reaches this point.
64
+ // The derived-colour parser guarantees inline storage, so no external source reaches this point.
62
65
  if (plane.storage.kind !== "inline-float64")
63
66
  throw new InvalidConfigurationError("Inline RGB required.");
64
67
  const applied = plane.whiteBalanceApplication !== "not-applicable";
@@ -1 +1 @@
1
- {"version":3,"file":"capture-sdr.js","sourceRoot":"","sources":["../../src/output/capture-sdr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture-sdr.js","sourceRoot":"","sources":["../../src/output/capture-sdr.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC9G,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAkD,MAAM,iCAAiC,CAAC;AACxH,OAAO,EAAE,8BAA8B,EAAE,+BAA+B,EAAE,0BAA0B,EAClG,wBAAwB,EAAqE,MAAM,2BAA2B,CAAC;AACjI,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAqD,MAAM,oBAAoB,CAAC;AAExI,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAgB,CAAC;AA2B3D,SAAS,MAAM,CAAC,KAAc,EAAE,IAAuB;IACrD,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC9E,CAAC;AACD,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,yBAAyB,CAAC,sCAAsC,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC3F,IAAI,KAA+B,CAAC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACzF,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,+BAA+B,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa;YACtF,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAC5G,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YACxG,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;;QAAM,MAAM,IAAI,yBAAyB,CAAC,uCAAuC,CAAC,CAAC;IACpF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;AAC1G,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAI5D,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,aAAa,CAAE,CAAC;IACpH,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzH,MAAM,IAAI,yBAAyB,CAAC,2FAA2F,CAAC,CAAC;IACnI,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,8BAA8B,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtG,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa;QAC5E,kBAAkB,EAAE,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvG,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG,wBAAwB,EAAE,CAAC,iBAAiB,CAAC;IACjG,IAAI,KAAK,CAAC,UAAU,KAAK,8BAA8B,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,KAAK,0BAA0B,CAAC,EAAE;QAC/G,KAAK,CAAC,YAAY,CAAC,OAAO,KAAK,0BAA0B,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,wBAAwB;QAClI,KAAK,CAAC,yBAAyB,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAC/F,KAAK,CAAC,yBAAyB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,KAAK,aAAa;QAChG,CAAC,KAAK,CAAC,uBAAuB,KAAK,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,yBAAyB,CAAC,wFAAwF,CAAC,CAAC;IAChI,CAAC;IACD,iGAAiG;IACjG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAAE,MAAM,IAAI,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IACzG,MAAM,OAAO,GAAG,KAAK,CAAC,uBAAuB,KAAK,gBAAgB,CAAC;IACnE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AACD,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAChF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAAE,MAAM,IAAI,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IACzG,MAAM,SAAS,GAAG,qBAAqB,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,YAAY;QAC9E,eAAe,EAAE,8BAA8B,EAAE,eAAe,EAAE,iBAAiB;QACnF,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,cAAc;QAC3E,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC5G,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAqB,EAAE,aAAa,EAAE,0BAA0B,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;QAC9G,aAAa,EAAE,MAAM,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa;QACtG,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB;QACtH,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa;QACrD,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnH,MAAM,WAAW,GAAG,CAAC,4EAA4E;QAC/F,0FAA0F;QAC1F,+EAA+E;QAC/E,qFAAqF,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,2BAA2B;QACtG,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,WAAW,CAAC;QAC7F,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,WAAW,CAAC,CAAC;AAC/F,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * SDR (standard dynamic range) output from a simulated capture: capture → explicit colour and\n * white balance (WB) → SDR rendering.\n *\n * It does no resampling, lens correction, physical exposure, metering or external I/O, and it\n * does not run the production image-formation plan.\n * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { requireAllowlistedRecord } from \"../core/record-validation.js\";\nimport { calculatedResult, approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport { parseSimulatedCapture, type SimulatedCapture, type CaptureLinearPlane } from \"../capture/simulated-capture.js\";\nimport { calculateCaptureColorTransform, parseCaptureColorTransformInput, LINEAR_CAPTURE_RGB_PROFILE,\n resolveCaptureColorModel, type CaptureColorTransformInput, type CaptureColorTransformResult } from \"../color/capture-color.js\";\nimport { calculateSdrRendering, parseSdrRenderingProfile, type SdrRenderingProfile, type SdrRenderingResult } from \"./sdr-rendering.js\";\n\nexport const CAPTURE_SDR_SCHEMA_VERSION = \"0.1.0\" as const;\n/** Either select an existing RGB image state or derive one explicitly. White balance is never estimated here. */\nexport interface CaptureSdrInput {\n capture: SimulatedCapture;\n sourcePlaneId: string;\n color: { kind: \"already-transformed\" } | {\n kind: \"transform\";\n outputPlaneId: string;\n outputImageStateId: string;\n whiteBalance: CaptureColorTransformInput[\"whiteBalance\"];\n };\n profile: SdrRenderingProfile;\n}\n/** Result. The source capture history, the optional colour derivation and the SDR diagnostics are kept separate. */\nexport interface CaptureSdrResult {\n schemaVersion: typeof CAPTURE_SDR_SCHEMA_VERSION;\n captureId: string;\n sourcePlaneId: string;\n sourceImageStateId: string;\n rasterBinding: CaptureLinearPlane[\"rasterBinding\"];\n sourceCaptureSaturation: CaptureLinearPlane[\"captureSaturation\"];\n sourceDynamicRangeHistory: SimulatedCapture[\"source\"][\"dynamicRangeHistory\"];\n noiseRealizationId: string;\n whiteBalance: \"applied-here\" | \"already-applied-upstream\" | \"not-required\";\n color: CalculationResult<CaptureColorTransformResult> | null;\n rendering: CalculationResult<SdrRenderingResult>;\n}\nfunction object(value: unknown, keys: readonly string[]): Record<string, unknown> {\n return requireAllowlistedRecord(value, keys, \"Invalid capture-SDR fields.\");\n}\n/** Validates untrusted input: the capture and the explicit colour and rendering choices. */\nexport function parseCaptureSdrInput(value: unknown): CaptureSdrInput {\n const r = object(value, [\"capture\", \"sourcePlaneId\", \"color\", \"profile\"]);\n const capture = parseSimulatedCapture(r.capture);\n if (typeof r.sourcePlaneId !== \"string\" || !capture.planes.some((p) => p.id === r.sourcePlaneId)) {\n throw new InvalidConfigurationError(\"Capture-SDR source plane must exist.\");\n }\n const c = object(r.color, [\"kind\", \"outputPlaneId\", \"outputImageStateId\", \"whiteBalance\"]);\n let color: CaptureSdrInput[\"color\"];\n if (c.kind === \"already-transformed\" && Object.keys(c).length === 1) color = { kind: c.kind };\n else if (c.kind === \"transform\") {\n const parsed = parseCaptureColorTransformInput({ capture, sourcePlaneId: r.sourcePlaneId,\n outputPlaneId: c.outputPlaneId, outputImageStateId: c.outputImageStateId, whiteBalance: c.whiteBalance });\n color = { kind: c.kind, outputPlaneId: parsed.outputPlaneId, outputImageStateId: parsed.outputImageStateId,\n whiteBalance: parsed.whiteBalance };\n } else throw new InvalidConfigurationError(\"Unsupported capture-SDR color choice.\");\n return { capture, sourcePlaneId: r.sourcePlaneId, color, profile: parseSdrRenderingProfile(r.profile) };\n}\n/**\n * Renders a bounded capture to SDR via an explicit colour/WB step.\n *\n * No resampling, lens correction, physical exposure, metering or external I/O\n * happens, and the production image-formation plan is not run.\n */\nexport function prepareCaptureSdrSource(input: CaptureSdrInput): {\n value: CaptureSdrInput; source: CaptureLinearPlane; plane: CaptureLinearPlane;\n color: CalculationResult<CaptureColorTransformResult> | null; applied: boolean;\n} {\n const value = parseCaptureSdrInput(input), source = value.capture.planes.find((p) => p.id === value.sourcePlaneId)!;\n if (source.storage.kind !== \"inline-float64\" || source.storage.samples.length > 262144 || source.channelIds.length !== 3) {\n throw new InvalidConfigurationError(\"Capture-SDR requires a bounded inline three-channel plane; no implicit loading or tiling.\");\n }\n const color = value.color.kind === \"transform\" ? calculateCaptureColorTransform({ capture: value.capture,\n sourcePlaneId: value.sourcePlaneId, outputPlaneId: value.color.outputPlaneId,\n outputImageStateId: value.color.outputImageStateId, whiteBalance: value.color.whiteBalance }) : null;\n const plane = color?.value.plane ?? source, white = resolveCaptureColorModel().referenceWhiteXyz;\n if (plane.imageState !== \"color-transformed-linear-rgb\" || plane.colorProfile?.id !== LINEAR_CAPTURE_RGB_PROFILE.id ||\n plane.colorProfile.version !== LINEAR_CAPTURE_RGB_PROFILE.version || JSON.stringify(plane.channelIds) !== '[\"red\",\"green\",\"blue\"]' ||\n plane.encodingReferenceWhiteXyz?.x !== white.x || plane.encodingReferenceWhiteXyz.y !== white.y ||\n plane.encodingReferenceWhiteXyz.z !== white.z || plane.whiteBalanceApplication === \"intent-only\" ||\n (plane.whiteBalanceApplication === \"not-applicable\" && value.capture.whiteBalanceIntent !== null)) {\n throw new InvalidConfigurationError(\"Capture-SDR requires exact linear-sRGB/D65 and resolved WB; intent is not application.\");\n }\n // The derived-colour parser guarantees inline storage, so no external source reaches this point.\n if (plane.storage.kind !== \"inline-float64\") throw new InvalidConfigurationError(\"Inline RGB required.\");\n const applied = plane.whiteBalanceApplication !== \"not-applicable\";\n return { value, source, plane, color, applied };\n}\n/** Renders the validated capture color state without correction or resampling. */\nexport function calculateCaptureSdr(input: CaptureSdrInput): CalculationResult<CaptureSdrResult> {\n const { value, source, plane, color, applied } = prepareCaptureSdrSource(input);\n if (plane.storage.kind !== \"inline-float64\") throw new InvalidConfigurationError(\"Inline RGB required.\");\n const rendering = calculateSdrRendering({ sourceImageStateId: plane.imageStateId,\n inputImageState: \"color-transformed-linear-rgb\", inputColorSpace: \"linear-srgb-d65\",\n whiteBalanceHandling: applied ? \"already-applied-upstream\" : \"not-required\",\n pixelWidth: plane.pixelWidth, pixelHeight: plane.pixelHeight, referenceWhiteValue: plane.referenceWhiteValue,\n samples: plane.storage.samples, profile: value.profile });\n const result: CaptureSdrResult = { schemaVersion: CAPTURE_SDR_SCHEMA_VERSION, captureId: value.capture.captureId,\n sourcePlaneId: source.id, sourceImageStateId: source.imageStateId, rasterBinding: source.rasterBinding,\n sourceCaptureSaturation: source.captureSaturation, sourceDynamicRangeHistory: value.capture.source.dynamicRangeHistory,\n noiseRealizationId: value.capture.noise.realizationId,\n whiteBalance: applied ? color ? \"applied-here\" : \"already-applied-upstream\" : \"not-required\", color, rendering };\n const assumptions = [\"Exact declared inline co-sited RGB raster; no crop/resampling or source IO\",\n \"Color/WB delegates to the authoritative capture color model; no estimator or repeated WB\",\n \"Capture saturation/history and downstream tone/gamut clipping remain distinct\",\n \"Standalone adapter only; correction and production-plan integration remain explicit\"];\n return value.color.kind === \"transform\" && value.color.whiteBalance.kind === \"adopted-white-xyz-scaling\"\n ? approximationResult(result, \"capture-sdr-adapter\", CAPTURE_SDR_SCHEMA_VERSION, assumptions)\n : calculatedResult(result, \"capture-sdr-adapter\", CAPTURE_SDR_SCHEMA_VERSION, assumptions);\n}\n"]}
@@ -1,18 +1,35 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Calculates dimensions remaining after a centered, same-aspect-ratio crop.
2
+ * Centred crop that keeps the aspect ratio: the pixel dimensions left after cropping by a
3
+ * linear crop factor.
4
4
  * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support
5
5
  * limits.
6
6
  */
7
7
  import { type CalculationResult } from "../core/calculation-result.js";
8
+ /**
9
+ * The largest whole-pixel count not exceeding `length` (at least 1).
10
+ *
11
+ * A value at most 4 ULPs below the next integer counts as that integer. For example,
12
+ * 4480 / (7 / 3) = 1919.9999999999998 is really 1920 plus the divisor's rounding
13
+ * error, so floorWholePixels(4480 / (7 / 3)) returns 1920 instead of losing a pixel.
14
+ *
15
+ * The tolerance scales with the double-precision spacing of `length`, not with a
16
+ * fixed fraction of it. So a truly fractional count (6000 / 1.0000000001, or
17
+ * 1e9 / 1.5) is always rounded down, and the result never exceeds `length` by more
18
+ * than that rounding error.
19
+ * Internal to the repository; not exported from the package.
20
+ */
21
+ export declare function floorWholePixels(length: number): number;
8
22
  export interface CalculateCenteredCropInput {
9
23
  /** Original image width in pixels. */
10
24
  pixelWidth: number;
11
25
  /** Original image height in pixels. */
12
26
  pixelHeight: number;
13
27
  /**
14
- * Linear crop factor. 1 means no crop; 1.5 retains 1 / 1.5 of each
15
- * dimension while preserving aspect ratio.
28
+ * Linear crop factor. 1 means no crop; 1.5 keeps at most 1 / 1.5 of each
29
+ * dimension. The shorter axis is floor(dimension / cropFactor). The longer
30
+ * axis is the integer that best matches the source aspect ratio, capped at
31
+ * floor(dimension / cropFactor). This keeps the aspect ratio as close as
32
+ * whole pixels allow.
16
33
  */
17
34
  cropFactor: number;
18
35
  }
@@ -24,10 +41,9 @@ export interface CenteredCrop {
24
41
  retainedAreaFraction: number;
25
42
  }
26
43
  /**
27
- * Calculates dimensions remaining after a centered, same-aspect-ratio crop.
44
+ * Calculates the dimensions left after a centred crop that keeps the aspect ratio.
28
45
  *
29
46
  * @param input Original dimensions and linear crop factor.
30
47
  * @returns Remaining pixel dimensions and area fraction.
31
48
  */
32
49
  export declare function calculateCenteredCrop(input: CalculateCenteredCropInput): CalculationResult<CenteredCrop>;
33
- //# sourceMappingURL=crop.d.ts.map
@@ -1,32 +1,66 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Calculates dimensions remaining after a centered, same-aspect-ratio crop.
3
+ * Centred crop that keeps the aspect ratio: the pixel dimensions left after cropping by a
4
+ * linear crop factor.
5
5
  * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support
6
6
  * limits.
7
7
  */
8
8
  import { calculatedResult } from "../core/calculation-result.js";
9
9
  import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
10
+ import { requireInputKeys } from "../core/record-validation.js";
11
+ /** How close a quotient may be to the next whole pixel, in ULPs (units in the last place), and still count as it. */
12
+ const WHOLE_PIXEL_SNAP_ULPS = 4;
10
13
  /**
11
- * Calculates dimensions remaining after a centered, same-aspect-ratio crop.
14
+ * The largest whole-pixel count not exceeding `length` (at least 1).
15
+ *
16
+ * A value at most 4 ULPs below the next integer counts as that integer. For example,
17
+ * 4480 / (7 / 3) = 1919.9999999999998 is really 1920 plus the divisor's rounding
18
+ * error, so floorWholePixels(4480 / (7 / 3)) returns 1920 instead of losing a pixel.
19
+ *
20
+ * The tolerance scales with the double-precision spacing of `length`, not with a
21
+ * fixed fraction of it. So a truly fractional count (6000 / 1.0000000001, or
22
+ * 1e9 / 1.5) is always rounded down, and the result never exceeds `length` by more
23
+ * than that rounding error.
24
+ * Internal to the repository; not exported from the package.
25
+ */
26
+ export function floorWholePixels(length) {
27
+ const floor = Math.floor(length);
28
+ const next = floor + 1;
29
+ return Math.max(1, next - length <= WHOLE_PIXEL_SNAP_ULPS * Number.EPSILON * length ? next : floor);
30
+ }
31
+ /**
32
+ * Calculates the dimensions left after a centred crop that keeps the aspect ratio.
12
33
  *
13
34
  * @param input Original dimensions and linear crop factor.
14
35
  * @returns Remaining pixel dimensions and area fraction.
15
36
  */
16
37
  export function calculateCenteredCrop(input) {
38
+ requireInputKeys(input, "calculateCenteredCrop", ["pixelWidth", "pixelHeight", "cropFactor"]);
17
39
  requirePositiveInteger("pixelWidth", input.pixelWidth);
18
40
  requirePositiveInteger("pixelHeight", input.pixelHeight);
19
41
  requirePositiveFinite("cropFactor", input.cropFactor);
20
42
  if (input.cropFactor < 1) {
21
43
  throw new InvalidScientificInputError("cropFactor must be greater than or equal to 1.");
22
44
  }
23
- const pixelWidth = Math.max(1, Math.floor(input.pixelWidth / input.cropFactor));
24
- const pixelHeight = Math.max(1, Math.floor(input.pixelHeight / input.cropFactor));
45
+ // Round the shorter axis down (never more than 1 / cropFactor of it). Then
46
+ // derive the longer axis from that integer so the ratio is as close as whole
47
+ // pixels allow. The longer axis is also capped at floor(longer / cropFactor),
48
+ // so a crop never keeps more than 1 / cropFactor of either dimension.
49
+ const landscape = input.pixelWidth >= input.pixelHeight;
50
+ const shortSource = landscape ? input.pixelHeight : input.pixelWidth;
51
+ const longSource = landscape ? input.pixelWidth : input.pixelHeight;
52
+ const shortAxis = floorWholePixels(shortSource / input.cropFactor);
53
+ const longAxis = Math.max(1, Math.min(floorWholePixels(longSource / input.cropFactor), Math.round((shortAxis * longSource) / shortSource)));
54
+ const pixelWidth = landscape ? longAxis : shortAxis;
55
+ const pixelHeight = landscape ? shortAxis : longAxis;
25
56
  return calculatedResult({
26
57
  pixelWidth,
27
58
  pixelHeight,
28
59
  megapixels: (pixelWidth * pixelHeight) / 1_000_000,
29
60
  retainedAreaFraction: (pixelWidth * pixelHeight) / (input.pixelWidth * input.pixelHeight)
30
- }, "centered-same-aspect-crop", "1.0.0", ["Centered crop", "Original aspect ratio is preserved"]);
61
+ }, "centered-same-aspect-crop", "2.0.0", [
62
+ "Centered crop",
63
+ "Original aspect ratio is preserved to integer-pixel precision: the shorter axis is floor(dimension / cropFactor) and the longer axis is the nearest integer to the source ratio, capped at floor(dimension / cropFactor)"
64
+ ]);
31
65
  }
32
66
  //# sourceMappingURL=crop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crop.js","sourceRoot":"","sources":["../../src/output/crop.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAsB/B;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACzD,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,2BAA2B,CACnC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CACjD,CAAC;IAEF,OAAO,gBAAgB,CACrB;QACE,UAAU;QACV,WAAW;QACX,UAAU,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,SAAS;QAClD,oBAAoB,EAClB,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;KACtE,EACD,2BAA2B,EAC3B,OAAO,EACP,CAAC,eAAe,EAAE,oCAAoC,CAAC,CACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"crop.js","sourceRoot":"","sources":["../../src/output/crop.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,qHAAqH;AACrH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,GAAG,MAAM,IAAI,qBAAqB,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAChF,CAAC;AACJ,CAAC;AAyBD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9F,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,sBAAsB,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACzD,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAEtD,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,2BAA2B,CACnC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,8EAA8E;IAC9E,sEAAsE;IACtE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC;IACxD,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IACrE,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IACpE,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CACN,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,CACnD,CACF,CAAC;IACF,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAErD,OAAO,gBAAgB,CACrB;QACE,UAAU;QACV,WAAW;QACX,UAAU,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,SAAS;QAClD,oBAAoB,EAClB,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;KACtE,EACD,2BAA2B,EAC3B,OAAO,EACP;QACE,eAAe;QACf,0NAA0N;KAC3N,CACF,CAAC;AACJ,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Centred crop that keeps the aspect ratio: the pixel dimensions left after cropping by a\n * linear crop factor.\n * @see docs/PROCESSED_OUTPUT.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n calculatedResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport {\n InvalidScientificInputError,\n requirePositiveFinite,\n requirePositiveInteger\n} from \"../core/validation.js\";\nimport { requireInputKeys } from \"../core/record-validation.js\";\n\n/** How close a quotient may be to the next whole pixel, in ULPs (units in the last place), and still count as it. */\nconst WHOLE_PIXEL_SNAP_ULPS = 4;\n\n/**\n * The largest whole-pixel count not exceeding `length` (at least 1).\n *\n * A value at most 4 ULPs below the next integer counts as that integer. For example,\n * 4480 / (7 / 3) = 1919.9999999999998 is really 1920 plus the divisor's rounding\n * error, so floorWholePixels(4480 / (7 / 3)) returns 1920 instead of losing a pixel.\n *\n * The tolerance scales with the double-precision spacing of `length`, not with a\n * fixed fraction of it. So a truly fractional count (6000 / 1.0000000001, or\n * 1e9 / 1.5) is always rounded down, and the result never exceeds `length` by more\n * than that rounding error.\n * Internal to the repository; not exported from the package.\n */\nexport function floorWholePixels(length: number): number {\n const floor = Math.floor(length);\n const next = floor + 1;\n return Math.max(\n 1,\n next - length <= WHOLE_PIXEL_SNAP_ULPS * Number.EPSILON * length ? next : floor\n );\n}\n\nexport interface CalculateCenteredCropInput {\n /** Original image width in pixels. */\n pixelWidth: number;\n /** Original image height in pixels. */\n pixelHeight: number;\n /**\n * Linear crop factor. 1 means no crop; 1.5 keeps at most 1 / 1.5 of each\n * dimension. The shorter axis is floor(dimension / cropFactor). The longer\n * axis is the integer that best matches the source aspect ratio, capped at\n * floor(dimension / cropFactor). This keeps the aspect ratio as close as\n * whole pixels allow.\n */\n cropFactor: number;\n}\n\nexport interface CenteredCrop {\n pixelWidth: number;\n pixelHeight: number;\n megapixels: number;\n /** Fraction of original pixel area retained, from 0 to 1. */\n retainedAreaFraction: number;\n}\n\n/**\n * Calculates the dimensions left after a centred crop that keeps the aspect ratio.\n *\n * @param input Original dimensions and linear crop factor.\n * @returns Remaining pixel dimensions and area fraction.\n */\nexport function calculateCenteredCrop(\n input: CalculateCenteredCropInput\n): CalculationResult<CenteredCrop> {\n requireInputKeys(input, \"calculateCenteredCrop\", [\"pixelWidth\", \"pixelHeight\", \"cropFactor\"]);\n requirePositiveInteger(\"pixelWidth\", input.pixelWidth);\n requirePositiveInteger(\"pixelHeight\", input.pixelHeight);\n requirePositiveFinite(\"cropFactor\", input.cropFactor);\n\n if (input.cropFactor < 1) {\n throw new InvalidScientificInputError(\n \"cropFactor must be greater than or equal to 1.\"\n );\n }\n\n // Round the shorter axis down (never more than 1 / cropFactor of it). Then\n // derive the longer axis from that integer so the ratio is as close as whole\n // pixels allow. The longer axis is also capped at floor(longer / cropFactor),\n // so a crop never keeps more than 1 / cropFactor of either dimension.\n const landscape = input.pixelWidth >= input.pixelHeight;\n const shortSource = landscape ? input.pixelHeight : input.pixelWidth;\n const longSource = landscape ? input.pixelWidth : input.pixelHeight;\n const shortAxis = floorWholePixels(shortSource / input.cropFactor);\n const longAxis = Math.max(\n 1,\n Math.min(\n floorWholePixels(longSource / input.cropFactor),\n Math.round((shortAxis * longSource) / shortSource)\n )\n );\n const pixelWidth = landscape ? longAxis : shortAxis;\n const pixelHeight = landscape ? shortAxis : longAxis;\n\n return calculatedResult(\n {\n pixelWidth,\n pixelHeight,\n megapixels: (pixelWidth * pixelHeight) / 1_000_000,\n retainedAreaFraction:\n (pixelWidth * pixelHeight) / (input.pixelWidth * input.pixelHeight)\n },\n \"centered-same-aspect-crop\",\n \"2.0.0\",\n [\n \"Centered crop\",\n \"Original aspect ratio is preserved to integer-pixel precision: the shorter axis is floor(dimension / cropFactor) and the longer axis is the nearest integer to the source ratio, capped at floor(dimension / cropFactor)\"\n ]\n );\n}\n"]}