modelbeast/server/operators/vidgod_index/manifest.json
John King 8965d2240b feat(operators): vidgod_roto + vidgod_index, requires_path node gating
Two stdlib-only wrapper ops around the VIDGOD stack (gitea monster/vidgod):
click-to-cutout (SAM2.1+MatAnyone -> ProRes 4444 alpha) and clip-library
indexing (PySceneDetect + mlx-whisper). They shell out to ~/Documents/VIDGOD
bin CLIs, which carry their own venvs — no MODELBEAST venv or install script.

New optional manifest field requires_path: gates the LOCAL node on a path
existing (expanduser), so ops whose stack lives only on some boxes are not
grabbed by the primary. Remote nodes stay allowlist-gated via nodes.json
(vidgod_* allowlisted on m1/ultra only for now).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 14:44:48 +10:00

20 lines
992 B
JSON

{
"id": "vidgod_index",
"name": "Clip Library Index (VIDGOD)",
"category": "video",
"description": "Index a video into the node's VIDGOD clip library: PySceneDetect shot split + mlx-whisper transcript + thumbnails into library/clips.sqlite. Library lives on the node that runs the job (canonical: ultra) — search it there with vg-find. Returns an index summary JSON.",
"accepts": ["video"],
"produces": ["json"],
"resources": "cpu",
"entry": "run.py",
"requires_path": "~/Documents/VIDGOD/bin/vg-index",
"params_schema": {
"type": "object",
"properties": {
"no_whisper": {"type": "boolean", "default": false, "description": "Skip transcription (shots + thumbnails only)"},
"min_shot": {"type": "number", "default": 0.5, "description": "Minimum shot length, seconds"},
"keep_copy": {"type": "boolean", "default": true, "description": "Keep a copy of the video in VIDGOD/library/ingest/ so library entries outlive the job workspace"}
}
}
}