@camstack/addon-pipeline 1.2.297 → 1.2.299

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 (33) hide show
  1. package/THIRD_PARTY_MODELS.md +126 -123
  2. package/dist/audio-analyzer/index.js +571 -305
  3. package/dist/audio-analyzer/index.mjs +571 -305
  4. package/dist/{default-detection-model-D6DypCkI.mjs → default-detection-model-DMcHBVmE.mjs} +391 -170
  5. package/dist/{default-detection-model-B2n_SFXt.js → default-detection-model-H_NzHI_P.js} +391 -170
  6. package/dist/detection-pipeline/index.js +4 -4
  7. package/dist/detection-pipeline/index.mjs +4 -4
  8. package/dist/{dist-DUqr1zyq.js → dist-BzDPLvQ6.js} +73 -4
  9. package/dist/{dist-CxHIpsQs.mjs → dist-DNlqf8dr.mjs} +73 -4
  10. package/dist/motion-wasm/index.js +1 -1
  11. package/dist/motion-wasm/index.mjs +1 -1
  12. package/dist/{node-Dx6DLQ1j.js → node-B-cB_Hdy.js} +1 -1
  13. package/dist/{node-DyeWu78a.mjs → node-g2ZRFDvc.mjs} +1 -1
  14. package/dist/pipeline-runner/index.js +3 -3
  15. package/dist/pipeline-runner/index.mjs +3 -3
  16. package/dist/{process-memory-CMJ3NY-s.js → process-memory-Bo3-laZ_.js} +1 -1
  17. package/dist/{process-memory-BVR4592X.mjs → process-memory-kKYoJ9hl.mjs} +1 -1
  18. package/dist/recorder/index.js +3 -3
  19. package/dist/recorder/index.mjs +3 -3
  20. package/dist/{segment-demux-js-CmGIF_uK.js → segment-demux-js-DrDj8kP6.js} +1 -1
  21. package/dist/{segment-demux-js-Dzga-XgE.mjs → segment-demux-js-QK7qFMSj.mjs} +1 -1
  22. package/dist/stream-broker/_stub.js +1 -1
  23. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-P71ze8cu.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Da_bbYQp.mjs} +1 -1
  24. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CxT9ry2j.mjs +26 -0
  25. package/dist/stream-broker/demux-worker-child.js +1 -1
  26. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  27. package/dist/stream-broker/{hostInit-CRlStbz4.mjs → hostInit-aFrOa5WT.mjs} +1 -1
  28. package/dist/stream-broker/index.js +3 -3
  29. package/dist/stream-broker/index.mjs +3 -3
  30. package/dist/stream-broker/remoteEntry.js +1 -1
  31. package/package.json +1 -1
  32. package/python/postprocessors/softmax.py +2 -1
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CZkpFU-J.mjs +0 -26
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DUqr1zyq.js");
1
+ const require_dist = require("./dist-BzDPLvQ6.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  //#region src/detection-pipeline/pipeline/landmark-precision-gate.ts
4
4
  /**
@@ -16,6 +16,284 @@ function landmarkPrecisionVerdict(input) {
16
16
  };
17
17
  }
18
18
  //#endregion
19
+ //#region src/detection-pipeline/registry/model-licenses.ts
20
+ var COCO_DATA = {
21
+ name: "COCO 2017",
22
+ terms: "annotations CC-BY-4.0; images under their Flickr owners' terms",
23
+ url: "https://cocodataset.org/#termsofuse"
24
+ };
25
+ var WIDER_FACE_DATA = {
26
+ name: "WIDER FACE",
27
+ terms: "research-oriented terms; images CC BY-NC-ND",
28
+ url: "http://shuoyang1213.me/WIDERFACE/"
29
+ };
30
+ var ULTRALYTICS_AGPL = {
31
+ weights: "AGPL-3.0",
32
+ code: "AGPL-3.0",
33
+ data: COCO_DATA,
34
+ upstream: {
35
+ name: "Ultralytics",
36
+ url: "https://github.com/ultralytics/ultralytics"
37
+ },
38
+ url: "https://github.com/ultralytics/ultralytics/blob/main/LICENSE",
39
+ attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server.",
40
+ modifications: "exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py)",
41
+ hosting: "camstack-hf"
42
+ };
43
+ var ULTRALYTICS_YOLOV9_AGPL = {
44
+ ...ULTRALYTICS_AGPL,
45
+ attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and scripts/build-camstack-models.py in https://github.com/camstack/server."
46
+ };
47
+ var CORAL_APACHE = {
48
+ weights: "Apache-2.0",
49
+ code: "Apache-2.0",
50
+ upstream: {
51
+ name: "Google Coral test_data",
52
+ url: "https://github.com/google-coral/test_data"
53
+ },
54
+ url: "https://github.com/google-coral/test_data/blob/master/LICENSE",
55
+ attribution: "Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0.",
56
+ hosting: "third-party"
57
+ };
58
+ /** The Coral COCO detectors (SSD MobileNet V2, EfficientDet-Lite0). */
59
+ var CORAL_COCO_APACHE = {
60
+ ...CORAL_APACHE,
61
+ data: COCO_DATA
62
+ };
63
+ /** The Coral MobileDet build, mirrored byte for byte on the CamStack HF repo. */
64
+ var CORAL_MOBILEDET_MIRRORED = {
65
+ ...CORAL_COCO_APACHE,
66
+ modifications: "none: ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite mirrored byte for byte (sha256 b69e508e…434a2e), with the CPU build and coco_labels.txt beside it (scripts/build-ssdlite-mobiledet-model.py)",
67
+ hosting: "camstack-hf"
68
+ };
69
+ var RFDETR_APACHE = {
70
+ weights: "Apache-2.0",
71
+ code: "Apache-2.0",
72
+ data: {
73
+ name: "parcel fine-tuning set (not recorded)",
74
+ terms: "UNVERIFIED"
75
+ },
76
+ upstream: {
77
+ name: "Roboflow RF-DETR",
78
+ url: "https://github.com/roboflow/rf-detr"
79
+ },
80
+ url: "https://github.com/roboflow/rf-detr/blob/develop/LICENSE",
81
+ attribution: "RF-DETR © Roboflow, Apache-2.0.",
82
+ modifications: "RF-DETR-M fine-tuned to 2 classes at 576; exported to ONNX, OpenVINO IR and CoreML; training checkpoint .pth also published",
83
+ hosting: "camstack-hf"
84
+ };
85
+ var INSIGHTFACE_SCRFD_NC = {
86
+ weights: "LicenseRef-InsightFace-NonCommercial-Research",
87
+ code: "MIT",
88
+ data: WIDER_FACE_DATA,
89
+ upstream: {
90
+ name: "InsightFace SCRFD",
91
+ url: "https://github.com/deepinsight/insightface/tree/master/detection/scrfd"
92
+ },
93
+ url: "https://github.com/deepinsight/insightface#license",
94
+ attribution: "SCRFD © InsightFace. Pretrained models released for non-commercial research purposes only.",
95
+ modifications: "obtained via RuteNL/SCRFD-face-detection-ONNX; converted to OpenVINO IR and CoreML FP16",
96
+ hosting: "camstack-hf",
97
+ nonCommercial: true
98
+ };
99
+ var YUNET_MIT = {
100
+ weights: "MIT",
101
+ code: "BSD-3-Clause",
102
+ data: WIDER_FACE_DATA,
103
+ upstream: {
104
+ name: "OpenCV Zoo YuNet",
105
+ url: "https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet"
106
+ },
107
+ url: "https://github.com/opencv/opencv_zoo/blob/main/models/face_detection_yunet/LICENSE",
108
+ attribution: "YuNet weights Copyright (c) 2020 Shiqi Yu, MIT. Training code: ShiqiYu/libfacedetection.train, BSD-3-Clause.",
109
+ modifications: "input contract baked into the graph (the pool RGB /255 becomes the upstream BGR 0..255: Mul(255) plus a channel Gather); internal tensor names cleared in the OpenVINO IR; ONNX fp32, OpenVINO IR fp32, CoreML fp16 (scripts/build-yunet-model.py)",
110
+ hosting: "camstack-hf"
111
+ };
112
+ var SCRYPTED_UNKNOWN = {
113
+ weights: "UNKNOWN",
114
+ upstream: {
115
+ name: "Scrypted plugin-models (repository tagged MIT, no per-model terms)",
116
+ url: "https://huggingface.co/scrypted/plugin-models"
117
+ },
118
+ url: "https://huggingface.co/scrypted/plugin-models",
119
+ attribution: "Scrypted plugin models, Koushik Dutta: repository tagged MIT (licenses/models/MIT-scrypted-plugin-models.txt), no per-model terms.",
120
+ modifications: "ONNX and CoreML fetched from scrypted/plugin-models; OpenVINO IR converted and re-hosted by CamStack",
121
+ hosting: "camstack-hf"
122
+ };
123
+ var ARCFACE_UNKNOWN = {
124
+ weights: "UNKNOWN",
125
+ upstream: {
126
+ name: "onnx-community/arcface-onnx (re-upload of garavv/arcface-onnx)",
127
+ url: "https://huggingface.co/onnx-community/arcface-onnx"
128
+ },
129
+ url: "https://huggingface.co/onnx-community/arcface-onnx",
130
+ modifications: "converted to OpenVINO IR and CoreML FP16",
131
+ hosting: "camstack-hf"
132
+ };
133
+ var AURAFACE_APACHE = {
134
+ weights: "Apache-2.0",
135
+ upstream: {
136
+ name: "fal.ai AuraFace v1 (glintr100.onnx only)",
137
+ url: "https://huggingface.co/fal/AuraFace-v1"
138
+ },
139
+ url: "https://huggingface.co/fal/AuraFace-v1",
140
+ attribution: "AuraFace v1 by fal.ai, Apache-2.0.",
141
+ modifications: "input scaling y = 2x - 1 baked ahead of the first Conv (scripts/build-auraface-model.py); converted to OpenVINO IR and CoreML FP16",
142
+ hosting: "camstack-hf"
143
+ };
144
+ var FAST_PLATE_OCR_MIT = {
145
+ weights: "MIT",
146
+ code: "MIT",
147
+ data: {
148
+ name: "fast-plate-ocr training set",
149
+ terms: "private, not released upstream"
150
+ },
151
+ upstream: {
152
+ name: "ankandrew/fast-plate-ocr",
153
+ url: "https://github.com/ankandrew/fast-plate-ocr"
154
+ },
155
+ url: "https://github.com/ankandrew/fast-plate-ocr/blob/master/LICENSE",
156
+ attribution: "fast-plate-ocr, MIT License, copyright (c) 2024 ankandrew (full notice: licenses/models/MIT-fast-plate-ocr.txt).",
157
+ modifications: "input head removed (recorded in the ONNX doc_string); converted to OpenVINO IR and CoreML",
158
+ hosting: "camstack-hf"
159
+ };
160
+ var EASYOCR_APACHE = {
161
+ weights: "Apache-2.0",
162
+ code: "Apache-2.0",
163
+ upstream: {
164
+ name: "JaidedAI EasyOCR (via Scrypted plugin-models)",
165
+ url: "https://github.com/JaidedAI/EasyOCR"
166
+ },
167
+ url: "https://github.com/JaidedAI/EasyOCR/blob/master/LICENSE",
168
+ attribution: "EasyOCR © JaidedAI, Apache-2.0.",
169
+ modifications: "ONNX and CoreML fetched from scrypted/plugin-models; OpenVINO IR converted and re-hosted by CamStack",
170
+ hosting: "camstack-hf"
171
+ };
172
+ var ANIMAL_CLASSIFIER_APACHE = {
173
+ weights: "Apache-2.0",
174
+ code: "Apache-2.0",
175
+ data: {
176
+ name: "Open Images V7",
177
+ terms: "annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty",
178
+ url: "https://storage.googleapis.com/openimages/web/factsfigures_v7.html"
179
+ },
180
+ upstream: {
181
+ name: "timm EfficientNet-Lite0, fine-tuned by CamStack",
182
+ url: "https://github.com/huggingface/pytorch-image-models"
183
+ },
184
+ url: "https://github.com/huggingface/pytorch-image-models/blob/main/LICENSE",
185
+ attribution: "EfficientNet-Lite0 via timm (Ross Wightman), Apache-2.0. Open Images V7 annotations © Google LLC, CC BY 4.0; images listed by Google as CC BY 2.0, without warranty.",
186
+ modifications: "fine-tuned by CamStack on the Open Images V7 animal subset (8 classes); exported to ONNX, OpenVINO IR and CoreML",
187
+ hosting: "camstack-hf"
188
+ };
189
+ var AIY_BIRDS_APACHE = {
190
+ weights: "Apache-2.0",
191
+ upstream: {
192
+ name: "Google AIY Vision birds_V1",
193
+ url: "https://github.com/google-coral/test_data"
194
+ },
195
+ url: "https://github.com/google-coral/test_data/blob/master/LICENSE",
196
+ attribution: "Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0.",
197
+ modifications: "converted from TensorFlow with tf2onnx; OpenVINO IR and CoreML derived from it",
198
+ hosting: "camstack-hf"
199
+ };
200
+ var VEHICLE_TYPE_V1_NC = {
201
+ weights: "CC-BY-NC-4.0",
202
+ code: "BSD-3-Clause",
203
+ data: {
204
+ name: "DrBimmer/vehicle-classification",
205
+ terms: "CC-BY-NC-4.0 — treated as binding the trained weights (conservative reading)",
206
+ url: "https://huggingface.co/datasets/DrBimmer/vehicle-classification"
207
+ },
208
+ upstream: {
209
+ name: "torchvision MobileNetV3-Large, fine-tuned by CamStack",
210
+ url: "https://github.com/pytorch/vision"
211
+ },
212
+ url: "https://creativecommons.org/licenses/by-nc/4.0/",
213
+ attribution: "torchvision MobileNetV3, BSD-3-Clause. Trained on the Vehicle classification dataset by DrBimmer (https://huggingface.co/datasets/DrBimmer/vehicle-classification), CC BY-NC 4.0.",
214
+ modifications: "fine-tuned by CamStack (8 classes); exported to ONNX, OpenVINO IR and CoreML",
215
+ hosting: "camstack-hf",
216
+ nonCommercial: true
217
+ };
218
+ var U2NET_APACHE = {
219
+ weights: "Apache-2.0",
220
+ code: "Apache-2.0",
221
+ data: {
222
+ name: "DUTS-TR",
223
+ terms: "not checked"
224
+ },
225
+ upstream: {
226
+ name: "xuebinqin/U-2-Net",
227
+ url: "https://github.com/xuebinqin/U-2-Net"
228
+ },
229
+ url: "https://github.com/xuebinqin/U-2-Net/blob/master/LICENSE",
230
+ attribution: "U²-Net © Xuebin Qin et al., Apache-2.0.",
231
+ modifications: "converted to ONNX, OpenVINO IR and CoreML",
232
+ hosting: "camstack-hf"
233
+ };
234
+ var APPLE_MOBILECLIP_AMLR = {
235
+ weights: "LicenseRef-Apple-AMLR",
236
+ code: "MIT",
237
+ upstream: {
238
+ name: "Apple ml-mobileclip",
239
+ url: "https://github.com/apple/ml-mobileclip"
240
+ },
241
+ url: "https://github.com/apple/ml-mobileclip/blob/main/LICENSE_MODELS",
242
+ attribution: "Apple Machine Learning Research Model is licensed under the Apple Machine Learning Research Model License Agreement.",
243
+ modifications: "model derivative: vision encoders converted to OpenVINO IR and CoreML FP16",
244
+ hosting: "camstack-hf",
245
+ nonCommercial: true
246
+ };
247
+ var SIGLIP2_APACHE = {
248
+ weights: "Apache-2.0",
249
+ code: "Apache-2.0",
250
+ data: {
251
+ name: "WebLI",
252
+ terms: "Google internal, not released"
253
+ },
254
+ upstream: {
255
+ name: "Google SigLIP 2 (google/siglip2-base-patch16-224)",
256
+ url: "https://huggingface.co/google/siglip2-base-patch16-224"
257
+ },
258
+ url: "https://huggingface.co/google/siglip2-base-patch16-224",
259
+ attribution: "SigLIP 2 © Google LLC, Apache-2.0.",
260
+ modifications: "input scaling y = 2x - 1 baked ahead of the patch embedding; converted to OpenVINO IR and CoreML FP16, an FP32 ONNX hosted as the verification reference (scripts/build-siglip2-model.py)",
261
+ hosting: "camstack-hf"
262
+ };
263
+ var YAMNET_APACHE = {
264
+ weights: "Apache-2.0",
265
+ code: "Apache-2.0",
266
+ data: {
267
+ name: "AudioSet ontology/labels",
268
+ terms: "CC-BY-4.0 (Google LLC)",
269
+ url: "https://research.google.com/audioset/"
270
+ },
271
+ upstream: {
272
+ name: "tensorflow/models research/audioset/yamnet",
273
+ url: "https://github.com/tensorflow/models/tree/master/research/audioset/yamnet"
274
+ },
275
+ url: "https://github.com/tensorflow/models/blob/master/LICENSE",
276
+ attribution: "YAMNet © Google LLC, Apache-2.0. AudioSet ontology and labels © Google LLC, CC BY 4.0.",
277
+ modifications: "converted from TensorFlow with tf2onnx; OpenVINO IR derived from it",
278
+ hosting: "camstack-hf"
279
+ };
280
+ var APPLE_SOUNDANALYSIS = {
281
+ weights: "LicenseRef-Apple-macOS",
282
+ upstream: {
283
+ name: "Apple SoundAnalysis (macOS built-in)",
284
+ url: "https://developer.apple.com/documentation/soundanalysis"
285
+ },
286
+ url: "https://www.apple.com/legal/sla/",
287
+ hosting: "built-in"
288
+ };
289
+ /** Compose a per-entry record: same upstream, entry-specific modifications / data. */
290
+ function licensed(base, overrides) {
291
+ return {
292
+ ...base,
293
+ ...overrides
294
+ };
295
+ }
296
+ //#endregion
19
297
  //#region src/detection-pipeline/registry/model-catalogs.ts
20
298
  var HF_REPO = "camstack/camstack-models";
21
299
  var HF_SCRYPTED = "scrypted/plugin-models";
@@ -59,6 +337,7 @@ var ovPrecisionVariant = (baseId, ovDir, baseName, precision, sizeMB, legacy = f
59
337
  },
60
338
  labels: [],
61
339
  preprocessMode: "letterbox",
340
+ license: licensed(ULTRALYTICS_AGPL, { modifications: precision === "int8" ? "exported to OpenVINO IR, then OpenVINO NNCF INT8 post-training quantisation" : "OpenVINO FP16 export" }),
62
341
  formats: { openvino: ovFormat(hf(`${ovDir}/camstack-${baseId}-${precision}.xml`), sizeMB) },
63
342
  ...legacy ? { legacy: true } : {},
64
343
  ...precision === "int8" ? { group: {
@@ -86,9 +365,10 @@ var YOLOV9_TIER_NAME = {
86
365
  c: "Compact"
87
366
  };
88
367
  /**
89
- * OUR YOLOv9 family (Ultralytics base) — the NPU-detection line. Unlike yolo26
90
- * (whose arch the Intel NPU rejects → 0 frames), yolov9 COMPILES AND RUNS on the
91
- * Intel NPU ("AI Boost"). Empirically: our yolov9t-320-int8 = ~298 fps on the
368
+ * The Ultralytics YOLOv9 family (COCO-pretrained Ultralytics weights,
369
+ * re-exported by CamStack — not trained by us) — the NPU-detection line. Unlike
370
+ * yolo26 (whose arch the Intel NPU rejects → 0 frames), yolov9 COMPILES AND RUNS
371
+ * on the Intel NPU ("AI Boost"). Empirically: the yolov9t-320-int8 export = ~298 fps on the
92
372
  * NPU vs yolo26n = 103 on the iGPU (~2.9×). t/s/m/c × {320,640}; each size ships
93
373
  * a base entry (onnx + coreml + openvino **fp16**) + an OpenVINO **int8** entry
94
374
  * (the NPU/iGPU-optimal config). CoreML (fp16) runs on the Mac ANE — the
@@ -111,6 +391,7 @@ var yolov9Reduced = (tier, res, sizes) => {
111
391
  },
112
392
  labels: [],
113
393
  preprocessMode: "letterbox",
394
+ license: licensed(ULTRALYTICS_YOLOV9_AGPL, { modifications: `exported at ${res}×${res} to ONNX, OpenVINO IR FP16 and CoreML` }),
114
395
  formats: {
115
396
  onnx: {
116
397
  url: hf(`objectDetection/yolov9/onnx/camstack-yolov9${tier}-${res}.onnx`),
@@ -134,13 +415,14 @@ var yolov9Reduced = (tier, res, sizes) => {
134
415
  resolution: res
135
416
  },
136
417
  name: `YOLOv9 ${name} @${res} (INT8)`,
137
- description: `YOLOv9 ${name} @${res} — OpenVINO INT8 for the Intel NPU / iGPU. The NPU's fastest config (our-base detector).`,
418
+ description: `YOLOv9 ${name} @${res} — OpenVINO INT8 for the Intel NPU / iGPU. The NPU's fastest config (Ultralytics YOLOv9 weights).`,
138
419
  inputSize: {
139
420
  width: res,
140
421
  height: res
141
422
  },
142
423
  labels: [],
143
424
  preprocessMode: "letterbox",
425
+ license: licensed(ULTRALYTICS_YOLOV9_AGPL, { modifications: `exported at ${res}×${res} to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation` }),
144
426
  formats: { openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-int8.xml`), sizes.ovInt8) }
145
427
  }];
146
428
  };
@@ -170,6 +452,7 @@ var yolo26Reduced = (tier, res, sizes) => {
170
452
  },
171
453
  labels: [],
172
454
  preprocessMode: "letterbox",
455
+ license: licensed(ULTRALYTICS_AGPL, { modifications: `re-exported at ${res}×${res} to ONNX, OpenVINO IR and CoreML` }),
173
456
  formats: {
174
457
  onnx: {
175
458
  url: hf(`objectDetection/yolo26/onnx/camstack-yolo26${tier}-${res}.onnx`),
@@ -200,12 +483,14 @@ var yolo26Reduced = (tier, res, sizes) => {
200
483
  },
201
484
  labels: [],
202
485
  preprocessMode: "letterbox",
486
+ license: licensed(ULTRALYTICS_AGPL, { modifications: `re-exported at ${res}×${res} to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation` }),
203
487
  formats: { openvino: ovFormat(hf(`objectDetection/yolo26/openvino/camstack-yolo26${tier}-${res}-int8.xml`), sizes.ovInt8) }
204
488
  }];
205
489
  };
206
490
  var OBJECT_DETECTION_MODELS = [
207
491
  {
208
492
  id: "yolo26n",
493
+ license: ULTRALYTICS_AGPL,
209
494
  group: {
210
495
  family: "yolo26",
211
496
  tier: "n",
@@ -236,6 +521,7 @@ var OBJECT_DETECTION_MODELS = [
236
521
  },
237
522
  {
238
523
  id: "yolo26s",
524
+ license: ULTRALYTICS_AGPL,
239
525
  group: {
240
526
  family: "yolo26",
241
527
  tier: "s",
@@ -266,6 +552,7 @@ var OBJECT_DETECTION_MODELS = [
266
552
  },
267
553
  {
268
554
  id: "yolo26m",
555
+ license: ULTRALYTICS_AGPL,
269
556
  group: {
270
557
  family: "yolo26",
271
558
  tier: "m",
@@ -296,6 +583,7 @@ var OBJECT_DETECTION_MODELS = [
296
583
  },
297
584
  {
298
585
  id: "yolo26l",
586
+ license: ULTRALYTICS_AGPL,
299
587
  group: {
300
588
  family: "yolo26",
301
589
  tier: "l",
@@ -326,6 +614,7 @@ var OBJECT_DETECTION_MODELS = [
326
614
  },
327
615
  {
328
616
  id: "yolo26x",
617
+ license: ULTRALYTICS_AGPL,
329
618
  legacy: true,
330
619
  name: "YOLO26 XLarge",
331
620
  description: "YOLO26 XLarge — highest accuracy, attention-based architecture",
@@ -352,6 +641,7 @@ var OBJECT_DETECTION_MODELS = [
352
641
  },
353
642
  {
354
643
  id: "ssd-mobilenet-v2-coco-edgetpu",
644
+ license: CORAL_COCO_APACHE,
355
645
  name: "SSD MobileNet V2 (Coral)",
356
646
  description: "SSD MobileNet V2 COCO — EdgeTPU-compiled full-integer TFLite, 300×300; runs on the Coral USB Edge TPU (~11 ms/frame)",
357
647
  inputSize: {
@@ -369,6 +659,7 @@ var OBJECT_DETECTION_MODELS = [
369
659
  },
370
660
  {
371
661
  id: "efficientdet-lite0-edgetpu",
662
+ license: CORAL_COCO_APACHE,
372
663
  name: "EfficientDet-Lite0 (Coral)",
373
664
  description: "EfficientDet-Lite0 COCO — EdgeTPU-compiled full-integer TFLite, 320×320; higher accuracy than SSD MobileNet on the Coral USB Edge TPU",
374
665
  inputSize: {
@@ -386,6 +677,7 @@ var OBJECT_DETECTION_MODELS = [
386
677
  },
387
678
  {
388
679
  id: "ssdlite-mobiledet-coco-edgetpu",
680
+ license: CORAL_MOBILEDET_MIRRORED,
389
681
  name: "SSDLite MobileDet (Coral)",
390
682
  description: "SSDLite MobileDet COCO (QAT) — EdgeTPU-compiled full-integer TFLite, 320×320; runs on the Coral USB Edge TPU. More accurate than SSD MobileNet V2 (32.9 vs 25.6 % COCO mAP, Coral-published). Scores top out near 0.77.",
391
683
  inputSize: {
@@ -395,7 +687,6 @@ var OBJECT_DETECTION_MODELS = [
395
687
  labels: [],
396
688
  preprocessMode: "letterbox",
397
689
  postprocessor: "ssd",
398
- license: "Apache-2.0",
399
690
  formats: { tflite: {
400
691
  url: hf("objectDetection/ssdlite-mobiledet/edgetpu/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite"),
401
692
  sizeMB: 5.1,
@@ -510,7 +801,7 @@ var OBJECT_DETECTION_MODELS = [
510
801
  ovPrecisionVariant("yolo26x", "objectDetection/yolo26/openvino", "YOLO26 XLarge", "int8", 56, true)
511
802
  ];
512
803
  /**
513
- * Model ids REMOVED from a step's catalog, per step id (D643).
804
+ * Model ids REMOVED from a step's catalog, per step id (D643, D661).
514
805
  *
515
806
  * Not the same as `legacy` (still in the catalog, still runnable when chosen):
516
807
  * a retired id has nothing to download and nothing that can parse it. It is
@@ -519,10 +810,16 @@ var OBJECT_DETECTION_MODELS = [
519
810
  * custom model — so a saved pin would keep naming a model no node can load.
520
811
  * A retired id resolves to the step's format default instead.
521
812
  */
522
- var RETIRED_MODEL_IDS = { "face-detection": ["scrypted-yolov9t-face"] };
813
+ var RETIRED_MODEL_IDS = {
814
+ "face-detection": ["scrypted-yolov9t-face"],
815
+ "animal-classifier": ["animals-10"],
816
+ "bird-classifier": ["bird-nabirds-404"],
817
+ "vehicle-classifier": ["vehicle-type-efficientnet"]
818
+ };
523
819
  var FACE_DETECTION_MODELS = [
524
820
  {
525
821
  id: "scrfd-2.5g",
822
+ license: INSIGHTFACE_SCRFD_NC,
526
823
  name: "SCRFD 2.5G",
527
824
  description: "SCRFD 2.5G bnkps — balanced face detection with 5 keypoints (WIDER FACE 93.80/92.02/77.13). InsightFace pretrained weights.",
528
825
  inputSize: {
@@ -535,7 +832,6 @@ var FACE_DETECTION_MODELS = [
535
832
  }],
536
833
  preprocessMode: "letterbox",
537
834
  inputNormalization: "scrfd",
538
- license: "InsightFace-NonCommercial-Research",
539
835
  formats: {
540
836
  onnx: {
541
837
  url: hf("faceDetection/scrfd/onnx/camstack-scrfd-2.5g.onnx"),
@@ -553,6 +849,7 @@ var FACE_DETECTION_MODELS = [
553
849
  },
554
850
  {
555
851
  id: "yunet-2023mar",
852
+ license: YUNET_MIT,
556
853
  name: "YuNet 2023mar",
557
854
  description: "YuNet (OpenCV Zoo, 2023mar) — tiny face detector with 5 keypoints, MIT weights (WIDER FACE AP 0.884/0.866/0.750). ~0.2 MB. Trained on WIDER FACE (CC BY-NC-ND images).",
558
855
  inputSize: {
@@ -565,7 +862,6 @@ var FACE_DETECTION_MODELS = [
565
862
  }],
566
863
  preprocessMode: "letterbox",
567
864
  postprocessor: "yunet",
568
- license: "MIT",
569
865
  formats: {
570
866
  onnx: {
571
867
  url: hf("faceDetection/yunet/onnx/camstack-yunet-2023mar.onnx"),
@@ -583,6 +879,7 @@ var FACE_DETECTION_MODELS = [
583
879
  },
584
880
  {
585
881
  id: "ssd-mobilenet-v2-face-edgetpu",
882
+ license: CORAL_APACHE,
586
883
  legacy: true,
587
884
  name: "SSD MobileNet V2 Face (Coral)",
588
885
  description: "SSD MobileNet V2 face detector — EdgeTPU-compiled full-integer TFLite, 320×320; runs on the Coral USB Edge TPU. Requires an ssd-face postprocessor (not yet available).",
@@ -596,7 +893,6 @@ var FACE_DETECTION_MODELS = [
596
893
  }],
597
894
  preprocessMode: "letterbox",
598
895
  postprocessor: "ssd",
599
- license: "Apache-2.0",
600
896
  formats: { tflite: {
601
897
  url: "https://github.com/google-coral/test_data/raw/master/ssd_mobilenet_v2_face_quant_postprocess_edgetpu.tflite",
602
898
  sizeMB: 6.7,
@@ -607,6 +903,7 @@ var FACE_DETECTION_MODELS = [
607
903
  var FACE_EMBEDDING_MODELS = [
608
904
  {
609
905
  id: "arcface-r100",
906
+ license: ARCFACE_UNKNOWN,
610
907
  name: "ArcFace (ResNet34)",
611
908
  description: "ArcFace ResNet34 — face recognition embeddings (512-d). NOTE: despite the `arcface-r100` id this is a ResNet34, not a ResNet-100 (verified 2026-08-19).",
612
909
  inputSize: {
@@ -620,7 +917,6 @@ var FACE_EMBEDDING_MODELS = [
620
917
  }],
621
918
  preprocessMode: "resize",
622
919
  faceAlignment: true,
623
- license: "UNKNOWN",
624
920
  formats: {
625
921
  onnx: {
626
922
  url: hf("faceRecognition/arcface/onnx/camstack-arcface-arcface.onnx"),
@@ -638,6 +934,7 @@ var FACE_EMBEDDING_MODELS = [
638
934
  },
639
935
  {
640
936
  id: "auraface-r100",
937
+ license: AURAFACE_APACHE,
641
938
  name: "AuraFace R100",
642
939
  description: "AuraFace v1 (fal.ai) — iResNet-100 ArcFace face recognition embeddings (512-d), Apache-2.0. Benchmarks published by fal: LFW 99.65, CFP-FP 95.19, AgeDB 96.10, CALFW 94.70, CPLFW 90.93. Genuinely a ResNet-100 (65 M params) — roughly twice the depth of the `arcface-r100` entry, which is a ResNet34.",
643
940
  inputSize: {
@@ -650,7 +947,6 @@ var FACE_EMBEDDING_MODELS = [
650
947
  }],
651
948
  preprocessMode: "resize",
652
949
  faceAlignment: true,
653
- license: "Apache-2.0",
654
950
  formats: {
655
951
  onnx: {
656
952
  url: hf("faceRecognition/auraface/onnx/camstack-auraface-r100.onnx"),
@@ -668,6 +964,7 @@ var FACE_EMBEDDING_MODELS = [
668
964
  },
669
965
  {
670
966
  id: "inception-resnet-v1",
967
+ license: SCRYPTED_UNKNOWN,
671
968
  name: "Inception ResNet V1",
672
969
  description: "FaceNet-style face recognition embeddings (512-d) — hosted on plugin-models HF repo",
673
970
  inputSize: {
@@ -679,7 +976,6 @@ var FACE_EMBEDDING_MODELS = [
679
976
  name: "Face Embedding"
680
977
  }],
681
978
  preprocessMode: "resize",
682
- license: "UNKNOWN",
683
979
  formats: {
684
980
  onnx: {
685
981
  url: hfScrypted("onnx/inception_resnet_v1/inception_resnet_v1.onnx"),
@@ -698,6 +994,14 @@ var FACE_EMBEDDING_MODELS = [
698
994
  ];
699
995
  var PLATE_DETECTION_MODELS = [{
700
996
  id: "yolov8n-plate",
997
+ license: licensed(ULTRALYTICS_AGPL, {
998
+ data: {
999
+ name: "unidentified plate dataset (third-party model, trained 2023-12-05 per its ONNX metadata)",
1000
+ terms: "UNKNOWN"
1001
+ },
1002
+ attribution: "© Ultralytics, AGPL-3.0 (YOLOv8n base, fine-tuned for plates by an unidentified third party). CamStack holds no training checkpoint; the ONNX file is the only form it has.",
1003
+ modifications: "converted to OpenVINO IR and CoreML"
1004
+ }),
701
1005
  name: "YOLOv8 Nano — License Plate",
702
1006
  description: "YOLOv8 Nano fine-tuned for license plate detection",
703
1007
  inputSize: {
@@ -726,6 +1030,15 @@ var PLATE_DETECTION_MODELS = [{
726
1030
  }];
727
1031
  var PACKAGE_DETECTION_MODELS = [{
728
1032
  id: "yolov8n-package",
1033
+ license: licensed(ULTRALYTICS_AGPL, {
1034
+ data: {
1035
+ name: "Roboflow Universe package-at-front-door (most likely)",
1036
+ terms: "UNVERIFIED",
1037
+ url: "https://universe.roboflow.com/package-detection/package-at-front-door"
1038
+ },
1039
+ attribution: "© Ultralytics, AGPL-3.0 (YOLOv8n base, fine-tuned by CamStack with Ultralytics). The fine-tuning checkpoint is not published yet.",
1040
+ modifications: "fine-tuned by CamStack with Ultralytics; exported to ONNX, OpenVINO IR and CoreML"
1041
+ }),
729
1042
  name: "YOLOv8 Nano — Package",
730
1043
  description: "YOLOv8 Nano fine-tuned for parcel/package detection (mAP50 0.93) — dedicated model, not the COCO suitcase/backpack proxy",
731
1044
  inputSize: {
@@ -737,7 +1050,6 @@ var PACKAGE_DETECTION_MODELS = [{
737
1050
  name: "Package"
738
1051
  }],
739
1052
  preprocessMode: "letterbox",
740
- license: "AGPL-3.0",
741
1053
  formats: {
742
1054
  onnx: {
743
1055
  url: hf("packageDetection/yolov8-package/onnx/camstack-yolov8n-package.onnx"),
@@ -754,6 +1066,7 @@ var PACKAGE_DETECTION_MODELS = [{
754
1066
  }
755
1067
  }, {
756
1068
  id: "rfdetr-package",
1069
+ license: RFDETR_APACHE,
757
1070
  name: "RF-DETR — Package",
758
1071
  description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than yolov8n-package (+0.86 vs +0.21 margin on 615) at ~4× the size and ~6× the latency",
759
1072
  inputSize: {
@@ -767,7 +1080,6 @@ var PACKAGE_DETECTION_MODELS = [{
767
1080
  preprocessMode: "resize",
768
1081
  inputNormalization: "imagenet",
769
1082
  postprocessor: "rfdetr",
770
- license: "Apache-2.0",
771
1083
  formats: {
772
1084
  onnx: {
773
1085
  url: hf("packageDetection/rfdetr-package/onnx/camstack-rfdetr-package.onnx"),
@@ -785,6 +1097,7 @@ var PACKAGE_DETECTION_MODELS = [{
785
1097
  }];
786
1098
  var PLATE_OCR_MODELS = [{
787
1099
  id: "cct-s-v2-global",
1100
+ license: FAST_PLATE_OCR_MIT,
788
1101
  name: "CCT-S v2 Global — License Plate",
789
1102
  description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-617 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
790
1103
  inputSize: {
@@ -798,7 +1111,6 @@ var PLATE_OCR_MODELS = [{
798
1111
  }],
799
1112
  preprocessMode: "resize",
800
1113
  postprocessor: "plate-slots",
801
- license: "MIT",
802
1114
  formats: {
803
1115
  onnx: {
804
1116
  url: hf("plateRecognition/cct-s-v2-global/onnx/camstack-cct-s-v2-global.onnx"),
@@ -815,6 +1127,7 @@ var PLATE_OCR_MODELS = [{
815
1127
  }
816
1128
  }, {
817
1129
  id: "vgg-english-g2",
1130
+ license: EASYOCR_APACHE,
818
1131
  name: "VGG English G2",
819
1132
  description: "EasyOCR VGG English G2 — generic English text recognition. Superseded as the plate-OCR default by cct-s-v2-global (4/21 vs 19/21 exact on the cam-617 set); kept selectable for non-plate scene text and for any node pinned to it",
820
1133
  inputSize: {
@@ -844,6 +1157,7 @@ var PLATE_OCR_MODELS = [{
844
1157
  }];
845
1158
  var ANIMAL_CLASSIFIER_MODELS = [{
846
1159
  id: "animal-classifier",
1160
+ license: ANIMAL_CLASSIFIER_APACHE,
847
1161
  name: "Animal Classifier (8)",
848
1162
  description: "EfficientNet-Lite0 animal classifier — bird, cat, cow, deer, dog, horse, sheep, squirrel (Open Images V7, publicly distributable)",
849
1163
  inputSize: {
@@ -852,7 +1166,6 @@ var ANIMAL_CLASSIFIER_MODELS = [{
852
1166
  },
853
1167
  inputLayout: "nchw",
854
1168
  inputNormalization: "imagenet",
855
- license: "Apache-2.0",
856
1169
  labels: [{
857
1170
  id: "animal-type",
858
1171
  name: "Animal Type"
@@ -877,141 +1190,75 @@ var ANIMAL_CLASSIFIER_MODELS = [{
877
1190
  filename: "animal-classifier-labels.json",
878
1191
  sizeMB: .01
879
1192
  }]
880
- }, {
881
- id: "animals-10",
882
- name: "Animal Classifier (10)",
883
- description: "ViT-based animal type classifier — cat, cow, dog, dolphin, eagle, panda, horse, monkey, sheep, spider",
884
- legacy: true,
1193
+ }];
1194
+ var BIRD_CLASSIFIER_MODELS = [{
1195
+ id: "bird-classifier",
1196
+ license: AIY_BIRDS_APACHE,
1197
+ name: "Bird Classifier (AIY 965)",
1198
+ description: "Google AIY Birds V1 (MobileNetV2) — 964 species + background; publicly distributable (Apache-2.0)",
885
1199
  inputSize: {
886
1200
  width: 224,
887
1201
  height: 224
888
1202
  },
889
- inputNormalization: "imagenet",
1203
+ inputLayout: "nhwc",
1204
+ inputNormalization: "none",
1205
+ outputProbabilities: true,
890
1206
  labels: [{
891
- id: "animal-type",
892
- name: "Animal Type"
1207
+ id: "species",
1208
+ name: "Bird Species"
893
1209
  }],
894
1210
  preprocessMode: "resize",
895
1211
  formats: {
896
1212
  onnx: {
897
- url: hf("animalClassification/animals-10/onnx/camstack-animals-10.onnx"),
898
- sizeMB: 328
1213
+ url: hf("animalClassification/bird-classifier/onnx/bird-classifier.onnx"),
1214
+ sizeMB: 14
899
1215
  },
900
1216
  coreml: {
901
- url: hf("animalClassification/animals-10/coreml/camstack-animals-10.mlpackage"),
902
- sizeMB: 164,
1217
+ url: hf("animalClassification/bird-classifier/coreml/bird-classifier.mlpackage"),
1218
+ sizeMB: 6.8,
903
1219
  isDirectory: true,
904
1220
  files: [...MLPACKAGE_FILES],
905
1221
  runtimes: ["python"]
906
1222
  },
907
- openvino: ovFormat(hf("animalClassification/animals-10/openvino/camstack-animals-10.xml"), 164)
908
- }
909
- }];
910
- var BIRD_CLASSIFIER_MODELS = [
911
- {
912
- id: "bird-classifier",
913
- name: "Bird Classifier (AIY 965)",
914
- description: "Google AIY Birds V1 (MobileNetV2) — 964 species + background; publicly distributable (Apache-2.0)",
915
- inputSize: {
916
- width: 224,
917
- height: 224
918
- },
919
- inputLayout: "nhwc",
920
- inputNormalization: "none",
921
- outputProbabilities: true,
922
- license: "Apache-2.0",
923
- labels: [{
924
- id: "species",
925
- name: "Bird Species"
926
- }],
927
- preprocessMode: "resize",
928
- formats: {
929
- onnx: {
930
- url: hf("animalClassification/bird-classifier/onnx/bird-classifier.onnx"),
931
- sizeMB: 14
932
- },
933
- coreml: {
934
- url: hf("animalClassification/bird-classifier/coreml/bird-classifier.mlpackage"),
935
- sizeMB: 6.8,
936
- isDirectory: true,
937
- files: [...MLPACKAGE_FILES],
938
- runtimes: ["python"]
939
- },
940
- openvino: ovFormat(hf("animalClassification/bird-classifier/openvino/bird-classifier.xml"), 14)
941
- },
942
- extraFiles: [{
943
- url: hf("animalClassification/bird-classifier/onnx/bird-classifier-labels.json"),
944
- filename: "bird-classifier-labels.json",
945
- sizeMB: .03
946
- }]
1223
+ openvino: ovFormat(hf("animalClassification/bird-classifier/openvino/bird-classifier.xml"), 14)
947
1224
  },
948
- {
949
- id: "bird-nabirds-404",
950
- name: "NABirds (404 species)",
951
- description: "ResNet50 trained on NABirds — 404 North American species",
952
- legacy: true,
953
- inputSize: {
954
- width: 224,
955
- height: 224
956
- },
957
- inputNormalization: "imagenet",
958
- labels: [{
959
- id: "species",
960
- name: "Bird Species"
961
- }],
962
- preprocessMode: "resize",
963
- formats: {
964
- onnx: {
965
- url: hf("animalClassification/bird-nabirds/onnx/camstack-bird-nabirds-404.onnx"),
966
- sizeMB: 93
967
- },
968
- coreml: {
969
- url: hf("animalClassification/bird-nabirds/coreml/camstack-bird-nabirds-404.mlpackage"),
970
- sizeMB: 47,
971
- isDirectory: true,
972
- files: [...MLPACKAGE_FILES],
973
- runtimes: ["python"]
974
- },
975
- openvino: ovFormat(hf("animalClassification/bird-nabirds/openvino/camstack-bird-nabirds-404.xml"), 47)
976
- },
977
- extraFiles: [{
978
- url: hf("animalClassification/bird-nabirds/onnx/camstack-bird-nabirds-404-labels.json"),
979
- filename: "camstack-bird-nabirds-404-labels.json",
980
- sizeMB: .02
981
- }]
1225
+ extraFiles: [{
1226
+ url: hf("animalClassification/bird-classifier/onnx/bird-classifier-labels.json"),
1227
+ filename: "bird-classifier-labels.json",
1228
+ sizeMB: .03
1229
+ }]
1230
+ }, {
1231
+ id: "bird-classifier-aiy-edgetpu",
1232
+ license: CORAL_APACHE,
1233
+ legacy: true,
1234
+ name: "Bird Classifier AIY (Coral)",
1235
+ description: "Google AIY Birds V1 (MobileNetV2) — EdgeTPU-compiled full-integer TFLite, 224×224, 964 species + background; runs on the Coral USB Edge TPU. Requires EdgeTPU classifier output dequantization (not yet available).",
1236
+ inputSize: {
1237
+ width: 224,
1238
+ height: 224
982
1239
  },
983
- {
984
- id: "bird-classifier-aiy-edgetpu",
985
- legacy: true,
986
- name: "Bird Classifier AIY (Coral)",
987
- description: "Google AIY Birds V1 (MobileNetV2) — EdgeTPU-compiled full-integer TFLite, 224×224, 964 species + background; runs on the Coral USB Edge TPU. Requires EdgeTPU classifier output dequantization (not yet available).",
988
- inputSize: {
989
- width: 224,
990
- height: 224
991
- },
992
- inputLayout: "nhwc",
993
- inputNormalization: "none",
994
- outputProbabilities: true,
995
- license: "Apache-2.0",
996
- labels: [{
997
- id: "species",
998
- name: "Bird Species"
999
- }],
1000
- preprocessMode: "resize",
1001
- formats: { tflite: {
1002
- url: "https://github.com/google-coral/test_data/raw/master/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite",
1003
- sizeMB: 4.3,
1004
- runtimes: ["python"]
1005
- } },
1006
- extraFiles: [{
1007
- url: hf("animalClassification/bird-classifier/onnx/bird-classifier-labels.json"),
1008
- filename: "bird-classifier-labels.json",
1009
- sizeMB: .03
1010
- }]
1011
- }
1012
- ];
1240
+ inputLayout: "nhwc",
1241
+ inputNormalization: "none",
1242
+ outputProbabilities: true,
1243
+ labels: [{
1244
+ id: "species",
1245
+ name: "Bird Species"
1246
+ }],
1247
+ preprocessMode: "resize",
1248
+ formats: { tflite: {
1249
+ url: "https://github.com/google-coral/test_data/raw/master/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite",
1250
+ sizeMB: 4.3,
1251
+ runtimes: ["python"]
1252
+ } },
1253
+ extraFiles: [{
1254
+ url: hf("animalClassification/bird-classifier/onnx/bird-classifier-labels.json"),
1255
+ filename: "bird-classifier-labels.json",
1256
+ sizeMB: .03
1257
+ }]
1258
+ }];
1013
1259
  var VEHICLE_CLASSIFIER_MODELS = [{
1014
1260
  id: "vehicle-type-v1",
1261
+ license: VEHICLE_TYPE_V1_NC,
1015
1262
  name: "Vehicle Type (8)",
1016
1263
  description: "MobileNetV3-Large vehicle type classifier — Ambulance, Bicycle, Bus, Car, Motorcycle, Taxi, Truck, Van (val 89.4%)",
1017
1264
  inputSize: {
@@ -1044,43 +1291,10 @@ var VEHICLE_CLASSIFIER_MODELS = [{
1044
1291
  filename: "vehicle-type-v1-labels.json",
1045
1292
  sizeMB: .01
1046
1293
  }]
1047
- }, {
1048
- id: "vehicle-type-efficientnet",
1049
- name: "Vehicle Type (EfficientNet)",
1050
- description: "EfficientNet-B4 vehicle make/model/year classifier — 8,949 classes from VMMRdb",
1051
- legacy: true,
1052
- inputSize: {
1053
- width: 380,
1054
- height: 380
1055
- },
1056
- inputNormalization: "imagenet",
1057
- labels: [{
1058
- id: "vehicle-type",
1059
- name: "Vehicle Type"
1060
- }],
1061
- preprocessMode: "resize",
1062
- formats: {
1063
- onnx: {
1064
- url: hf("vehicleClassification/efficientnet/onnx/camstack-vehicle-type-efficientnet.onnx"),
1065
- sizeMB: 135
1066
- },
1067
- coreml: {
1068
- url: hf("vehicleClassification/efficientnet/coreml/camstack-vehicle-type-efficientnet.mlpackage"),
1069
- sizeMB: 10,
1070
- isDirectory: true,
1071
- files: [...MLPACKAGE_FILES],
1072
- runtimes: ["python"]
1073
- },
1074
- openvino: ovFormat(hf("vehicleClassification/efficientnet/openvino/camstack-vehicle-type-efficientnet.xml"), 68)
1075
- },
1076
- extraFiles: [{
1077
- url: hf("vehicleClassification/efficientnet/camstack-vehicle-type-labels.json"),
1078
- filename: "camstack-vehicle-type-labels.json",
1079
- sizeMB: .2
1080
- }]
1081
1294
  }];
1082
1295
  var SEGMENTATION_REFINER_MODELS = [{
1083
1296
  id: "u2netp",
1297
+ license: U2NET_APACHE,
1084
1298
  name: "U2-Net Portable",
1085
1299
  description: "U2-Net-P — ultra-lightweight salient object segmentation (4.7 MB)",
1086
1300
  inputSize: {
@@ -1110,6 +1324,7 @@ var SEGMENTATION_REFINER_MODELS = [{
1110
1324
  var INSTANCE_SEGMENTATION_MODELS = [
1111
1325
  {
1112
1326
  id: "yolo26n-seg",
1327
+ license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
1113
1328
  name: "YOLO26 Nano Seg",
1114
1329
  description: "YOLO26 Nano Segmentation — ultra-lightweight instance segmentation with masks",
1115
1330
  inputSize: {
@@ -1135,6 +1350,7 @@ var INSTANCE_SEGMENTATION_MODELS = [
1135
1350
  },
1136
1351
  {
1137
1352
  id: "yolo26s-seg",
1353
+ license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
1138
1354
  name: "YOLO26 Small Seg",
1139
1355
  description: "YOLO26 Small Segmentation — balanced instance segmentation",
1140
1356
  inputSize: {
@@ -1160,6 +1376,7 @@ var INSTANCE_SEGMENTATION_MODELS = [
1160
1376
  },
1161
1377
  {
1162
1378
  id: "yolo26m-seg",
1379
+ license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
1163
1380
  name: "YOLO26 Medium Seg",
1164
1381
  description: "YOLO26 Medium Segmentation — high-accuracy instance segmentation",
1165
1382
  inputSize: {
@@ -1187,6 +1404,7 @@ var INSTANCE_SEGMENTATION_MODELS = [
1187
1404
  var CLIP_EMBEDDING_MODELS = [
1188
1405
  {
1189
1406
  id: "mobileclip-s1",
1407
+ license: APPLE_MOBILECLIP_AMLR,
1190
1408
  name: "MobileCLIP S1",
1191
1409
  description: "MobileCLIP S1 — Apple balanced CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1192
1410
  inputSize: {
@@ -1212,6 +1430,7 @@ var CLIP_EMBEDDING_MODELS = [
1212
1430
  },
1213
1431
  {
1214
1432
  id: "mobileclip-s2",
1433
+ license: APPLE_MOBILECLIP_AMLR,
1215
1434
  name: "MobileCLIP S2",
1216
1435
  description: "MobileCLIP S2 — Apple high-accuracy CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1217
1436
  inputSize: {
@@ -1237,6 +1456,7 @@ var CLIP_EMBEDDING_MODELS = [
1237
1456
  },
1238
1457
  {
1239
1458
  id: "siglip2-b16-224",
1459
+ license: SIGLIP2_APACHE,
1240
1460
  name: "SigLIP2 B/16",
1241
1461
  description: "Google SigLIP2 base, patch 16, 224×224 — Apache-2.0 CLIP vision encoder, 768-dim (fp16 OpenVINO/CoreML)",
1242
1462
  inputSize: {
@@ -1249,7 +1469,6 @@ var CLIP_EMBEDDING_MODELS = [
1249
1469
  }],
1250
1470
  preprocessMode: "resize",
1251
1471
  inputNormalization: "none",
1252
- license: "Apache-2.0",
1253
1472
  formats: {
1254
1473
  openvino: ovFormat(hf("clip/siglip2/openvino/camstack-siglip2-b16-224-vision.xml"), 186),
1255
1474
  coreml: {
@@ -1264,6 +1483,7 @@ var CLIP_EMBEDDING_MODELS = [
1264
1483
  ];
1265
1484
  var AUDIO_CLASSIFIER_MODELS = [{
1266
1485
  id: "yamnet-onnx",
1486
+ license: YAMNET_APACHE,
1267
1487
  name: "YAMNet",
1268
1488
  description: "Google YAMNet — 521-class audio event classifier (3.2 MB ONNX, runs on any platform)",
1269
1489
  inputSize: {
@@ -1281,6 +1501,7 @@ var AUDIO_CLASSIFIER_MODELS = [{
1281
1501
  }
1282
1502
  }, {
1283
1503
  id: "apple-soundanalysis",
1504
+ license: APPLE_SOUNDANALYSIS,
1284
1505
  name: "Apple SoundAnalysis",
1285
1506
  description: "macOS built-in — 303 sound categories, Neural Engine accelerated, zero download",
1286
1507
  inputSize: {
@@ -2546,7 +2767,7 @@ var OBJECT_DETECTION_STEP_ID = "object-detection";
2546
2767
  /**
2547
2768
  * Balanced default object-detection model per accelerator class. `'cpu'` maps to
2548
2769
  * `null` → the caller substitutes the step's own `defaultModelId` (`yolo26n`).
2549
- * INTEL NPU + iGPU default to OUR YOLOv9 (int8 @320): yolo26 does NOT compile on
2770
+ * INTEL NPU + iGPU default to the Ultralytics YOLOv9 re-export (int8 @320): yolo26 does NOT compile on
2550
2771
  * the Intel NPU (arch incompat → 0 frames), while yolov9 runs on it (~298 fps
2551
2772
  * measured). Apple ANE uses the CoreML yolov9 @320 build.
2552
2773
  *