camstack-models / THIRD_PARTY_MODELS.md
apocaliss92's picture
docs: notices, licences and source/ after the plate detector swap (D718)
90c9878 verified
|
Raw History Blame Contribute Delete
21.2 kB
<!--
THIRD_PARTY_MODELS.md: the product notice for every model CamStack can download.
GENERATED by scripts/gen-model-licenses.ts from the licence records on the model
catalogs (D661). Do not edit it: change the record in the catalog
(packages/addon-pipeline/src/detection-pipeline/registry/model-licenses.ts,
packages/addon-post-analysis/src/embedding-encoder/catalogs/model-licenses.ts,
packages/addon-ai/src/runtime/llm-model-licenses.ts), then run npm run models:notices.
The package copies (packages/addon-pipeline, packages/addon-post-analysis, packages/addon-ai, packages/addon-model-studio, server/backend) are byte-identical
(npm cannot ship a file from outside the package); the Hugging Face mirror receives
the same file from hf/camstack-models/upload.sh. Drift fails CI.
Facts: docs/superpowers/specs/2026-09-26-model-license-compliance.md. Not legal advice.
-->
# Third-party models
CamStack's own source code is MIT-licensed (see `LICENSE`). CamStack does not
include model weights in its npm packages or its Docker image. It downloads
them, on demand, from the locations listed below. **Each model stays under its
own licence.** Converting a model to another format does not change its
licence: every CamStack-made build is a modified version (a "model derivative")
of the upstream weights, and the change is stated per model.
Full licence texts: `licenses/models/` in the CamStack source repository, and
[`LICENSES/`](https://huggingface.co/camstack/camstack-models/tree/main/LICENSES)
in the model mirror https://huggingface.co/camstack/camstack-models.
Some of these models are **not licensed for commercial use**. They are listed
under [Non-commercial models](#non-commercial-models).
## Required attributions
- Β© 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
- Coral Edge TPU models and AIY Vision Birds V1 Β© Google LLC, Apache-2.0. https://github.com/google-coral/test_data
- Β© 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
- RF-DETR Β© Roboflow, Apache-2.0. https://github.com/roboflow/rf-detr
- 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
- AuraFace v1 by fal.ai, Apache-2.0. https://huggingface.co/fal/AuraFace-v1
- open-lpr models, Copyright the open-lpr contributors, Apache-2.0 (https://huggingface.co/faisalthaheem/open-lpr-models, tag detector-2026.10.1). YOLOX architecture and COCO pretraining by Megvii (https://github.com/Megvii-BaseDetection/YOLOX), Apache-2.0. The upstream NOTICE is reproduced verbatim (`NOTICE-open-lpr.txt`). https://huggingface.co/faisalthaheem/open-lpr-models
- fast-plate-ocr, MIT License, copyright (c) 2024 ankandrew (full notice: licenses/models/MIT-fast-plate-ocr.txt). https://github.com/ankandrew/fast-plate-ocr
- 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. https://github.com/huggingface/pytorch-image-models
- 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. https://github.com/pytorch/vision
- SigLIP 2 Β© Google LLC, Apache-2.0. https://huggingface.co/google/siglip2-base-patch16-224
- UΒ²-Net Β© Xuebin Qin et al., Apache-2.0. https://github.com/xuebinqin/U-2-Net
- YAMNet Β© Google LLC, Apache-2.0. AudioSet ontology and labels Β© Google LLC, CC BY 4.0. https://github.com/tensorflow/models/tree/master/research/audioset/yamnet
- Qwen models Β© Alibaba Cloud, Apache-2.0. https://huggingface.co/Qwen Β· https://huggingface.co/unsloth Β· https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF
- Built with Llama. Llama 3.2 is licensed under the Llama 3.2 Community License, Copyright Β© Meta Platforms, Inc. All Rights Reserved. https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF
Training data under attribution terms:
- **COCO 2017** (training data of `yolo26n` and 50 more): annotations CC-BY-4.0; images under their Flickr owners' terms. https://cocodataset.org/#termsofuse
- **WIDER FACE** (training data of `yunet-2023mar`): research-oriented terms; images CC BY-NC-ND. http://shuoyang1213.me/WIDERFACE/
- **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
- **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
- **AudioSet ontology/labels** (training data of `yamnet-onnx`): CC-BY-4.0 (Google LLC). https://research.google.com/audioset/
## Source offer for the AGPL-3.0 weights
<!--
This section is the ONE place the source offer is written. The package copies are
byte-identical copies of this file, and the Hugging Face model card, its LICENSE and its folder
cards link here instead of repeating it.
-->
The folders `objectDetection/yolo26`, `objectDetection/yolov9` and `segmentation/yolo26-seg` of the model mirror hold Ultralytics weights,
modified by CamStack and distributed under AGPL-3.0. Their Corresponding Source
is published in the mirror itself, in its **`source/`** folder,
**https://huggingface.co/camstack/camstack-models/tree/main/source**, together
with the upstream checkpoints it starts from:
1. **The upstream checkpoints.** Ultralytics publishes
`yolo26{n,s,m,l,x}.pt`, `yolov9{t,s,m,c}.pt` and `yolo26{n,s,m}-seg.pt` at
https://github.com/ultralytics/assets/releases.
2. **The build script** in `source/`: `build-camstack-models.py`, with
`convert_lib.py` (the ONNX to OpenVINO / INT8 converter it calls, the same
file CamStack's Model Studio runs) and `requirements.txt`. It holds one
recipe per hosted file: the upstream checkpoint, the input size, the
Ultralytics `export()` arguments, the OpenVINO precision and the INT8
calibration count that file records about itself. Every hosted
Ultralytics-derived file is rebuilt by one invocation:
`build-camstack-models.py --variant <file stem>` (for example
`camstack-yolo26n-320` or `camstack-yolov9m-640`), `--family <folder>`
or `--all`; `--list` prints the recipes and `--check-hosted` confirms
against the mirror that every hosted file is a recipe output. The INT8
builds are NNCF post-training quantisation calibrated on COCO images: 128
for YOLO26, 300 for YOLOv9, as each IR records; the documented set is the
first N of COCO val2017 in file-name order. The Python
environment, the recorded tool versions and the calibration set are in
`source/README.md` and the script's header. These scripts are CamStack's
own code and are offered under the MIT licence; the weights they produce
keep their upstream licence.
Limits of a rebuild:
- **Tool versions.** With the Ultralytics, PyTorch, coremltools and OpenVINO
versions each recipe names, a rebuild reproduces the hosted weights. Other
versions give the same weights in a possibly different graph.
- **INT8 calibration.** An IR records how many images calibrated it, not
which ones. Calibrating on the same COCO images gives the documented build;
a different set gives an equivalent, not bit-identical, INT8 model.
## Non-commercial models
These are downloaded by default or selectable, and their terms **do not allow
commercial use**:
| Model | Used for | Terms |
| --- | --- | --- |
| `vehicle-type-v1` (default) | Vehicle classifier | CC-BY-NC-4.0; training data: CC-BY-NC-4.0 β€” treated as binding the trained weights (conservative reading) ([terms](https://creativecommons.org/licenses/by-nc/4.0/)) |
## Models
"Mirror" means https://huggingface.co/camstack/camstack-models, folder given.
"Code / weights" gives the two licences separately because they often differ.
**Unknown** means no licence could be traced; it does not mean free to use.
*default* marks the model a step runs when nobody chose one; *hidden* marks an
entry kept resolvable for a saved selection but no longer offered.
### Object detection
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `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` |
| `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 |
| `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` |
### Package detection
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `rfdetr-package` (default) | [Roboflow RF-DETR](https://github.com/roboflow/rf-detr) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | parcel fine-tuning set (not recorded): UNVERIFIED | RF-DETR-M fine-tuned to 2 classes at 576; exported to ONNX, OpenVINO IR and CoreML; training checkpoint .pth also published | mirror `packageDetection/rfdetr-package` |
### Face detection
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `yunet-2023mar` (default) | [OpenCV Zoo YuNet](https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet) | BSD-3-Clause (`BSD-3-Clause.txt`) / MIT (`MIT-yunet-reference.txt`) | WIDER FACE: research-oriented terms; images CC BY-NC-ND | 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) | mirror `faceDetection/yunet` |
### Face recognition
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `auraface-r100` (default) | [fal.ai AuraFace v1 (glintr100.onnx only)](https://huggingface.co/fal/AuraFace-v1) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | input scaling y = 2x - 1 baked ahead of the first Conv (scripts/build-auraface-model.py); converted to OpenVINO IR and CoreML FP16 | mirror `faceRecognition/auraface` |
### Licence plate detection
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `yolox-tiny-plate` (default) | [open-lpr models (faisalthaheem/open-lpr-models), YOLOX-tiny](https://huggingface.co/faisalthaheem/open-lpr-models) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | Simanno annotated plate corpus plus community-contributed photographs, pseudo-labelled by a teacher model (not published; the upstream NOTICE says the photographs were uploaded without consent obtained): UNKNOWN | input contract baked into the graph (static 1x3x640x640 RGB /255 becomes the upstream BGR 0..255: Mul(255) plus a channel Gather) and the output reshaped to the YOLOv8 layout (cx, cy, w, h, obj*cls); ONNX fp32, OpenVINO IR fp16, CoreML fp16 (scripts/build-yolox-plate-model.py) | mirror `plateDetection/yolox-tiny-plate` |
### Licence plate reading
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `cct-s-v2-global` (default) | [ankandrew/fast-plate-ocr](https://github.com/ankandrew/fast-plate-ocr) | MIT / MIT (`MIT-fast-plate-ocr.txt`) | fast-plate-ocr training set: private, not released upstream | input head removed (recorded in the ONNX doc_string); converted to OpenVINO IR and CoreML | mirror `plateRecognition/cct-s-v2-global` |
### Animal classifier
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `animal-classifier` (default) | [timm EfficientNet-Lite0, fine-tuned by CamStack](https://github.com/huggingface/pytorch-image-models) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | Open Images V7: annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty | fine-tuned by CamStack on the Open Images V7 animal subset (8 classes); exported to ONNX, OpenVINO IR and CoreML | mirror `animalClassification/animal-classifier` |
### Bird classifier
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `bird-classifier` (default) | [Google AIY Vision birds_V1](https://github.com/google-coral/test_data) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | converted from TensorFlow with tf2onnx; OpenVINO IR and CoreML derived from it | mirror `animalClassification/bird-classifier` |
### Vehicle classifier
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `vehicle-type-v1` (default) | [torchvision MobileNetV3-Large, fine-tuned by CamStack](https://github.com/pytorch/vision) | BSD-3-Clause (`BSD-3-Clause.txt`) / **CC-BY-NC-4.0** (`CC-BY-NC-4.0.txt`) | DrBimmer/vehicle-classification: CC-BY-NC-4.0 β€” treated as binding the trained weights (conservative reading) | fine-tuned by CamStack (8 classes); exported to ONNX, OpenVINO IR and CoreML | mirror `vehicleClassification/vehicle-type-v1` |
### Semantic search, image encoders (CLIP)
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `siglip2-b16-224` (default) | [Google SigLIP 2 (google/siglip2-base-patch16-224)](https://huggingface.co/google/siglip2-base-patch16-224) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | WebLI: Google internal, not released | 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) | mirror `clip/siglip2` |
### Semantic search, text encoders (CLIP)
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `siglip2-b16-224-text` | [Google SigLIP 2 (google/siglip2-base-patch16-224)](https://huggingface.co/google/siglip2-base-patch16-224) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | WebLI: Google internal, not released | input sliced to the model's 64 positions in the graph; ONNX weights FP16, OpenVINO IR and CoreML FP16; a Lowercase normalizer prepended to the Gemma tokenizer (scripts/build-siglip2-model.py) | mirror `clip/siglip2` |
### Segmentation
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `u2netp` (default) | [xuebinqin/U-2-Net](https://github.com/xuebinqin/U-2-Net) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | DUTS-TR: not checked | converted to ONNX, OpenVINO IR and CoreML | mirror `segmentationRefiner/u2netp` |
### Instance segmentation (dormant step)
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `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` |
### Audio
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `yamnet-onnx` (default) | [tensorflow/models research/audioset/yamnet](https://github.com/tensorflow/models/tree/master/research/audioset/yamnet) | Apache-2.0 / Apache-2.0 (`Apache-2.0.txt`) | AudioSet ontology/labels: CC-BY-4.0 (Google LLC) | converted from TensorFlow with tf2onnx; OpenVINO IR derived from it | mirror `audioClassification/yamnet` |
| `apple-soundanalysis` (default) | [Apple SoundAnalysis (macOS built-in)](https://developer.apple.com/documentation/soundanalysis) | β€” / LicenseRef-Apple-macOS | β€” | none | built in, nothing downloaded |
### Language and vision-language models (AI addon)
| Catalog ids | Upstream | Code / weights | Training data | CamStack changes | Downloaded from |
| --- | --- | --- | --- | --- | --- |
| `llm-qwen2.5-1.5b-instruct-q4` | [Qwen (Alibaba Cloud)](https://huggingface.co/Qwen) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | none (GGUF Q4_K_M published by Qwen; not re-hosted by CamStack) | https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF |
| `llm-llama3.2-3b-instruct-q4` | [Meta Llama 3.2 (GGUF by bartowski)](https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF) | β€” / LicenseRef-Llama-3.2-Community (`Llama-3.2-Community.txt`) | β€” | Q4_K_M GGUF quantisation by bartowski (not re-hosted by CamStack) | https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF |
| `llm-qwen3-vl-2b-instruct-q4` | [Qwen3-VL (GGUF by unsloth)](https://huggingface.co/unsloth) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3-VL-2B-Instruct-GGUF |
| `llm-qwen3-vl-4b-instruct-q4` | [Qwen3-VL (GGUF by unsloth)](https://huggingface.co/unsloth) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3-VL-4B-Instruct-GGUF |
| `llm-qwen3-vl-8b-instruct-q4` | [Qwen3-VL (GGUF by unsloth)](https://huggingface.co/unsloth) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3-VL-8B-Instruct-GGUF |
| `llm-qwen3.6-35b-a3b-ud-q4` | [Qwen3.6-35B-A3B (GGUF by unsloth)](https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF) | β€” / Apache-2.0 (`Apache-2.0.txt`) | β€” | UD-Q4_K_M GGUF quantisation by unsloth (not re-hosted by CamStack) | https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF |
### Your own models
Model Studio can import third-party models (for example community
object-detection catalogs) on request. They are downloaded from their
publishers, are not hosted or redistributed by CamStack, and keep their
publishers' licences; Model Studio shows the licence where the source declares
one. A model you upload or convert
yourself, or pull from your own Frigate+ account, likewise keeps whatever
licence its author published. CamStack does not change it and does not record
it.