@photivra/engine 0.1.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 (97) hide show
  1. package/CITATION.cff +23 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +9 -0
  4. package/README.md +235 -0
  5. package/dist/camera/field-of-view.d.ts +37 -0
  6. package/dist/camera/field-of-view.d.ts.map +1 -0
  7. package/dist/camera/field-of-view.js +47 -0
  8. package/dist/camera/field-of-view.js.map +1 -0
  9. package/dist/camera/projected-object-size.d.ts +34 -0
  10. package/dist/camera/projected-object-size.d.ts.map +1 -0
  11. package/dist/camera/projected-object-size.js +57 -0
  12. package/dist/camera/projected-object-size.js.map +1 -0
  13. package/dist/core/calculation-result.d.ts +125 -0
  14. package/dist/core/calculation-result.d.ts.map +1 -0
  15. package/dist/core/calculation-result.js +175 -0
  16. package/dist/core/calculation-result.js.map +1 -0
  17. package/dist/core/validation.d.ts +30 -0
  18. package/dist/core/validation.d.ts.map +1 -0
  19. package/dist/core/validation.js +45 -0
  20. package/dist/core/validation.js.map +1 -0
  21. package/dist/exposure/exposure.d.ts +50 -0
  22. package/dist/exposure/exposure.d.ts.map +1 -0
  23. package/dist/exposure/exposure.js +62 -0
  24. package/dist/exposure/exposure.js.map +1 -0
  25. package/dist/index.d.ts +28 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +27 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/motion/projected-motion.d.ts +41 -0
  30. package/dist/motion/projected-motion.d.ts.map +1 -0
  31. package/dist/motion/projected-motion.js +84 -0
  32. package/dist/motion/projected-motion.js.map +1 -0
  33. package/dist/optics/aperture.d.ts +39 -0
  34. package/dist/optics/aperture.d.ts.map +1 -0
  35. package/dist/optics/aperture.js +62 -0
  36. package/dist/optics/aperture.js.map +1 -0
  37. package/dist/optics/circle-of-confusion.d.ts +23 -0
  38. package/dist/optics/circle-of-confusion.d.ts.map +1 -0
  39. package/dist/optics/circle-of-confusion.js +32 -0
  40. package/dist/optics/circle-of-confusion.js.map +1 -0
  41. package/dist/optics/depth-of-field.d.ts +53 -0
  42. package/dist/optics/depth-of-field.d.ts.map +1 -0
  43. package/dist/optics/depth-of-field.js +81 -0
  44. package/dist/optics/depth-of-field.js.map +1 -0
  45. package/dist/optics/diffraction.d.ts +26 -0
  46. package/dist/optics/diffraction.d.ts.map +1 -0
  47. package/dist/optics/diffraction.js +21 -0
  48. package/dist/optics/diffraction.js.map +1 -0
  49. package/dist/optics/thin-lens.d.ts +30 -0
  50. package/dist/optics/thin-lens.d.ts.map +1 -0
  51. package/dist/optics/thin-lens.js +33 -0
  52. package/dist/optics/thin-lens.js.map +1 -0
  53. package/dist/output/crop.d.ts +27 -0
  54. package/dist/output/crop.d.ts.map +1 -0
  55. package/dist/output/crop.js +26 -0
  56. package/dist/output/crop.js.map +1 -0
  57. package/dist/output/subject-framing-crop.d.ts +36 -0
  58. package/dist/output/subject-framing-crop.d.ts.map +1 -0
  59. package/dist/output/subject-framing-crop.js +42 -0
  60. package/dist/output/subject-framing-crop.js.map +1 -0
  61. package/dist/schema/camera.d.ts +34 -0
  62. package/dist/schema/camera.d.ts.map +1 -0
  63. package/dist/schema/camera.js +3 -0
  64. package/dist/schema/camera.js.map +1 -0
  65. package/dist/schema/scene.d.ts +69 -0
  66. package/dist/schema/scene.d.ts.map +1 -0
  67. package/dist/schema/scene.js +3 -0
  68. package/dist/schema/scene.js.map +1 -0
  69. package/dist/schema/validation.d.ts +25 -0
  70. package/dist/schema/validation.d.ts.map +1 -0
  71. package/dist/schema/validation.js +180 -0
  72. package/dist/schema/validation.js.map +1 -0
  73. package/dist/sensor/pixel-pitch.d.ts +21 -0
  74. package/dist/sensor/pixel-pitch.d.ts.map +1 -0
  75. package/dist/sensor/pixel-pitch.js +19 -0
  76. package/dist/sensor/pixel-pitch.js.map +1 -0
  77. package/dist/sensor/signal-noise.d.ts +37 -0
  78. package/dist/sensor/signal-noise.d.ts.map +1 -0
  79. package/dist/sensor/signal-noise.js +53 -0
  80. package/dist/sensor/signal-noise.js.map +1 -0
  81. package/dist/simulation/poc-simulation.d.ts +264 -0
  82. package/dist/simulation/poc-simulation.d.ts.map +1 -0
  83. package/dist/simulation/poc-simulation.js +449 -0
  84. package/dist/simulation/poc-simulation.js.map +1 -0
  85. package/dist/stabilization/camera-shake.d.ts +41 -0
  86. package/dist/stabilization/camera-shake.d.ts.map +1 -0
  87. package/dist/stabilization/camera-shake.js +79 -0
  88. package/dist/stabilization/camera-shake.js.map +1 -0
  89. package/docs/API_STYLE.md +65 -0
  90. package/docs/ARCHITECTURE.md +51 -0
  91. package/docs/MOTION_AND_SIGNAL.md +53 -0
  92. package/docs/PHYSICS_FOUNDATION.md +92 -0
  93. package/docs/POC_API.md +210 -0
  94. package/docs/PROVENANCE.md +87 -0
  95. package/docs/STABILIZATION.md +78 -0
  96. package/docs/USAGE.md +538 -0
  97. package/package.json +91 -0
@@ -0,0 +1,264 @@
1
+ import type { CalculationProvenance } from "../core/calculation-result.js";
2
+ import type { Vector3 } from "../schema/scene.js";
3
+ export interface PocSimulationRequest {
4
+ sensor: {
5
+ widthMm: number;
6
+ heightMm: number;
7
+ pixelWidth: number;
8
+ pixelHeight: number;
9
+ };
10
+ lens: {
11
+ focalLengthMm: number;
12
+ aperture: number;
13
+ };
14
+ exposure: {
15
+ shutterSeconds: number;
16
+ iso: number;
17
+ };
18
+ focus: {
19
+ focusDistanceM: number;
20
+ circleOfConfusionMm?: number;
21
+ equivalentViewingCircleOfConfusion?: {
22
+ referenceSensorWidthMm: number;
23
+ referenceSensorHeightMm: number;
24
+ referenceCircleOfConfusionMm: number;
25
+ };
26
+ };
27
+ crop: {
28
+ factor: number;
29
+ };
30
+ diffraction: {
31
+ wavelengthNm: number;
32
+ };
33
+ motion: {
34
+ positionM: Vector3;
35
+ velocityMps: Vector3;
36
+ };
37
+ subject?: {
38
+ widthM: number;
39
+ heightM: number;
40
+ distanceM: number;
41
+ };
42
+ defocusSamples?: readonly {
43
+ id: string;
44
+ distanceM: number;
45
+ }[];
46
+ samplingSamples?: readonly {
47
+ id: string;
48
+ widthM: number;
49
+ heightM: number;
50
+ distanceM: number;
51
+ }[];
52
+ motionSamples?: readonly {
53
+ id: string;
54
+ positionM: Vector3;
55
+ velocityMps: Vector3;
56
+ }[];
57
+ subjectCrop?: {
58
+ targetSubjectHeightFraction: number;
59
+ };
60
+ cameraShake?: {
61
+ angularVelocityRadPerSec: {
62
+ yaw: number;
63
+ pitch: number;
64
+ };
65
+ stabilizationStopsEquivalent: number;
66
+ };
67
+ apertureShape?: {
68
+ bladeCount: number;
69
+ firstBladeEdgeAngleDegrees?: number;
70
+ };
71
+ diagnostics?: {
72
+ subjectMotionSampleId?: string;
73
+ };
74
+ }
75
+ interface FieldOfViewSummary {
76
+ horizontalDegrees: number;
77
+ verticalDegrees: number;
78
+ diagonalDegrees: number;
79
+ }
80
+ export interface PocSimulationResponse {
81
+ apiVersion: "0.17.0";
82
+ projection: {
83
+ kind: "focus-aware-thin-lens";
84
+ focusDistanceM: number;
85
+ imageDistanceMm: number;
86
+ infinityProjectionScale: number;
87
+ provenance: CalculationProvenance;
88
+ };
89
+ /**
90
+ * Full-sensor optical field of view before any digital crop.
91
+ */
92
+ fieldOfView: {
93
+ horizontalDegrees: number;
94
+ verticalDegrees: number;
95
+ diagonalDegrees: number;
96
+ };
97
+ sensor: {
98
+ pixelPitchMicrometers: number;
99
+ };
100
+ crop: {
101
+ cropFactor: number;
102
+ pixelWidth: number;
103
+ pixelHeight: number;
104
+ megapixels: number;
105
+ retainedAreaFraction: number;
106
+ effectiveFieldOfView: FieldOfViewSummary;
107
+ };
108
+ focusCriterion: {
109
+ source: "explicit";
110
+ circleOfConfusionMm: number;
111
+ } | {
112
+ source: "equivalent-viewing-approximation";
113
+ circleOfConfusionMm: number;
114
+ scaleFactor: number;
115
+ provenance: {
116
+ kind: "approximation";
117
+ model: string;
118
+ modelVersion: string;
119
+ assumptions?: readonly string[];
120
+ };
121
+ };
122
+ depthOfField: {
123
+ hyperfocalDistanceM: number;
124
+ nearLimitM: number;
125
+ farLimitM: number | null;
126
+ totalDepthOfFieldM: number | null;
127
+ };
128
+ diffraction: {
129
+ firstZeroDiameterMicrometers: number;
130
+ airyDiameterPixels: number;
131
+ pupilModel: "ideal-circular";
132
+ provenance: CalculationProvenance;
133
+ };
134
+ motion: {
135
+ distanceMm: number;
136
+ distancePixels: number;
137
+ deltaXMm: number;
138
+ deltaYMm: number;
139
+ deltaXPixels: number;
140
+ deltaYPixels: number;
141
+ };
142
+ exposure: {
143
+ ev100: number;
144
+ iso: number;
145
+ };
146
+ subjectSampling?: {
147
+ widthMm: number;
148
+ heightMm: number;
149
+ widthPixels: number;
150
+ heightPixels: number;
151
+ };
152
+ defocusSamples?: readonly {
153
+ id: string;
154
+ distanceM: number;
155
+ diameterMm: number;
156
+ diameterPixels: number;
157
+ }[];
158
+ samplingSamples?: readonly {
159
+ id: string;
160
+ widthMm: number;
161
+ heightMm: number;
162
+ widthPixels: number;
163
+ heightPixels: number;
164
+ }[];
165
+ motionSamples?: readonly {
166
+ id: string;
167
+ distanceMm: number;
168
+ distancePixels: number;
169
+ deltaXMm: number;
170
+ deltaYMm: number;
171
+ deltaXPixels: number;
172
+ deltaYPixels: number;
173
+ }[];
174
+ subjectCrop?: {
175
+ /** Additional crop relative to the already-applied request crop. */
176
+ additionalCropFactor: number;
177
+ /** Total linear crop relative to the full sensor. */
178
+ totalCropFactor: number;
179
+ pixelWidth: number;
180
+ pixelHeight: number;
181
+ megapixels: number;
182
+ subjectHeightFraction: number;
183
+ subjectClipped: boolean;
184
+ additionalCropApplied: boolean;
185
+ effectiveFieldOfView: FieldOfViewSummary;
186
+ };
187
+ apertureShape?: {
188
+ bladeCount: number;
189
+ sunstarRayCount: number;
190
+ sunstarRayAnglesDegrees: readonly number[];
191
+ normalizedVertices: readonly {
192
+ x: number;
193
+ y: number;
194
+ }[];
195
+ provenance: CalculationProvenance;
196
+ };
197
+ primarySubjectDiagnostics?: {
198
+ subjectDistanceM: number;
199
+ samplingHeightPixels: number;
200
+ defocusDiameterPixels: number;
201
+ diffractionFirstZeroDiameterPixels: number;
202
+ diffractionModel: string;
203
+ subjectMotion?: {
204
+ id: string;
205
+ distancePixels: number;
206
+ };
207
+ cameraShake?: {
208
+ stabilizedDistancePixels: number;
209
+ provenanceKind: "approximation";
210
+ };
211
+ comparisonCaution: string;
212
+ };
213
+ cameraShake?: {
214
+ residualMotionFactor: number;
215
+ unstabilized: {
216
+ deltaXmm: number;
217
+ deltaYmm: number;
218
+ distanceMm: number;
219
+ distancePixels: number;
220
+ deltaXPixels: number;
221
+ deltaYPixels: number;
222
+ };
223
+ stabilized: {
224
+ deltaXmm: number;
225
+ deltaYmm: number;
226
+ distanceMm: number;
227
+ distancePixels: number;
228
+ deltaXPixels: number;
229
+ deltaYPixels: number;
230
+ };
231
+ provenance: {
232
+ kind: "approximation";
233
+ model: string;
234
+ modelVersion: string;
235
+ assumptions?: readonly string[];
236
+ };
237
+ };
238
+ provenance: {
239
+ kind: "calculated" | "mixed";
240
+ components: {
241
+ projection: "calculated";
242
+ fieldOfView: "calculated";
243
+ crop: "calculated";
244
+ focusCriterion: "calculated" | "approximation";
245
+ depthOfField: "calculated";
246
+ diffraction: "calculated";
247
+ motion: "calculated";
248
+ exposure: "calculated";
249
+ apertureShape?: "calculated";
250
+ cameraShake?: "approximation";
251
+ };
252
+ note: string;
253
+ };
254
+ }
255
+ /**
256
+ * Composes the validated POC calculations into a single renderer/agent-facing
257
+ * response without introducing any new photographic model.
258
+ *
259
+ * @param request Complete POC simulation request with explicit physical units.
260
+ * @returns Serializable POC metrics for one camera/scene configuration.
261
+ */
262
+ export declare function simulatePocCamera(request: PocSimulationRequest): PocSimulationResponse;
263
+ export {};
264
+ //# sourceMappingURL=poc-simulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poc-simulation.d.ts","sourceRoot":"","sources":["../../src/simulation/poc-simulation.ts"],"names":[],"mappings":"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"}