Status: Needs Review
This page has not been reviewed for accuracy and completeness. Content may be outdated or contain errors.
Plugin Nodes¶
Externally contributed nodes loaded through the plugin system. Each plugin ships its own Git repository and is loaded at runtime via a YAML manifest (see Plugin System Overview).
| Plugin | Use Case | Nodes |
|---|---|---|
| AdaCLIP | Vision-language anomaly detection | AdaCLIPDetector |
| Ultralytics | YOLO26 object detection | YOLOPreprocess, YOLO26Detection, YOLOPostprocess |
| DeepEIoU | Multi-object tracking with optional ReID | DeepEIoUTrack, OSNetExtractor, ResNetExtractor |
| SAM3 | Video object segmentation and tracking | SAM3TrackerInference, SAM3TextPropagation, SAM3BboxPropagation, SAM3PointPropagation, SAM3MaskPropagation, SAM3SegmentEverything |
| TrackEval | Tracking evaluation metrics | HOTAMetricNode, CLEARMetricNode, IdentityMetricNode |
AdaCLIP¶
Repository: cuvis-ai-adaclip
· Manifest: configs/plugins/adaclip.yaml
· Tag: v0.1.2
Adapts CLIP (Contrastive Language-Image Pre-training) for hyperspectral anomaly detection. AdaCLIP performs zero-shot visual anomaly scoring using vision-language alignment, making it powerful for detecting anomalies without extensive task-specific training.
| Node | Description |
|---|---|
AdaCLIPDetector |
Zero-shot anomaly detection using CLIP-adapted vision-language features |
Tutorial: AdaCLIP Workflow
Ultralytics¶
Repository: cuvis-ai-ultralytics
· Manifest: configs/plugins/ultralytics.yaml
· Tag: v0.1.0
Wraps Ultralytics YOLO for frame-level object detection. Provides preprocessing, inference, and postprocessing stages that slot into any tracking pipeline as the detection front-end.
| Node | Description |
|---|---|
YOLOPreprocess |
Resizes and normalizes RGB images for YOLO26 inference |
YOLO26Detection |
Runs YOLO26 object detection on prepared frames |
YOLOPostprocess |
Applies NMS filtering, confidence thresholding, and class filtering |
Example: examples/object_tracking/bytetrack/, examples/object_tracking/deepeiou/
DeepEIoU¶
Repository: cuvis-ai-deepeiou
· Manifest: configs/plugins/deepeiou.yaml
· Tag: v0.1.0
Multi-object tracker using Deep EIoU (Efficient IoU) distance with optional appearance-based association via ReID embeddings. Tracks single or multiple COCO classes and outputs COCO-format detection and tracking JSON.
| Node | Description |
|---|---|
DeepEIoUTrack |
Multi-object tracker using EIoU distance metric with optional appearance matching |
OSNetExtractor |
Lightweight ReID feature extractor using OSNet backbone |
ResNetExtractor |
ReID feature extractor using ResNet backbone |
Example: examples/object_tracking/deepeiou/
SAM3¶
Repository: cuvis-ai-sam3
· Manifest: configs/plugins/sam3.yaml
· Tag: v0.1.3
Video object segmentation and tracking using SAM 2.1 (Segment Anything Model 2.1). Supports multiple prompt strategies — text, bounding box, point, mask, or fully automatic — and works on both CU3S hyperspectral and RGB video inputs.
| Node | Description |
|---|---|
SAM3TrackerInference |
Streaming SAM3 tracker for video sequences |
SAM3TextPropagation |
Text-prompted object tracking (e.g. "person", "dog") |
SAM3BboxPropagation |
Bounding-box-prompted object tracking from COCO detection JSON |
SAM3PointPropagation |
Single-point-prompted object tracking from detection JSON |
SAM3MaskPropagation |
Mask-prompted object tracking from segmentation JSON |
SAM3SegmentEverything |
Automatic segmentation of all objects per frame (prompt-free) |
Prompt contract¶
Bbox and mask propagation use a scheduled prompt syntax:
object_id— tracker-side object ID maintained by SAM3detection_id— annotation ID copied from the supplied detection or tracking JSONframe_id— frame where the prompt is injected
Frames before the first scheduled prompt emit empty tracking outputs.
Example: examples/object_tracking/sam3/
TrackEval¶
Repository: cuvis-ai-trackeval
· Manifest: configs/plugins/trackeval.yaml
· Tag: v0.1.0
Tracking evaluation metrics from TrackEval that compare predicted tracking JSON against ground-truth in COCO bbox format. Requires aligned frame counts between GT and prediction files.
| Node | Description |
|---|---|
HOTAMetricNode |
HOTA — Higher Order Tracking Accuracy, reports DetA, AssA, LocA components |
CLEARMetricNode |
CLEAR MOT metrics — reports MOTA, MOTP, FP, FN, ID switches |
IdentityMetricNode |
Identity metrics — reports IDF1, IDP, IDR |
Example: examples/object_tracking/trackeval/
Loading Plugins¶
Load a single plugin manifest:
from cuvis_ai_core.utils.node_registry import NodeRegistry
registry = NodeRegistry()
registry.load_plugins("configs/plugins/sam3.yaml")
Or load all official plugins at once from the central registry:
uv run restore-pipeline \
--pipeline-path configs/pipeline/my_pipeline.yaml \
--plugins-path configs/plugins/registry.yaml
Combined Manifest¶
Create a custom manifest when you need multiple plugins in one file:
plugins:
ultralytics:
repo: "https://github.com/cubert-hyperspectral/cuvis-ai-ultralytics.git"
tag: "v0.1.0"
provides:
- cuvis_ai_ultralytics.node.YOLOPreprocess
- cuvis_ai_ultralytics.node.YOLO26Detection
- cuvis_ai_ultralytics.node.YOLOPostprocess
deepeiou:
repo: "https://github.com/cubert-hyperspectral/cuvis-ai-deepeiou.git"
tag: "v0.1.0"
provides:
- cuvis_ai_deepeiou.node.DeepEIoUTrack
- cuvis_ai_deepeiou.node.OSNetExtractor
- cuvis_ai_deepeiou.node.ResNetExtractor
trackeval:
repo: "https://github.com/cubert-hyperspectral/cuvis-ai-trackeval.git"
tag: "v0.1.0"
provides:
- cuvis_ai_trackeval.node.HOTAMetricNode
- cuvis_ai_trackeval.node.CLEARMetricNode
- cuvis_ai_trackeval.node.IdentityMetricNode
sam3:
repo: "https://github.com/cubert-hyperspectral/cuvis-ai-sam3.git"
tag: "v0.1.3"
provides:
- cuvis_ai_sam3.node.SAM3TrackerInference
- cuvis_ai_sam3.node.SAM3TextPropagation
- cuvis_ai_sam3.node.SAM3BboxPropagation
- cuvis_ai_sam3.node.SAM3PointPropagation
- cuvis_ai_sam3.node.SAM3MaskPropagation
- cuvis_ai_sam3.node.SAM3SegmentEverything
Then load it with:
Troubleshooting¶
- If a local plugin path fails, verify the path is correct relative to the manifest file.
- If a Git plugin fails, verify the tag exists and the repo is accessible from the current environment.
- If a node cannot be found after loading, check that the class path appears in
provides:.
See Plugin System Overview for architecture details and Plugin Development Guide for creating new plugins.