Status: Needs Review
This page has not been reviewed for accuracy and completeness. Content may be outdated or contain errors.
Plugin System Overview¶
cuvis-ai plugins extend NodeRegistry with external node classes without requiring changes to the core repository. A plugin can come from a tagged Git release or a local checkout.
Manifest Shapes¶
Each plugin manifest uses a plugins: mapping and one of two source styles:
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
trackeval:
repo: "https://github.com/cubert-hyperspectral/cuvis-ai-trackeval.git"
tag: "v0.1.0"
provides:
- cuvis_ai_trackeval.node.HOTAMetricNode
sam3:
path: "../../../../cuvis-ai-sam3/sam3-init"
provides:
- cuvis_ai_sam3.node.SAM3TextPropagation
repo+tag: clone a released plugin into the local cache.path: load a local checkout directly. Relative paths resolve from the manifest directory.provides: list fully-qualified class paths that the plugin exports.
Loading Flow¶
from cuvis_ai_core.utils.node_registry import NodeRegistry
registry = NodeRegistry()
registry.load_plugins("configs/plugins/trackeval.yaml")
HOTAMetricNode = registry.get("HOTAMetricNode", instance=registry)
NodeRegistry.load_plugins() validates the manifest, resolves local paths relative to the manifest file, installs plugin dependencies from pyproject.toml, and registers each provided node class in the instance registry.
Cache and Isolation¶
- Git plugins are cached under
~/.cuvis_plugins/. - Local-path plugins are loaded from the referenced checkout directly.
- Plugin nodes are stored per
NodeRegistryinstance, so one session can load plugins without affecting another.
Selective Manifests in This Repo¶
configs/plugins/adaclip.yaml: released AdaCLIP plugin.configs/plugins/ultralytics.yaml: released Ultralytics YOLO26 plugin atv0.1.0.configs/plugins/deepeiou.yaml: released DeepEIoU plugin atv0.1.0.configs/plugins/trackeval.yaml: released TrackEval plugin atv0.1.0.configs/plugins/sam3.yaml: local SAM3 checkout for active development.
Use a selective manifest when you want one plugin family without building a larger combined manifest first.
Custom Combined Manifests¶
Create a local manifest when you want multiple plugins together:
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:
path: "../../../../cuvis-ai-sam3/sam3-init"
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
See Plugin Nodes for CLI and Python examples, and Plugin Development Guide for packaging rules.