@photivra/engine 0.2.0 → 0.5.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 (89) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/CITATION.cff +1 -1
  3. package/README.md +59 -10
  4. package/dist/camera/equivalent-focal-length.d.ts +34 -0
  5. package/dist/camera/equivalent-focal-length.d.ts.map +1 -0
  6. package/dist/camera/equivalent-focal-length.js +33 -0
  7. package/dist/camera/equivalent-focal-length.js.map +1 -0
  8. package/dist/camera/field-of-view.d.ts +40 -3
  9. package/dist/camera/field-of-view.d.ts.map +1 -1
  10. package/dist/camera/field-of-view.js +66 -24
  11. package/dist/camera/field-of-view.js.map +1 -1
  12. package/dist/core/calculation-result.d.ts.map +1 -1
  13. package/dist/core/calculation-result.js +14 -2
  14. package/dist/core/calculation-result.js.map +1 -1
  15. package/dist/core/configuration-error.d.ts +9 -0
  16. package/dist/core/configuration-error.d.ts.map +1 -0
  17. package/dist/core/configuration-error.js +13 -0
  18. package/dist/core/configuration-error.js.map +1 -0
  19. package/dist/core/evidence-provenance.d.ts +40 -0
  20. package/dist/core/evidence-provenance.d.ts.map +1 -0
  21. package/dist/core/evidence-provenance.js +79 -0
  22. package/dist/core/evidence-provenance.js.map +1 -0
  23. package/dist/core/image-formation.d.ts +70 -0
  24. package/dist/core/image-formation.d.ts.map +1 -0
  25. package/dist/core/image-formation.js +335 -0
  26. package/dist/core/image-formation.js.map +1 -0
  27. package/dist/index.d.ts +15 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +15 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/motion/camera-rotation.d.ts +91 -0
  32. package/dist/motion/camera-rotation.d.ts.map +1 -0
  33. package/dist/motion/camera-rotation.js +157 -0
  34. package/dist/motion/camera-rotation.js.map +1 -0
  35. package/dist/optics/focus-breathing.d.ts +73 -0
  36. package/dist/optics/focus-breathing.d.ts.map +1 -0
  37. package/dist/optics/focus-breathing.js +77 -0
  38. package/dist/optics/focus-breathing.js.map +1 -0
  39. package/dist/optics/illumination-vignetting.d.ts +59 -0
  40. package/dist/optics/illumination-vignetting.d.ts.map +1 -0
  41. package/dist/optics/illumination-vignetting.js +107 -0
  42. package/dist/optics/illumination-vignetting.js.map +1 -0
  43. package/dist/optics/lateral-chromatic-aberration.d.ts +117 -0
  44. package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -0
  45. package/dist/optics/lateral-chromatic-aberration.js +228 -0
  46. package/dist/optics/lateral-chromatic-aberration.js.map +1 -0
  47. package/dist/optics/psf-foundation.d.ts +102 -0
  48. package/dist/optics/psf-foundation.d.ts.map +1 -0
  49. package/dist/optics/psf-foundation.js +164 -0
  50. package/dist/optics/psf-foundation.js.map +1 -0
  51. package/dist/optics/radial-distortion.d.ts +131 -0
  52. package/dist/optics/radial-distortion.d.ts.map +1 -0
  53. package/dist/optics/radial-distortion.js +227 -0
  54. package/dist/optics/radial-distortion.js.map +1 -0
  55. package/dist/output/capture-geometry.d.ts +278 -0
  56. package/dist/output/capture-geometry.d.ts.map +1 -0
  57. package/dist/output/capture-geometry.js +562 -0
  58. package/dist/output/capture-geometry.js.map +1 -0
  59. package/dist/schema/validation.d.ts +1 -8
  60. package/dist/schema/validation.d.ts.map +1 -1
  61. package/dist/schema/validation.js +2 -11
  62. package/dist/schema/validation.js.map +1 -1
  63. package/dist/sensor/architecture.d.ts +40 -0
  64. package/dist/sensor/architecture.d.ts.map +1 -0
  65. package/dist/sensor/architecture.js +98 -0
  66. package/dist/sensor/architecture.js.map +1 -0
  67. package/dist/sensor/radiometry-readiness.d.ts +111 -0
  68. package/dist/sensor/radiometry-readiness.d.ts.map +1 -0
  69. package/dist/sensor/radiometry-readiness.js +294 -0
  70. package/dist/sensor/radiometry-readiness.js.map +1 -0
  71. package/dist/sensor/sensor-geometry.d.ts +99 -0
  72. package/dist/sensor/sensor-geometry.d.ts.map +1 -0
  73. package/dist/sensor/sensor-geometry.js +71 -0
  74. package/dist/sensor/sensor-geometry.js.map +1 -0
  75. package/dist/simulation/poc-simulation.d.ts +93 -1
  76. package/dist/simulation/poc-simulation.d.ts.map +1 -1
  77. package/dist/simulation/poc-simulation.js +308 -24
  78. package/dist/simulation/poc-simulation.js.map +1 -1
  79. package/docs/API_STYLE.md +36 -2
  80. package/docs/ARCHITECTURE.md +179 -1
  81. package/docs/IMAGE_FORMATION.md +151 -0
  82. package/docs/MOTION_AND_SIGNAL.md +52 -1
  83. package/docs/PHYSICS_FOUNDATION.md +190 -3
  84. package/docs/POC_API.md +73 -7
  85. package/docs/PROVENANCE.md +24 -0
  86. package/docs/PSF_FOUNDATION.md +133 -0
  87. package/docs/STABILIZATION.md +17 -4
  88. package/docs/USAGE.md +714 -3
  89. package/package.json +3 -2
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- import { calculateFieldOfView } from "../camera/field-of-view.js";
2
+ import { calculateEquivalentFocalLength35Mm } from "../camera/equivalent-focal-length.js";
3
+ import { calculateFieldOfView, calculateFieldOfViewBounds } from "../camera/field-of-view.js";
3
4
  import { calculateProjectedObjectSize } from "../camera/projected-object-size.js";
4
5
  import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
5
6
  import { calculateExposureValue100 } from "../exposure/exposure.js";
@@ -9,10 +10,14 @@ import { estimateEquivalentViewingCircleOfConfusion } from "../optics/circle-of-
9
10
  import { calculateAiryDisk } from "../optics/diffraction.js";
10
11
  import { calculateThinLensImageDistance } from "../optics/thin-lens.js";
11
12
  import { calculateDefocusCircle, calculateDepthOfField } from "../optics/depth-of-field.js";
13
+ import { calculateActiveCaptureFieldOfView, calculateOutputFieldOfView, resolveCaptureGeometry, transformNativeRasterVectorToOriented } from "../output/capture-geometry.js";
12
14
  import { calculateCenteredCrop } from "../output/crop.js";
13
15
  import { calculateSubjectFramingCrop } from "../output/subject-framing-crop.js";
14
16
  import { calculatePixelPitch } from "../sensor/pixel-pitch.js";
17
+ import { calculateSensorGeometryMetrics } from "../sensor/sensor-geometry.js";
15
18
  import { estimateCameraShakeBlur } from "../stabilization/camera-shake.js";
19
+ export const POC_SIMULATION_API_VERSION = "0.20.0";
20
+ const POC_MAX_PITCH_AXIS_RELATIVE_DIFFERENCE = 0.01;
16
21
  function calculateCroppedFieldOfView(sensorWidthMm, sensorHeightMm, focalLengthMm, focusDistanceM, cropFactor) {
17
22
  const diagonalMm = Math.hypot(sensorWidthMm, sensorHeightMm);
18
23
  return {
@@ -49,6 +54,80 @@ function requireUniqueSampleIds(label, samples) {
49
54
  seen.add(normalizedId);
50
55
  }
51
56
  }
57
+ function centeredPhysicalCropBounds(bounds, retainedFractionX, retainedFractionY) {
58
+ const centerX = (bounds.left + bounds.right) / 2;
59
+ const centerY = (bounds.top + bounds.bottom) / 2;
60
+ const halfWidth = ((bounds.right - bounds.left) * retainedFractionX) / 2;
61
+ const halfHeight = ((bounds.bottom - bounds.top) * retainedFractionY) / 2;
62
+ return {
63
+ left: centerX - halfWidth,
64
+ right: centerX + halfWidth,
65
+ top: centerY - halfHeight,
66
+ bottom: centerY + halfHeight
67
+ };
68
+ }
69
+ function calculateFieldOfViewForPhysicalBounds(bounds, focalLengthMm, focusDistanceM) {
70
+ const horizontal = calculateFieldOfViewBounds({
71
+ focalLengthMm,
72
+ minimumSensorCoordinateMm: bounds.left,
73
+ maximumSensorCoordinateMm: bounds.right,
74
+ focusDistanceM
75
+ }).value;
76
+ const vertical = calculateFieldOfViewBounds({
77
+ focalLengthMm,
78
+ minimumSensorCoordinateMm: bounds.top,
79
+ maximumSensorCoordinateMm: bounds.bottom,
80
+ focusDistanceM
81
+ }).value;
82
+ const projectionDistanceMm = horizontal.projectionDistanceMm;
83
+ const corners = {
84
+ topLeft: { x: bounds.left, y: bounds.top },
85
+ topRight: { x: bounds.right, y: bounds.top },
86
+ bottomRight: { x: bounds.right, y: bounds.bottom },
87
+ bottomLeft: { x: bounds.left, y: bounds.bottom }
88
+ };
89
+ const angleBetween = (first, second) => {
90
+ const firstLength = Math.hypot(first.x, first.y, projectionDistanceMm);
91
+ const secondLength = Math.hypot(second.x, second.y, projectionDistanceMm);
92
+ const dot = first.x * second.x +
93
+ first.y * second.y +
94
+ projectionDistanceMm * projectionDistanceMm;
95
+ const cosine = Math.max(-1, Math.min(1, dot / (firstLength * secondLength)));
96
+ return (Math.acos(cosine) * 180) / Math.PI;
97
+ };
98
+ return {
99
+ horizontalDegrees: horizontal.degrees,
100
+ verticalDegrees: vertical.degrees,
101
+ diagonalDegrees: Math.max(angleBetween(corners.topLeft, corners.bottomRight), angleBetween(corners.topRight, corners.bottomLeft))
102
+ };
103
+ }
104
+ function isPortraitOrientation(orientation) {
105
+ return (orientation === "portrait-clockwise" ||
106
+ orientation === "portrait-counter-clockwise");
107
+ }
108
+ function resolveCaptureVector(legacyImagePlaneVector, orientation, geometry) {
109
+ // Legacy projected-motion/camera-shake components use +X right and +Y up.
110
+ // Capture raster coordinates use +X right and +Y down. Preserve the legacy
111
+ // fields unchanged and convert explicitly before applying physical rotation.
112
+ const nativeRasterDeltaPixels = {
113
+ x: legacyImagePlaneVector.x,
114
+ y: -legacyImagePlaneVector.y
115
+ };
116
+ const orientedCaptureDeltaPixels = transformNativeRasterVectorToOriented({
117
+ vector: nativeRasterDeltaPixels,
118
+ orientation
119
+ });
120
+ const scaleX = geometry.output.orientedCaptureToOutputScale.x;
121
+ const scaleY = geometry.output.orientedCaptureToOutputScale.y;
122
+ return {
123
+ nativeRasterDeltaPixels,
124
+ orientedCaptureDeltaPixels,
125
+ outputDeltaPixels: {
126
+ x: orientedCaptureDeltaPixels.x * scaleX,
127
+ y: orientedCaptureDeltaPixels.y * scaleY
128
+ }
129
+ };
130
+ }
52
131
  /**
53
132
  * Composes the validated POC calculations into a single renderer/agent-facing
54
133
  * response without introducing any new photographic model.
@@ -59,6 +138,48 @@ function requireUniqueSampleIds(label, samples) {
59
138
  export function simulatePocCamera(request) {
60
139
  requirePositiveFinite("sensor.widthMm", request.sensor.widthMm);
61
140
  requirePositiveFinite("sensor.heightMm", request.sensor.heightMm);
141
+ const sensorGeometry = calculateSensorGeometryMetrics({
142
+ imagingArea: {
143
+ widthMm: request.sensor.widthMm,
144
+ heightMm: request.sensor.heightMm
145
+ },
146
+ nativeRaster: {
147
+ pixelWidth: request.sensor.pixelWidth,
148
+ pixelHeight: request.sensor.pixelHeight
149
+ }
150
+ }).value;
151
+ const pitchXMicrometers = sensorGeometry.sampling.pitchXMicrometers;
152
+ const pitchYMicrometers = sensorGeometry.sampling.pitchYMicrometers;
153
+ const pitchAxisRelativeDifference = Math.abs(pitchXMicrometers - pitchYMicrometers) /
154
+ ((pitchXMicrometers + pitchYMicrometers) / 2);
155
+ if (pitchAxisRelativeDifference >
156
+ POC_MAX_PITCH_AXIS_RELATIVE_DIFFERENCE) {
157
+ throw new InvalidScientificInputError("The composed POC currently requires approximately square geometric sampling; X/Y pitch differ by more than 1%. Use lower-level axis-aware engine primitives until the POC contract supports separate X/Y sampling.");
158
+ }
159
+ const capture = request.capture;
160
+ const subjectCropRequest = request.subjectCrop;
161
+ const captureGeometry = capture === undefined
162
+ ? undefined
163
+ : resolveCaptureGeometry({
164
+ imagingArea: {
165
+ widthMm: request.sensor.widthMm,
166
+ heightMm: request.sensor.heightMm
167
+ },
168
+ nativeRaster: {
169
+ pixelWidth: request.sensor.pixelWidth,
170
+ pixelHeight: request.sensor.pixelHeight
171
+ },
172
+ orientation: capture.orientation,
173
+ ...(capture.activeCaptureRect === undefined
174
+ ? {}
175
+ : { activeCaptureRect: capture.activeCaptureRect }),
176
+ ...(capture.outputCropRect === undefined
177
+ ? {}
178
+ : { outputCropRect: capture.outputCropRect }),
179
+ ...(capture.outputRaster === undefined
180
+ ? {}
181
+ : { outputRaster: capture.outputRaster })
182
+ }).value;
62
183
  requirePositiveFinite("lens.focalLengthMm", request.lens.focalLengthMm);
63
184
  requirePositiveFinite("lens.aperture", request.lens.aperture);
64
185
  requirePositiveFinite("exposure.shutterSeconds", request.exposure.shutterSeconds);
@@ -69,20 +190,10 @@ export function simulatePocCamera(request) {
69
190
  if (hasExplicitCircleOfConfusion === hasEquivalentViewingCriterion) {
70
191
  throw new InvalidScientificInputError("Provide exactly one focus circle-of-confusion criterion.");
71
192
  }
72
- const equivalentViewingCircleOfConfusion = request.focus.equivalentViewingCircleOfConfusion === undefined
73
- ? undefined
74
- : estimateEquivalentViewingCircleOfConfusion({
75
- sensorWidthMm: request.sensor.widthMm,
76
- sensorHeightMm: request.sensor.heightMm,
77
- ...request.focus.equivalentViewingCircleOfConfusion
78
- });
79
- const circleOfConfusionMm = equivalentViewingCircleOfConfusion?.value.circleOfConfusionMm ??
80
- request.focus.circleOfConfusionMm;
81
- if (circleOfConfusionMm === undefined) {
82
- throw new InvalidScientificInputError("A focus circle-of-confusion criterion is required.");
83
- }
84
- requirePositiveFinite("focus.circleOfConfusionMm", circleOfConfusionMm);
85
193
  requirePositiveFinite("crop.factor", request.crop.factor);
194
+ if (capture !== undefined && request.crop.factor !== 1) {
195
+ throw new InvalidScientificInputError("capture geometry cannot be combined with legacy crop.factor other than 1.");
196
+ }
86
197
  requirePositiveFinite("diffraction.wavelengthNm", request.diffraction.wavelengthNm);
87
198
  requireUniqueSampleIds("defocusSamples", request.defocusSamples);
88
199
  requireUniqueSampleIds("samplingSamples", request.samplingSamples);
@@ -107,6 +218,51 @@ export function simulatePocCamera(request) {
107
218
  sensorDimensionMm: diagonalMm,
108
219
  focusDistanceM: request.focus.focusDistanceM
109
220
  });
221
+ const activeCaptureFieldOfView = captureGeometry === undefined || capture === undefined
222
+ ? undefined
223
+ : calculateActiveCaptureFieldOfView({
224
+ imagingArea: {
225
+ widthMm: request.sensor.widthMm,
226
+ heightMm: request.sensor.heightMm
227
+ },
228
+ nativeRaster: {
229
+ pixelWidth: request.sensor.pixelWidth,
230
+ pixelHeight: request.sensor.pixelHeight
231
+ },
232
+ orientation: capture.orientation,
233
+ ...(capture.activeCaptureRect === undefined
234
+ ? {}
235
+ : { activeCaptureRect: capture.activeCaptureRect }),
236
+ focalLengthMm: request.lens.focalLengthMm,
237
+ focusDistanceM: request.focus.focusDistanceM
238
+ }).value;
239
+ const equivalentFocalLength = captureGeometry === undefined
240
+ ? undefined
241
+ : calculateEquivalentFocalLength35Mm({
242
+ focalLengthMm: request.lens.focalLengthMm,
243
+ activeImagingArea: captureGeometry.activeCapture.imagingArea
244
+ }).value;
245
+ const outputFieldOfView = captureGeometry === undefined || capture === undefined
246
+ ? undefined
247
+ : calculateOutputFieldOfView({
248
+ imagingArea: {
249
+ widthMm: request.sensor.widthMm,
250
+ heightMm: request.sensor.heightMm
251
+ },
252
+ nativeRaster: {
253
+ pixelWidth: request.sensor.pixelWidth,
254
+ pixelHeight: request.sensor.pixelHeight
255
+ },
256
+ orientation: capture.orientation,
257
+ ...(capture.activeCaptureRect === undefined
258
+ ? {}
259
+ : { activeCaptureRect: capture.activeCaptureRect }),
260
+ ...(capture.outputCropRect === undefined
261
+ ? {}
262
+ : { outputCropRect: capture.outputCropRect }),
263
+ focalLengthMm: request.lens.focalLengthMm,
264
+ focusDistanceM: request.focus.focusDistanceM
265
+ }).value;
110
266
  const pixelPitch = calculatePixelPitch({
111
267
  sensorWidthMm: request.sensor.widthMm,
112
268
  pixelWidth: request.sensor.pixelWidth
@@ -117,12 +273,6 @@ export function simulatePocCamera(request) {
117
273
  cropFactor: request.crop.factor
118
274
  });
119
275
  const cropFieldOfView = calculateCroppedFieldOfView(request.sensor.widthMm, request.sensor.heightMm, request.lens.focalLengthMm, request.focus.focusDistanceM, request.crop.factor);
120
- const depthOfField = calculateDepthOfField({
121
- focalLengthMm: request.lens.focalLengthMm,
122
- aperture: request.lens.aperture,
123
- focusDistanceM: request.focus.focusDistanceM,
124
- circleOfConfusionMm
125
- });
126
276
  const diffraction = calculateAiryDisk({
127
277
  aperture: request.lens.aperture,
128
278
  wavelengthNm: request.diffraction.wavelengthNm
@@ -149,6 +299,70 @@ export function simulatePocCamera(request) {
149
299
  focusDistanceM: request.focus.focusDistanceM,
150
300
  pixelPitchMicrometers: pixelPitch.value.micrometers
151
301
  }).value;
302
+ const captureSubjectFraming = captureGeometry === undefined ||
303
+ capture === undefined ||
304
+ subjectCropRequest === undefined ||
305
+ subjectSampling === undefined
306
+ ? undefined
307
+ : (() => {
308
+ const orientedSubjectHeightPixels = isPortraitOrientation(capture.orientation)
309
+ ? (subjectSampling.widthPixels ?? 0)
310
+ : (subjectSampling.heightPixels ?? 0);
311
+ const outputSubjectHeightPixels = orientedSubjectHeightPixels *
312
+ captureGeometry.output.orientedCaptureToOutputScale.y;
313
+ const framing = calculateSubjectFramingCrop({
314
+ pixelWidth: captureGeometry.output.raster.pixelWidth,
315
+ pixelHeight: captureGeometry.output.raster.pixelHeight,
316
+ subjectHeightPixels: outputSubjectHeightPixels,
317
+ targetSubjectHeightFraction: subjectCropRequest.targetSubjectHeightFraction
318
+ }).value;
319
+ const retainedBounds = centeredPhysicalCropBounds(captureGeometry.output.physicalBoundsFromOpticalAxisMm, framing.pixelWidth / captureGeometry.output.raster.pixelWidth, framing.pixelHeight / captureGeometry.output.raster.pixelHeight);
320
+ const retainedImagingArea = {
321
+ widthMm: retainedBounds.right - retainedBounds.left,
322
+ heightMm: retainedBounds.bottom - retainedBounds.top
323
+ };
324
+ return {
325
+ additionalCropFactor: framing.cropFactor,
326
+ raster: {
327
+ pixelWidth: framing.pixelWidth,
328
+ pixelHeight: framing.pixelHeight
329
+ },
330
+ megapixels: framing.megapixels,
331
+ subjectHeightFraction: framing.subjectHeightFraction,
332
+ subjectClipped: framing.subjectClipped,
333
+ additionalCropApplied: framing.cropped,
334
+ retainedImagingArea,
335
+ physicalBoundsFromOpticalAxisMm: retainedBounds,
336
+ effectiveFieldOfView: calculateFieldOfViewForPhysicalBounds(retainedBounds, request.lens.focalLengthMm, request.focus.focusDistanceM),
337
+ basis: "centered-output-framing"
338
+ };
339
+ })();
340
+ const equivalentViewingTargetArea = captureGeometry === undefined
341
+ ? {
342
+ widthMm: request.sensor.widthMm,
343
+ heightMm: request.sensor.heightMm
344
+ }
345
+ : (captureSubjectFraming?.retainedImagingArea ??
346
+ captureGeometry.output.imagingArea);
347
+ const equivalentViewingCircleOfConfusion = request.focus.equivalentViewingCircleOfConfusion === undefined
348
+ ? undefined
349
+ : estimateEquivalentViewingCircleOfConfusion({
350
+ sensorWidthMm: equivalentViewingTargetArea.widthMm,
351
+ sensorHeightMm: equivalentViewingTargetArea.heightMm,
352
+ ...request.focus.equivalentViewingCircleOfConfusion
353
+ });
354
+ const circleOfConfusionMm = equivalentViewingCircleOfConfusion?.value.circleOfConfusionMm ??
355
+ request.focus.circleOfConfusionMm;
356
+ if (circleOfConfusionMm === undefined) {
357
+ throw new InvalidScientificInputError("A focus circle-of-confusion criterion is required.");
358
+ }
359
+ requirePositiveFinite("focus.circleOfConfusionMm", circleOfConfusionMm);
360
+ const depthOfField = calculateDepthOfField({
361
+ focalLengthMm: request.lens.focalLengthMm,
362
+ aperture: request.lens.aperture,
363
+ focusDistanceM: request.focus.focusDistanceM,
364
+ circleOfConfusionMm
365
+ });
152
366
  const samplingSamples = request.samplingSamples === undefined
153
367
  ? undefined
154
368
  : request.samplingSamples.map((sample) => {
@@ -191,13 +405,15 @@ export function simulatePocCamera(request) {
191
405
  (pixelPitch.value.micrometers / 1000)
192
406
  };
193
407
  });
194
- const subjectCrop = request.subjectCrop === undefined || subjectSampling === undefined
408
+ const subjectCrop = capture !== undefined ||
409
+ subjectCropRequest === undefined ||
410
+ subjectSampling === undefined
195
411
  ? undefined
196
412
  : calculateSubjectFramingCrop({
197
413
  pixelWidth: crop.value.pixelWidth,
198
414
  pixelHeight: crop.value.pixelHeight,
199
415
  subjectHeightPixels: subjectSampling.heightPixels ?? 0,
200
- targetSubjectHeightFraction: request.subjectCrop.targetSubjectHeightFraction
416
+ targetSubjectHeightFraction: subjectCropRequest.targetSubjectHeightFraction
201
417
  }).value;
202
418
  const totalSubjectCropFactor = subjectCrop === undefined
203
419
  ? undefined
@@ -281,8 +497,39 @@ export function simulatePocCamera(request) {
281
497
  (pixelPitch.value.micrometers / 1000)
282
498
  };
283
499
  });
500
+ const captureMotion = captureGeometry === undefined || capture === undefined
501
+ ? undefined
502
+ : resolveCaptureVector({
503
+ x: motion.value.deltaXMm / (pixelPitch.value.micrometers / 1000),
504
+ y: motion.value.deltaYMm / (pixelPitch.value.micrometers / 1000)
505
+ }, capture.orientation, captureGeometry);
506
+ const captureMotionSamples = captureGeometry === undefined ||
507
+ capture === undefined ||
508
+ motionSamples === undefined
509
+ ? undefined
510
+ : motionSamples.map((sample) => ({
511
+ id: sample.id,
512
+ ...resolveCaptureVector({
513
+ x: sample.deltaXPixels,
514
+ y: sample.deltaYPixels
515
+ }, capture.orientation, captureGeometry)
516
+ }));
517
+ const captureCameraShake = captureGeometry === undefined ||
518
+ capture === undefined ||
519
+ cameraShake === undefined
520
+ ? undefined
521
+ : {
522
+ unstabilized: resolveCaptureVector({
523
+ x: cameraShake.value.unstabilized.deltaXPixels ?? 0,
524
+ y: cameraShake.value.unstabilized.deltaYPixels ?? 0
525
+ }, capture.orientation, captureGeometry),
526
+ stabilized: resolveCaptureVector({
527
+ x: cameraShake.value.stabilized.deltaXPixels ?? 0,
528
+ y: cameraShake.value.stabilized.deltaYPixels ?? 0
529
+ }, capture.orientation, captureGeometry)
530
+ };
284
531
  return {
285
- apiVersion: "0.17.0",
532
+ apiVersion: POC_SIMULATION_API_VERSION,
286
533
  projection: {
287
534
  kind: "focus-aware-thin-lens",
288
535
  focusDistanceM: request.focus.focusDistanceM,
@@ -296,8 +543,39 @@ export function simulatePocCamera(request) {
296
543
  diagonalDegrees: diagonalFov.value.degrees
297
544
  },
298
545
  sensor: {
299
- pixelPitchMicrometers: pixelPitch.value.micrometers
546
+ geometry: sensorGeometry,
547
+ pixelPitchMicrometers: pixelPitch.value.micrometers,
548
+ pitchXMicrometers,
549
+ pitchYMicrometers,
550
+ pitchAxisRelativeDifference
300
551
  },
552
+ ...(captureGeometry === undefined ||
553
+ activeCaptureFieldOfView === undefined ||
554
+ outputFieldOfView === undefined ||
555
+ equivalentFocalLength === undefined ||
556
+ captureMotion === undefined
557
+ ? {}
558
+ : {
559
+ capture: {
560
+ geometry: captureGeometry,
561
+ activeFieldOfView: activeCaptureFieldOfView,
562
+ outputFieldOfView,
563
+ focalLength: equivalentFocalLength,
564
+ outputSamplingScale: {
565
+ ...captureGeometry.output.orientedCaptureToOutputScale
566
+ },
567
+ ...(captureSubjectFraming === undefined
568
+ ? {}
569
+ : { subjectFraming: captureSubjectFraming }),
570
+ motion: captureMotion,
571
+ ...(captureMotionSamples === undefined
572
+ ? {}
573
+ : { motionSamples: captureMotionSamples }),
574
+ ...(captureCameraShake === undefined
575
+ ? {}
576
+ : { cameraShake: captureCameraShake })
577
+ }
578
+ }),
301
579
  crop: {
302
580
  cropFactor: request.crop.factor,
303
581
  ...crop.value,
@@ -312,6 +590,12 @@ export function simulatePocCamera(request) {
312
590
  source: "equivalent-viewing-approximation",
313
591
  circleOfConfusionMm,
314
592
  scaleFactor: equivalentViewingCircleOfConfusion.value.scaleFactor,
593
+ targetBasis: captureGeometry === undefined
594
+ ? "full-sensor"
595
+ : "final-retained-output",
596
+ targetImagingArea: {
597
+ ...equivalentViewingTargetArea
598
+ },
315
599
  provenance: {
316
600
  kind: "approximation",
317
601
  model: equivalentViewingCircleOfConfusion.provenance.model,
@@ -1 +1 @@
1
- {"version":3,"file":"poc-simulation.js","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poc-simulation.js","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}
package/docs/API_STYLE.md CHANGED
@@ -16,6 +16,9 @@ The open engine should feel like one coherent library.
16
16
  - Public calculation functions and meaningful public contracts require concise JSDoc covering purpose, units, assumptions, and return meaning.
17
17
  - Do not expose renderer, framework, or UI-specific types through calculation APIs.
18
18
  - Public configuration interfaces that are expected to cross JSON/untrusted boundaries should have corresponding runtime parsers; TypeScript types alone are not a validation boundary.
19
+ - Runtime parsers must reject unknown enum/string values rather than falling through to a default interpretation.
20
+ - Prefer semantic role types over reusing a narrower type in the wrong stage. For example, use `RasterDimensions` for generic active/output rasters and reserve `NativeImageRaster` for the native sampling grid.
21
+ - When a physical quantity is axis-dependent, preserve the axes explicitly instead of collapsing to a scalar unless the model documents and validates that simplification.
19
22
  - Preserve backward compatibility after 1.0 unless a documented major version changes the contract.
20
23
 
21
24
  ## Preferred shape
@@ -37,6 +40,30 @@ calculateDepthOfField({
37
40
 
38
41
  Avoid one-off positional signatures and inconsistent abbreviations.
39
42
 
43
+ ## Coordinate and staged-geometry contracts
44
+
45
+ Coordinate systems and image-formation stages are part of the API contract, not implementation details.
46
+
47
+ - Native raster coordinates use a top-left origin with +X right and +Y down.
48
+ - Raster rectangles use integer half-open extents.
49
+ - Physical camera rotation does not redefine native sensor coordinates; transform points, vectors, and rectangles explicitly.
50
+ - Physical active capture and later digital/output crop are distinct concepts and should have distinct fields/types.
51
+ - Off-center physical capture must preserve position relative to the optical axis rather than being silently recentered.
52
+ - Crossing between an oriented physical raster region (+Y down) and the pre-orientation optical image plane (+Y up) must use the exported coordinate bridge rather than ad-hoc axis swaps or sign changes.
53
+ - Output resizing/cropping must not imply geometric stretching without an explicit transform or pixel-aspect contract.
54
+ - Conventional 35 mm-equivalent focal length is derived from active physical capture geometry; it must not replace physical focal length or silently include later digital crop.
55
+
56
+ ## Image-formation ownership contracts
57
+
58
+ Cross-cutting optical/sensor effects must use the public image-formation contract rather than defining one-off stage ordering in a renderer or downstream app.
59
+
60
+ - Treat `requiredUpstreamStages` as hard scientific dependencies.
61
+ - Treat `coupledStages` as shared scientific state, not an instruction to serialize independent filters.
62
+ - Coordinate spaces are part of the public semantic contract.
63
+ - Time-dependent models use seconds from exposure start as the authoritative temporal coordinate.
64
+ - A reserved stage does not imply an implemented capability.
65
+ - Preview and reference implementations may differ in bounded fidelity but must consume the same engine-owned parameters and semantics.
66
+
40
67
  ## Result metadata
41
68
 
42
69
  Primitive public scientific calculation functions return `CalculationResult<T>`, which carries model provenance and optional quality metadata.
@@ -60,6 +87,13 @@ Do **not** automatically sum, average, add in quadrature, or otherwise collapse
60
87
 
61
88
  ## Versioning
62
89
 
63
- `ENGINE_API_VERSION` describes the composed engine API contract and is independent of the npm/package version.
90
+ Photivra has multiple independent version surfaces:
91
+
92
+ - npm/package version: distribution/release version;
93
+ - `ENGINE_API_VERSION`: root browser-safe engine/public-contract version;
94
+ - `POC_SIMULATION_API_VERSION`: composed `simulatePocCamera()` request/response contract;
95
+ - schema-specific versions such as sensor-architecture or radiometry-readiness schemas.
96
+
97
+ Do not reuse one version as a proxy for another. A change to a parser/schema does not necessarily require changing the POC contract, and a POC response change does not necessarily mean the npm package has been released.
64
98
 
65
- Before 1.0, public APIs may evolve with documented changes. After 1.0, breaking public-contract changes require an appropriate major-version transition.
99
+ Before 1.0, public APIs may evolve with documented changes. Breaking or semantically meaningful contract changes must update the relevant version surface, tests, changelog, and migration/compatibility documentation. After 1.0, breaking public-contract changes require an appropriate major-version transition.