@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,13 +1,37 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Independent analytical DCT implementation; no third-party encoder, source, default quantization or
5
- * Huffman tables.
3
+ * Baseline JPEG encoder written for this project. It computes the DCT (discrete cosine transform)
4
+ * directly and uses no third-party encoder source, default quantization tables or Huffman tables.
6
5
  * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support
7
6
  * limits.
8
7
  */
9
8
  import { InvalidConfigurationError } from "../core/configuration-error.js";
10
- /** Independent analytical DCT implementation; no third-party encoder, source, default quantization or Huffman tables. */
9
+ /**
10
+ * Identifies the exact byte output of the baseline encoder.
11
+ *
12
+ * Version 2 (engine 2.0.0) uses the fixed cosine table below instead of runtime `Math.cos`, and rounds
13
+ * quantized coefficients half away from zero. Compared with version 1, bytes can differ only where a
14
+ * coefficient before rounding was within about one ULP (unit in the last place) of a half-integer, or
15
+ * was exactly a negative half-integer. The repository's test images are unchanged.
16
+ */
17
+ export const EXPORT_JPEG_ENCODER_ID = "photivra-baseline-jpeg-444-v2";
18
+ /**
19
+ * C(u,x) = cos((2x+1)·u·π/16) for u,x in 0..7, row-major by u.
20
+ *
21
+ * Each entry is the correctly rounded IEEE-754 double of the exact cosine. They were computed offline with
22
+ * 130-digit decimal arithmetic and checked so that no neighbouring double is closer (see
23
+ * docs/PHOTOGRAPHIC_EXPORT.md). Hard-coding them makes the DCT independent of each JavaScript engine's
24
+ * `Math.cos`, which differs in the last bit between engines. These are mathematical facts, not third-party data.
25
+ */
26
+ export const JPEG_DCT_COSINES = Float64Array.of(1, 1, 1, 1, 1, 1, 1, 1, 0.9807852804032304, 0.8314696123025452, 0.5555702330196022, 0.19509032201612828, -0.19509032201612828, -0.5555702330196022, -0.8314696123025452, -0.9807852804032304, 0.9238795325112867, 0.3826834323650898, -0.3826834323650898, -0.9238795325112867, -0.9238795325112867, -0.3826834323650898, 0.3826834323650898, 0.9238795325112867, 0.8314696123025452, -0.19509032201612828, -0.9807852804032304, -0.5555702330196022, 0.5555702330196022, 0.9807852804032304, 0.19509032201612828, -0.8314696123025452, 0.7071067811865476, -0.7071067811865476, -0.7071067811865476, 0.7071067811865476, 0.7071067811865476, -0.7071067811865476, -0.7071067811865476, 0.7071067811865476, 0.5555702330196022, -0.9807852804032304, 0.19509032201612828, 0.8314696123025452, -0.8314696123025452, -0.19509032201612828, 0.9807852804032304, -0.5555702330196022, 0.3826834323650898, -0.9238795325112867, 0.9238795325112867, -0.3826834323650898, -0.3826834323650898, 0.9238795325112867, -0.9238795325112867, 0.3826834323650898, 0.19509032201612828, -0.5555702330196022, 0.8314696123025452, -0.9807852804032304, 0.9807852804032304, -0.8314696123025452, 0.5555702330196022, -0.19509032201612828);
27
+ /**
28
+ * Rounds a quantized coefficient to the nearest integer, with ties going away from zero (−2.5 → −3,
29
+ * 2.5 → 3), so positive and negative values round the same way. `Math.round` alone sends −2.5 to −2.
30
+ */
31
+ export function roundJpegCoefficient(value) {
32
+ return value < 0 ? -Math.round(-value) : Math.round(value);
33
+ }
34
+ /** Encodes a baseline JPEG with a directly computed DCT. Uses no third-party encoder source, default quantization tables or Huffman tables. */
11
35
  export function encodeExportJpeg(input) {
12
36
  const { width, height, samples, quantizationStep: q } = input;
13
37
  if (![width, height, q].every(Number.isSafeInteger) || width < 1 || height < 1 || width * height > 4096 ||
@@ -27,22 +51,49 @@ export function encodeExportJpeg(input) {
27
51
  }
28
52
  return encoder.finish();
29
53
  }
30
- /** Internal bounded sink; reference and scalable exports share DCT/entropy equations exactly. */
54
+ /**
55
+ * Internal size-limited JPEG writer. The reference export and the scalable export use exactly the same
56
+ * DCT and entropy-coding equations.
57
+ *
58
+ * When `densityDotsPerInch` is supplied, it is written to the JFIF 1.02 APP0 segment as units=1 (dots
59
+ * per inch) with equal X and Y density. JFIF density fields are 16-bit unsigned, so it must be an integer
60
+ * in 1..65535; callers round any fractional density and store the exact value in EXIF. When omitted,
61
+ * APP0 keeps units=0 with a 1:1 pixel aspect ratio and states no physical size.
62
+ */
31
63
  export function createExportJpegEncoder(input) {
32
64
  const { width, height, quantizationStep: q } = input;
33
65
  if (![width, height, q, input.maximumOutputBytes].every(Number.isSafeInteger) || width < 1 || height < 1 || width > 65535 || height > 65535 || q < 1 || q > 255 || input.maximumOutputBytes < 1 || input.maximumOutputBytes > 256_000_000)
34
66
  throw new InvalidConfigurationError("Invalid bounded JPEG encoding plan.");
35
- const storage = new Uint8Array(input.maximumOutputBytes);
36
- let offset = 0, disposed = false, blocks = 0;
37
- const push = (...values) => { if (disposed || offset + values.length > storage.length)
38
- throw new InvalidConfigurationError("JPEG output exceeds admitted byte budget or is disposed."); storage.set(values, offset); offset += values.length; };
67
+ const density = input.densityDotsPerInch;
68
+ if (density !== undefined && (!Number.isSafeInteger(density) || density < 1 || density > 65535))
69
+ throw new InvalidConfigurationError("JFIF density requires an integer from 1 to 65535 dots per inch.");
70
+ // Growable output. Capacity starts at min(budget, 64 KiB) and doubles, but never beyond the budget. The budget
71
+ // check is unchanged (offset + n > maximumOutputBytes fails), so the output bytes and failures are the same as
72
+ // with a buffer allocated at full budget up front. An old buffer is zeroed after its bytes are copied over.
73
+ const budget = input.maximumOutputBytes;
74
+ let storage = new Uint8Array(Math.min(budget, 65_536)), offset = 0, disposed = false, blocks = 0;
75
+ const reserve = (count) => {
76
+ if (disposed || offset + count > budget)
77
+ throw new InvalidConfigurationError("JPEG output exceeds admitted byte budget or is disposed.");
78
+ if (offset + count <= storage.length)
79
+ return;
80
+ const grown = new Uint8Array(Math.min(budget, Math.max(storage.length * 2, offset + count)));
81
+ grown.set(storage.subarray(0, offset));
82
+ storage.fill(0, 0, offset);
83
+ storage = grown;
84
+ };
85
+ const push = (...values) => { reserve(values.length); storage.set(values, offset); offset += values.length; };
86
+ // Fast path for one entropy-coded byte: the same budget/disposal check and byte order as push(), without an array per byte.
87
+ const pushByte = (value) => { if (disposed || offset >= storage.length)
88
+ reserve(1); storage[offset++] = value; };
39
89
  push(255, 216);
40
90
  const marker = (id, payload) => {
41
91
  if (payload.length > 65533)
42
92
  throw new InvalidConfigurationError("JPEG metadata segment exceeds the standard APP limit.");
43
93
  push(255, id, (payload.length + 2) >> 8, (payload.length + 2) & 255, ...payload);
44
94
  };
45
- marker(224, [74, 70, 73, 70, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0]);
95
+ // JFIF 1.02 APP0: identifier, version 1.02, units (0 aspect ratio only, 1 dots per inch), Xdensity, Ydensity, no thumbnail.
96
+ marker(224, density === undefined ? [74, 70, 73, 70, 0, 1, 2, 0, 0, 1, 0, 1, 0, 0] : [74, 70, 73, 70, 0, 1, 2, 1, density >> 8, density & 255, density >> 8, density & 255, 0, 0]);
46
97
  marker(225, [69, 120, 105, 102, 0, 0, ...input.exif]);
47
98
  marker(225, [...new TextEncoder().encode("http://ns.adobe.com/xap/1.0/\0"), ...input.xmp]);
48
99
  if (input.icc) {
@@ -53,7 +104,7 @@ export function createExportJpegEncoder(input) {
53
104
  marker(219, [0, ...Array(64).fill(q)]);
54
105
  marker(192, [8, height >> 8, height & 255, width >> 8, width & 255, 3, 1, 17, 0, 2, 17, 0, 3, 17, 0]);
55
106
  // DC categories 0..11 use 4-bit codes; AC EOB/ZRL and all baseline run/category pairs use 8-bit codes.
56
- // Incomplete canonical trees reserve the all-ones code, as required for JPEG padding safety.
107
+ // Incomplete canonical Huffman trees reserve the all-ones code, so JPEG bit padding (1-bits) can never be read as a symbol.
57
108
  const dc = Array.from({ length: 12 }, (_, i) => i), ac = [0, 240];
58
109
  for (let run = 0; run < 16; run++)
59
110
  for (let size = 1; size <= 10; size++)
@@ -62,18 +113,18 @@ export function createExportJpegEncoder(input) {
62
113
  16, ...Array.from({ length: 16 }, (_, i) => i === 7 ? ac.length : 0), ...ac]);
63
114
  marker(218, [3, 1, 0, 2, 0, 3, 0, 0, 63, 0]);
64
115
  let accumulator = 0, bits = 0;
116
+ // Appends the low `count` bits (count <= 16) most-significant first, emitting each completed byte with 0xFF stuffing.
65
117
  const emit = (value, count) => {
66
- for (let i = count - 1; i >= 0; i--) {
67
- accumulator = (accumulator << 1) | ((value >> i) & 1);
68
- bits++;
69
- if (bits === 8) {
70
- push(accumulator);
71
- if (accumulator === 255)
72
- push(0);
73
- accumulator = 0;
74
- bits = 0;
75
- }
118
+ accumulator = (accumulator << count) | (value & ((1 << count) - 1));
119
+ bits += count;
120
+ while (bits >= 8) {
121
+ bits -= 8;
122
+ const byte = (accumulator >>> bits) & 255;
123
+ pushByte(byte);
124
+ if (byte === 255)
125
+ pushByte(0);
76
126
  }
127
+ accumulator &= (1 << bits) - 1;
77
128
  };
78
129
  const amplitude = (value, max) => {
79
130
  const size = value === 0 ? 0 : Math.floor(Math.log2(Math.abs(value))) + 1;
@@ -83,46 +134,79 @@ export function createExportJpegEncoder(input) {
83
134
  };
84
135
  const coefficient = (value, size) => { if (size)
85
136
  emit(value >= 0 ? value : value + (1 << size) - 1, size); };
86
- const zigzag = [];
87
- for (let diagonal = 0; diagonal <= 14; diagonal++) {
137
+ const zigzag = new Int32Array(64);
138
+ for (let diagonal = 0, i = 0; diagonal <= 14; diagonal++) {
88
139
  const points = [];
89
140
  for (let y = 0; y < 8; y++) {
90
141
  const x = diagonal - y;
91
142
  if (x >= 0 && x < 8)
92
143
  points.push(y * 8 + x);
93
144
  }
94
- zigzag.push(...(diagonal % 2 === 0 ? points.reverse() : points));
145
+ for (const point of diagonal % 2 === 0 ? points.reverse() : points)
146
+ zigzag[i++] = point;
95
147
  }
148
+ // Huffman symbol index of each AC (run, size) pair; equals ac.indexOf(symbol) for every emitted symbol.
149
+ const acIndex = new Int16Array(256).fill(-1);
150
+ for (let i = ac.length - 1; i >= 0; i--)
151
+ acIndex[ac[i]] = i;
96
152
  /**
97
- * The separable 8×8 analytical DCT uses orthonormal DC factors and one explicitly
98
- * selected scalar quantization step. This deliberately simple 4:4:4 reference
99
- * encoder preserves no exact RGB pixels after lossy quantization; JPEG decode
100
- * agreement is an interoperability check, not an exact scientific pixel oracle.
153
+ * The 8×8 DCT, computed directly, with orthonormal DC factors and one chosen quantization step.
154
+ *
155
+ * This is a deliberately simple 4:4:4 reference encoder. Lossy quantization means exact RGB pixels are
156
+ * not preserved. Decoding the JPEG and comparing is an interoperability check, not an exact scientific
157
+ * check of pixel values.
158
+ *
159
+ * Each coefficient is the direct 64-term sum Σ_y Σ_x (f(x,y)·C(u,x))·C(v,y), summed over y, then x.
160
+ * The row products f(x,y)·C(u,x) are computed once per u and reused for all eight v. This reuses the
161
+ * identical IEEE-754 products and keeps the exact order of multiplication and summation. A factored
162
+ * row/column DCT would reorder the sum, so it is deliberately not used.
163
+ *
164
+ * C(u,x) comes from the fixed table `JPEG_DCT_COSINES` (correctly rounded constants), not `Math.cos`,
165
+ * so the coefficients do not depend on the JavaScript engine's maths library. Each quantized coefficient
166
+ * is rounded half away from zero (`roundJpegCoefficient`).
101
167
  */
102
- const cosine = Array.from({ length: 8 }, (_, u) => Array.from({ length: 8 }, (_, x) => Math.cos((2 * x + 1) * u * Math.PI / 16)));
168
+ const cosine = JPEG_DCT_COSINES;
103
169
  const previous = [0, 0, 0];
170
+ const planes = [new Float64Array(64), new Float64Array(64), new Float64Array(64)];
171
+ const rowProducts = new Float64Array(64), transformed = new Float64Array(64);
172
+ const blueScale = 2 * (1 - .114), redScale = 2 * (1 - .299);
104
173
  return {
105
174
  writeRgbBlock(samples) {
106
- if (disposed || blocks >= Math.ceil(width / 8) * Math.ceil(height / 8) || samples.length !== 192 || Array.from(samples).some(v => !Number.isInteger(v) || v < 0 || v > 255))
175
+ let valid = !disposed && blocks < Math.ceil(width / 8) * Math.ceil(height / 8) && samples.length === 192;
176
+ for (let i = 0; valid && i < 192; i++) {
177
+ const v = samples[i];
178
+ valid = Number.isInteger(v) && v >= 0 && v <= 255;
179
+ }
180
+ if (!valid)
107
181
  throw new InvalidConfigurationError("JPEG requires complete bounded RGB coding blocks.");
182
+ const [luma, blueDifference, redDifference] = planes;
183
+ for (let i = 0; i < 64; i++) {
184
+ // JPEG pads only partial 8x8 blocks (MCUs, minimum coded units). The declared image and crop size never change.
185
+ const p = i * 3;
186
+ const red = samples[p], green = samples[p + 1], blue = samples[p + 2], luminance = .299 * red + .587 * green + .114 * blue;
187
+ luma[i] = luminance - 128;
188
+ blueDifference[i] = (blue - luminance) / blueScale;
189
+ redDifference[i] = (red - luminance) / redScale;
190
+ }
108
191
  for (let channel = 0; channel < 3; channel++) {
109
- const block = [];
110
- for (let y = 0; y < 8; y++)
111
- for (let x = 0; x < 8; x++) {
112
- // JPEG coding pads partial 8x8 MCUs only; this never changes the declared photograph/crop dimensions.
113
- const p = (y * 8 + x) * 3;
114
- const red = samples[p], green = samples[p + 1], blue = samples[p + 2], luminance = .299 * red + .587 * green + .114 * blue;
115
- block.push(channel === 0 ? luminance - 128 : channel === 1 ? (blue - luminance) / (2 * (1 - .114)) : (red - luminance) / (2 * (1 - .299)));
116
- }
117
- const transformed = [];
118
- for (let v = 0; v < 8; v++)
119
- for (let u = 0; u < 8; u++) {
192
+ const block = planes[channel];
193
+ for (let u = 0; u < 8; u++) {
194
+ const uOffset = u * 8;
195
+ for (let y = 0; y < 8; y++)
196
+ for (let x = 0; x < 8; x++)
197
+ rowProducts[y * 8 + x] = block[y * 8 + x] * cosine[uOffset + x];
198
+ const uFactor = u === 0 ? Math.SQRT1_2 : 1;
199
+ for (let v = 0; v < 8; v++) {
200
+ const vOffset = v * 8;
120
201
  let sum = 0;
121
- for (let y = 0; y < 8; y++)
202
+ for (let y = 0; y < 8; y++) {
203
+ const cv = cosine[vOffset + y];
122
204
  for (let x = 0; x < 8; x++)
123
- sum += block[y * 8 + x] * cosine[u][x] * cosine[v][y];
124
- transformed.push(Math.round(sum * .25 * (u === 0 ? Math.SQRT1_2 : 1) * (v === 0 ? Math.SQRT1_2 : 1) / q));
205
+ sum += rowProducts[y * 8 + x] * cv;
206
+ }
207
+ transformed[vOffset + u] = roundJpegCoefficient(sum * .25 * uFactor * (v === 0 ? Math.SQRT1_2 : 1) / q);
125
208
  }
209
+ }
126
210
  const difference = transformed[0] - previous[channel], size = amplitude(difference, 11);
127
211
  emit(size, 4);
128
212
  coefficient(difference, size);
@@ -139,7 +223,7 @@ export function createExportJpegEncoder(input) {
139
223
  zeroes -= 16;
140
224
  }
141
225
  const length = amplitude(value, 10), symbol = zeroes * 16 + length;
142
- emit(ac.indexOf(symbol), 8);
226
+ emit(acIndex[symbol], 8);
143
227
  coefficient(value, length);
144
228
  zeroes = 0;
145
229
  }
@@ -153,13 +237,15 @@ export function createExportJpegEncoder(input) {
153
237
  throw new InvalidConfigurationError("JPEG cannot finish incomplete or disposed encoding.");
154
238
  if (bits)
155
239
  emit((1 << (8 - bits)) - 1, 8 - bits);
240
+ // Only the written prefix can hold data; zero it after the copy instead of filling the whole capacity.
156
241
  push(255, 217);
157
242
  const output = storage.slice(0, offset);
158
- storage.fill(0);
243
+ storage.fill(0, 0, offset);
244
+ storage = new Uint8Array(0);
159
245
  disposed = true;
160
246
  return output;
161
247
  },
162
- dispose() { storage.fill(0); disposed = true; }
248
+ dispose() { storage.fill(0, 0, offset); storage = new Uint8Array(0); disposed = true; }
163
249
  };
164
250
  }
165
251
  //# sourceMappingURL=export-jpeg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-jpeg.js","sourceRoot":"","sources":["../../src/capture/export-jpeg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export-jpeg.js","sourceRoot":"","sources":["../../src/capture/export-jpeg.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Baseline JPEG encoder written for this project. It computes the DCT (discrete cosine transform)\n * directly and uses no third-party encoder source, default quantization tables or Huffman tables.\n * @see docs/SIMULATED_CAPTURE.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\n/**\n * Identifies the exact byte output of the baseline encoder.\n *\n * Version 2 (engine 2.0.0) uses the fixed cosine table below instead of runtime `Math.cos`, and rounds\n * quantized coefficients half away from zero. Compared with version 1, bytes can differ only where a\n * coefficient before rounding was within about one ULP (unit in the last place) of a half-integer, or\n * was exactly a negative half-integer. The repository's test images are unchanged.\n */\nexport const EXPORT_JPEG_ENCODER_ID = \"photivra-baseline-jpeg-444-v2\" as const;\n/**\n * C(u,x) = cos((2x+1)·u·π/16) for u,x in 0..7, row-major by u.\n *\n * Each entry is the correctly rounded IEEE-754 double of the exact cosine. They were computed offline with\n * 130-digit decimal arithmetic and checked so that no neighbouring double is closer (see\n * docs/PHOTOGRAPHIC_EXPORT.md). Hard-coding them makes the DCT independent of each JavaScript engine's\n * `Math.cos`, which differs in the last bit between engines. These are mathematical facts, not third-party data.\n */\nexport const JPEG_DCT_COSINES: Readonly<Float64Array> = Float64Array.of(\n 1,1,1,1,1,1,1,1,\n 0.9807852804032304,0.8314696123025452,0.5555702330196022,0.19509032201612828,-0.19509032201612828,-0.5555702330196022,-0.8314696123025452,-0.9807852804032304,\n 0.9238795325112867,0.3826834323650898,-0.3826834323650898,-0.9238795325112867,-0.9238795325112867,-0.3826834323650898,0.3826834323650898,0.9238795325112867,\n 0.8314696123025452,-0.19509032201612828,-0.9807852804032304,-0.5555702330196022,0.5555702330196022,0.9807852804032304,0.19509032201612828,-0.8314696123025452,\n 0.7071067811865476,-0.7071067811865476,-0.7071067811865476,0.7071067811865476,0.7071067811865476,-0.7071067811865476,-0.7071067811865476,0.7071067811865476,\n 0.5555702330196022,-0.9807852804032304,0.19509032201612828,0.8314696123025452,-0.8314696123025452,-0.19509032201612828,0.9807852804032304,-0.5555702330196022,\n 0.3826834323650898,-0.9238795325112867,0.9238795325112867,-0.3826834323650898,-0.3826834323650898,0.9238795325112867,-0.9238795325112867,0.3826834323650898,\n 0.19509032201612828,-0.5555702330196022,0.8314696123025452,-0.9807852804032304,0.9807852804032304,-0.8314696123025452,0.5555702330196022,-0.19509032201612828\n);\n/**\n * Rounds a quantized coefficient to the nearest integer, with ties going away from zero (−2.5 → −3,\n * 2.5 → 3), so positive and negative values round the same way. `Math.round` alone sends −2.5 to −2.\n */\nexport function roundJpegCoefficient(value: number): number {\n return value<0 ? -Math.round(-value) : Math.round(value);\n}\n\n/** Internal baseline JPEG settings: 8-bit YCbCr 4:4:4, one explicit constant quantization step, and uniform Huffman tables written for this project. */\nexport interface ExportJpegInput { width: number; height: number; samples: readonly number[]; quantizationStep: number; exif: Uint8Array; xmp: Uint8Array }\n/** Encodes a baseline JPEG with a directly computed DCT. Uses no third-party encoder source, default quantization tables or Huffman tables. */\nexport function encodeExportJpeg(input: ExportJpegInput): Uint8Array {\n const { width, height, samples, quantizationStep: q } = input;\n if (![width,height,q].every(Number.isSafeInteger) || width < 1 || height < 1 || width*height > 4096 ||\n q < 1 || q > 255 || samples.length !== width*height*3 || Array.from(samples).some((v) => !Number.isInteger(v) || v < 0 || v > 255)) {\n throw new InvalidConfigurationError(\"Unsupported baseline JPEG input.\");\n }\n const encoder=createExportJpegEncoder({...input,maximumOutputBytes:1_000_000});\n for(let by=0;by<height;by+=8)for(let bx=0;bx<width;bx+=8){\n const block:number[]=[];\n for(let y=0;y<8;y++)for(let x=0;x<8;x++){\n const p=(Math.min(by+y,height-1)*width+Math.min(bx+x,width-1))*3;\n block.push(samples[p]!,samples[p+1]!,samples[p+2]!);\n }\n encoder.writeRgbBlock(block);\n }\n return encoder.finish();\n}\n/**\n * Internal size-limited JPEG writer. The reference export and the scalable export use exactly the same\n * DCT and entropy-coding equations.\n *\n * When `densityDotsPerInch` is supplied, it is written to the JFIF 1.02 APP0 segment as units=1 (dots\n * per inch) with equal X and Y density. JFIF density fields are 16-bit unsigned, so it must be an integer\n * in 1..65535; callers round any fractional density and store the exact value in EXIF. When omitted,\n * APP0 keeps units=0 with a 1:1 pixel aspect ratio and states no physical size.\n */\nexport function createExportJpegEncoder(input: Omit<ExportJpegInput,\"samples\"> & {maximumOutputBytes:number;icc?:Uint8Array;densityDotsPerInch?:number}): {\n writeRgbBlock(samples:readonly number[]):void; finish():Uint8Array; dispose():void;\n} {\n const {width,height,quantizationStep:q}=input;\n if(![width,height,q,input.maximumOutputBytes].every(Number.isSafeInteger)||width<1||height<1||width>65535||height>65535||q<1||q>255||input.maximumOutputBytes<1||input.maximumOutputBytes>256_000_000)\n throw new InvalidConfigurationError(\"Invalid bounded JPEG encoding plan.\");\n const density=input.densityDotsPerInch;\n if(density!==undefined&&(!Number.isSafeInteger(density)||density<1||density>65535))\n throw new InvalidConfigurationError(\"JFIF density requires an integer from 1 to 65535 dots per inch.\");\n // Growable output. Capacity starts at min(budget, 64 KiB) and doubles, but never beyond the budget. The budget\n // check is unchanged (offset + n > maximumOutputBytes fails), so the output bytes and failures are the same as\n // with a buffer allocated at full budget up front. An old buffer is zeroed after its bytes are copied over.\n const budget=input.maximumOutputBytes;\n let storage=new Uint8Array(Math.min(budget,65_536)),offset=0,disposed=false,blocks=0;\n const reserve=(count:number):void=>{\n if(disposed||offset+count>budget)throw new InvalidConfigurationError(\"JPEG output exceeds admitted byte budget or is disposed.\");\n if(offset+count<=storage.length)return;\n const grown=new Uint8Array(Math.min(budget,Math.max(storage.length*2,offset+count)));\n grown.set(storage.subarray(0,offset));storage.fill(0,0,offset);storage=grown;\n };\n const push=(...values:number[]):void=>{reserve(values.length);storage.set(values,offset);offset+=values.length;};\n // Fast path for one entropy-coded byte: the same budget/disposal check and byte order as push(), without an array per byte.\n const pushByte=(value:number):void=>{if(disposed||offset>=storage.length)reserve(1);storage[offset++]=value;};\n push(255,216);\n const marker = (id: number, payload: readonly number[]): void => {\n if (payload.length > 65533) throw new InvalidConfigurationError(\"JPEG metadata segment exceeds the standard APP limit.\");\n push(255,id,(payload.length+2)>>8,(payload.length+2)&255,...payload);\n };\n // JFIF 1.02 APP0: identifier, version 1.02, units (0 aspect ratio only, 1 dots per inch), Xdensity, Ydensity, no thumbnail.\n marker(224,density===undefined ? [74,70,73,70,0,1,2,0,0,1,0,1,0,0] : [74,70,73,70,0,1,2,1,density>>8,density&255,density>>8,density&255,0,0]);\n marker(225,[69,120,105,102,0,0,...input.exif]);\n marker(225,[...new TextEncoder().encode(\"http://ns.adobe.com/xap/1.0/\\0\"),...input.xmp]);\n if(input.icc){\n if(input.icc.length>65519)throw new InvalidConfigurationError(\"ICC profile exceeds the single-segment encoding envelope.\");\n marker(226,[...new TextEncoder().encode(\"ICC_PROFILE\\0\"),1,1,...input.icc]);\n }\n marker(219,[0,...Array<number>(64).fill(q)]);\n marker(192,[8,height>>8,height&255,width>>8,width&255,3,1,17,0,2,17,0,3,17,0]);\n // DC categories 0..11 use 4-bit codes; AC EOB/ZRL and all baseline run/category pairs use 8-bit codes.\n // Incomplete canonical Huffman trees reserve the all-ones code, so JPEG bit padding (1-bits) can never be read as a symbol.\n const dc = Array.from({length:12},(_,i) => i), ac = [0,240];\n for (let run=0;run<16;run++) for (let size=1;size<=10;size++) ac.push(run*16+size);\n marker(196,[0,...Array.from({length:16},(_,i) => i===3 ? 12 : 0),...dc,\n 16,...Array.from({length:16},(_,i) => i===7 ? ac.length : 0),...ac]);\n marker(218,[3,1,0,2,0,3,0,0,63,0]);\n let accumulator=0, bits=0;\n // Appends the low `count` bits (count <= 16) most-significant first, emitting each completed byte with 0xFF stuffing.\n const emit = (value: number, count: number): void => {\n accumulator=(accumulator<<count)|(value&((1<<count)-1)); bits+=count;\n while (bits>=8) { bits-=8; const byte=(accumulator>>>bits)&255; pushByte(byte); if (byte===255) pushByte(0); }\n accumulator&=(1<<bits)-1;\n };\n const amplitude = (value: number, max: number): number => {\n const size=value===0 ? 0 : Math.floor(Math.log2(Math.abs(value)))+1;\n if (size>max) throw new InvalidConfigurationError(\"JPEG coefficient exceeds baseline entropy range.\");\n return size;\n };\n const coefficient = (value: number, size: number): void => { if (size) emit(value>=0 ? value : value+(1<<size)-1,size); };\n const zigzag=new Int32Array(64);\n for (let diagonal=0,i=0;diagonal<=14;diagonal++) {\n const points: number[] = [];\n for (let y=0;y<8;y++) { const x=diagonal-y; if (x>=0 && x<8) points.push(y*8+x); }\n for (const point of diagonal%2===0 ? points.reverse() : points) zigzag[i++]=point;\n }\n // Huffman symbol index of each AC (run, size) pair; equals ac.indexOf(symbol) for every emitted symbol.\n const acIndex=new Int16Array(256).fill(-1);\n for (let i=ac.length-1;i>=0;i--) acIndex[ac[i]!]=i;\n/**\n * The 8×8 DCT, computed directly, with orthonormal DC factors and one chosen quantization step.\n *\n * This is a deliberately simple 4:4:4 reference encoder. Lossy quantization means exact RGB pixels are\n * not preserved. Decoding the JPEG and comparing is an interoperability check, not an exact scientific\n * check of pixel values.\n *\n * Each coefficient is the direct 64-term sum Σ_y Σ_x (f(x,y)·C(u,x))·C(v,y), summed over y, then x.\n * The row products f(x,y)·C(u,x) are computed once per u and reused for all eight v. This reuses the\n * identical IEEE-754 products and keeps the exact order of multiplication and summation. A factored\n * row/column DCT would reorder the sum, so it is deliberately not used.\n *\n * C(u,x) comes from the fixed table `JPEG_DCT_COSINES` (correctly rounded constants), not `Math.cos`,\n * so the coefficients do not depend on the JavaScript engine's maths library. Each quantized coefficient\n * is rounded half away from zero (`roundJpegCoefficient`).\n */\n const cosine=JPEG_DCT_COSINES;\n const previous=[0,0,0];\n const planes=[new Float64Array(64),new Float64Array(64),new Float64Array(64)];\n const rowProducts=new Float64Array(64), transformed=new Float64Array(64);\n const blueScale=2*(1-.114), redScale=2*(1-.299);\n return {\n writeRgbBlock(samples:readonly number[]):void {\n let valid=!disposed&&blocks<Math.ceil(width/8)*Math.ceil(height/8)&&samples.length===192;\n for(let i=0;valid&&i<192;i++){const v=samples[i]!;valid=Number.isInteger(v)&&v>=0&&v<=255;}\n if(!valid)throw new InvalidConfigurationError(\"JPEG requires complete bounded RGB coding blocks.\");\n const [luma,blueDifference,redDifference]=planes as [Float64Array,Float64Array,Float64Array];\n for (let i=0;i<64;i++) {\n // JPEG pads only partial 8x8 blocks (MCUs, minimum coded units). The declared image and crop size never change.\n const p=i*3;\n const red=samples[p]!, green=samples[p+1]!, blue=samples[p+2]!, luminance=.299*red+.587*green+.114*blue;\n luma[i]=luminance-128; blueDifference[i]=(blue-luminance)/blueScale; redDifference[i]=(red-luminance)/redScale;\n }\n for (let channel=0;channel<3;channel++) {\n const block=planes[channel]!;\n for (let u=0;u<8;u++) {\n const uOffset=u*8;\n for (let y=0;y<8;y++) for (let x=0;x<8;x++) rowProducts[y*8+x]=block[y*8+x]!*cosine[uOffset+x]!;\n const uFactor=u===0 ? Math.SQRT1_2 : 1;\n for (let v=0;v<8;v++) {\n const vOffset=v*8;\n let sum=0; for (let y=0;y<8;y++) { const cv=cosine[vOffset+y]!; for (let x=0;x<8;x++) sum+=rowProducts[y*8+x]!*cv; }\n transformed[vOffset+u]=roundJpegCoefficient(sum*.25*uFactor*(v===0 ? Math.SQRT1_2 : 1)/q);\n }\n }\n const difference=transformed[0]!-previous[channel]!, size=amplitude(difference,11); emit(size,4); coefficient(difference,size); previous[channel]=transformed[0]!;\n let zeroes=0;\n for (let i=1;i<64;i++) {\n const value=transformed[zigzag[i]!]!;\n if (value===0) { zeroes++; continue; }\n while (zeroes>=16) { emit(1,8); zeroes-=16; }\n const length=amplitude(value,10), symbol=zeroes*16+length; emit(acIndex[symbol]!,8); coefficient(value,length); zeroes=0;\n }\n if (zeroes) emit(0,8);\n }\n blocks++;\n },\n finish():Uint8Array {\n if(disposed||blocks!==Math.ceil(width/8)*Math.ceil(height/8))throw new InvalidConfigurationError(\"JPEG cannot finish incomplete or disposed encoding.\");\n if(bits)emit((1<<(8-bits))-1,8-bits);\n // Only the written prefix can hold data; zero it after the copy instead of filling the whole capacity.\n push(255,217);const output=storage.slice(0,offset);storage.fill(0,0,offset);storage=new Uint8Array(0);disposed=true;return output;\n },\n dispose():void {storage.fill(0,0,offset);storage=new Uint8Array(0);disposed=true;}\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- /** Internal TIFF field packing; pointers are resolved only inside the returned owned buffer. */
1
+ /** One packed TIFF tag (internal). Pointers are resolved only inside the buffer the packer returns. */
2
2
  export interface ExportTiffTag {
3
3
  id: number;
4
4
  type: number;
@@ -7,39 +7,63 @@ export interface ExportTiffTag {
7
7
  pointer?: "exif" | "pixels";
8
8
  }
9
9
  /**
10
- * Pack validated unsigned integer tag values into little-endian BYTE, SHORT or LONG payloads; reject
11
- * values outside the selected storage range.
12
- * @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
13
- * @param type - 1 | 3 | 4. See the linked contract for coordinate, unit and profile binding semantics.
14
- * @param values - readonly number[]. See the linked contract for coordinate, unit and profile binding semantics.
15
- * @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
10
+ * Packs unsigned integer tag values as little-endian BYTE, SHORT or LONG. A value outside the
11
+ * chosen type's range is rejected.
12
+ * @param id - TIFF tag number.
13
+ * @param type - TIFF field type: 1 BYTE, 3 SHORT or 4 LONG.
14
+ * @param values - Unsigned integer values.
15
+ * @returns The packed tag.
16
16
  *
17
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
17
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
18
18
  */
19
19
  export declare function exportTiffNumbers(id: number, type: 1 | 3 | 4, values: readonly number[]): ExportTiffTag;
20
20
  /**
21
- * Describe an internal BYTE/UNDEFINED tag using the supplied byte array. The payload is borrowed here;
22
- * the final TIFF packer copies it into its owned output buffer.
23
- * @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
24
- * @param type - 1 | 7. See the linked contract for coordinate, unit and profile binding semantics.
25
- * @param data - Uint8Array. See the linked contract for coordinate, unit and profile binding semantics.
26
- * @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
21
+ * Makes a BYTE or UNDEFINED tag from a byte array. The array is not copied here; the final TIFF
22
+ * packer copies it into its own output buffer.
23
+ * @param id - TIFF tag number.
24
+ * @param type - TIFF field type: 1 BYTE or 7 UNDEFINED.
25
+ * @param data - Tag bytes.
26
+ * @returns The tag, referring to `data`.
27
27
  *
28
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
28
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
29
29
  */
30
30
  export declare function exportTiffBytes(id: number, type: 1 | 7, data: Uint8Array): ExportTiffTag;
31
31
  /**
32
- * Encode printable ASCII with the required NUL terminator; reject unsupported characters instead of
33
- * silent lossy replacement.
34
- * @param id - number. See the linked contract for coordinate, unit and profile binding semantics.
35
- * @param value - string. See the linked contract for coordinate, unit and profile binding semantics.
36
- * @returns ExportTiffTag. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
32
+ * Encodes printable ASCII text with the required NUL terminator. Any other character is rejected,
33
+ * rather than silently replaced.
34
+ * @param id - TIFF tag number.
35
+ * @param value - Printable ASCII text.
36
+ * @returns The packed ASCII tag.
37
37
  *
38
- * @see docs/API_REFERENCE.md for the root export and exact type graph.
38
+ * @see docs/API_REFERENCE.md for the package export and its full type definitions.
39
39
  */
40
40
  export declare function exportTiffAscii(id: number, value: string): ExportTiffTag;
41
- /** Bounded rational approximation; matrix/metadata precision is explicit, never silent overflow. */
41
+ /** Packs values as TIFF RATIONAL or SRATIONAL (fractions) with a power-of-ten denominator. A value that would overflow or lose all precision is rejected, never silently changed. */
42
42
  export declare function exportTiffRationals(id: number, signed: boolean, values: readonly number[]): ExportTiffTag;
43
- /** Independently authored little-endian TIFF6 IFD0 + EXIF IFD, with optional uncompressed strip. */
43
+ /** Pixel dimensions that the compressed primary image's Exif IFD must record (PixelX/YDimension). */
44
+ export interface ExportJpegExifDimensions {
45
+ pixelWidth: number;
46
+ pixelHeight: number;
47
+ }
48
+ /**
49
+ * Packs the Exif APP1 TIFF structure for a JPEG-compressed primary image, with every tag that Exif 2.32
50
+ * (CIPA DC-008-2019 §4.6.8, Tables 17 and 18, "Compressed" column) marks mandatory. Caller tags take
51
+ * priority. A missing mandatory tag gets the standard's own default:
52
+ *
53
+ * - IFD0 XResolution = YResolution = 72/1 and ResolutionUnit = 2 (inches). The standard says "When the image
54
+ * resolution is unknown, 72 [dpi] shall be designated"; this is the Exif convention for an unknown
55
+ * resolution, not a physical print-size claim. The three tags are written together or not at all.
56
+ * - IFD0 YCbCrPositioning = 1 (centered, the TIFF default; the baseline encoder codes 4:4:4, so no chroma
57
+ * siting is implied).
58
+ * - Exif ExifVersion "0232", FlashpixVersion "0100", ComponentsConfiguration 1 2 3 0 (Y Cb Cr),
59
+ * PixelXDimension/PixelYDimension = the coded image size.
60
+ *
61
+ * ColorSpace (40961) is mandatory but has no default, so the caller must supply it. Tags the standard marks
62
+ * J or N for compressed data (ImageWidth, Compression, StripOffsets, YCbCrSubSampling, ...) are rejected,
63
+ * and a caller PixelX/YDimension that disagrees with the coded size is rejected.
64
+ */
65
+ export declare function packExportJpegExif(main: readonly ExportTiffTag[], exif: readonly ExportTiffTag[], dimensions: ExportJpegExifDimensions): Uint8Array;
66
+ /** Packs finite numbers as little-endian IEEE-754 doubles (TIFF type 12, DOUBLE). */
67
+ export declare function exportTiffDoubles(id: number, values: readonly number[]): ExportTiffTag;
68
+ /** Writes a little-endian TIFF 6.0 file: IFD0 plus an EXIF IFD, with an optional uncompressed strip. Written for this project. */
44
69
  export declare function packExportTiff(main: readonly ExportTiffTag[], exif: readonly ExportTiffTag[], pixels?: Uint8Array<ArrayBuffer>): Uint8Array;
45
- //# sourceMappingURL=export-tiff.d.ts.map