@photivra/engine 1.0.1 → 1.2.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.
- package/CHANGELOG.md +14 -0
- package/CITATION.cff +1 -1
- package/NOTICE +29 -0
- package/README.md +8 -6
- package/THIRD_PARTY.md +10 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +6 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -1
- package/dist/optics/complex-pupil-psf.js +10 -7
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +78 -0
- package/dist/output/native-capture-sdr.d.ts.map +1 -0
- package/dist/output/native-capture-sdr.js +171 -0
- package/dist/output/native-capture-sdr.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +47 -0
- package/dist/output/print-contrast-reference.d.ts.map +1 -0
- package/dist/output/print-contrast-reference.js +95 -0
- package/dist/output/print-contrast-reference.js.map +1 -0
- package/dist/output/print-detail.d.ts +113 -0
- package/dist/output/print-detail.d.ts.map +1 -0
- package/dist/output/print-detail.js +224 -0
- package/dist/output/print-detail.js.map +1 -0
- package/dist/output/print-plan.d.ts +138 -0
- package/dist/output/print-plan.d.ts.map +1 -0
- package/dist/output/print-plan.js +305 -0
- package/dist/output/print-plan.js.map +1 -0
- package/dist/output/print-region-statistics.d.ts +92 -0
- package/dist/output/print-region-statistics.d.ts.map +1 -0
- package/dist/output/print-region-statistics.js +300 -0
- package/dist/output/print-region-statistics.js.map +1 -0
- package/docs/API_REFERENCE.md +89 -1
- package/docs/API_STYLE.md +1 -1
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/AUTOMATION_COORDINATION.md +1 -1
- package/docs/CAPTURE_COLOR.md +1 -1
- package/docs/CAPTURE_CORRECTED_SDR.md +1 -1
- package/docs/CAPTURE_EXPORT_METADATA.md +1 -1
- package/docs/CAPTURE_SDR.md +3 -1
- package/docs/DEVELOPERS.md +12 -4
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +1 -1
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +1 -1
- package/docs/EXPORT_ACCEPTANCE.md +1 -1
- package/docs/GENERIC_TIER_PRESETS.md +1 -1
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +1 -1
- package/docs/IMAGE_FORMATION.md +1 -1
- package/docs/LINEAR_CAPTURE_ENCODING.md +1 -1
- package/docs/MOTION_AND_SIGNAL.md +1 -1
- package/docs/NATIVE_CAPTURE_SDR.md +70 -0
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +37 -0
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +34 -0
- package/docs/NUMERICAL_CORRECTNESS.md +1 -1
- package/docs/PERFORMANCE_BASELINE.md +1 -1
- package/docs/PHOTOGRAPHIC_EXPORT.md +1 -1
- package/docs/PHYSICS_FOUNDATION.md +1 -1
- package/docs/POC_API.md +1 -1
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +12 -0
- package/docs/POC_PROJECTION_REUSE.md +1 -1
- package/docs/PRINT_195_196_REVIEW.md +93 -0
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +45 -0
- package/docs/PRINT_CONTRAST_REFERENCE.md +43 -0
- package/docs/PRINT_DETAIL_ASSESSMENT.md +81 -0
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +36 -0
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +29 -0
- package/docs/PRINT_DETAIL_VALIDATION.md +36 -0
- package/docs/PRINT_PLANNING.md +75 -0
- package/docs/PRINT_REGION_STATISTICS.md +38 -0
- package/docs/PROCESSED_OUTPUT.md +1 -1
- package/docs/PRODUCTION_COMPOSITION.md +1 -1
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +1 -1
- package/docs/PROVENANCE.md +1 -1
- package/docs/PSF_FOUNDATION.md +11 -1
- package/docs/RAW_FRAME_ENVELOPE.md +1 -1
- package/docs/RAW_FRAME_RECONSTRUCTION.md +1 -1
- package/docs/RELEASE_1_1_0.md +25 -0
- package/docs/RELEASE_1_2_0.md +51 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +1 -1
- package/docs/SCENE_SENSOR_QUADRATURE.md +1 -1
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +1 -1
- package/docs/SCIENTIFIC_ASSURANCE.md +1 -1
- package/docs/SCIENTIFIC_CONFORMANCE.md +1 -1
- package/docs/SDR_RENDERING.md +1 -1
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +1 -1
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +1 -1
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +1 -1
- package/docs/SENSOR_PSF_QUADRATURE.md +1 -1
- package/docs/SENSOR_RAW_FRAME.md +1 -1
- package/docs/SENSOR_RAW_PRODUCER.md +1 -1
- package/docs/SIGNAL_CONFORMANCE.md +1 -1
- package/docs/SIMULATED_CAPTURE.md +1 -1
- package/docs/STABILIZATION.md +1 -1
- package/docs/TEMPORAL_PHOTO_RAW.md +1 -1
- package/docs/TIER_ACCEPTANCE.md +1 -1
- package/docs/TIER_PRESET_ACCEPTANCE.md +1 -1
- package/docs/USAGE.md +9 -1
- package/docs/V1_COMPOSITION_MAP.md +1 -1
- package/docs/V1_HELPER_REUSE_REVIEW.md +1 -1
- package/docs/V1_PERFORMANCE_DISPOSITION.md +1 -1
- package/docs/api/camera-equivalent-focal-length.md +1 -1
- package/docs/api/camera-field-of-view.md +1 -1
- package/docs/api/camera-projected-object-size.md +1 -1
- package/docs/api/capture-capture-export-metadata.md +1 -1
- package/docs/api/capture-environment-raw-producer.md +1 -1
- package/docs/api/capture-focus-control.md +1 -1
- package/docs/api/capture-linear-encoding.md +1 -1
- package/docs/api/capture-photographic-export.md +1 -1
- package/docs/api/capture-raw-frame-reconstruction.md +1 -1
- package/docs/api/capture-release-sequence.md +1 -1
- package/docs/api/capture-sensor-raw-frame.md +1 -1
- package/docs/api/capture-sensor-raw-producer.md +1 -1
- package/docs/api/capture-simulated-capture.md +1 -1
- package/docs/api/color-capture-color.md +1 -1
- package/docs/api/color-white-balance.md +1 -1
- package/docs/api/composition-image-formation-plan.md +1 -1
- package/docs/api/composition-plan-consumer.md +1 -1
- package/docs/api/core-calculation-result.md +1 -1
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +1 -1
- package/docs/api/core-scientific-assurance.md +1 -1
- package/docs/api/core-spectral-composition.md +1 -1
- package/docs/api/core-spectral.md +1 -1
- package/docs/api/core-validation.md +1 -1
- package/docs/api/core-version.md +2 -2
- package/docs/api/equipment-exposure-capabilities.md +1 -1
- package/docs/api/equipment-generic-tier-assets.md +1 -1
- package/docs/api/equipment-generic-tier-presets.md +1 -1
- package/docs/api/equipment-iso-capabilities.md +1 -1
- package/docs/api/equipment-metering-capabilities.md +1 -1
- package/docs/api/equipment-release-capabilities.md +1 -1
- package/docs/api/exports.json +267 -2
- package/docs/api/exposure-exposure-duration-control.md +1 -1
- package/docs/api/exposure-exposure-mode-resolver.md +1 -1
- package/docs/api/exposure-exposure.md +1 -1
- package/docs/api/exposure-flash.md +1 -1
- package/docs/api/exposure-metering-scene-radiance.md +1 -1
- package/docs/api/exposure-metering-target.md +1 -1
- package/docs/api/exposure-metering-temporal.md +1 -1
- package/docs/api/exposure-metering.md +1 -1
- package/docs/api/exposure-program-line.md +1 -1
- package/docs/api/motion-camera-rotation.md +1 -1
- package/docs/api/motion-capture-rotation-inverse-mapping.md +1 -1
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +1 -1
- package/docs/api/motion-capture-rotation-trajectory.md +1 -1
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +1 -1
- package/docs/api/motion-extended-object-projection.md +1 -1
- package/docs/api/motion-projected-motion.md +1 -1
- package/docs/api/optics-aperture.md +1 -1
- package/docs/api/optics-circle-of-confusion.md +1 -1
- package/docs/api/optics-complex-pupil-psf.md +7 -1
- package/docs/api/optics-depth-of-field.md +1 -1
- package/docs/api/optics-diffraction.md +1 -1
- package/docs/api/optics-focus-breathing.md +1 -1
- package/docs/api/optics-focus-state.md +1 -1
- package/docs/api/optics-front-of-lens-filter.md +1 -1
- package/docs/api/optics-illumination-vignetting.md +1 -1
- package/docs/api/optics-lateral-chromatic-aberration.md +1 -1
- package/docs/api/optics-lens-psf-profile.md +1 -1
- package/docs/api/optics-polygon-diffraction.md +1 -1
- package/docs/api/optics-profile-contract.md +1 -1
- package/docs/api/optics-psf-foundation.md +1 -1
- package/docs/api/optics-radial-distortion.md +1 -1
- package/docs/api/optics-scene-to-sensor-irradiance.md +1 -1
- package/docs/api/optics-scene-to-sensor-quadrature.md +1 -1
- package/docs/api/optics-sensor-environment-query.md +1 -1
- package/docs/api/optics-sensor-psf-quadrature.md +1 -1
- package/docs/api/optics-stray-light.md +1 -1
- package/docs/api/optics-thin-lens.md +1 -1
- package/docs/api/output-capture-corrected-sdr.md +1 -1
- package/docs/api/output-capture-geometry.md +1 -1
- package/docs/api/output-capture-sdr.md +1 -1
- package/docs/api/output-crop.md +1 -1
- package/docs/api/output-geometric-transforms.md +1 -1
- package/docs/api/output-lens-corrections.md +1 -1
- package/docs/api/output-native-capture-sdr.md +150 -0
- package/docs/api/output-print-contrast-reference.md +82 -0
- package/docs/api/output-print-detail.md +147 -0
- package/docs/api/output-print-plan.md +165 -0
- package/docs/api/output-print-region-statistics.md +165 -0
- package/docs/api/output-sdr-rendering.md +1 -1
- package/docs/api/output-subject-framing-crop.md +1 -1
- package/docs/api/schema-camera.md +1 -1
- package/docs/api/schema-illumination-spectral.md +1 -1
- package/docs/api/schema-illumination-temporal.md +1 -1
- package/docs/api/schema-illumination.md +1 -1
- package/docs/api/schema-scene-radiance-temporal.md +1 -1
- package/docs/api/schema-scene-radiance.md +1 -1
- package/docs/api/schema-scene.md +1 -1
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +1 -1
- package/docs/api/sensor-architecture.md +1 -1
- package/docs/api/sensor-camera-saturation-capacity.md +1 -1
- package/docs/api/sensor-capture-color-sampling-binding.md +1 -1
- package/docs/api/sensor-capture-mode-timing.md +1 -1
- package/docs/api/sensor-capture-mode.md +1 -1
- package/docs/api/sensor-color-sampling.md +1 -1
- package/docs/api/sensor-constant-rate-temporal-integration.md +1 -1
- package/docs/api/sensor-dark-current.md +1 -1
- package/docs/api/sensor-environment-photo-signal.md +1 -1
- package/docs/api/sensor-eqe-electron-rate.md +1 -1
- package/docs/api/sensor-eqe-local-exposure.md +1 -1
- package/docs/api/sensor-eqe-temporal-exposure.md +1 -1
- package/docs/api/sensor-exposure-window.md +1 -1
- package/docs/api/sensor-iso-signal-chain.md +1 -1
- package/docs/api/sensor-local-exposure-binding.md +1 -1
- package/docs/api/sensor-optical-stack.md +1 -1
- package/docs/api/sensor-photon-energy.md +1 -1
- package/docs/api/sensor-physical-charge-capacity.md +1 -1
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +1 -1
- package/docs/api/sensor-raw-readout.md +1 -1
- package/docs/api/sensor-raw-reconstruction.md +1 -1
- package/docs/api/sensor-readout-exposure-linkage.md +1 -1
- package/docs/api/sensor-readout-timing.md +1 -1
- package/docs/api/sensor-response-application-compatibility.md +1 -1
- package/docs/api/sensor-response-operating-range.md +1 -1
- package/docs/api/sensor-responsivity-photocurrent.md +1 -1
- package/docs/api/sensor-sampling-aperture.md +1 -1
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +1 -1
- package/docs/api/sensor-sensor-geometry.md +1 -1
- package/docs/api/sensor-signal-noise.md +1 -1
- package/docs/api/sensor-spatial-sample-reduction.md +1 -1
- package/docs/api/sensor-spatial-sampling-quadrature.md +1 -1
- package/docs/api/sensor-spatio-spectral-reduction.md +1 -1
- package/docs/api/sensor-spectral-coverage.md +1 -1
- package/docs/api/sensor-spectral-quadrature.md +1 -1
- package/docs/api/sensor-spectral-response.md +1 -1
- package/docs/api/sensor-temporal-photo-signal.md +1 -1
- package/docs/api/simulation-poc-simulation.md +1 -1
- package/docs/api/stabilization-camera-shake.md +1 -1
- package/docs/api/stabilization-system.md +1 -1
- package/docs/licenses/castleCSF-MIT.txt +21 -0
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +4 -0
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +3 -0
- package/docs/validation/print-196-candidate-capabilities.json +28 -0
- package/docs/validation/print-196-candidate-evidence.json +356 -0
- package/docs/validation/print-196-engine-acceptance.json +81 -0
- package/docs/validation/print-detail-capabilities.json +103 -0
- package/docs/validation/print-detail-jpeg-evidence.json +116 -0
- package/docs/validation/print-detail-sdr-evidence.json +81 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/scene-to-sensor-irradiance.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateSceneRadianceToSensorIrradiance
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/scene-to-sensor-quadrature.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateSceneToSensorIrradianceQuadrature
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/sensor-environment-query.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateSensorEnvironmentRadianceQuery
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/sensor-psf-quadrature.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateSensorPsfIrradianceQuadrature
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/stray-light.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateLensStrayLightIrradiance
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# optics/thin-lens.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateThinLensImageDistance
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/capture-corrected-sdr.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateCaptureCorrectedSdr
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/capture-geometry.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## ActiveCaptureFieldOfView
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/capture-sdr.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateCaptureSdr
|
|
6
6
|
|
package/docs/api/output-crop.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/crop.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateCenteredCrop
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/geometric-transforms.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## AffineGeometricTransform
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# output/lens-corrections.ts public contracts
|
|
2
2
|
|
|
3
|
-
Package **1.0
|
|
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.
|
|
4
4
|
|
|
5
5
|
## calculateLensCorrectedCapture
|
|
6
6
|
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# output/native-capture-sdr.ts public contracts
|
|
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.
|
|
4
|
+
|
|
5
|
+
## calculateNativeCaptureSdrPlan
|
|
6
|
+
|
|
7
|
+
Validates/admission-plans without reading external samples or allocating a raster.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
export function calculateNativeCaptureSdrPlan(input: NativeCaptureSdrInput): NativeCaptureSdrPlan;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
14
|
+
|
|
15
|
+
## createNativeCaptureSdrTask
|
|
16
|
+
|
|
17
|
+
Creates a single-use execution owner. Admission is validated before any buffer/provider work.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
export function createNativeCaptureSdrTask(input: NativeCaptureSdrInput, provider: NativeCaptureSdrProvider): NativeCaptureSdrTask;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
24
|
+
|
|
25
|
+
## NATIVE_CAPTURE_SDR_LIMITS
|
|
26
|
+
|
|
27
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
NATIVE_CAPTURE_SDR_LIMITS = Object.freeze({ maximumPixels: 24_000_000,
|
|
31
|
+
maximumDimension: 16_384, tileWidth: 256, tileHeight: 32, maximumTileStorageSamples: 32_768 })
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## NATIVE_CAPTURE_SDR_SCHEMA_VERSION
|
|
35
|
+
|
|
36
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
NATIVE_CAPTURE_SDR_SCHEMA_VERSION = "0.1.0" as const
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## NativeCaptureSdrInput
|
|
43
|
+
|
|
44
|
+
Metadata-only external float master. Samples must already be color/WB resolved.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
export interface NativeCaptureSdrInput {
|
|
48
|
+
capture: SimulatedCapture;
|
|
49
|
+
sourcePlaneId: string;
|
|
50
|
+
outputImageStateId: string;
|
|
51
|
+
profile: SdrRenderingProfile;
|
|
52
|
+
/** Admission limit for retained integer output, before allocation or provider calls. */
|
|
53
|
+
maximumOutputBytes: number;
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## NativeCaptureSdrOutput
|
|
58
|
+
|
|
59
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
export interface NativeCaptureSdrOutput {
|
|
63
|
+
plan: NativeCaptureSdrPlan;
|
|
64
|
+
/** Caller-owned packed row-major RGB; 16-bit codes are numeric, not serialized endian bytes. */
|
|
65
|
+
integerSamples: Uint8Array | Uint16Array;
|
|
66
|
+
diagnostics: SdrRenderingResult["diagnostics"];
|
|
67
|
+
outputEncoding: SdrRenderingResult["outputEncoding"];
|
|
68
|
+
displayAdaptation: SdrRenderingResult["displayAdaptation"];
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## NativeCaptureSdrPlan
|
|
73
|
+
|
|
74
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
export interface NativeCaptureSdrPlan {
|
|
78
|
+
schemaVersion: typeof NATIVE_CAPTURE_SDR_SCHEMA_VERSION;
|
|
79
|
+
capture: SimulatedCapture;
|
|
80
|
+
sourcePlaneId: string;
|
|
81
|
+
outputImageStateId: string;
|
|
82
|
+
profile: SdrRenderingProfile;
|
|
83
|
+
outputBytes: number;
|
|
84
|
+
/** Logical array payload bound, not JS heap/GPU/process peak memory or device qualification. */
|
|
85
|
+
maximumScratchPayloadBytes: number;
|
|
86
|
+
tileCount: number;
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## NativeCaptureSdrProvider
|
|
91
|
+
|
|
92
|
+
One provider call at a time. Caller must release decoding/GPU resources on abort/settlement.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
export interface NativeCaptureSdrProvider {
|
|
96
|
+
readTile(request: Readonly<NativeCaptureSdrTileRequest>, signal: AbortSignal): Promise<NativeCaptureSdrTile>;
|
|
97
|
+
/** Must yield to the host event loop, allowing cancellation/input events between tiles. */
|
|
98
|
+
yieldControl(signal: AbortSignal): Promise<void>;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## NativeCaptureSdrTask
|
|
103
|
+
|
|
104
|
+
Single-use task: no partial output escapes; cancel/dispose prevents late publication.
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
export interface NativeCaptureSdrTask {
|
|
108
|
+
readonly plan: NativeCaptureSdrPlan;
|
|
109
|
+
readonly state: NativeCaptureSdrTaskState;
|
|
110
|
+
readonly completedTileCount: number;
|
|
111
|
+
run(): Promise<void>;
|
|
112
|
+
cancel(): void;
|
|
113
|
+
dispose(): void;
|
|
114
|
+
/** Transfers sole retained buffer ownership once. Dispose cannot revoke a transferred buffer. */
|
|
115
|
+
takeOutput(): NativeCaptureSdrOutput;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## NativeCaptureSdrTaskState
|
|
120
|
+
|
|
121
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
export type NativeCaptureSdrTaskState = "ready" | "running" | "completed" | "cancelled" | "failed" | "disposed" | "transferred";
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## NativeCaptureSdrTile
|
|
128
|
+
|
|
129
|
+
Returned tile is exclusively handed to this call; do not mutate/reuse it. Padding is not image data.
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
export interface NativeCaptureSdrTile extends NativeCaptureSdrTileRequest {
|
|
133
|
+
rowStrideSamples: number;
|
|
134
|
+
samples: Float32Array | Float64Array;
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## NativeCaptureSdrTileRequest
|
|
139
|
+
|
|
140
|
+
Absolute coordinates in the selected plane's declared binding, never crop-local sensor indices.
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
export interface NativeCaptureSdrTileRequest {
|
|
144
|
+
captureId: string;
|
|
145
|
+
sourcePlaneId: string;
|
|
146
|
+
artifactId: string;
|
|
147
|
+
sha256: string;
|
|
148
|
+
x: number; y: number; width: number; height: number;
|
|
149
|
+
}
|
|
150
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# output/print-contrast-reference.ts public contracts
|
|
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.
|
|
4
|
+
|
|
5
|
+
## calculatePrintContrastReference
|
|
6
|
+
|
|
7
|
+
Estimate the restricted published-model threshold; no individual invisibility claim.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
export function calculatePrintContrastReference(value: PrintContrastReferenceInput): CalculationResult<PrintContrastReference>;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
14
|
+
|
|
15
|
+
## parsePrintContrastReferenceInput
|
|
16
|
+
|
|
17
|
+
Strictly parse/copy explicit reference conditions; no defaults infer an observer.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
export function parsePrintContrastReferenceInput(value: unknown): PrintContrastReferenceInput;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
24
|
+
|
|
25
|
+
## PRINT_CONTRAST_REFERENCE_MODEL_VERSION
|
|
26
|
+
|
|
27
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
PRINT_CONTRAST_REFERENCE_MODEL_VERSION = "0.1.0" as const
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## PRINT_CONTRAST_REFERENCE_UPSTREAM_REVISION
|
|
34
|
+
|
|
35
|
+
Exact MIT-licensed numerical-model source, not a local calibration identity.
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
PRINT_CONTRAST_REFERENCE_UPSTREAM_REVISION = "f4b0b722af83001d7af979281e06ca642d36e4e8" as const
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## PrintContrastReference
|
|
42
|
+
|
|
43
|
+
The exact contract is declared below; use the domain guide for assumptions and staged integration.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
export interface PrintContrastReference {
|
|
47
|
+
referenceId: string;
|
|
48
|
+
engineApiVersion: string;
|
|
49
|
+
modelVersion: typeof PRINT_CONTRAST_REFERENCE_MODEL_VERSION;
|
|
50
|
+
upstreamRevision: typeof PRINT_CONTRAST_REFERENCE_UPSTREAM_REVISION;
|
|
51
|
+
input: PrintContrastReferenceInput;
|
|
52
|
+
status: "model-estimate" | "unsupported";
|
|
53
|
+
blockers: string[];
|
|
54
|
+
estimate: { contrastSensitivity: number; thresholdModulationMichelson: number; suppliedModulationToModelThresholdRatio: number } | null;
|
|
55
|
+
observerApplicability: "population-reference-unverified-for-individual";
|
|
56
|
+
naturalImageVisibility: "unassessed";
|
|
57
|
+
printStimulusMatch: "unassessed";
|
|
58
|
+
uncertainty: "not-quantified";
|
|
59
|
+
overallPrintVerdict: "not-offered";
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## PrintContrastReferenceInput
|
|
64
|
+
|
|
65
|
+
Narrow reference stimulus, separate from any measured photographic ROI.
|
|
66
|
+
Positive but out-of-domain quantities return unsupported rather than extrapolation.
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
export interface PrintContrastReferenceInput {
|
|
70
|
+
referenceId: string;
|
|
71
|
+
stimulus: "static-neutral-d65-gabor";
|
|
72
|
+
observer: "published-binocular-natural-pupil-reference";
|
|
73
|
+
/** Uniform D65 background/carrier mean; not the average of a finite photographic ROI. */
|
|
74
|
+
meanLuminanceCdPerSquareMeter: number;
|
|
75
|
+
spatialFrequencyCyclesPerDegree: number;
|
|
76
|
+
gaussianEnvelopeSigmaDegrees: number;
|
|
77
|
+
temporalFrequencyHz: number;
|
|
78
|
+
eccentricityDegrees: number;
|
|
79
|
+
/** Neutral carrier fractional amplitude before the Gaussian envelope; not arbitrary ROI extrema. */
|
|
80
|
+
modulationMichelson: number;
|
|
81
|
+
}
|
|
82
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# output/print-detail.ts public contracts
|
|
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.
|
|
4
|
+
|
|
5
|
+
## calculatePrintRegionDetail
|
|
6
|
+
|
|
7
|
+
Calculate one coherent regional fundamental and its print reference scale.
|
|
8
|
+
Acquisition remains unknown; no MTF, noise, compression or perceptual pass is produced.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
export function calculatePrintRegionDetail(value: PrintRegionDetailInput): CalculationResult<PrintRegionDetailAssessment>;
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
15
|
+
|
|
16
|
+
## MAX_PRINT_DETAIL_REGION_SAMPLES
|
|
17
|
+
|
|
18
|
+
Work bound for one dense ROI, not an actual-device capability claim.
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
MAX_PRINT_DETAIL_REGION_SAMPLES = 65536
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## parsePrintRegionDetailInput
|
|
25
|
+
|
|
26
|
+
Parse/copy bounded, untrusted region/source/target data and existing Print geometry.
|
|
27
|
+
Unknowns, sparse arrays and factual-reference-only numeric samples fail closed.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
export function parsePrintRegionDetailInput(value: unknown): PrintRegionDetailInput;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
34
|
+
|
|
35
|
+
## PRINT_REGION_DETAIL_MODEL_VERSION
|
|
36
|
+
|
|
37
|
+
Metric/protocol identity; independent of the root creator version.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
PRINT_REGION_DETAIL_MODEL_VERSION = "0.1.0" as const
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## PrintDetailRegion
|
|
44
|
+
|
|
45
|
+
Selected half-open rectangle in the represented oriented retained raster.
|
|
46
|
+
Depth is descriptive, in metres; null explicitly means unknown.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
export interface PrintDetailRegion {
|
|
50
|
+
id: string;
|
|
51
|
+
rect: RasterRect;
|
|
52
|
+
role: "selected-subject" | "field-diagnostic" | "intentional-defocus";
|
|
53
|
+
subjectDistanceM: number | null;
|
|
54
|
+
focusDistanceM: number | null;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## PrintDetailSource
|
|
59
|
+
|
|
60
|
+
Exact represented source; content hash and decoding are caller assertions.
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
export interface PrintDetailSource {
|
|
64
|
+
captureId: string;
|
|
65
|
+
representationId: string;
|
|
66
|
+
contentSha256: string;
|
|
67
|
+
raster: RasterDimensions;
|
|
68
|
+
stage: "native-retained-linear" | "post-resampling-linear" | "post-encoding-decoded-linear";
|
|
69
|
+
domain: "relative-linear-luminance" | "transfer-encoded-luma" | "unknown";
|
|
70
|
+
registration: "oriented-retained-unwarped" | "correction-or-warp-unqualified";
|
|
71
|
+
processing: { id: string; version: string };
|
|
72
|
+
noiseRealizationId: string | null;
|
|
73
|
+
evidence: readonly EvidenceProvenance[];
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## PrintRegionDetailAssessment
|
|
78
|
+
|
|
79
|
+
Immutable snapshot with no full-system, artifact, perception or print-quality pass.
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
export interface PrintRegionDetailAssessment {
|
|
83
|
+
assessmentId: string;
|
|
84
|
+
engineApiVersion: string;
|
|
85
|
+
modelVersion: typeof PRINT_REGION_DETAIL_MODEL_VERSION;
|
|
86
|
+
input: PrintRegionDetailInput;
|
|
87
|
+
status: "diagnostic-only" | "blocked" | "unsupported";
|
|
88
|
+
blockers: string[];
|
|
89
|
+
print: PrintPlan;
|
|
90
|
+
measurement: PrintSinusoidalMeasurement | null;
|
|
91
|
+
projection: {
|
|
92
|
+
fieldPointMm: { x: number; y: number };
|
|
93
|
+
frequencyCyclesPerMm: { x: number; y: number };
|
|
94
|
+
physicalPeriodMm: number;
|
|
95
|
+
angularPeriodAtImageCenterDegrees: number;
|
|
96
|
+
} | null;
|
|
97
|
+
assessedRasterMatchesRecommendation: boolean;
|
|
98
|
+
sourceArtifactVerification: "caller-declared-unverified";
|
|
99
|
+
assurance: ComposedScientificAssurance;
|
|
100
|
+
unassessed: readonly ("captured-system-mtf" | "optical-motion-attribution" | "noise" | "aliasing" | "halos" | "compression" | "color" | "perceived-quality" | "printer-substrate")[];
|
|
101
|
+
overallPrintVerdict: "not-offered";
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## PrintRegionDetailInput
|
|
106
|
+
|
|
107
|
+
Own/reusable scalar relative-linear ROI samples; no RGB/luma conversion is inferred.
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
export interface PrintRegionDetailInput {
|
|
111
|
+
assessmentId: string;
|
|
112
|
+
print: PrintPlanInput;
|
|
113
|
+
source: PrintDetailSource;
|
|
114
|
+
region: PrintDetailRegion;
|
|
115
|
+
target: PrintSinusoidalTarget;
|
|
116
|
+
samples: readonly number[];
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## PrintSinusoidalMeasurement
|
|
121
|
+
|
|
122
|
+
Calculated coefficients for one declared grating; residual is not a noise metric.
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
export interface PrintSinusoidalMeasurement {
|
|
126
|
+
meanRelativeLuminance: number;
|
|
127
|
+
fundamentalAmplitudeRelativeLuminance: number;
|
|
128
|
+
fundamentalModulation: number;
|
|
129
|
+
declaredGratingTransfer: number;
|
|
130
|
+
unexplainedResidualRmsRelativeToMean: number;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## PrintSinusoidalTarget
|
|
135
|
+
|
|
136
|
+
Coherent integer Fourier mode; x right/y down, arbitrary phase at first ROI sample.
|
|
137
|
+
Input modulation is dimensionless, positive and at most one.
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
export interface PrintSinusoidalTarget {
|
|
141
|
+
id: string;
|
|
142
|
+
version: string;
|
|
143
|
+
kind: "coherent-sinusoid";
|
|
144
|
+
cyclesAcrossRegion: { x: number; y: number };
|
|
145
|
+
referenceModulation: number;
|
|
146
|
+
}
|
|
147
|
+
```
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# output/print-plan.ts public contracts
|
|
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.
|
|
4
|
+
|
|
5
|
+
## calculatePrintPlan
|
|
6
|
+
|
|
7
|
+
Resolve the minimum exact-native-ratio file under declared sampling/lab constraints.
|
|
8
|
+
Angular guidance is approximate as a usage criterion; geometry is calculated.
|
|
9
|
+
No source detail, perceived quality, serializer or resource availability is assessed.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
export function calculatePrintPlan(value: PrintPlanInput): CalculationResult<PrintPlan>;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
16
|
+
|
|
17
|
+
## calculatePrintSizeLimit
|
|
18
|
+
|
|
19
|
+
Calculate a conditional size bound. Lab constraints require individual plans;
|
|
20
|
+
this first size-query contract reports them as unsupported rather than ignoring them.
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
export function calculatePrintSizeLimit(value: PrintSizeLimitInput): CalculationResult<PrintSizeLimit>;
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
27
|
+
|
|
28
|
+
## parsePrintPlanInput
|
|
29
|
+
|
|
30
|
+
Validate and copy an untrusted Print request; never infer native authority.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
export function parsePrintPlanInput(value: unknown): PrintPlanInput;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
This call is synchronous; any supplied provider must follow its explicit synchronous contract.
|
|
37
|
+
|
|
38
|
+
## PrintedImageSize
|
|
39
|
+
|
|
40
|
+
Flat printed image area; excludes paper, borders and wraps.
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
export interface PrintedImageSize { width: number; height: number; unit: PrintLength["unit"] }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## PrintLength
|
|
47
|
+
|
|
48
|
+
Physical length, separate from raster pixels and printer dots.
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
export interface PrintLength { value: number; unit: "mm" | "cm" | "inches" | "m" }
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## PrintNativeSource
|
|
55
|
+
|
|
56
|
+
Declared authoritative geometry, not a preview or resampled pixel count.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
export type PrintNativeSource =
|
|
60
|
+
| { kind: "native-retained"; captureId: string; geometry: ResolveCaptureGeometryInput }
|
|
61
|
+
| { kind: "unavailable"; reason: "missing-native-raster" | "unverified-native-identity" };
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## PrintPlan
|
|
65
|
+
|
|
66
|
+
Finite conditional plan. Null recommendation never authorizes an upscale.
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
export interface PrintPlan {
|
|
70
|
+
engineApiVersion: string;
|
|
71
|
+
input: PrintPlanInput;
|
|
72
|
+
status: "ready" | "insufficient-native-pixels" | "provider-conflict" | "crop-confirmation-required" | "cannot-assess" | "unsupported";
|
|
73
|
+
nativePixelSufficiency: "sufficient" | "insufficient" | "cannot-assess";
|
|
74
|
+
reasons: string[];
|
|
75
|
+
printedImageMm: { width: number; height: number } | null;
|
|
76
|
+
viewingDistanceMm: number | null;
|
|
77
|
+
guidance: CalculationResult<{ derivedPixelsPerInch: number; maximumPixelPitchMm: number; maximumArcminutesPerPixel: number | null }> | null;
|
|
78
|
+
relativeAspectError: number | null;
|
|
79
|
+
native: PrintRasterSampling | null;
|
|
80
|
+
minimumSamplingRaster: RasterDimensions | null;
|
|
81
|
+
recommended: PrintRasterSampling | null;
|
|
82
|
+
resamplingScale: { x: number; y: number } | null;
|
|
83
|
+
alternatives: { maximumImageMmAtCurrentDistance: { width: number; height: number }; minimumViewingDistanceMmAtCurrentSize: number | null } | null;
|
|
84
|
+
capturedDetailAssessment: "unassessed";
|
|
85
|
+
deliveryAssessment: "unassessed";
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## PrintPlanInput
|
|
90
|
+
|
|
91
|
+
Exact-ratio output policy. Physical aspect tolerance is explicit and reported.
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
export interface PrintPlanInput {
|
|
95
|
+
source: PrintNativeSource;
|
|
96
|
+
printedImage: PrintedImageSize;
|
|
97
|
+
viewingDistance: PrintLength;
|
|
98
|
+
sampling: PrintSamplingCriterion;
|
|
99
|
+
fit: { kind: "confirmed-native-aspect"; maximumRelativeAspectError: number };
|
|
100
|
+
provider?: PrintProviderConstraints;
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## PrintProviderConstraints
|
|
105
|
+
|
|
106
|
+
Caller-supplied lab constraints; no vendor catalog or delivery guarantee.
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
export interface PrintProviderConstraints {
|
|
110
|
+
minimumRaster?: RasterDimensions;
|
|
111
|
+
exactRaster?: RasterDimensions;
|
|
112
|
+
minimumPpi?: number;
|
|
113
|
+
exactPpi?: number;
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## PrintRasterSampling
|
|
118
|
+
|
|
119
|
+
Per-axis density and angular pitch; angular values are geometry, not acuity.
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
export interface PrintRasterSampling {
|
|
123
|
+
raster: RasterDimensions;
|
|
124
|
+
pixelsPerInch: { x: number; y: number };
|
|
125
|
+
angularPixelPitchArcminutes: { x: number; y: number };
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## PrintSamplingCriterion
|
|
130
|
+
|
|
131
|
+
Explicit angular convention; manual PPI starts a different plan.
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
export type PrintSamplingCriterion =
|
|
135
|
+
| { kind: "angular-pixel-pitch"; maximumArcminutesPerPixel: number }
|
|
136
|
+
| { kind: "angular-stroke"; strokeWidthArcminutes: number; samplesPerStroke: number }
|
|
137
|
+
| { kind: "angular-line-pair"; periodArcminutes: number; samplesPerPeriod: number }
|
|
138
|
+
| { kind: "manual-ppi"; pixelsPerInch: number };
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## PrintSizeLimit
|
|
142
|
+
|
|
143
|
+
Semantic bounds avoid Infinity sentinels; no-positive-size differs from invalid input.
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
export interface PrintSizeLimit {
|
|
147
|
+
engineApiVersion: string;
|
|
148
|
+
status: "finite" | "unbounded" | "no-positive-size" | "cannot-assess" | "unsupported";
|
|
149
|
+
maximumImageMm: { width: number; height: number } | null;
|
|
150
|
+
reasons: string[];
|
|
151
|
+
referencePlan: PrintPlan;
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## PrintSizeLimitInput
|
|
156
|
+
|
|
157
|
+
Size-limit query retains the reference image aspect and criterion.
|
|
158
|
+
Proportional viewing scales the supplied reference distance with both image axes.
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
export interface PrintSizeLimitInput {
|
|
162
|
+
plan: PrintPlanInput;
|
|
163
|
+
viewingDistancePolicy: "fixed" | "proportional-to-image-size";
|
|
164
|
+
}
|
|
165
|
+
```
|