@photivra/engine 1.2.0 → 1.4.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 (235) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/CITATION.cff +1 -1
  3. package/README.md +6 -6
  4. package/dist/capture/environment-raw-producer.d.ts +6 -3
  5. package/dist/capture/environment-raw-producer.d.ts.map +1 -1
  6. package/dist/capture/environment-raw-producer.js +26 -15
  7. package/dist/capture/environment-raw-producer.js.map +1 -1
  8. package/dist/capture/export-jpeg.d.ts +9 -0
  9. package/dist/capture/export-jpeg.d.ts.map +1 -1
  10. package/dist/capture/export-jpeg.js +51 -12
  11. package/dist/capture/export-jpeg.js.map +1 -1
  12. package/dist/capture/native-environment-raw.d.ts +43 -0
  13. package/dist/capture/native-environment-raw.d.ts.map +1 -0
  14. package/dist/capture/native-environment-raw.js +81 -0
  15. package/dist/capture/native-environment-raw.js.map +1 -0
  16. package/dist/capture/native-raw-development.d.ts +39 -0
  17. package/dist/capture/native-raw-development.d.ts.map +1 -0
  18. package/dist/capture/native-raw-development.js +153 -0
  19. package/dist/capture/native-raw-development.js.map +1 -0
  20. package/dist/capture/native-raw.d.ts +79 -0
  21. package/dist/capture/native-raw.d.ts.map +1 -0
  22. package/dist/capture/native-raw.js +142 -0
  23. package/dist/capture/native-raw.js.map +1 -0
  24. package/dist/capture/raw-frame-reconstruction.d.ts +2 -0
  25. package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -1
  26. package/dist/capture/raw-frame-reconstruction.js +18 -13
  27. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  28. package/dist/capture/sensor-raw-producer.d.ts +8 -0
  29. package/dist/capture/sensor-raw-producer.d.ts.map +1 -1
  30. package/dist/capture/sensor-raw-producer.js +43 -38
  31. package/dist/capture/sensor-raw-producer.js.map +1 -1
  32. package/dist/capture/simulated-capture.d.ts +8 -0
  33. package/dist/capture/simulated-capture.d.ts.map +1 -1
  34. package/dist/capture/simulated-capture.js +24 -13
  35. package/dist/capture/simulated-capture.js.map +1 -1
  36. package/dist/color/srgb-icc.d.ts +8 -0
  37. package/dist/color/srgb-icc.d.ts.map +1 -0
  38. package/dist/color/srgb-icc.js +67 -0
  39. package/dist/color/srgb-icc.js.map +1 -0
  40. package/dist/color/srgb-transfer.d.ts +4 -0
  41. package/dist/color/srgb-transfer.d.ts.map +1 -0
  42. package/dist/color/srgb-transfer.js +9 -0
  43. package/dist/color/srgb-transfer.js.map +1 -0
  44. package/dist/composition/image-formation-plan.d.ts.map +1 -1
  45. package/dist/composition/image-formation-plan.js +21 -9
  46. package/dist/composition/image-formation-plan.js.map +1 -1
  47. package/dist/core/version.d.ts +1 -1
  48. package/dist/core/version.js +1 -1
  49. package/dist/index.d.ts +12 -2
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +6 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/motion/camera-rotation.d.ts +8 -0
  54. package/dist/motion/camera-rotation.d.ts.map +1 -1
  55. package/dist/motion/camera-rotation.js +2 -1
  56. package/dist/motion/camera-rotation.js.map +1 -1
  57. package/dist/optics/sensor-aperture-rays.d.ts +56 -0
  58. package/dist/optics/sensor-aperture-rays.d.ts.map +1 -0
  59. package/dist/optics/sensor-aperture-rays.js +55 -0
  60. package/dist/optics/sensor-aperture-rays.js.map +1 -0
  61. package/dist/output/print-jpeg.d.ts +63 -0
  62. package/dist/output/print-jpeg.d.ts.map +1 -0
  63. package/dist/output/print-jpeg.js +141 -0
  64. package/dist/output/print-jpeg.js.map +1 -0
  65. package/dist/output/sdr-rendering.d.ts.map +1 -1
  66. package/dist/output/sdr-rendering.js +2 -1
  67. package/dist/output/sdr-rendering.js.map +1 -1
  68. package/dist/sensor/environment-photo-signal.d.ts +23 -5
  69. package/dist/sensor/environment-photo-signal.d.ts.map +1 -1
  70. package/dist/sensor/environment-photo-signal.js +53 -19
  71. package/dist/sensor/environment-photo-signal.js.map +1 -1
  72. package/dist/sensor/raw-reconstruction.d.ts +5 -0
  73. package/dist/sensor/raw-reconstruction.d.ts.map +1 -1
  74. package/dist/sensor/raw-reconstruction.js +21 -47
  75. package/dist/sensor/raw-reconstruction.js.map +1 -1
  76. package/docs/API_REFERENCE.md +87 -1
  77. package/docs/API_STYLE.md +1 -1
  78. package/docs/DEVELOPERS.md +5 -5
  79. package/docs/ENVIRONMENT_RAW_CAPTURE.md +24 -3
  80. package/docs/NATIVE_RAW_AND_PRINT.md +47 -0
  81. package/docs/RELEASE_1_3_0.md +15 -0
  82. package/docs/RELEASE_1_4_0.md +23 -0
  83. package/docs/SENSOR_APERTURE_RAYS.md +23 -0
  84. package/docs/api/camera-equivalent-focal-length.md +1 -1
  85. package/docs/api/camera-field-of-view.md +1 -1
  86. package/docs/api/camera-projected-object-size.md +1 -1
  87. package/docs/api/capture-capture-export-metadata.md +1 -1
  88. package/docs/api/capture-environment-raw-producer.md +3 -2
  89. package/docs/api/capture-focus-control.md +1 -1
  90. package/docs/api/capture-linear-encoding.md +1 -1
  91. package/docs/api/capture-native-environment-raw.md +88 -0
  92. package/docs/api/capture-native-raw-development.md +66 -0
  93. package/docs/api/capture-native-raw.md +157 -0
  94. package/docs/api/capture-photographic-export.md +1 -1
  95. package/docs/api/capture-raw-frame-reconstruction.md +1 -1
  96. package/docs/api/capture-release-sequence.md +1 -1
  97. package/docs/api/capture-sensor-raw-frame.md +1 -1
  98. package/docs/api/capture-sensor-raw-producer.md +1 -1
  99. package/docs/api/capture-simulated-capture.md +9 -1
  100. package/docs/api/color-capture-color.md +1 -1
  101. package/docs/api/color-srgb-icc.md +23 -0
  102. package/docs/api/color-white-balance.md +1 -1
  103. package/docs/api/composition-image-formation-plan.md +1 -1
  104. package/docs/api/composition-plan-consumer.md +1 -1
  105. package/docs/api/core-calculation-result.md +1 -1
  106. package/docs/api/core-configuration-error.md +1 -1
  107. package/docs/api/core-image-formation.md +1 -1
  108. package/docs/api/core-scientific-assurance.md +1 -1
  109. package/docs/api/core-spectral-composition.md +1 -1
  110. package/docs/api/core-spectral.md +1 -1
  111. package/docs/api/core-validation.md +1 -1
  112. package/docs/api/core-version.md +2 -2
  113. package/docs/api/equipment-exposure-capabilities.md +1 -1
  114. package/docs/api/equipment-generic-tier-assets.md +1 -1
  115. package/docs/api/equipment-generic-tier-presets.md +1 -1
  116. package/docs/api/equipment-iso-capabilities.md +1 -1
  117. package/docs/api/equipment-metering-capabilities.md +1 -1
  118. package/docs/api/equipment-release-capabilities.md +1 -1
  119. package/docs/api/exports.json +222 -2
  120. package/docs/api/exposure-exposure-duration-control.md +1 -1
  121. package/docs/api/exposure-exposure-mode-resolver.md +1 -1
  122. package/docs/api/exposure-exposure.md +1 -1
  123. package/docs/api/exposure-flash.md +1 -1
  124. package/docs/api/exposure-metering-scene-radiance.md +1 -1
  125. package/docs/api/exposure-metering-target.md +1 -1
  126. package/docs/api/exposure-metering-temporal.md +1 -1
  127. package/docs/api/exposure-metering.md +1 -1
  128. package/docs/api/exposure-program-line.md +1 -1
  129. package/docs/api/motion-camera-rotation.md +1 -1
  130. package/docs/api/motion-capture-rotation-inverse-mapping.md +1 -1
  131. package/docs/api/motion-capture-rotation-temporal-quadrature.md +1 -1
  132. package/docs/api/motion-capture-rotation-trajectory.md +1 -1
  133. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +1 -1
  134. package/docs/api/motion-extended-object-projection.md +1 -1
  135. package/docs/api/motion-projected-motion.md +1 -1
  136. package/docs/api/optics-aperture.md +1 -1
  137. package/docs/api/optics-circle-of-confusion.md +1 -1
  138. package/docs/api/optics-complex-pupil-psf.md +1 -1
  139. package/docs/api/optics-depth-of-field.md +1 -1
  140. package/docs/api/optics-diffraction.md +1 -1
  141. package/docs/api/optics-focus-breathing.md +1 -1
  142. package/docs/api/optics-focus-state.md +1 -1
  143. package/docs/api/optics-front-of-lens-filter.md +1 -1
  144. package/docs/api/optics-illumination-vignetting.md +1 -1
  145. package/docs/api/optics-lateral-chromatic-aberration.md +1 -1
  146. package/docs/api/optics-lens-psf-profile.md +1 -1
  147. package/docs/api/optics-polygon-diffraction.md +1 -1
  148. package/docs/api/optics-profile-contract.md +1 -1
  149. package/docs/api/optics-psf-foundation.md +1 -1
  150. package/docs/api/optics-radial-distortion.md +1 -1
  151. package/docs/api/optics-scene-to-sensor-irradiance.md +1 -1
  152. package/docs/api/optics-scene-to-sensor-quadrature.md +1 -1
  153. package/docs/api/optics-sensor-aperture-rays.md +75 -0
  154. package/docs/api/optics-sensor-environment-query.md +1 -1
  155. package/docs/api/optics-sensor-psf-quadrature.md +1 -1
  156. package/docs/api/optics-stray-light.md +1 -1
  157. package/docs/api/optics-thin-lens.md +1 -1
  158. package/docs/api/output-capture-corrected-sdr.md +1 -1
  159. package/docs/api/output-capture-geometry.md +1 -1
  160. package/docs/api/output-capture-sdr.md +1 -1
  161. package/docs/api/output-crop.md +1 -1
  162. package/docs/api/output-geometric-transforms.md +1 -1
  163. package/docs/api/output-lens-corrections.md +1 -1
  164. package/docs/api/output-native-capture-sdr.md +1 -1
  165. package/docs/api/output-print-contrast-reference.md +1 -1
  166. package/docs/api/output-print-detail.md +1 -1
  167. package/docs/api/output-print-jpeg.md +117 -0
  168. package/docs/api/output-print-plan.md +1 -1
  169. package/docs/api/output-print-region-statistics.md +1 -1
  170. package/docs/api/output-sdr-rendering.md +1 -1
  171. package/docs/api/output-subject-framing-crop.md +1 -1
  172. package/docs/api/schema-camera.md +1 -1
  173. package/docs/api/schema-illumination-spectral.md +1 -1
  174. package/docs/api/schema-illumination-temporal.md +1 -1
  175. package/docs/api/schema-illumination.md +1 -1
  176. package/docs/api/schema-scene-radiance-temporal.md +1 -1
  177. package/docs/api/schema-scene-radiance.md +1 -1
  178. package/docs/api/schema-scene.md +1 -1
  179. package/docs/api/schema-validation.md +1 -1
  180. package/docs/api/sensor-accumulated-charge.md +1 -1
  181. package/docs/api/sensor-architecture.md +1 -1
  182. package/docs/api/sensor-camera-saturation-capacity.md +1 -1
  183. package/docs/api/sensor-capture-color-sampling-binding.md +1 -1
  184. package/docs/api/sensor-capture-mode-timing.md +1 -1
  185. package/docs/api/sensor-capture-mode.md +1 -1
  186. package/docs/api/sensor-color-sampling.md +1 -1
  187. package/docs/api/sensor-constant-rate-temporal-integration.md +1 -1
  188. package/docs/api/sensor-dark-current.md +1 -1
  189. package/docs/api/sensor-environment-photo-signal.md +22 -3
  190. package/docs/api/sensor-eqe-electron-rate.md +1 -1
  191. package/docs/api/sensor-eqe-local-exposure.md +1 -1
  192. package/docs/api/sensor-eqe-temporal-exposure.md +1 -1
  193. package/docs/api/sensor-exposure-window.md +1 -1
  194. package/docs/api/sensor-iso-signal-chain.md +1 -1
  195. package/docs/api/sensor-local-exposure-binding.md +1 -1
  196. package/docs/api/sensor-optical-stack.md +1 -1
  197. package/docs/api/sensor-photon-energy.md +1 -1
  198. package/docs/api/sensor-physical-charge-capacity.md +1 -1
  199. package/docs/api/sensor-pixel-pitch.md +1 -1
  200. package/docs/api/sensor-radiometry-readiness.md +1 -1
  201. package/docs/api/sensor-raw-readout.md +1 -1
  202. package/docs/api/sensor-raw-reconstruction.md +1 -1
  203. package/docs/api/sensor-readout-exposure-linkage.md +1 -1
  204. package/docs/api/sensor-readout-timing.md +1 -1
  205. package/docs/api/sensor-response-application-compatibility.md +1 -1
  206. package/docs/api/sensor-response-operating-range.md +1 -1
  207. package/docs/api/sensor-responsivity-photocurrent.md +1 -1
  208. package/docs/api/sensor-sampling-aperture.md +1 -1
  209. package/docs/api/sensor-scene-eqe-temporal-exposure.md +1 -1
  210. package/docs/api/sensor-sensor-geometry.md +1 -1
  211. package/docs/api/sensor-signal-noise.md +1 -1
  212. package/docs/api/sensor-spatial-sample-reduction.md +1 -1
  213. package/docs/api/sensor-spatial-sampling-quadrature.md +1 -1
  214. package/docs/api/sensor-spatio-spectral-reduction.md +1 -1
  215. package/docs/api/sensor-spectral-coverage.md +1 -1
  216. package/docs/api/sensor-spectral-quadrature.md +1 -1
  217. package/docs/api/sensor-spectral-response.md +1 -1
  218. package/docs/api/sensor-temporal-photo-signal.md +1 -1
  219. package/docs/api/simulation-poc-simulation.md +1 -1
  220. package/docs/api/stabilization-camera-shake.md +1 -1
  221. package/docs/api/stabilization-system.md +1 -1
  222. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  223. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  224. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  225. package/docs/validation/native-raw-print-2026-10-04/manifest.json +218 -0
  226. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  227. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  228. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +9 -0
  229. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +29 -0
  230. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  231. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  232. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  233. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  234. package/docs/validation/native-raw-print-2026-10-04/validation.json +41 -0
  235. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  # Public API reference
2
2
 
3
- Generated from the exact root exports for **@photivra/engine 1.2.0 / root contract 1.2.0** by `node scripts/generate-api-reference.mjs`. No module deep import is supported.
3
+ Generated from the exact root exports for **@photivra/engine 1.4.0 / root contract 1.4.0** by `node scripts/generate-api-reference.mjs`. No module deep import is supported.
4
4
 
5
5
  Use [the developer guide](DEVELOPERS.md) for executable paths and scientific boundaries. Types are contracts, not runtime validation: parse untrusted data, preserve units/reference frames, read assessment blockers, and retain evidence/limitations. Optional properties do not imply a universal default. Model/schema IDs remain independent of the distribution.
6
6
 
@@ -105,6 +105,52 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
105
105
  | [`LinearCaptureEncodingInput`](api/capture-linear-encoding.md#linearcaptureencodinginput) | Type |
106
106
  | [`parseLinearCaptureEncoding`](api/capture-linear-encoding.md#parselinearcaptureencoding) | Runtime |
107
107
 
108
+ ## capture/native-environment-raw.ts
109
+
110
+ [Detailed contracts](api/capture-native-environment-raw.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/capture/native-environment-raw.ts)
111
+
112
+ | Export | Kind |
113
+ | --- | --- |
114
+ | [`createNativeEnvironmentRawTask`](api/capture-native-environment-raw.md#createnativeenvironmentrawtask) | Runtime |
115
+ | [`NativeEnvironmentPhotoTile`](api/capture-native-environment-raw.md#nativeenvironmentphototile) | Type |
116
+ | [`NativeEnvironmentRawInput`](api/capture-native-environment-raw.md#nativeenvironmentrawinput) | Type |
117
+ | [`NativeEnvironmentRawOutput`](api/capture-native-environment-raw.md#nativeenvironmentrawoutput) | Type |
118
+ | [`NativeEnvironmentRawProvider`](api/capture-native-environment-raw.md#nativeenvironmentrawprovider) | Type |
119
+ | [`NativeEnvironmentRawTask`](api/capture-native-environment-raw.md#nativeenvironmentrawtask) | Type |
120
+ | [`NativeEnvironmentRawTile`](api/capture-native-environment-raw.md#nativeenvironmentrawtile) | Type |
121
+
122
+ ## capture/native-raw-development.ts
123
+
124
+ [Detailed contracts](api/capture-native-raw-development.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/capture/native-raw-development.ts)
125
+
126
+ | Export | Kind |
127
+ | --- | --- |
128
+ | [`createNativeRawDevelopmentTask`](api/capture-native-raw-development.md#createnativerawdevelopmenttask) | Runtime |
129
+ | [`NativeRawDevelopmentInput`](api/capture-native-raw-development.md#nativerawdevelopmentinput) | Type |
130
+ | [`NativeRawDevelopmentOutput`](api/capture-native-raw-development.md#nativerawdevelopmentoutput) | Type |
131
+ | [`NativeRawDevelopmentTask`](api/capture-native-raw-development.md#nativerawdevelopmenttask) | Type |
132
+
133
+ ## capture/native-raw.ts
134
+
135
+ [Detailed contracts](api/capture-native-raw.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/capture/native-raw.ts)
136
+
137
+ | Export | Kind |
138
+ | --- | --- |
139
+ | [`calculateNativeRawPlan`](api/capture-native-raw.md#calculatenativerawplan) | Runtime |
140
+ | [`createNativeRawTask`](api/capture-native-raw.md#createnativerawtask) | Runtime |
141
+ | [`NATIVE_RAW_LIMITS`](api/capture-native-raw.md#native_raw_limits) | Runtime |
142
+ | [`NATIVE_RAW_SCHEMA_VERSION`](api/capture-native-raw.md#native_raw_schema_version) | Runtime |
143
+ | [`NativeRawExposure`](api/capture-native-raw.md#nativerawexposure) | Type |
144
+ | [`NativeRawExposureInput`](api/capture-native-raw.md#nativerawexposureinput) | Type |
145
+ | [`NativeRawInput`](api/capture-native-raw.md#nativerawinput) | Type |
146
+ | [`NativeRawOutput`](api/capture-native-raw.md#nativerawoutput) | Type |
147
+ | [`NativeRawPlan`](api/capture-native-raw.md#nativerawplan) | Type |
148
+ | [`NativeRawProvider`](api/capture-native-raw.md#nativerawprovider) | Type |
149
+ | [`NativeRawTask`](api/capture-native-raw.md#nativerawtask) | Type |
150
+ | [`NativeRawTaskState`](api/capture-native-raw.md#nativerawtaskstate) | Type |
151
+ | [`NativeRawTile`](api/capture-native-raw.md#nativerawtile) | Type |
152
+ | [`NativeRawTileRequest`](api/capture-native-raw.md#nativerawtilerequest) | Type |
153
+
108
154
  ## capture/photographic-export.ts
109
155
 
110
156
  [Detailed contracts](api/capture-photographic-export.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/capture/photographic-export.ts)
@@ -189,6 +235,7 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
189
235
 
190
236
  | Export | Kind |
191
237
  | --- | --- |
238
+ | [`CaptureExposureSource`](api/capture-simulated-capture.md#captureexposuresource) | Type |
192
239
  | [`CaptureFloatStorage`](api/capture-simulated-capture.md#capturefloatstorage) | Type |
193
240
  | [`CaptureLinearImageState`](api/capture-simulated-capture.md#capturelinearimagestate) | Type |
194
241
  | [`CaptureLinearPlane`](api/capture-simulated-capture.md#capturelinearplane) | Type |
@@ -221,6 +268,15 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
221
268
  | [`resolveCaptureColorModel`](api/color-capture-color.md#resolvecapturecolormodel) | Runtime |
222
269
  | [`VIRTUAL_COLOR_CAMERA_PROFILE`](api/color-capture-color.md#virtual_color_camera_profile) | Runtime |
223
270
 
271
+ ## color/srgb-icc.ts
272
+
273
+ [Detailed contracts](api/color-srgb-icc.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/color/srgb-icc.ts)
274
+
275
+ | Export | Kind |
276
+ | --- | --- |
277
+ | [`createSrgbIccProfile`](api/color-srgb-icc.md#createsrgbiccprofile) | Runtime |
278
+ | [`SRGB_ICC_PROFILE_VERSION`](api/color-srgb-icc.md#srgb_icc_profile_version) | Runtime |
279
+
224
280
  ## color/white-balance.ts
225
281
 
226
282
  [Detailed contracts](api/color-white-balance.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/color/white-balance.ts)
@@ -1033,6 +1089,18 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
1033
1089
  | [`SceneSensorQuadratureSample`](api/optics-scene-to-sensor-quadrature.md#scenesensorquadraturesample) | Type |
1034
1090
  | [`SceneToSensorIrradianceQuadrature`](api/optics-scene-to-sensor-quadrature.md#scenetosensorirradiancequadrature) | Type |
1035
1091
 
1092
+ ## optics/sensor-aperture-rays.ts
1093
+
1094
+ [Detailed contracts](api/optics-sensor-aperture-rays.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/optics/sensor-aperture-rays.ts)
1095
+
1096
+ | Export | Kind |
1097
+ | --- | --- |
1098
+ | [`calculateSensorApertureRays`](api/optics-sensor-aperture-rays.md#calculatesensoraperturerays) | Runtime |
1099
+ | [`CalculateSensorApertureRaysInput`](api/optics-sensor-aperture-rays.md#calculatesensorapertureraysinput) | Type |
1100
+ | [`IdealCircularPupil`](api/optics-sensor-aperture-rays.md#idealcircularpupil) | Type |
1101
+ | [`SensorApertureRay`](api/optics-sensor-aperture-rays.md#sensorapertureray) | Type |
1102
+ | [`SensorApertureRays`](api/optics-sensor-aperture-rays.md#sensoraperturerays) | Type |
1103
+
1036
1104
  ## optics/sensor-environment-query.ts
1037
1105
 
1038
1106
  [Detailed contracts](api/optics-sensor-environment-query.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/optics/sensor-environment-query.ts)
@@ -1238,6 +1306,23 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
1238
1306
  | [`PrintSinusoidalMeasurement`](api/output-print-detail.md#printsinusoidalmeasurement) | Type |
1239
1307
  | [`PrintSinusoidalTarget`](api/output-print-detail.md#printsinusoidaltarget) | Type |
1240
1308
 
1309
+ ## output/print-jpeg.ts
1310
+
1311
+ [Detailed contracts](api/output-print-jpeg.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/print-jpeg.ts)
1312
+
1313
+ | Export | Kind |
1314
+ | --- | --- |
1315
+ | [`createPrintJpegTask`](api/output-print-jpeg.md#createprintjpegtask) | Runtime |
1316
+ | [`parsePrintJpegInput`](api/output-print-jpeg.md#parseprintjpeginput) | Runtime |
1317
+ | [`PRINT_JPEG_SCHEMA_VERSION`](api/output-print-jpeg.md#print_jpeg_schema_version) | Runtime |
1318
+ | [`PrintJpegInput`](api/output-print-jpeg.md#printjpeginput) | Type |
1319
+ | [`PrintJpegOutput`](api/output-print-jpeg.md#printjpegoutput) | Type |
1320
+ | [`PrintJpegProvider`](api/output-print-jpeg.md#printjpegprovider) | Type |
1321
+ | [`PrintJpegSource`](api/output-print-jpeg.md#printjpegsource) | Type |
1322
+ | [`PrintJpegTask`](api/output-print-jpeg.md#printjpegtask) | Type |
1323
+ | [`PrintJpegTile`](api/output-print-jpeg.md#printjpegtile) | Type |
1324
+ | [`PrintJpegTileRequest`](api/output-print-jpeg.md#printjpegtilerequest) | Type |
1325
+
1241
1326
  ## output/print-plan.ts
1242
1327
 
1243
1328
  [Detailed contracts](api/output-print-plan.md) · [Source](https://github.com/Photivra/photivra/blob/main/src/output/print-plan.ts)
@@ -1607,6 +1692,7 @@ Use [the developer guide](DEVELOPERS.md) for executable paths and scientific bou
1607
1692
  | --- | --- |
1608
1693
  | [`calculateEnvironmentSensorPhotoSignal`](api/sensor-environment-photo-signal.md#calculateenvironmentsensorphotosignal) | Runtime |
1609
1694
  | [`CalculateEnvironmentSensorPhotoSignalInput`](api/sensor-environment-photo-signal.md#calculateenvironmentsensorphotosignalinput) | Type |
1695
+ | [`EnvironmentApertureRadianceEvaluator`](api/sensor-environment-photo-signal.md#environmentapertureradianceevaluator) | Type |
1610
1696
  | [`EnvironmentRadianceEvaluator`](api/sensor-environment-photo-signal.md#environmentradianceevaluator) | Type |
1611
1697
  | [`EnvironmentSensorPhotoSignal`](api/sensor-environment-photo-signal.md#environmentsensorphotosignal) | Type |
1612
1698
 
package/docs/API_STYLE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Public API Style
2
2
 
3
- Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
3
+ Release context: **package 1.3.0 candidate / root API 1.3.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_3_0.md).
4
4
 
5
5
  The open engine should feel like one coherent library.
6
6
 
@@ -1,18 +1,18 @@
1
1
  # Developer guide
2
2
 
3
- This is the entry point for **@photivra/engine 1.2.0 candidate**, root API contract **1.2.0**. The candidate becomes an installable 1.2.0 distribution only after the owner tags and publishes it. Repository `main` may later describe newer development; use a published release's packaged docs or its exact tag for the stable contract. [Release notes and migration](RELEASE_1_2_0.md) explain the transition to aligned package/root versions.
3
+ This is the entry point for **@photivra/engine 1.3.0 candidate**, root API contract **1.3.0**. The candidate becomes an installable 1.3.0 distribution only after the owner tags and publishes it. Repository `main` may later describe newer development; use a published release's packaged docs or its exact tag for the stable contract. [Release notes and migration](RELEASE_1_3_0.md) explain the transition to aligned package/root versions.
4
4
 
5
5
  Photivra is an Apache-2.0 ESM TypeScript calculation library with no runtime npm dependencies. It exposes explicit units, deterministic data, provenance and bounded scientific approximations. The package supplies no hosted API, renderer installation, UI, commercial camera calibration or automatic agent service. [Photivra's public site](https://photivra.com) is separate from the engine's license; public engine documentation is available here without an application account.
6
6
 
7
7
  ## Install and calculate
8
8
 
9
- After publication, install `npm install @photivra/engine@1.2.0`. During candidate review, use the verified tarball described in [release preparation](RELEASE_1_2_0.md).
9
+ After publication, install `npm install @photivra/engine@1.3.0`. During candidate review, use the verified tarball described in [release preparation](RELEASE_1_3_0.md).
10
10
 
11
11
  ```ts
12
12
  import { calculateFieldOfView, ENGINE_API_VERSION } from "@photivra/engine";
13
13
 
14
14
  const horizontal = calculateFieldOfView({ focalLengthMm: 50, sensorDimensionMm: 36 });
15
- console.log(ENGINE_API_VERSION); // 1.2.0: matches the package version
15
+ console.log(ENGINE_API_VERSION); // 1.3.0: matches the package version
16
16
  console.log(horizontal.value.degrees); // approximately 39.60, ideal infinity-focus geometry
17
17
  console.log(horizontal.provenance); // read assumptions/status with the value
18
18
  ```
@@ -23,7 +23,7 @@ Primitive calculations normally return `CalculationResult<T>` with `value`, `pro
23
23
 
24
24
  ## Find the operation by scientific task
25
25
 
26
- Every row applies to package/root API 1.2.0. Direct calculations are synchronous/browser-safe unless the row says otherwise. A listed primitive is not automatically an app feature or supported in every production combination. The [API reference](API_REFERENCE.md) resolves all root exports and exact signatures; the linked guides own equations, inputs, defaults, errors and limits.
26
+ Every row applies to package/root API 1.3.0. Direct calculations are synchronous/browser-safe unless the row says otherwise. A listed primitive is not automatically an app feature or supported in every production combination. The [API reference](API_REFERENCE.md) resolves all root exports and exact signatures; the linked guides own equations, inputs, defaults, errors and limits.
27
27
 
28
28
  | Task | Start here / executable evidence | Qualified boundary |
29
29
  | --- | --- | --- |
@@ -61,7 +61,7 @@ Website navigation/documentation hosting belongs to [the app-side discovery tick
61
61
 
62
62
  ## Print planning
63
63
 
64
- The 1.2.0 candidate adds [registered linear statistics](PRINT_REGION_STATISTICS.md) and a separate [static contrast model reference](PRINT_CONTRAST_REFERENCE.md). The [combined #195/#196 review](PRINT_195_196_REVIEW.md) and [candidate ledger](validation/print-196-candidate-capabilities.json) list executed public-backend experiments and the remaining full release gates. None of these diagnostics supplies a universal quality score.
64
+ The published 1.2.0 release added [registered linear statistics](PRINT_REGION_STATISTICS.md) and a separate [static contrast model reference](PRINT_CONTRAST_REFERENCE.md). The [combined #195/#196 review](PRINT_195_196_REVIEW.md) and [candidate ledger](validation/print-196-candidate-capabilities.json) list executed public-backend experiments and the remaining full release gates. None of these diagnostics supplies a universal quality score.
65
65
 
66
66
  Use [native-only Print planning](PRINT_PLANNING.md) for independently specified image size/viewing distance, explicit angular conventions, confirmed native crop and lab constraints. It returns no upscale recommendation and does not certify perceived quality or activate an exporter.
67
67
 
@@ -1,5 +1,7 @@
1
1
  # Executed environment capture to native RAW
2
2
 
3
+ Standalone follow-up: [ideal pupil rays](SENSOR_APERTURE_RAYS.md) adds an explicitly selected origin-aware evaluator. It preserves the bounds below and does not activate production depth/visibility composition.
4
+
3
5
  Release context: **package 1.2.0 candidate / root API 1.2.0**. Subsystem/model versions and dated introduction or measurement records below are independent historical identities; they are not distribution versions. See [developer navigation](DEVELOPERS.md) and [release contract](RELEASE_1_2_0.md).
4
6
 
5
7
  `calculateEnvironmentSensorPhotoSignal()` executes one destination site's
@@ -50,9 +52,15 @@ the declared optical/provider envelope covers them.
50
52
  remains. Translation/parallax, world pose, breathing and distortion are absent.
51
53
  - Wavelength-resolved radiance with explicit air/vacuum basis. Any air photon
52
54
  energy context remains the existing sensor contract's responsibility.
53
- - Explicit unity field throughput with evidence and a limitation. Spatial
54
- vignetting is not silently synthesized. Existing lens transmission/front-filter
55
- inputs remain upstream of normalized PSF shape.
55
+ - Explicit `unity` or `radial-illumination-vignetting` field throughput with evidence
56
+ and a limitation. The latter reuses the existing bounded radial profile and applies
57
+ attenuation once at every physical inverse-PSF source point, before normalized
58
+ PSF redistribution. Camera motion changes scene direction, not lens field position.
59
+ All taps, including zero-weight taps, must lie in the declared profile envelope
60
+ before any provider callback. Existing lens transmission/front-filter inputs remain
61
+ upstream of normalized PSF shape. This is an owned approximation, not calibrated
62
+ lens throughput or pupil vignetting. Production composition requires the explicit
63
+ `illumination-vignetting` fidelity effect, including a modeled-zero profile.
56
64
  - PSF is explicitly `not-applied` with evidence/limitation or `sampled-local`
57
65
  with the existing evidence-backed wavelength basis and local spatial model.
58
66
  Focal length, aperture and focus must match the optical bridge. The optional
@@ -185,3 +193,16 @@ The standalone adapter retains its conservative `productionPlanActivated: false`
185
193
  field: it cannot know whether a parent composer called it. The parent plan's
186
194
  actual stage results and executed lineage establish the bounded activation;
187
195
  no child source-truth flag is overwritten.
196
+
197
+ ## Additive field-throughput candidate
198
+
199
+ Photo integration model 0.2.0 adds radial field-throughput input; unity arithmetic,
200
+ provider/RAW resource limits and conservative verification flags remain unchanged.
201
+ `test/environment-field-throughput.test.ts` independently integrates SI photon counts
202
+ with radial attenuation, checks source-tap PSF weighting, exact unity-profile parity,
203
+ physical field invariance under motion, profile ownership, full-frame preflight and
204
+ replayable paired RAW/JPEG output. The production planner reports requested field
205
+ attenuation as active or modeled-zero and blocks undeclared attenuation before callbacks.
206
+ This candidate has not been tagged or published; the distribution version stays 1.2.0
207
+ until the next release preparation. External chart/backend evidence belongs to its
208
+ provider and does not become an engine calibration claim.
@@ -0,0 +1,47 @@
1
+ # Native RAW and Print candidate contracts
2
+
3
+ Version 1.4.0 is a release candidate. It has not been published, tagged or adopted by a production application.
4
+
5
+ The separate `createNativeRawTask` contract accepts metadata without an inline image plane, then produces exact owned native codes, black levels, digital saturation codes and independent physical/pre-ADC/digital flags. Admission is limited to 24 million sites, 16,384 pixels per dimension, 256 sites per tile, and an explicitly admitted seven-byte-per-site payload. The reference 4,096-site RAW path is unchanged. Absolute CFA coordinates and absolute-index charge/read-noise seeds preserve reference arithmetic across tile boundaries.
6
+
7
+ `createNativeEnvironmentRawTask` invokes actual source radiance callbacks through shared projection, shutter, optical throughput, pupil/PSF and EQE calculations. It admits no more than 100,000 source evaluations per tile and requires a whole-event budget no greater than two billion. Source visibility, measured radiometry, convergence and physical transport remain provider responsibilities. The optional immutable photo-tile observer exposes bounded expectation values before noise or clipping. Observers receive the event AbortSignal for pending resource work. Source callbacks stop immediately when the event is aborted; observer failures and cancellation withhold output. `productionPlanActivated` and transport verification remain false.
8
+
9
+ `createNativeRawDevelopmentTask` snapshots one exact packed RAW and applies the shared reconstruction kernels, declared camera RGB-to-XYZ approximation, white balance exactly once, and shared SDR rendering. Every used phase and kernel halo must lie inside actual native support: no padding or weight renormalization. Output crop and orientation are bound to the capture geometry; this stage supports 1:1 output sampling. Retained payload admission counts the owned RAW copy and integer output, not caller buffers, JavaScript heap or GPU storage.
10
+
11
+ All tasks require host yields, publish only whole successful outputs, distinguish failure/cancellation/disposal, and transfer output ownership once. Typed storage must have an exact owned ArrayBuffer; shared buffers and hidden larger parent allocations are rejected. Metadata provenance and declared hashes do not establish producer authenticity.
12
+
13
+ ## Print stage
14
+
15
+ `createPrintJpegTask` accepts explicitly encoded sRGB 8-bit RGB in an already oriented output raster. It crops only within actual source support and rejects enlargement, stretching and unsupported aspect ratios. Original area filtering decodes this declared post-SDR stage to linear values, integrates exact pixel overlap, then encodes and quantizes sRGB. This does not recover sensor headroom or reprocess RAW. Source reads are bounded to 256 × 32 pixels; JPEG coding uses 8 × 8 blocks. Edge replication is restricted to final JPEG coding blocks, not reconstruction or crop support.
16
+
17
+ The original baseline JPEG encoder embeds an original ICC v4.3 sRGB matrix/TRC profile, EXIF orientation 1, sRGB ColorSpace and final pixel dimensions. Its XMP records the immutable Print plan and declares source bytes unverified. Encoded output is explicitly budgeted to at most 256 MB and provider reads to one million. The caller owns the final file and must separately qualify browser save/share, byte-size requirements and printer/substrate appearance.
18
+
19
+ The ICC serializer uses the existing engine sRGB primaries and transfer function, standard numerical Bradford adaptation to D50 PCS and original ICC tag serialization. This profile adaptation does not introduce a shooting white-balance model. Numerical facts and format references: [ICC sRGB interpretation](https://registry.color.org/rgb-registry/files/sRGB.pdf), [ICC profile specification](https://www.color.org/icc34.pdf). No third-party ICC profile bytes or implementation were redistributed.
20
+
21
+ ## Reproducible validation
22
+
23
+ `test/native-raw.test.ts`, `test/native-environment-raw.test.ts`, `test/native-raw-development.test.ts` and `test/print-jpeg.test.ts` cover small-reference parity, absolute odd-width phase/seed boundaries, orientation, signed below-black noise, whole-output budgets, corrupt providers, support halos and cancellation/ownership.
24
+
25
+ Run the optional actual megapixel test with `PHOTIVRA_VALIDATE_MEGAPIXEL_RAW=1 PHOTIVRA_RAW_REPORT=/tmp/native-raw-report.json npx vitest run test/native-raw-megapixel.test.ts`. It executes every one of a million native sites, develops that exact RAW and downsamples to a 500 × 500 ICC JPEG. The constructed count inputs are not a qualified megapixel scene-radiance capture.
26
+
27
+ Generate the separate original color, checker, asymmetric fractional crop, gray ramp and one-megapixel JPEG controls with `node scripts/generate-native-print-jpeg.mjs /tmp/native-print`. Validate actual bytes using `python scripts/verify-native-print-jpeg.py /tmp/native-print /tmp/native-print/validation.json` in an environment with NumPy and Pillow/LittleCMS. The independent area oracle expects 188 for a half-black/half-white sRGB checker reduction, rather than an encoded-value average. JPEG tolerance is four encoded codes; the original ICC is compared against LittleCMS sRGB over a 17³ color cube with a one-code budget.
28
+
29
+ These controls do not qualify all product fixtures, calibrated sensor/lens behavior, diffraction, full production depth composition, physical phone/tablet resources, printer appearance, platform save/share or substantive human review. See the application qualification record for its separate source and deployment gates.
30
+
31
+ ## Standalone bounded Print example
32
+
33
+ This executable control declares a constant encoded RGB source. The zero digest is a placeholder declaration and is not authenticated by the engine; a product should bind its actual retained artifact and enforce qualification before offering export.
34
+
35
+ ```ts
36
+ import { createPrintJpegTask, createSrgbIccProfile } from '@photivra/engine';
37
+ const source = { captureId: 'owned-control', imageStateId: 'encoded-control', artifactId: 'constant-gray',
38
+ sha256: '0'.repeat(64), width: 16, height: 16, encoding: 'encoded-srgb-8-rgb' as const };
39
+ const task = createPrintJpegTask({ source, crop: { x: 0, y: 0, width: 16, height: 16 },
40
+ outputWidth: 8, outputHeight: 8, quantizationStep: 1, maximumEncodedBytes: 16000, maximumProviderReads: 100 }, {
41
+ readTile: async request => ({ ...request, samples: new Uint8Array(request.width * request.height * 3).fill(128) }),
42
+ yieldControl: async () => { await new Promise<void>(resolve => setTimeout(resolve, 0)); }
43
+ });
44
+ await task.run();
45
+ const jpeg = task.takeOutput();
46
+ if (jpeg.bytes.length === 0 || jpeg.width !== 8 || createSrgbIccProfile().length === 0) throw new Error('Control failed');
47
+ ```
@@ -0,0 +1,15 @@
1
+ # Photivra engine 1.3.0 release
2
+
3
+ This minor release adds evidence-bound radial illumination throughput to bounded environment photo/RAW capture, merged in PR #219. Attenuation is applied exactly once before normalized PSF redistribution; every inverse-PSF tap is validated before provider callbacks. Existing unity-throughput arithmetic and resource limits are preserved. No new dependency, calibration claim, or transport qualification is introduced.
4
+
5
+ ## Compatibility and migration
6
+
7
+ Existing unity-throughput requests remain supported. Requests using the new non-unity field profile must explicitly request the illumination-vignetting fidelity effect in production composition. Invalid or undeclared attenuation fails before provider callbacks. The photo integration model advances independently to 0.2.0.
8
+
9
+ Package, lock root, citation and ENGINE_API_VERSION are aligned at 1.3.0. New capture/plan creator identities and hashes may change; archived records retain their original creator identity. Historical fixture bytes and independent model/schema/POC/plan versions are preserved.
10
+
11
+ ## Validation and publication
12
+
13
+ The owner requested immediate release on October 4, 2026. PR #219 already received owner scientific/source review and passed supported Node CI. This release preparation changes metadata and documentation only. Require static policy, tests/coverage, build, generated references, documentation, isolated packed consumer, package-surface and supported Node CI checks on the final release tree.
14
+
15
+ After merge and successful main CI, create the unused annotated v1.3.0 tag at the verified main commit. The protected publish workflow rechecks tag/main/version and all distribution gates, verifies the tarball checksum and publishes through npm trusted publishing. Observe successful publication and then create the matching GitHub release. Never move tags or overwrite published versions.
@@ -0,0 +1,23 @@
1
+ # Engine 1.4.0 candidate release review
2
+
3
+ This additive candidate aligns package, lockfile, citation and root engine identity at 1.4.0. It is not tagged or published. The application's production dependency remains the published 1.2.0 package until an approved release and explicit consumer migration.
4
+
5
+ Changes include the previously merged ideal pupil support and the separate metadata-only packed native RAW, source-to-RAW, same-RAW development and bounded post-SDR Print JPEG/ICC APIs. Independent schema versions remain 0.1.0. Reference inline plane, RAW and photographic export caps remain unchanged. Shared scalar helpers preserve the existing charge/noise/ADC, reconstruction, color and SDR equations. Reference JPEG byte controls cover eighteen original encoder cases including odd padding, three quantization steps and empty metadata.
6
+
7
+ See [native contracts and reproducible evidence](NATIVE_RAW_AND_PRINT.md), [pupil contract](SENSOR_APERTURE_RAYS.md), and [recorded controls](validation/native-raw-print-2026-10-04/validation.json).
8
+
9
+ ## Review boundaries
10
+
11
+ The new tasks execute complete constructed capture inputs; they do not authenticate caller-owned artifact hashes or calibrate arbitrary source callbacks. Source radiometry/visibility, quadrature convergence, device resources, production stage composition, printer appearance and platform delivery remain separate contracts. Full production depth composition remains closed. The new native event records are deliberately separate from bounded `SensorRawFrame` and cannot be inserted into it as fabricated small frames.
12
+
13
+ The public engine contains original Apache-licensed math, serialization and synthetic controls only. Private application scene sources, fixture assets and proprietary adapters are retained in the application repository. The original ICC profile uses standard format/color facts, not a redistributed profile or encoder implementation.
14
+
15
+ ## Owner handoff
16
+
17
+ 1. Review the exact candidate code and public source provenance, scientific domains, unit/frame/phase/seed binding, resource limits and disposal behavior. AI-assisted changes remain draft until substantive human review under AGENTS.md.
18
+ 2. Require green exact-head CI on Node 22.13, 22, 24 and 26, plus the package, documentation and isolated consumer gates. The optional actual megapixel run is separately recorded; its ordinary-suite skip is explicit.
19
+ 3. Approve merge and the concrete 1.4.0 release only after review. Merge must not silently publish a tag. Check final main/commit/version identity and unchanged package consumer acceptance.
20
+ 4. With explicit publication approval, use the repository release procedure/workflow for GitHub and npm. Confirm the published tarball, root export, version and provenance before migrating the application. Do not treat local candidate tooling as a published production import.
21
+ 5. Finish the application’s independently retained source, output, platform and human/device acceptance at the adopted published version, then approve the concrete production deployment.
22
+
23
+ No tag, publication, production activation, credential change or deployment is authorized by this document.
@@ -0,0 +1,23 @@
1
+ # Ideal pupil rays for bounded capture
2
+
3
+ `calculateSensorApertureRays()` generates origin-aware rays for an explicitly declared ideal symmetric thin lens. Native sensor coordinates use +Y down; camera look directions use +Y up and +Z forward. Origins lie in the lens principal plane and use metres. Pupil sample points use millimetres.
4
+
5
+ For focal length f and nominal f-number N, the circular pupil radius is f/(2N). The shared focus contract determines image distance v. For finite object-plane distance D, every unrotated ray intersects (xD/v, -yD/v, D). At infinity the rays remain parallel. The existing constant-axis camera rotation rotates both origin and direction about the principal-plane origin at the actual local shutter time.
6
+
7
+ Uniform-area polar midpoints use r = R sqrt((i + 1/2)/Nr) and theta = 2 pi (j + 1/2)/Na. Each ray has normalized weight 1/(Nr Na). Counts are bounded to 1..32 radial and 4..64 angular samples, with at most 256 rays. These are integration samples, not a convergence guarantee.
8
+
9
+ ## Capture integration
10
+
11
+ A caller may supply `pupil` and the separate `evaluateApertureRadiance(request, ray)` callback to `calculateEnvironmentSensorPhotoSignal()` or `simulateEnvironmentSensorRawFrame()`. The callback receives the actual pupil origin and look direction. It owns scene intersection, visibility and emitted/transported wavelength-resolved radiance; the engine owns focus, rotation, local shutter timing, sensor response and RAW production. The old single-argument environment callback remains compatible and unchanged when pupil sampling is omitted.
12
+
13
+ The engine averages physical irradiances over normalized pupil weights before sensor integration. The existing working-f-number radiometric factor is applied once. Pupil area is not multiplied again. A sampled local PSF and pupil integration are rejected together: neither an implicit second defocus nor an unreviewed optical composition is permitted. Every ray and the total provider budget are preflighted before provider execution. Full-frame site completeness, seeds and 4,096-site/100,000-query limits remain unchanged.
14
+
15
+ Diagnostics retain the original central `query`, plus `apertureRequest` and `apertureRay` for the actual evaluated ray. `pupilIntegrationApplied` and `pupilIntegrationProfile` report the declared integration. Provider transport and scene visibility remain unverified. The production composer rejects this standalone route until depth/visibility fidelity has an explicit composition contract; this API does not activate a production stage.
16
+
17
+ ## Limits and evidence
18
+
19
+ This is an ideal paraxial approximation with unity pupil magnification. It does not model diffraction, aberrations, pupil clipping, lens housing, calibrated lens transmission, camera translation, scattering or physically measured sensor response. Existing separately declared field and spectral transmission remain separate. No megapixel RAW capability or physical device acceptance is established.
20
+
21
+ Tests independently intersect finite rays with the focus plane, check pupil moments, through-focus footprints, infinity parallelism, coordinate signs and camera rotation. Capture tests check uniform radiance against the unchanged no-pupil path, origin-dependent visibility averages, exact seeded replay, callback ownership and rejection before provider work. These synthetic controls do not qualify arbitrary scene providers.
22
+
23
+ Conceptual references: [PBRT projective camera models](https://www.pbr-book.org/4ed/Cameras_and_Film/Projective_Camera_Models) describes ideal lens sampling; [PBRT realistic cameras](https://www.pbr-book.org/3ed-2018/Camera_Models/Realistic_Cameras) distinguishes full lens geometry. Implementation and tests are original Photivra work using existing engine helpers; no reference code, data or prose is incorporated. AI-assisted work remains draft pending substantive human scientific/source review.
@@ -1,6 +1,6 @@
1
1
  # camera/equivalent-focal-length.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## calculateEquivalentFocalLength35Mm
6
6
 
@@ -1,6 +1,6 @@
1
1
  # camera/field-of-view.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## calculateFieldOfView
6
6
 
@@ -1,6 +1,6 @@
1
1
  # camera/projected-object-size.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## calculateProjectedObjectSize
6
6
 
@@ -1,6 +1,6 @@
1
1
  # capture/capture-export-metadata.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## CAPTURE_EXPORT_METADATA_SCHEMA_VERSION
6
6
 
@@ -1,6 +1,6 @@
1
1
  # capture/environment-raw-producer.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## EnvironmentSensorRawFrame
6
6
 
@@ -45,12 +45,13 @@ export interface SimulateEnvironmentSensorRawFrameInput {
45
45
  /** Shared shutter schedule is bound to the committed frame duration. */
46
46
  exposureWindow: NonNullable<SensorRawProducerInput["exposureWindow"]>;
47
47
  sites: readonly {
48
- environment: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance">;
48
+ environment: Omit<CalculateEnvironmentSensorPhotoSignalInput, "evaluateRadiance" | "evaluateApertureRadiance">;
49
49
  darkCurrentProfile: SensorDarkCurrentProfile;
50
50
  operatingTemperatureC: number;
51
51
  charge: Omit<SensorRawProducerSiteInput["charge"], "photoSignal" | "darkCharge">;
52
52
  readout: Omit<SensorRawProducerSiteInput, "charge">;
53
53
  }[];
54
54
  evaluateRadiance: EnvironmentRadianceEvaluator;
55
+ evaluateApertureRadiance?: EnvironmentApertureRadianceEvaluator;
55
56
  }
56
57
  ```
@@ -1,6 +1,6 @@
1
1
  # capture/focus-control.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## assessFocusReleaseGate
6
6
 
@@ -1,6 +1,6 @@
1
1
  # capture/linear-encoding.ts public contracts
2
2
 
3
- Package **1.2.0**, root API **1.2.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
4
 
5
5
  ## calculateLinearCaptureEncoding
6
6
 
@@ -0,0 +1,88 @@
1
+ # capture/native-environment-raw.ts public contracts
2
+
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## createNativeEnvironmentRawTask
6
+
7
+ Every tile is planned and admission-checked before its radiance callbacks; no partial output escapes.
8
+
9
+ ```ts
10
+ export function createNativeEnvironmentRawTask(input:NativeEnvironmentRawInput,provider:NativeEnvironmentRawProvider):NativeEnvironmentRawTask;
11
+ ```
12
+
13
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
14
+
15
+ ## NativeEnvironmentPhotoTile
16
+
17
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
18
+
19
+ ```ts
20
+ export interface NativeEnvironmentPhotoTile extends NativeRawTileRequest {
21
+ sites:readonly {nativeIndex:number;expectedIncidentPhotonCount:number;expectedGeneratedElectronCount:number}[];
22
+ }
23
+ ```
24
+
25
+ ## NativeEnvironmentRawInput
26
+
27
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
28
+
29
+ ```ts
30
+ export interface NativeEnvironmentRawInput {
31
+ raw: NativeRawInput;
32
+ sceneBinding: SimulateEnvironmentSensorRawFrameInput["sceneBinding"];
33
+ /** Full-event admission budget; maximum 2 billion calls. No convergence is inferred. */
34
+ maximumProviderEvaluations: number;
35
+ }
36
+ ```
37
+
38
+ ## NativeEnvironmentRawOutput
39
+
40
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
41
+
42
+ ```ts
43
+ export interface NativeEnvironmentRawOutput {
44
+ raw: NativeRawOutput;
45
+ sceneBinding: NativeEnvironmentRawInput["sceneBinding"];
46
+ providerEvaluationCount: number;
47
+ upstreamOrigin: "executed-environment-query-provider-optics-psf-eqe";
48
+ providerTransportVerified: false;
49
+ productionPlanActivated: false;
50
+ }
51
+ ```
52
+
53
+ ## NativeEnvironmentRawProvider
54
+
55
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
56
+
57
+ ```ts
58
+ export interface NativeEnvironmentRawProvider {
59
+ /** Supplies physical site profiles, not photo counts or precomputed RAW codes. */
60
+ readTile(request: Readonly<NativeRawTileRequest>,signal:AbortSignal):Promise<NativeEnvironmentRawTile>;
61
+ evaluateRadiance: SimulateEnvironmentSensorRawFrameInput["evaluateRadiance"];
62
+ evaluateApertureRadiance?: SimulateEnvironmentSensorRawFrameInput["evaluateApertureRadiance"];
63
+ /** Optional bounded diagnostic observer; counts are expectation values before any noise/clamp/ADC. */
64
+ observePhotoTile?(tile:Readonly<NativeEnvironmentPhotoTile>,signal:AbortSignal):void|Promise<void>;
65
+ yieldControl(signal:AbortSignal):Promise<void>;
66
+ }
67
+ ```
68
+
69
+ ## NativeEnvironmentRawTask
70
+
71
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
72
+
73
+ ```ts
74
+ export interface NativeEnvironmentRawTask extends Omit<NativeRawTask,"takeOutput"> {
75
+ readonly providerEvaluationCount: number;
76
+ takeOutput(): NativeEnvironmentRawOutput;
77
+ }
78
+ ```
79
+
80
+ ## NativeEnvironmentRawTile
81
+
82
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
83
+
84
+ ```ts
85
+ export interface NativeEnvironmentRawTile extends NativeRawTileRequest {
86
+ sites: SimulateEnvironmentSensorRawFrameInput["sites"];
87
+ }
88
+ ```
@@ -0,0 +1,66 @@
1
+ # capture/native-raw-development.ts public contracts
2
+
3
+ Package **1.4.0**, root API **1.4.0**. [Navigation](../API_REFERENCE.md) · [Developer guide](../DEVELOPERS.md). Generated signatures retain independent schema/model versions. Only the exports listed here are root-package contracts; module-local helpers are not supported deep imports.
4
+
5
+ ## createNativeRawDevelopmentTask
6
+
7
+ Validates complete phase/halo support, snapshots RAW once, and yields between 256-pixel output tiles.
8
+
9
+ ```ts
10
+ export function createNativeRawDevelopmentTask(input: NativeRawDevelopmentInput,
11
+ yieldControl: (signal:AbortSignal)=>Promise<void>): NativeRawDevelopmentTask;
12
+ ```
13
+
14
+ This call is synchronous; any supplied provider must follow its explicit synchronous contract.
15
+
16
+ ## NativeRawDevelopmentInput
17
+
18
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
19
+
20
+ ```ts
21
+ export interface NativeRawDevelopmentInput {
22
+ raw: NativeRawOutput;
23
+ phaseProfiles: readonly RawFrameReconstructionPhaseProfile[];
24
+ colorProfile: ExportSensorColorProfile;
25
+ whiteBalance: "not-required" | "apply-resolved-sensor-gains";
26
+ rendering: SdrRenderingProfile;
27
+ /** Includes one owned packed RAW copy plus integer output; not caller buffers, process heap or GPU. */
28
+ maximumRetainedPayloadBytes: number;
29
+ }
30
+ ```
31
+
32
+ ## NativeRawDevelopmentOutput
33
+
34
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
35
+
36
+ ```ts
37
+ export interface NativeRawDevelopmentOutput {
38
+ raw: NativeRawOutput;
39
+ phaseProfiles: readonly RawFrameReconstructionPhaseProfile[];
40
+ colorProfile: ExportSensorColorProfile;
41
+ whiteBalance: NativeRawDevelopmentInput["whiteBalance"];
42
+ width: number;
43
+ height: number;
44
+ integerSamples: Uint8Array | Uint16Array;
45
+ diagnostics: SdrRenderingResult["diagnostics"];
46
+ outputEncoding: SdrRenderingResult["outputEncoding"];
47
+ rendering: SdrRenderingProfile;
48
+ displayAdaptation: SdrRenderingResult["displayAdaptation"];
49
+ imageDataPairing: "derived-from-exact-packed-native-raw";
50
+ producerOriginVerified: false;
51
+ }
52
+ ```
53
+
54
+ ## NativeRawDevelopmentTask
55
+
56
+ The exact contract is declared below; use the domain guide for assumptions and staged integration.
57
+
58
+ ```ts
59
+ export interface NativeRawDevelopmentTask {
60
+ readonly state: NativeRawTaskState;
61
+ run(): Promise<void>;
62
+ cancel(): void;
63
+ dispose(): void;
64
+ takeOutput(): NativeRawDevelopmentOutput;
65
+ }
66
+ ```