@camstack/addon-pipeline 1.2.610 → 1.2.611

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.
@@ -32,6 +32,7 @@ under [Non-commercial models](#non-commercial-models).
32
32
 
33
33
  - © Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
34
34
  - Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0. https://github.com/google-coral/test_data
35
+ - YOLOv9-s EdgeTPU weights © 2025 Dan Brown (fine-tuned to 17 COCO classes, INT8, compiled for the Edge TPU; https://github.com/dbro/frigate-detector-edgetpu-yolo9, repository MIT). Derived from the YOLOv9 code and yolov9-s checkpoint of Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the fine-tuning checkpoint (yolov9-s-relu6-best.pt), the fine-tuning and conversion notebooks and the publisher LICENSE, mirrored at https://huggingface.co/camstack/camstack-models/tree/main/source/yolov9-edgetpu-dbro. https://github.com/dbro/frigate-detector-edgetpu-yolo9
35
36
  - © 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 build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source. https://github.com/ultralytics/ultralytics
36
37
  - RF-DETR © Roboflow, Apache-2.0. https://github.com/roboflow/rf-detr
37
38
  - YuNet weights Copyright (c) 2020 Shiqi Yu, MIT. Training code: ShiqiYu/libfacedetection.train, BSD-3-Clause. https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet
@@ -48,7 +49,7 @@ under [Non-commercial models](#non-commercial-models).
48
49
 
49
50
  Training data under attribution terms:
50
51
 
51
- - **COCO 2017** (training data of `yolo26n-seg` and 50 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
52
+ - **COCO 2017** (training data of `yolo26n-seg` and 52 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
52
53
  - **WIDER FACE** (training data of `yunet-2023mar`): research-oriented terms; images CC BY-NC-ND. http://shuoyang1213.me/WIDERFACE/
53
54
  - **Open Images V7** (training data of `animal-classifier`): annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty. https://storage.googleapis.com/openimages/web/factsfigures_v7.html
54
55
  - **DrBimmer/vehicle-classification** (training data of `vehicle-type-v1`): CC-BY-NC-4.0 — treated as binding the trained weights (conservative reading). https://huggingface.co/datasets/DrBimmer/vehicle-classification
@@ -123,6 +124,7 @@ entry kept resolvable for a saved selection but no longer offered.
123
124
  | `yolo26n-seg`, `yolo26s-seg`, `yolo26m-seg` | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported to ONNX, OpenVINO IR and CoreML | mirror `segmentation/yolo26-seg` |
124
125
  | `yolo26n` (default), `yolo26s`, `yolo26m`, `yolo26l`, `yolo26x` (hidden), `yolo26n-fp16` (hidden), `yolo26n-int8`, `yolo26s-fp16` (hidden), `yolo26s-int8`, `yolo26m-fp16` (hidden), `yolo26m-int8`, `yolo26l-fp16` (hidden), `yolo26l-int8`, `yolo26n-320`, `yolo26n-320-int8`, `yolo26n-256`, `yolo26n-256-int8`, `yolo26s-320`, `yolo26s-320-int8`, `yolo26s-256`, `yolo26s-256-int8`, `yolo26m-320`, `yolo26m-320-int8`, `yolo26m-256`, `yolo26m-256-int8`, `yolo26l-320`, `yolo26l-320-int8`, `yolo26l-256`, `yolo26l-256-int8`, `yolo26x-fp16` (hidden), `yolo26x-int8` (hidden) | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py); OpenVINO FP16 export; exported to OpenVINO IR, then OpenVINO NNCF INT8 post-training quantisation; re-exported at 320×320 to ONNX, OpenVINO IR and CoreML; re-exported at 320×320 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation; re-exported at 256×256 to ONNX, OpenVINO IR and CoreML; re-exported at 256×256 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation | mirror `objectDetection/yolo26` |
125
126
  | `ssd-mobilenet-v2-coco-edgetpu` (default) | [Google Coral test_data](https://github.com/google-coral/test_data) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | none | https://github.com/google-coral/test_data |
127
+ | `yolov9s-320-edgetpu`, `yolov9s-512-edgetpu` | [YOLOv9-s EdgeTPU (Dan Brown)](https://github.com/dbro/frigate-detector-edgetpu-yolo9) | GPL-3.0 / GPL-3.0 (`GPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | none: the publisher release files are mirrored byte-identical | mirror `objectDetection/yolov9` |
126
128
  | `yolov9t-320`, `yolov9t-320-int8`, `yolov9t-640`, `yolov9t-640-int8`, `yolov9s-320`, `yolov9s-320-int8`, `yolov9s-640`, `yolov9s-640-int8`, `yolov9m-320`, `yolov9m-320-int8`, `yolov9m-640`, `yolov9m-640-int8`, `yolov9c-320`, `yolov9c-320-int8`, `yolov9c-640`, `yolov9c-640-int8` | [Ultralytics](https://github.com/ultralytics/ultralytics) | AGPL-3.0 / AGPL-3.0 (`AGPL-3.0.txt`) | COCO 2017: annotations CC-BY-4.0; images under their Flickr owners' terms | exported at 320×320 to ONNX, OpenVINO IR FP16 and CoreML; exported at 320×320 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation; exported at 640×640 to ONNX, OpenVINO IR FP16 and CoreML; exported at 640×640 to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation | mirror `objectDetection/yolov9` |
127
129
 
128
130
  ### Package detection
@@ -4,7 +4,7 @@ Object.defineProperties(exports, {
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
6
  const require_dist = require("../dist-DkfPNxQw.js");
7
- const require_model_catalogs = require("../model-catalogs-CqlA8ThV.js");
7
+ const require_model_catalogs = require("../model-catalogs-D5v2-Wue.js");
8
8
  const require_process_memory = require("../process-memory-BF_zHntD.js");
9
9
  let node_fs = require("node:fs");
10
10
  node_fs = require_chunk.__toESM(node_fs);
@@ -1,6 +1,6 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
2
  import { $ as audioAnalyzerCapability, F as PoolMemoryWatchdog, Kn as hydrateSchema, Mn as errMsg, Pn as BaseAddon, Q as audioAnalysisCapability, Qn as nodePin, Rt as mapAudioLabelToMacro, Wn as expandAudioChunkToF32le, h as DEFAULT_AUDIO_ANALYZER_CONFIG, hr as EventCategory, ln as resolvePoolMemoryPolicy, r as AUDIO_BACKEND_CHOICES, zn as audioChunkBytesPerSample } from "../dist-0D-dLBnm.mjs";
3
- import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-B4udr4Fp.mjs";
3
+ import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-CPr2weQc.mjs";
4
4
  import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B5YqxUdg.mjs";
5
5
  import * as fs from "node:fs";
6
6
  import * as path$1 from "node:path";
@@ -1,5 +1,5 @@
1
1
  const require_dist = require("./dist-DkfPNxQw.js");
2
- const require_model_catalogs = require("./model-catalogs-CqlA8ThV.js");
2
+ const require_model_catalogs = require("./model-catalogs-D5v2-Wue.js");
3
3
  const require_worker_protocol = require("./worker-protocol-C-G8qmye.js");
4
4
  let node_crypto = require("node:crypto");
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -1,5 +1,5 @@
1
1
  import { Mt as inferModelProvider, b as DEVICE_BACKEND_TO_FORMAT, et as audioKindId, f as COCO_80_LABELS, hn as stepModelRunsOnFormat, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, p as COCO_TO_MACRO } from "./dist-0D-dLBnm.mjs";
2
- import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-B4udr4Fp.mjs";
2
+ import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-CPr2weQc.mjs";
3
3
  import { t as isWorkerReply } from "./worker-protocol-D_NzPcnh.mjs";
4
4
  import { randomUUID } from "node:crypto";
5
5
  //#region src/detection-pipeline/registry/effective-confidence.ts
@@ -5,7 +5,7 @@ Object.defineProperties(exports, {
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
6
  const require_dist = require("../dist-DkfPNxQw.js");
7
7
  const require_node = require("../node-CpUZKfZC.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-Ci_-yU1S.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-CPStyC-O.js");
9
9
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
10
10
  const require_process_memory = require("../process-memory-BF_zHntD.js");
11
11
  let node_os = require("node:os");
@@ -1,7 +1,7 @@
1
1
  import { n as __require } from "../chunk-DnnnRqeS.mjs";
2
2
  import { Bn as createEvent, Ct as evaluateZoneRules, F as PoolMemoryWatchdog, Gn as hfModelUrl, It as loadContributionCapability, Jt as pickClusterStepSettings, Kn as hydrateSchema, Kt as overlayClusterStepSettings, Mn as errMsg$1, O as LABEL_SUPPLY_MACRO, Pn as BaseAddon, Pt as linkedLabelStepId, Qn as nodePin, St as enumerateInferenceDevices, Wt as modelBindingKey, X as applyModelBoundSettings, Zt as pipelineExecutorCapability, _t as detectionPipelineCapability, bn as supportedRuntimes$1, ct as containingParentIndex, d as CLUSTER_MODEL_SCOPED_STEPS, fn as rootSuppliesOf, ft as defaultDeviceFor$1, g as DEFAULT_CLUSTER_STEP_SETTINGS, hn as stepModelRunsOnFormat, hr as EventCategory, in as resolveClusterStepModelId, ir as array, ln as resolvePoolMemoryPolicy, mr as union, n as APPLE_SA_TO_MACRO, pn as runtimeDevices$1, pr as string, q as YAMNET_TO_MACRO, st as collectModelBoundKeys, tr as sleep, ur as object, yt as edgetpuDelegateDevice } from "../dist-0D-dLBnm.mjs";
3
3
  import { c as readProcessCost } from "../node-CXQrV8Tv.mjs";
4
- import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-D4nyEGYU.mjs";
4
+ import { C as resolveModelDefaultConfidence, S as landmarkPrecisionVerdict, _ as ALL_STEPS, b as getStepDefinition, f as localFrameRegistry, g as ALL_PIPELINE_STEPS, l as resolveDefaultDetectionModel, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, v as getDefaultModelForFormat, x as resolveModelForFormat, y as getStep } from "../custom-model-catalog-Cw5freGh.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
6
  import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-B5YqxUdg.mjs";
7
7
  import * as os$1 from "node:os";
@@ -1,4 +1,4 @@
1
- import { Gn as hfModelUrl } from "./dist-0D-dLBnm.mjs";
1
+ import { Gn as hfModelUrl, f as COCO_80_LABELS } from "./dist-0D-dLBnm.mjs";
2
2
  //#region src/detection-pipeline/registry/model-licenses.ts
3
3
  var COCO_DATA = {
4
4
  name: "COCO 2017",
@@ -27,6 +27,30 @@ var ULTRALYTICS_YOLOV9_AGPL = {
27
27
  ...ULTRALYTICS_AGPL,
28
28
  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 build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source."
29
29
  };
30
+ /**
31
+ * YOLOv9-s fine-tuned to 17 COCO classes and compiled for the Coral by Dan
32
+ * Brown (verified 2026-10-22 from the publisher's repository): the training
33
+ * notebook clones WongKinYiu/yolov9 (GPL-3.0, licence API) and starts from its
34
+ * `yolov9-s-converted.pt` release; the data is COCO 2017 filtered to 17
35
+ * classes. The repository's LICENSE.md is MIT and covers the publisher's own
36
+ * plugin and notebooks; no separate licence is stated for the release weights,
37
+ * so the record carries the terms of the GPL-3.0 checkpoint they derive from.
38
+ * CamStack does not alter or re-host the files: a node downloads them from the
39
+ * publisher's GitHub release, pinned by sha256 (the format's `revision`).
40
+ */
41
+ var DBRO_YOLOV9_EDGETPU_GPL = {
42
+ weights: "GPL-3.0",
43
+ code: "GPL-3.0",
44
+ data: COCO_DATA,
45
+ upstream: {
46
+ name: "YOLOv9-s EdgeTPU (Dan Brown)",
47
+ url: "https://github.com/dbro/frigate-detector-edgetpu-yolo9"
48
+ },
49
+ url: "https://github.com/WongKinYiu/yolov9/blob/main/LICENSE.md",
50
+ attribution: "YOLOv9-s EdgeTPU weights © 2025 Dan Brown (fine-tuned to 17 COCO classes, INT8, compiled for the Edge TPU; https://github.com/dbro/frigate-detector-edgetpu-yolo9, repository MIT). Derived from the YOLOv9 code and yolov9-s checkpoint of Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the fine-tuning checkpoint (yolov9-s-relu6-best.pt), the fine-tuning and conversion notebooks and the publisher LICENSE, mirrored at https://huggingface.co/camstack/camstack-models/tree/main/source/yolov9-edgetpu-dbro.",
51
+ modifications: "none: the publisher release files are mirrored byte-identical",
52
+ hosting: "camstack-hf"
53
+ };
30
54
  /** The CamStack Coral COCO detector (SSD MobileNet V2). */
31
55
  var CORAL_COCO_APACHE = {
32
56
  weights: "Apache-2.0",
@@ -370,6 +394,60 @@ var yolov9Reduced = (tier, res, sizes) => {
370
394
  formats: { openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-int8.xml`), sizes.ovInt8) }
371
395
  }];
372
396
  };
397
+ var COCO17_LABELS = [
398
+ "person",
399
+ "bicycle",
400
+ "car",
401
+ "motorcycle",
402
+ "airplane",
403
+ "bus",
404
+ "train",
405
+ "truck",
406
+ "boat",
407
+ "bird",
408
+ "cat",
409
+ "dog",
410
+ "horse",
411
+ "sheep",
412
+ "cow",
413
+ "elephant",
414
+ "bear"
415
+ ].map((id) => {
416
+ const label = COCO_80_LABELS.find((l) => l.id === id);
417
+ if (label === void 0) throw new Error(`COCO17 label "${id}" is not a COCO-80 id`);
418
+ return label;
419
+ });
420
+ /**
421
+ * YOLOv9-s compiled for the Coral Edge TPU (community build, record
422
+ * `DBRO_YOLOV9_EDGETPU_GPL`): INT8, uint8 input, int8 class logits `[1, N, 17]`
423
+ * + DFL boxes `[1, N, 64]` with the strides 8/16/32 concatenated (the v1.5
424
+ * build adds a `[1, N, 1]` max-score tensor) — decoded by `yolo-split-dfl`.
425
+ * Mirrored unchanged on our Hugging Face repo from the publisher's release
426
+ * (`release`); the revision comes from the mirror's table (D744), and the
427
+ * corresponding source sits in
428
+ * `source/yolov9-edgetpu-dbro/`. Selectable only: the tflite default stays the Coral SSD, and
429
+ * no hardware rule names these (D39). Floors are the stock defaults until
430
+ * measured.
431
+ */
432
+ var yolov9EdgeTpuEntry = (res, release, file, sizeMB, note) => ({
433
+ id: `yolov9s-${res}-edgetpu`,
434
+ name: `YOLOv9 Small @${res} (Coral)`,
435
+ description: `YOLOv9-s @${res}×${res}, fine-tuned to 17 COCO classes, INT8 compiled for the Coral Edge TPU (community release ${release}). ${note}`,
436
+ inputSize: {
437
+ width: res,
438
+ height: res
439
+ },
440
+ labels: COCO17_LABELS,
441
+ preprocessMode: "letterbox",
442
+ postprocessor: "yolo-split-dfl",
443
+ license: DBRO_YOLOV9_EDGETPU_GPL,
444
+ formats: { tflite: {
445
+ url: hf(`objectDetection/yolov9/tflite/${file}`),
446
+ sizeMB,
447
+ runtimes: ["python"]
448
+ } }
449
+ });
450
+ var yolov9EdgeTpu = [yolov9EdgeTpuEntry(320, "v1.0", "yolov9-s-relu6-best_320_int8_edgetpu.tflite", 7.8, "Every op on the TPU; ~10 ms/frame as published."), yolov9EdgeTpuEntry(512, "v1.5", "yolov9-s-relu6-tpumax_512_int8_edgetpu.tflite", 7.8, "Finds smaller subjects than @320; ~21 ms/frame as published.")];
373
451
  /**
374
452
  * Reduced-input YOLO26 variants (2026-07-11). A lower square input (320 / 256)
375
453
  * is the biggest, cheapest latency lever measured across every runtime — Mac
@@ -610,6 +688,7 @@ var OBJECT_DETECTION_MODEL_ENTRIES = [
610
688
  runtimes: ["python"]
611
689
  } }
612
690
  },
691
+ ...yolov9EdgeTpu,
613
692
  {
614
693
  id: "yolo26n-seg",
615
694
  license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
@@ -27,6 +27,30 @@ var ULTRALYTICS_YOLOV9_AGPL = {
27
27
  ...ULTRALYTICS_AGPL,
28
28
  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 build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source."
29
29
  };
30
+ /**
31
+ * YOLOv9-s fine-tuned to 17 COCO classes and compiled for the Coral by Dan
32
+ * Brown (verified 2026-10-22 from the publisher's repository): the training
33
+ * notebook clones WongKinYiu/yolov9 (GPL-3.0, licence API) and starts from its
34
+ * `yolov9-s-converted.pt` release; the data is COCO 2017 filtered to 17
35
+ * classes. The repository's LICENSE.md is MIT and covers the publisher's own
36
+ * plugin and notebooks; no separate licence is stated for the release weights,
37
+ * so the record carries the terms of the GPL-3.0 checkpoint they derive from.
38
+ * CamStack does not alter or re-host the files: a node downloads them from the
39
+ * publisher's GitHub release, pinned by sha256 (the format's `revision`).
40
+ */
41
+ var DBRO_YOLOV9_EDGETPU_GPL = {
42
+ weights: "GPL-3.0",
43
+ code: "GPL-3.0",
44
+ data: COCO_DATA,
45
+ upstream: {
46
+ name: "YOLOv9-s EdgeTPU (Dan Brown)",
47
+ url: "https://github.com/dbro/frigate-detector-edgetpu-yolo9"
48
+ },
49
+ url: "https://github.com/WongKinYiu/yolov9/blob/main/LICENSE.md",
50
+ attribution: "YOLOv9-s EdgeTPU weights © 2025 Dan Brown (fine-tuned to 17 COCO classes, INT8, compiled for the Edge TPU; https://github.com/dbro/frigate-detector-edgetpu-yolo9, repository MIT). Derived from the YOLOv9 code and yolov9-s checkpoint of Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the fine-tuning checkpoint (yolov9-s-relu6-best.pt), the fine-tuning and conversion notebooks and the publisher LICENSE, mirrored at https://huggingface.co/camstack/camstack-models/tree/main/source/yolov9-edgetpu-dbro.",
51
+ modifications: "none: the publisher release files are mirrored byte-identical",
52
+ hosting: "camstack-hf"
53
+ };
30
54
  /** The CamStack Coral COCO detector (SSD MobileNet V2). */
31
55
  var CORAL_COCO_APACHE = {
32
56
  weights: "Apache-2.0",
@@ -370,6 +394,60 @@ var yolov9Reduced = (tier, res, sizes) => {
370
394
  formats: { openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-int8.xml`), sizes.ovInt8) }
371
395
  }];
372
396
  };
397
+ var COCO17_LABELS = [
398
+ "person",
399
+ "bicycle",
400
+ "car",
401
+ "motorcycle",
402
+ "airplane",
403
+ "bus",
404
+ "train",
405
+ "truck",
406
+ "boat",
407
+ "bird",
408
+ "cat",
409
+ "dog",
410
+ "horse",
411
+ "sheep",
412
+ "cow",
413
+ "elephant",
414
+ "bear"
415
+ ].map((id) => {
416
+ const label = require_dist.COCO_80_LABELS.find((l) => l.id === id);
417
+ if (label === void 0) throw new Error(`COCO17 label "${id}" is not a COCO-80 id`);
418
+ return label;
419
+ });
420
+ /**
421
+ * YOLOv9-s compiled for the Coral Edge TPU (community build, record
422
+ * `DBRO_YOLOV9_EDGETPU_GPL`): INT8, uint8 input, int8 class logits `[1, N, 17]`
423
+ * + DFL boxes `[1, N, 64]` with the strides 8/16/32 concatenated (the v1.5
424
+ * build adds a `[1, N, 1]` max-score tensor) — decoded by `yolo-split-dfl`.
425
+ * Mirrored unchanged on our Hugging Face repo from the publisher's release
426
+ * (`release`); the revision comes from the mirror's table (D744), and the
427
+ * corresponding source sits in
428
+ * `source/yolov9-edgetpu-dbro/`. Selectable only: the tflite default stays the Coral SSD, and
429
+ * no hardware rule names these (D39). Floors are the stock defaults until
430
+ * measured.
431
+ */
432
+ var yolov9EdgeTpuEntry = (res, release, file, sizeMB, note) => ({
433
+ id: `yolov9s-${res}-edgetpu`,
434
+ name: `YOLOv9 Small @${res} (Coral)`,
435
+ description: `YOLOv9-s @${res}×${res}, fine-tuned to 17 COCO classes, INT8 compiled for the Coral Edge TPU (community release ${release}). ${note}`,
436
+ inputSize: {
437
+ width: res,
438
+ height: res
439
+ },
440
+ labels: COCO17_LABELS,
441
+ preprocessMode: "letterbox",
442
+ postprocessor: "yolo-split-dfl",
443
+ license: DBRO_YOLOV9_EDGETPU_GPL,
444
+ formats: { tflite: {
445
+ url: hf(`objectDetection/yolov9/tflite/${file}`),
446
+ sizeMB,
447
+ runtimes: ["python"]
448
+ } }
449
+ });
450
+ var yolov9EdgeTpu = [yolov9EdgeTpuEntry(320, "v1.0", "yolov9-s-relu6-best_320_int8_edgetpu.tflite", 7.8, "Every op on the TPU; ~10 ms/frame as published."), yolov9EdgeTpuEntry(512, "v1.5", "yolov9-s-relu6-tpumax_512_int8_edgetpu.tflite", 7.8, "Finds smaller subjects than @320; ~21 ms/frame as published.")];
373
451
  /**
374
452
  * Reduced-input YOLO26 variants (2026-07-11). A lower square input (320 / 256)
375
453
  * is the biggest, cheapest latency lever measured across every runtime — Mac
@@ -610,6 +688,7 @@ var OBJECT_DETECTION_MODEL_ENTRIES = [
610
688
  runtimes: ["python"]
611
689
  } }
612
690
  },
691
+ ...yolov9EdgeTpu,
613
692
  {
614
693
  id: "yolo26n-seg",
615
694
  license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
@@ -5,7 +5,7 @@ Object.defineProperties(exports, {
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
6
  const require_dist = require("../dist-DkfPNxQw.js");
7
7
  const require_node = require("../node-CpUZKfZC.js");
8
- const require_custom_model_catalog = require("../custom-model-catalog-Ci_-yU1S.js");
8
+ const require_custom_model_catalog = require("../custom-model-catalog-CPStyC-O.js");
9
9
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
10
10
  const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
11
11
  const require_restream_intent = require("../restream-intent-7uDNqMKs.js");
@@ -1,6 +1,6 @@
1
1
  import { A as NativeLeaseAdmissionSchema, Bn as createEvent, Dt as failureContributionCapability, E as FailureCounters, Ft as linkedStepOf, Hn as defineCustomActions, It as loadContributionCapability, M as NodeBenchRunnerInputSchema, Mn as errMsg, P as PIPELINE_RAMP, Pn as BaseAddon, Qn as nodePin, Qt as pipelineRunnerCapability, Rn as MODEL_FORMATS, V as ROOT_SUPPLIABLE_STEP_IDS, Vn as customAction, Xt as pickNativeLeaseOverride, Y as allowedSuppliedEffect, Yt as pickDetailCropConvention, _ as DEFAULT_DETAIL_CROP_CONVENTION, a as BackgroundRunRegistry, ar as boolean, cn as resolveModelBoundSetting, cr as literal, dn as resolveRootSupply, fn as rootSuppliesOf, gt as deriveRootFaceRefineRect, hr as EventCategory, ir as array, j as NativeLeaseSettingsSchema, lr as number, m as CROP_SUPPLY_SOURCES, mt as deriveDetailCropRect, nt as buildBenchStepTree, pr as string, rr as _enum, rt as cameraOwnsMotionViaSensor, sr as lazy, ur as object, x as DEVICE_RAMP, y as DEFAULT_NATIVE_LEASE_SETTINGS } from "../dist-0D-dLBnm.mjs";
2
2
  import { i as NO_COST_CLAIM, t as ChildCostRegistry } from "../node-CXQrV8Tv.mjs";
3
- import { a as stepsForElectedPool, b as getStepDefinition, d as rootObjectGate, f as localFrameRegistry, h as resolveFrameViewGeometry, i as placeDetailStep, l as resolveDefaultDetectionModel, m as createSessionDecodeCoordinator, p as isSessionDecodeReadGone, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, y as getStep } from "../custom-model-catalog-D4nyEGYU.mjs";
3
+ import { a as stepsForElectedPool, b as getStepDefinition, d as rootObjectGate, f as localFrameRegistry, h as resolveFrameViewGeometry, i as placeDetailStep, l as resolveDefaultDetectionModel, m as createSessionDecodeCoordinator, p as isSessionDecodeReadGone, s as resolveDeviceEngine, t as CustomModelCatalog, u as macroGateVerdict, y as getStep } from "../custom-model-catalog-Cw5freGh.mjs";
4
4
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
6
6
  import { c as withDetectionIntent, o as preRollRequestOf, t as DETECTION_PRE_ROLL_REQUEST_MS } from "../restream-intent-DyGmLAU9.mjs";
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
3
3
  var e = {
4
4
  "@camstack/sdk": {
5
5
  name: "@camstack/sdk",
6
- version: "1.2.142",
6
+ version: "1.2.143",
7
7
  scope: ["default"],
8
8
  loaded: !1,
9
9
  from: "addon_stream_broker_widgets",
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.392",
21
+ version: "1.2.393",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_stream_broker_widgets",
@@ -33,7 +33,7 @@ var e = {
33
33
  },
34
34
  "@camstack/ui-library": {
35
35
  name: "@camstack/ui-library",
36
- version: "1.2.309",
36
+ version: "1.2.310",
37
37
  scope: ["default"],
38
38
  loaded: !1,
39
39
  from: "addon_stream_broker_widgets",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.392",
39
+ version: "1.2.393",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.142",
48
+ version: "1.2.143",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.309",
84
+ version: "1.2.310",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BypETcj_.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-8eIi2CRB.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.2.610",
3
+ "version": "1.2.611",
4
4
  "description": "Pipeline bundle — runner, detection, motion, audio + stream broker. Multi-entry npm package shipping pipeline addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",