@camstack/types 1.2.257 → 1.2.259

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.
@@ -103,6 +103,7 @@ export declare const CustomModelDescriptorSchema: z.ZodObject<{
103
103
  }>>;
104
104
  inputNormalization: z.ZodOptional<z.ZodEnum<{
105
105
  none: "none";
106
+ scrfd: "scrfd";
106
107
  "zero-one": "zero-one";
107
108
  imagenet: "imagenet";
108
109
  }>>;
@@ -256,6 +257,7 @@ export declare const customModelRegistryCapability: {
256
257
  }>>;
257
258
  inputNormalization: z.ZodOptional<z.ZodEnum<{
258
259
  none: "none";
260
+ scrfd: "scrfd";
259
261
  "zero-one": "zero-one";
260
262
  imagenet: "imagenet";
261
263
  }>>;
@@ -22,6 +22,7 @@ export declare const ModelConvertInputSchema: z.ZodObject<{
22
22
  }>>;
23
23
  inputNormalization: z.ZodOptional<z.ZodEnum<{
24
24
  none: "none";
25
+ scrfd: "scrfd";
25
26
  "zero-one": "zero-one";
26
27
  imagenet: "imagenet";
27
28
  }>>;
@@ -89,6 +90,7 @@ export declare const modelConvertCapability: {
89
90
  }>>;
90
91
  inputNormalization: z.ZodOptional<z.ZodEnum<{
91
92
  none: "none";
93
+ scrfd: "scrfd";
92
94
  "zero-one": "zero-one";
93
95
  imagenet: "imagenet";
94
96
  }>>;
@@ -211,6 +213,7 @@ export declare const modelConvertCapability: {
211
213
  }>>;
212
214
  inputNormalization: z.ZodOptional<z.ZodEnum<{
213
215
  none: "none";
216
+ scrfd: "scrfd";
214
217
  "zero-one": "zero-one";
215
218
  imagenet: "imagenet";
216
219
  }>>;
@@ -105,6 +105,7 @@ export declare const ModelDistributeInputSchema: z.ZodObject<{
105
105
  }>>;
106
106
  inputNormalization: z.ZodOptional<z.ZodEnum<{
107
107
  none: "none";
108
+ scrfd: "scrfd";
108
109
  "zero-one": "zero-one";
109
110
  imagenet: "imagenet";
110
111
  }>>;
@@ -263,6 +264,7 @@ export declare const modelDistributorCapability: {
263
264
  }>>;
264
265
  inputNormalization: z.ZodOptional<z.ZodEnum<{
265
266
  none: "none";
267
+ scrfd: "scrfd";
266
268
  "zero-one": "zero-one";
267
269
  imagenet: "imagenet";
268
270
  }>>;
@@ -124,6 +124,10 @@ declare const DetailResultSchema: z.ZodObject<{
124
124
  labelModelId: z.ZodOptional<z.ZodString>;
125
125
  alignedCropJpeg: z.ZodOptional<z.ZodString>;
126
126
  nativeFaceShortSidePx: z.ZodOptional<z.ZodNumber>;
127
+ landmarks: z.ZodOptional<z.ZodArray<z.ZodObject<{
128
+ x: z.ZodNumber;
129
+ y: z.ZodNumber;
130
+ }, z.core.$strip>>>;
127
131
  }, z.core.$strip>;
128
132
  export type DetailParent = z.infer<typeof DetailParentSchema>;
129
133
  export type DetailResult = z.infer<typeof DetailResultSchema>;
@@ -1011,6 +1015,10 @@ export declare const pipelineRunnerCapability: {
1011
1015
  labelModelId: z.ZodOptional<z.ZodString>;
1012
1016
  alignedCropJpeg: z.ZodOptional<z.ZodString>;
1013
1017
  nativeFaceShortSidePx: z.ZodOptional<z.ZodNumber>;
1018
+ landmarks: z.ZodOptional<z.ZodArray<z.ZodObject<{
1019
+ x: z.ZodNumber;
1020
+ y: z.ZodNumber;
1021
+ }, z.core.$strip>>>;
1014
1022
  }, z.core.$strip>>;
1015
1023
  }, z.core.$strip>>, "mutation">;
1016
1024
  /**
@@ -1091,6 +1099,10 @@ export declare const pipelineRunnerCapability: {
1091
1099
  labelModelId: z.ZodOptional<z.ZodString>;
1092
1100
  alignedCropJpeg: z.ZodOptional<z.ZodString>;
1093
1101
  nativeFaceShortSidePx: z.ZodOptional<z.ZodNumber>;
1102
+ landmarks: z.ZodOptional<z.ZodArray<z.ZodObject<{
1103
+ x: z.ZodNumber;
1104
+ y: z.ZodNumber;
1105
+ }, z.core.$strip>>>;
1094
1106
  }, z.core.$strip>>;
1095
1107
  }, z.core.$strip>, z.ZodObject<{
1096
1108
  kind: z.ZodLiteral<"refused">;
package/dist/index.js CHANGED
@@ -5147,10 +5147,17 @@ var ModelCatalogEntrySchema = zod.z.object({
5147
5147
  inputChannels: zod.z.number().int().positive().optional(),
5148
5148
  labels: zod.z.array(LabelDefinitionSchema).readonly(),
5149
5149
  inputLayout: zod.z.enum(["nchw", "nhwc"]).optional(),
5150
+ /**
5151
+ * `'scrfd'` applies InsightFace's SCRFD input contract, `(x - 127.5) / 128`
5152
+ * (upstream `insightface/model_zoo/scrfd.py`), instead of the historical
5153
+ * plain `/255`. Measured against COCO GT: 188 → 196 faces found on the
5154
+ * `scrfd-2.5g` catalog entry (2026-09-26 model-replacement spike, §2.4-2).
5155
+ */
5150
5156
  inputNormalization: zod.z.enum([
5151
5157
  "zero-one",
5152
5158
  "imagenet",
5153
- "none"
5159
+ "none",
5160
+ "scrfd"
5154
5161
  ]).optional(),
5155
5162
  /**
5156
5163
  * The model already applies softmax IN-GRAPH — its raw output is a
@@ -5252,7 +5259,8 @@ var ModelConvertMetadataSchema = zod.z.object({
5252
5259
  inputNormalization: zod.z.enum([
5253
5260
  "zero-one",
5254
5261
  "imagenet",
5255
- "none"
5262
+ "none",
5263
+ "scrfd"
5256
5264
  ]).optional(),
5257
5265
  preprocessMode: zod.z.enum(["letterbox", "resize"]).optional(),
5258
5266
  outputFormat: zod.z.enum([
@@ -23862,7 +23870,17 @@ var DetailResultSchema = zod.z.object({
23862
23870
  /** Face short side (px) measured on the NATIVE crop surface. The `bbox`
23863
23871
  * above is detection-frame px (≈6× smaller on a 4K camera) — min-face-size
23864
23872
  * consumers MUST prefer this when present (2026-07-22 native-gate fix). */
23865
- nativeFaceShortSidePx: zod.z.number().optional()
23873
+ nativeFaceShortSidePx: zod.z.number().optional(),
23874
+ /**
23875
+ * The five facial landmarks of a `face` detail, in the SAME frame space as
23876
+ * `bbox` (D644). Additive and optional: post-analysis stores them beside the
23877
+ * face's source frame so a future alignment can be re-derived exactly; a
23878
+ * runner that predates the field sends none and the face is stored without.
23879
+ */
23880
+ landmarks: zod.z.array(zod.z.object({
23881
+ x: zod.z.number(),
23882
+ y: zod.z.number()
23883
+ })).optional()
23866
23884
  });
23867
23885
  /**
23868
23886
  * Why an executing node REFUSED a stateless step run (`runStatelessStep`).
package/dist/index.mjs CHANGED
@@ -5146,10 +5146,17 @@ var ModelCatalogEntrySchema = z.object({
5146
5146
  inputChannels: z.number().int().positive().optional(),
5147
5147
  labels: z.array(LabelDefinitionSchema).readonly(),
5148
5148
  inputLayout: z.enum(["nchw", "nhwc"]).optional(),
5149
+ /**
5150
+ * `'scrfd'` applies InsightFace's SCRFD input contract, `(x - 127.5) / 128`
5151
+ * (upstream `insightface/model_zoo/scrfd.py`), instead of the historical
5152
+ * plain `/255`. Measured against COCO GT: 188 → 196 faces found on the
5153
+ * `scrfd-2.5g` catalog entry (2026-09-26 model-replacement spike, §2.4-2).
5154
+ */
5149
5155
  inputNormalization: z.enum([
5150
5156
  "zero-one",
5151
5157
  "imagenet",
5152
- "none"
5158
+ "none",
5159
+ "scrfd"
5153
5160
  ]).optional(),
5154
5161
  /**
5155
5162
  * The model already applies softmax IN-GRAPH — its raw output is a
@@ -5251,7 +5258,8 @@ var ModelConvertMetadataSchema = z.object({
5251
5258
  inputNormalization: z.enum([
5252
5259
  "zero-one",
5253
5260
  "imagenet",
5254
- "none"
5261
+ "none",
5262
+ "scrfd"
5255
5263
  ]).optional(),
5256
5264
  preprocessMode: z.enum(["letterbox", "resize"]).optional(),
5257
5265
  outputFormat: z.enum([
@@ -23861,7 +23869,17 @@ var DetailResultSchema = z.object({
23861
23869
  /** Face short side (px) measured on the NATIVE crop surface. The `bbox`
23862
23870
  * above is detection-frame px (≈6× smaller on a 4K camera) — min-face-size
23863
23871
  * consumers MUST prefer this when present (2026-07-22 native-gate fix). */
23864
- nativeFaceShortSidePx: z.number().optional()
23872
+ nativeFaceShortSidePx: z.number().optional(),
23873
+ /**
23874
+ * The five facial landmarks of a `face` detail, in the SAME frame space as
23875
+ * `bbox` (D644). Additive and optional: post-analysis stores them beside the
23876
+ * face's source frame so a future alignment can be re-derived exactly; a
23877
+ * runner that predates the field sends none and the face is stored without.
23878
+ */
23879
+ landmarks: z.array(z.object({
23880
+ x: z.number(),
23881
+ y: z.number()
23882
+ })).optional()
23865
23883
  });
23866
23884
  /**
23867
23885
  * Why an executing node REFUSED a stateless step run (`runStatelessStep`).
@@ -412,6 +412,15 @@ export interface ObjectDetection extends DetectionBase {
412
412
  * Present iff the face path cut its aligned crop from a native surface.
413
413
  */
414
414
  readonly nativeFaceShortSidePx?: number;
415
+ /**
416
+ * The five facial landmarks the face detector regressed for THIS `face`
417
+ * detail, in the same absolute pixel space as `bbox` (D644). Only a face
418
+ * detail carries them; never inherited onto the parent.
419
+ */
420
+ readonly landmarks?: readonly {
421
+ readonly x: number;
422
+ readonly y: number;
423
+ }[];
415
424
  }
416
425
  /** Audio detection — flat, time-localised within the window. */
417
426
  export interface AudioDetection extends DetectionBase {
@@ -237,6 +237,7 @@ export declare const ModelCatalogEntrySchema: z.ZodObject<{
237
237
  }>>;
238
238
  inputNormalization: z.ZodOptional<z.ZodEnum<{
239
239
  none: "none";
240
+ scrfd: "scrfd";
240
241
  "zero-one": "zero-one";
241
242
  imagenet: "imagenet";
242
243
  }>>;
@@ -319,7 +320,7 @@ export interface CustomModelMetadata {
319
320
  readonly labels: readonly LabelDefinition[];
320
321
  readonly classMap?: ClassMapDefinition;
321
322
  readonly inputLayout?: 'nchw' | 'nhwc';
322
- readonly inputNormalization?: 'zero-one' | 'imagenet' | 'none';
323
+ readonly inputNormalization?: 'zero-one' | 'imagenet' | 'none' | 'scrfd';
323
324
  readonly outputFormat: ModelOutputFormat;
324
325
  }
325
326
  export declare const ConvertTargetSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -352,6 +353,7 @@ export declare const ModelConvertMetadataSchema: z.ZodObject<{
352
353
  }>>;
353
354
  inputNormalization: z.ZodOptional<z.ZodEnum<{
354
355
  none: "none";
356
+ scrfd: "scrfd";
355
357
  "zero-one": "zero-one";
356
358
  imagenet: "imagenet";
357
359
  }>>;
@@ -482,6 +484,7 @@ export declare const ConvertResultSchema: z.ZodObject<{
482
484
  }>>;
483
485
  inputNormalization: z.ZodOptional<z.ZodEnum<{
484
486
  none: "none";
487
+ scrfd: "scrfd";
485
488
  "zero-one": "zero-one";
486
489
  imagenet: "imagenet";
487
490
  }>>;
@@ -232,9 +232,12 @@ export interface PoolModelConfig {
232
232
  * its own scale). `'imagenet'` ⇒ additionally subtract the ImageNet
233
233
  * mean/std per channel — required by the EfficientNet/MobileNetV3 animal +
234
234
  * vehicle classifiers (their `labels.json` declares `normalize: imagenet`).
235
+ * `'scrfd'` ⇒ InsightFace's SCRFD input contract, `(x - 127.5) / 128`
236
+ * (upstream `insightface/model_zoo/scrfd.py`) — required by the
237
+ * `scrfd-2.5g` catalog entry (2026-09-26 model-replacement spike, §2.4-2).
235
238
  * Threaded from `ModelCatalogEntry.inputNormalization`.
236
239
  */
237
- readonly inputNormalization?: 'zero-one' | 'imagenet' | 'none';
240
+ readonly inputNormalization?: 'zero-one' | 'imagenet' | 'none' | 'scrfd';
238
241
  /**
239
242
  * The model's output is ALREADY a softmax probability distribution (softmax
240
243
  * baked into the graph). When true the `softmax` postprocessor skips its own
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.257",
3
+ "version": "1.2.259",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",