@growthub/cli 0.3.54 → 0.3.55
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.
- package/assets/worker-kits/growthub-ai-website-cloner-v1/.env.example +7 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/QUICKSTART.md +116 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/NEW-CLIENT.md +22 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/_template/brand-kit.md +27 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/brands/growthub/brand-kit.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/bundles/growthub-ai-website-cloner-v1.json +53 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/ai-website-cloner-fork-integration.md +118 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/design-token-system.md +135 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/multi-phase-pipeline.md +129 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/docs/parallel-builder-dispatch.md +103 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/clone-brief-sample.md +54 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/component-spec-sample.md +123 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/platform-handoff-sample.md +102 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/examples/visual-qa-sample.md +119 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/README.md +71 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/growthub-meta/kit-standard.md +47 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/kit.json +105 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output/README.md +26 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/output-standards.md +75 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/runtime-assumptions.md +70 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/check-deps.sh +50 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/clone-fork.sh +66 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/setup/verify-env.mjs +78 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/skills.md +186 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/asset-manifest.md +57 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/builder-dispatch-plan.md +92 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/clone-brief.md +59 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/component-spec.md +124 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/design-token-extraction.md +89 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/platform-handoff.md +114 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/reconnaissance-report.md +77 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/templates/visual-qa-checklist.md +107 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/validation-checklist.md +76 -0
- package/assets/worker-kits/growthub-ai-website-cloner-v1/workers/ai-website-cloner-operator/CLAUDE.md +256 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/.env.example +40 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/QUICKSTART.md +114 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/NEW-CLIENT.md +42 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/_template/brand-kit.md +49 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/brands/growthub/brand-kit.md +50 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/bundles/growthub-open-montage-studio-v1.json +55 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/cms-node-bridge.md +152 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/open-montage-fork-integration.md +120 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/pipeline-reference.md +147 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/docs/provider-adapter-layer.md +105 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/cms-node-video-gen-sample.md +109 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/pipeline-selection-sample.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/platform-ready-handoff-sample.md +101 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/examples/video-production-brief-sample.md +68 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/README.md +7 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/growthub-meta/kit-standard.md +45 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/kit.json +107 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output/README.md +34 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/output-standards.md +79 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/runtime-assumptions.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/check-deps.sh +43 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/clone-fork.sh +53 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/setup/verify-env.mjs +102 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/skills.md +254 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/asset-tracking.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md +64 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/generation-batch-plan.md +70 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/pipeline-selection-brief.md +67 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/platform-ready-execution-handoff.md +103 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/prompt-matrix.md +48 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/provider-selection-brief.md +86 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/review-qa-checklist.md +59 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/scene-plan.md +65 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/templates/video-production-brief.md +58 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/validation-checklist.md +46 -0
- package/assets/worker-kits/growthub-open-montage-studio-v1/workers/open-montage-studio-operator/CLAUDE.md +304 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/.env.example +15 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/QUICKSTART.md +90 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/NEW-CLIENT.md +57 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/_template/brand-kit.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/brands/growthub/brand-kit.md +92 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/bundles/growthub-twenty-crm-v1.json +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/api-and-webhooks.md +296 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/data-model-layer.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/docs/twenty-fork-integration.md +213 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-playbook-sample.md +172 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/crm-setup-sample.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/lead-enrichment-sample.md +117 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/examples/pipeline-automation-sample.md +132 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/README.md +114 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/growthub-meta/kit-standard.md +61 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/kit.json +108 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output/README.md +46 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/output-standards.md +175 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/runtime-assumptions.md +150 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/check-deps.sh +56 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/clone-fork.sh +77 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/setup/verify-env.mjs +105 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/skills.md +401 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/api-query-plan.md +179 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-playbook.md +155 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/crm-setup-brief.md +94 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/custom-object-design.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/data-model-design.md +112 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/enrichment-field-map.md +100 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/import-mapping.md +139 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/integration-handoff.md +190 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/lead-enrichment-pipeline.md +128 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/pipeline-automation-brief.md +88 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/webhook-integration-spec.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/templates/workspace-config-checklist.md +129 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/validation-checklist.md +115 -0
- package/assets/worker-kits/growthub-twenty-crm-v1/workers/twenty-crm-operator/CLAUDE.md +310 -0
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Runtime Assumptions — Open Montage Studio
|
|
2
|
+
|
|
3
|
+
This file documents the runtime environment expectations for the Open Montage Studio Worker Kit.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Execution Modes
|
|
8
|
+
|
|
9
|
+
| Mode | Requirements | Description |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `local-fork` | Python 3.10+, FFmpeg, Node.js 18+, OpenMontage clone | Full tool access — agent runs pipelines directly |
|
|
12
|
+
| `agent-only` | GrowthHub session or zero-key mode | No local clone — CMS nodes or free tools provide generation |
|
|
13
|
+
| `hybrid` | GrowthHub session + partial local tools | CMS nodes for generation + local post-production |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Local-Fork Mode Requirements
|
|
18
|
+
|
|
19
|
+
### System Dependencies
|
|
20
|
+
|
|
21
|
+
| Dependency | Minimum Version | Check Command | Purpose |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| Python | 3.10+ | `python3 --version` | OpenMontage tool execution |
|
|
24
|
+
| FFmpeg | any recent | `ffmpeg -version` | Video encoding, subtitle burn-in, audio mixing |
|
|
25
|
+
| Node.js | 18+ | `node --version` | Remotion composition engine |
|
|
26
|
+
| npm | any recent | `npm --version` | Remotion dependency management |
|
|
27
|
+
|
|
28
|
+
### OpenMontage Clone
|
|
29
|
+
|
|
30
|
+
- Default path: `~/OpenMontage` (override with `OPENMONTAGE_PATH` in `.env`)
|
|
31
|
+
- Setup: `git clone https://github.com/calesthio/OpenMontage.git && cd OpenMontage && make setup`
|
|
32
|
+
- The clone includes Python requirements, Remotion composer, and Piper TTS
|
|
33
|
+
|
|
34
|
+
### API Keys
|
|
35
|
+
|
|
36
|
+
All keys are optional. More keys = more tools available. Recommended setup order:
|
|
37
|
+
|
|
38
|
+
1. Free stock media keys (Pexels, Pixabay) — completely free
|
|
39
|
+
2. Google API key — 1M chars/month free TTS + $300 new account credits
|
|
40
|
+
3. ElevenLabs — 10K chars/month free premium TTS
|
|
41
|
+
4. fal.ai — FLUX images + multi-model video (~$0.03/image)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Agent-Only Mode Requirements
|
|
46
|
+
|
|
47
|
+
- Active GrowthHub session (`growthub auth:login`) for CMS node access
|
|
48
|
+
- OR: zero-key mode (Piper TTS + free archives + Remotion guidance only)
|
|
49
|
+
- No local OpenMontage clone needed
|
|
50
|
+
- Agent produces production artifacts and composition guidance
|
|
51
|
+
- Actual generation happens via CMS hosted execution
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Hybrid Mode Requirements
|
|
56
|
+
|
|
57
|
+
- Active GrowthHub session for CMS node generation
|
|
58
|
+
- Local FFmpeg for post-production (composition, subtitles, audio mixing)
|
|
59
|
+
- Optional: local OpenMontage clone for full Remotion composition
|
|
60
|
+
- CMS node outputs (URLs) are downloaded locally for post-production
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## File System Assumptions
|
|
65
|
+
|
|
66
|
+
- Working directory is this kit folder (exported via `growthub kit download`)
|
|
67
|
+
- Output goes to `output/<client-slug>/<project-slug>/`
|
|
68
|
+
- Brand kits live in `brands/<client-slug>/`
|
|
69
|
+
- The agent reads `skills.md` and templates from relative paths
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Network Assumptions
|
|
74
|
+
|
|
75
|
+
- Internet access required for: provider API calls, CMS node execution, stock media search, web research
|
|
76
|
+
- Local-fork Remotion rendering is fully offline after assets are downloaded
|
|
77
|
+
- FFmpeg post-production is fully offline
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Known Limitations
|
|
82
|
+
|
|
83
|
+
- Piper TTS quality is lower than cloud TTS — acceptable for drafts, recommend ElevenLabs or Google for final output
|
|
84
|
+
- Local GPU video generation (WAN 2.1, Hunyuan) requires NVIDIA GPU with 6-24GB VRAM — not available on most laptops
|
|
85
|
+
- Remotion composition renders images into animated video — not the same as AI-generated motion clips
|
|
86
|
+
- CMS node execution latency depends on GrowthHub hosted infrastructure — may be slower than direct API calls
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Check system dependencies for Open Montage Studio local-fork mode.
|
|
5
|
+
# Exit 0: all dependencies present.
|
|
6
|
+
# Exit 1: one or more dependencies missing.
|
|
7
|
+
|
|
8
|
+
echo "=== Open Montage Studio — Dependency Check ==="
|
|
9
|
+
echo ""
|
|
10
|
+
|
|
11
|
+
MISSING=0
|
|
12
|
+
|
|
13
|
+
check_dep() {
|
|
14
|
+
local name="$1"
|
|
15
|
+
local cmd="$2"
|
|
16
|
+
local min_version="$3"
|
|
17
|
+
local install_hint="$4"
|
|
18
|
+
|
|
19
|
+
if command -v "$cmd" &>/dev/null; then
|
|
20
|
+
local version
|
|
21
|
+
version=$("$cmd" --version 2>&1 | head -1)
|
|
22
|
+
echo " [ok] $name: $version"
|
|
23
|
+
else
|
|
24
|
+
echo " [missing] $name — install: $install_hint"
|
|
25
|
+
MISSING=$((MISSING + 1))
|
|
26
|
+
fi
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
check_dep "Python 3.10+" "python3" "3.10" "python.org or brew install python"
|
|
30
|
+
check_dep "FFmpeg" "ffmpeg" "any" "brew install ffmpeg or ffmpeg.org"
|
|
31
|
+
check_dep "Node.js 18+" "node" "18" "nodejs.org or brew install node"
|
|
32
|
+
check_dep "npm" "npm" "any" "comes with Node.js"
|
|
33
|
+
check_dep "Git" "git" "any" "brew install git"
|
|
34
|
+
|
|
35
|
+
echo ""
|
|
36
|
+
|
|
37
|
+
if [ "$MISSING" -gt 0 ]; then
|
|
38
|
+
echo "[result] $MISSING dependency(s) missing. Install them and rerun this check."
|
|
39
|
+
exit 1
|
|
40
|
+
else
|
|
41
|
+
echo "[result] All dependencies present."
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Clone and set up OpenMontage for local-fork execution mode.
|
|
5
|
+
# Usage: bash setup/clone-fork.sh [target-dir]
|
|
6
|
+
|
|
7
|
+
TARGET_DIR="${1:-${OPENMONTAGE_PATH:-$HOME/OpenMontage}}"
|
|
8
|
+
|
|
9
|
+
echo "=== OpenMontage Fork Setup ==="
|
|
10
|
+
echo "Target directory: $TARGET_DIR"
|
|
11
|
+
echo ""
|
|
12
|
+
|
|
13
|
+
# ── Step 1: Clone ──
|
|
14
|
+
if [ -d "$TARGET_DIR/.git" ]; then
|
|
15
|
+
echo "[skip] Repository already exists at $TARGET_DIR"
|
|
16
|
+
echo " To update: cd $TARGET_DIR && git pull"
|
|
17
|
+
else
|
|
18
|
+
echo "[clone] Cloning OpenMontage..."
|
|
19
|
+
git clone https://github.com/calesthio/OpenMontage.git "$TARGET_DIR"
|
|
20
|
+
echo "[done] Cloned to $TARGET_DIR"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# ── Step 2: Install dependencies ──
|
|
24
|
+
echo ""
|
|
25
|
+
echo "[setup] Running make setup..."
|
|
26
|
+
cd "$TARGET_DIR"
|
|
27
|
+
|
|
28
|
+
if [ -f Makefile ]; then
|
|
29
|
+
make setup
|
|
30
|
+
else
|
|
31
|
+
echo "[fallback] No Makefile found. Running manual setup..."
|
|
32
|
+
pip install -r requirements.txt
|
|
33
|
+
cd remotion-composer && npm install && cd ..
|
|
34
|
+
pip install piper-tts
|
|
35
|
+
cp -n .env.example .env 2>/dev/null || true
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# ── Step 3: Verify ──
|
|
39
|
+
echo ""
|
|
40
|
+
echo "[verify] Checking tool registry..."
|
|
41
|
+
python3 -c "from tools.tool_registry import registry; registry.discover(); print('Tool registry: OK')" 2>/dev/null || {
|
|
42
|
+
echo "[warn] Tool registry check failed. This may be normal on first setup."
|
|
43
|
+
echo " Try: cd $TARGET_DIR && python3 -c \"from tools.tool_registry import registry; registry.discover()\""
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
echo ""
|
|
47
|
+
echo "=== Setup Complete ==="
|
|
48
|
+
echo "OpenMontage is ready at: $TARGET_DIR"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "Next steps:"
|
|
51
|
+
echo " 1. Add API keys to $TARGET_DIR/.env (optional — more keys = more tools)"
|
|
52
|
+
echo " 2. Point your agent Working Directory at this kit folder"
|
|
53
|
+
echo " 3. Start a session — the operator will detect the local fork automatically"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Verify environment configuration for Open Montage Studio.
|
|
5
|
+
* Checks which providers are configured and validates key formats.
|
|
6
|
+
* Exit 0: at least one provider configured or zero-key mode acknowledged.
|
|
7
|
+
* Exit 1: configuration issue found.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { readFileSync, existsSync } from "fs";
|
|
11
|
+
import { resolve, dirname } from "path";
|
|
12
|
+
import { fileURLToPath } from "url";
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
const kitRoot = resolve(__dirname, "..");
|
|
16
|
+
const envPath = resolve(kitRoot, ".env");
|
|
17
|
+
|
|
18
|
+
// ── Parse .env ──
|
|
19
|
+
|
|
20
|
+
function parseEnv(filePath) {
|
|
21
|
+
if (!existsSync(filePath)) return {};
|
|
22
|
+
const lines = readFileSync(filePath, "utf-8").split("\n");
|
|
23
|
+
const env = {};
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
const trimmed = line.trim();
|
|
26
|
+
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
27
|
+
const eqIndex = trimmed.indexOf("=");
|
|
28
|
+
if (eqIndex === -1) continue;
|
|
29
|
+
const key = trimmed.slice(0, eqIndex).trim();
|
|
30
|
+
const value = trimmed.slice(eqIndex + 1).trim();
|
|
31
|
+
env[key] = value;
|
|
32
|
+
}
|
|
33
|
+
return env;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// ── Provider definitions ──
|
|
37
|
+
|
|
38
|
+
const PROVIDERS = [
|
|
39
|
+
{ key: "FAL_KEY", name: "fal.ai", capabilities: "FLUX images, Kling/Veo/MiniMax video, Recraft", placeholder: "your_fal_key_here" },
|
|
40
|
+
{ key: "PEXELS_API_KEY", name: "Pexels", capabilities: "Free stock photos + videos", placeholder: "your_pexels_key_here" },
|
|
41
|
+
{ key: "PIXABAY_API_KEY", name: "Pixabay", capabilities: "Free stock photos + videos", placeholder: "your_pixabay_key_here" },
|
|
42
|
+
{ key: "UNSPLASH_ACCESS_KEY", name: "Unsplash", capabilities: "Free stock images", placeholder: "your_unsplash_key_here" },
|
|
43
|
+
{ key: "OPENAI_API_KEY", name: "OpenAI", capabilities: "DALL-E 3 images, OpenAI TTS", placeholder: "your_openai_key_here" },
|
|
44
|
+
{ key: "GOOGLE_API_KEY", name: "Google", capabilities: "Google TTS (700+ voices), Imagen images", placeholder: "your_google_key_here" },
|
|
45
|
+
{ key: "ELEVENLABS_API_KEY", name: "ElevenLabs", capabilities: "Premium TTS, music, SFX", placeholder: "your_elevenlabs_key_here" },
|
|
46
|
+
{ key: "SUNO_API_KEY", name: "Suno", capabilities: "AI music generation", placeholder: "your_suno_key_here" },
|
|
47
|
+
{ key: "RUNWAY_API_KEY", name: "Runway", capabilities: "Gen-4 video", placeholder: "your_runway_key_here" },
|
|
48
|
+
{ key: "HEYGEN_API_KEY", name: "HeyGen", capabilities: "Avatar videos", placeholder: "your_heygen_key_here" },
|
|
49
|
+
{ key: "HIGGSFIELD_API_KEY", name: "Higgsfield", capabilities: "Multi-model video orchestrator", placeholder: "your_higgsfield_key_here" },
|
|
50
|
+
{ key: "XAI_API_KEY", name: "xAI Grok", capabilities: "Image + video generation", placeholder: "your_xai_key_here" },
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
// ── Check ──
|
|
54
|
+
|
|
55
|
+
console.log("=== Open Montage Studio — Environment Check ===\n");
|
|
56
|
+
|
|
57
|
+
if (!existsSync(envPath)) {
|
|
58
|
+
console.log("[error] .env file not found at:", envPath);
|
|
59
|
+
console.log(" Run: cp .env.example .env");
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const env = parseEnv(envPath);
|
|
64
|
+
const configured = [];
|
|
65
|
+
const missing = [];
|
|
66
|
+
|
|
67
|
+
for (const provider of PROVIDERS) {
|
|
68
|
+
const value = env[provider.key];
|
|
69
|
+
if (value && value !== provider.placeholder && value.length > 5) {
|
|
70
|
+
configured.push(provider);
|
|
71
|
+
console.log(` [ok] ${provider.name} — ${provider.capabilities}`);
|
|
72
|
+
} else {
|
|
73
|
+
missing.push(provider);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
console.log("");
|
|
78
|
+
|
|
79
|
+
if (configured.length === 0) {
|
|
80
|
+
console.log("[info] No provider keys configured.");
|
|
81
|
+
console.log(" You can still use:");
|
|
82
|
+
console.log(" - GrowthHub CMS nodes (requires growthub auth:login)");
|
|
83
|
+
console.log(" - Zero-key mode: Piper TTS + free archives + Remotion");
|
|
84
|
+
console.log("");
|
|
85
|
+
console.log(" To add providers, edit .env and rerun this script.");
|
|
86
|
+
// Exit 0 — zero-key mode is valid
|
|
87
|
+
process.exit(0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
console.log(`[summary] ${configured.length} provider(s) configured, ${missing.length} not set.`);
|
|
91
|
+
|
|
92
|
+
// Check OpenMontage path
|
|
93
|
+
const omPath = env.OPENMONTAGE_PATH || resolve(process.env.HOME || "~", "OpenMontage");
|
|
94
|
+
if (existsSync(omPath)) {
|
|
95
|
+
console.log(`[ok] OpenMontage clone found at: ${omPath}`);
|
|
96
|
+
} else {
|
|
97
|
+
console.log(`[info] OpenMontage not found at: ${omPath}`);
|
|
98
|
+
console.log(" Run: bash setup/clone-fork.sh (optional — needed for local-fork mode only)");
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
console.log("\n=== Check Complete ===");
|
|
102
|
+
process.exit(0);
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Open Montage Studio — Master Skill Document
|
|
2
|
+
|
|
3
|
+
This is the canonical methodology reference for the Open Montage Studio Operator. Read this file at the start of every session before producing any artifacts.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Workflow Order
|
|
8
|
+
|
|
9
|
+
The operator follows a strict 10-step workflow defined in `workers/open-montage-studio-operator/CLAUDE.md`. This skill doc provides the detailed methodology for steps 5 through 9.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 2. Pipeline Selection Logic
|
|
14
|
+
|
|
15
|
+
OpenMontage supports 12 production pipelines. Selection is a structured decision, not a guess.
|
|
16
|
+
|
|
17
|
+
### Decision Tree
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
Intent: Explain a topic to an audience?
|
|
21
|
+
YES → Animated Explainer
|
|
22
|
+
|
|
23
|
+
Intent: Create motion graphics, kinetic typography, or abstract animation?
|
|
24
|
+
YES → Animation
|
|
25
|
+
|
|
26
|
+
Intent: Avatar-driven presenter video?
|
|
27
|
+
YES → Avatar Spokesperson
|
|
28
|
+
|
|
29
|
+
Intent: Cinematic trailer, teaser, or mood-driven brand film?
|
|
30
|
+
YES → Cinematic
|
|
31
|
+
|
|
32
|
+
Intent: Batch of ranked short-form clips from one long source?
|
|
33
|
+
YES → Clip Factory
|
|
34
|
+
|
|
35
|
+
Intent: Thematic montage from real stock footage or open archives?
|
|
36
|
+
YES → Documentary Montage
|
|
37
|
+
|
|
38
|
+
Intent: Enhance existing footage with AI-generated support visuals?
|
|
39
|
+
YES → Hybrid
|
|
40
|
+
|
|
41
|
+
Intent: Subtitle, dub, or translate existing video into other languages?
|
|
42
|
+
YES → Localization & Dub
|
|
43
|
+
|
|
44
|
+
Intent: Turn podcast highlights into video?
|
|
45
|
+
YES → Podcast Repurpose
|
|
46
|
+
|
|
47
|
+
Intent: Polished software screen recording or walkthrough?
|
|
48
|
+
YES → Screen Demo
|
|
49
|
+
|
|
50
|
+
Intent: Footage-led speaker video, presentation, or vlog?
|
|
51
|
+
YES → Talking Head
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
If the intent spans two pipelines, pick the primary and document the secondary as a composition layer or follow-up pipeline.
|
|
55
|
+
|
|
56
|
+
### Pipeline Stage Flow (Universal)
|
|
57
|
+
|
|
58
|
+
Every pipeline follows the same structured flow:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
research → proposal → script → scene_plan → assets → edit → compose
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Each stage has a dedicated director skill in the OpenMontage fork at `skills/pipelines/<pipeline-name>/`.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 3. Provider Scoring Methodology
|
|
69
|
+
|
|
70
|
+
Every tool selection runs through a 7-dimension scoring engine.
|
|
71
|
+
|
|
72
|
+
| Dimension | Weight | What It Measures |
|
|
73
|
+
|-----------|--------|------------------|
|
|
74
|
+
| Task fit | 30% | How well the tool matches the specific production need |
|
|
75
|
+
| Output quality | 20% | Resolution, fidelity, consistency of results |
|
|
76
|
+
| Control features | 15% | Prompt adherence, style control, parameter granularity |
|
|
77
|
+
| Reliability | 15% | Uptime, error rate, queue latency |
|
|
78
|
+
| Cost efficiency | 10% | Price per output unit relative to quality |
|
|
79
|
+
| Latency | 5% | Time from request to deliverable |
|
|
80
|
+
| Continuity | 5% | Session persistence, resumability, rate limits |
|
|
81
|
+
|
|
82
|
+
### Provider Tiers
|
|
83
|
+
|
|
84
|
+
**Zero-cost (always available):**
|
|
85
|
+
- Piper TTS — offline narration
|
|
86
|
+
- Archive.org + NASA + Wikimedia — free archival footage
|
|
87
|
+
- Remotion — React-based programmatic video composition
|
|
88
|
+
- FFmpeg — encoding, subtitles, audio mixing, color grading
|
|
89
|
+
|
|
90
|
+
**Free-key (developer accounts, no charge):**
|
|
91
|
+
- Pexels, Pixabay, Unsplash — stock media
|
|
92
|
+
- Google TTS — 1M chars/month free
|
|
93
|
+
- ElevenLabs — 10K chars/month free
|
|
94
|
+
|
|
95
|
+
**Pay-as-you-go:**
|
|
96
|
+
- fal.ai (FAL_KEY) — FLUX images + Kling/Veo/MiniMax video
|
|
97
|
+
- OpenAI — DALL-E 3 + TTS
|
|
98
|
+
- Google Imagen — $0.02-0.06/image
|
|
99
|
+
- xAI Grok — images + video
|
|
100
|
+
- Runway Gen-4 — highest quality AI video
|
|
101
|
+
- Higgsfield — multi-model video orchestrator
|
|
102
|
+
- HeyGen — avatar videos
|
|
103
|
+
- Suno — AI music generation
|
|
104
|
+
|
|
105
|
+
**Local GPU (free, requires hardware):**
|
|
106
|
+
- WAN 2.1, Hunyuan, CogVideo, LTX-Video — local video generation
|
|
107
|
+
- Stable Diffusion — local image generation
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 4. CMS Node Bridge Mapping
|
|
112
|
+
|
|
113
|
+
GrowthHub CMS nodes expose video and image generation as hosted execution capabilities. The bridge maps these into the OpenMontage production flow.
|
|
114
|
+
|
|
115
|
+
### How It Works
|
|
116
|
+
|
|
117
|
+
1. Agent queries the CMS capability registry for available nodes in the `video` and `image` families
|
|
118
|
+
2. CMS nodes execute via hosted execution client, producing output URLs
|
|
119
|
+
3. Output URLs are treated as source assets in the OpenMontage pipeline
|
|
120
|
+
4. OpenMontage handles composition, post-production, and final rendering
|
|
121
|
+
|
|
122
|
+
### CMS Family → OpenMontage Mapping
|
|
123
|
+
|
|
124
|
+
| CMS Node Family | CMS Execution Kind | OpenMontage Integration Point |
|
|
125
|
+
|-----------------|--------------------|-----------------------------|
|
|
126
|
+
| `video` | `hosted-execute` | Source clips for `tools/video/` input or direct composition via Remotion/FFmpeg |
|
|
127
|
+
| `image` | `hosted-execute` | Scene images for `tools/graphics/` input or Remotion animated composition |
|
|
128
|
+
| `slides` | `hosted-execute` | Slide deck assets for Screen Demo pipeline |
|
|
129
|
+
| `text` | `hosted-execute` | Script/narration text for TTS processing |
|
|
130
|
+
|
|
131
|
+
### CMS Node Output → OpenMontage Asset Type
|
|
132
|
+
|
|
133
|
+
| CMS Output Type | OpenMontage Asset Category | Typical Usage |
|
|
134
|
+
|-----------------|---------------------------|---------------|
|
|
135
|
+
| Video URL | `source_clip` | Scene footage, B-roll, transition clips |
|
|
136
|
+
| Image URL | `scene_image` | Hero shots, backgrounds, product stills |
|
|
137
|
+
| Audio URL | `narration` or `music` | Voiceover, soundtrack |
|
|
138
|
+
| Text | `script` | Script content for TTS conversion |
|
|
139
|
+
|
|
140
|
+
### When to Use CMS Nodes vs Direct Providers
|
|
141
|
+
|
|
142
|
+
Use CMS nodes when:
|
|
143
|
+
- The user has an active GrowthHub session
|
|
144
|
+
- The generation type matches an available CMS node
|
|
145
|
+
- The user wants unified billing through GrowthHub
|
|
146
|
+
- The user does not have direct provider API keys
|
|
147
|
+
|
|
148
|
+
Use direct providers when:
|
|
149
|
+
- Local-fork mode with full tool access
|
|
150
|
+
- The specific tool/model is not available as a CMS node
|
|
151
|
+
- Lower latency is needed (direct API vs hosted execution)
|
|
152
|
+
- The user has provider keys and prefers direct access
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 5. Prompt Planning Rules
|
|
157
|
+
|
|
158
|
+
### Image Prompts
|
|
159
|
+
|
|
160
|
+
1. Lead with the subject and composition
|
|
161
|
+
2. Include style directive (photorealistic, illustrated, anime, etc.)
|
|
162
|
+
3. Specify lighting and mood
|
|
163
|
+
4. Add technical parameters (aspect ratio, resolution)
|
|
164
|
+
5. Include negative prompts when the provider supports them
|
|
165
|
+
|
|
166
|
+
### Video Prompts
|
|
167
|
+
|
|
168
|
+
1. Describe the motion and camera movement
|
|
169
|
+
2. Specify duration target
|
|
170
|
+
3. Reference the source image if using image-to-video
|
|
171
|
+
4. Include style consistency directives
|
|
172
|
+
5. Note any audio sync requirements
|
|
173
|
+
|
|
174
|
+
### Scene Sequencing
|
|
175
|
+
|
|
176
|
+
1. Each scene maps to one pipeline stage asset
|
|
177
|
+
2. Scenes must have explicit transition types (cut, crossfade, wipe, zoom)
|
|
178
|
+
3. Audio cues align to scene boundaries
|
|
179
|
+
4. Subtitle timing derives from script word timestamps
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 6. Output Artifact Order
|
|
184
|
+
|
|
185
|
+
Produce artifacts in this strict order:
|
|
186
|
+
|
|
187
|
+
1. **VideoProductionBrief** — What we are making, why, for whom
|
|
188
|
+
2. **PipelineSelectionBrief** — Which pipeline, why, fallback
|
|
189
|
+
3. **ProviderSelectionBrief** — Which providers/CMS nodes, scoring, cost estimate
|
|
190
|
+
4. **ScenePlan** — Scene-by-scene breakdown with timing, transitions, audio cues
|
|
191
|
+
5. **PromptMatrix** — Per-scene prompts for all generation tools
|
|
192
|
+
6. **GenerationBatchPlan** — Execution order, dependencies, parallel opportunities
|
|
193
|
+
7. **AssetTracking** — Generated asset inventory with URLs, statuses, costs
|
|
194
|
+
8. **ReviewQAChecklist** — Quality gates, validation points, approval criteria
|
|
195
|
+
9. **PlatformReadyExecutionHandoff** — Complete handoff doc for execution
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 7. QA Standards
|
|
200
|
+
|
|
201
|
+
### Pre-Compose Validation
|
|
202
|
+
|
|
203
|
+
Before rendering:
|
|
204
|
+
- All scene assets exist and are accessible
|
|
205
|
+
- Audio tracks are present and duration-matched
|
|
206
|
+
- Subtitle timing is aligned
|
|
207
|
+
- Delivery promise is achievable with available tools
|
|
208
|
+
- Budget is within approved cap
|
|
209
|
+
|
|
210
|
+
### Post-Render Self-Review
|
|
211
|
+
|
|
212
|
+
After rendering:
|
|
213
|
+
- ffprobe validation (codec, resolution, duration, bitrate)
|
|
214
|
+
- Frame extraction at key points (first, middle, last, transitions)
|
|
215
|
+
- Audio level analysis (no clipping, consistent volume)
|
|
216
|
+
- Subtitle readability check
|
|
217
|
+
- Delivery promise verification
|
|
218
|
+
|
|
219
|
+
### Slideshow Risk Check
|
|
220
|
+
|
|
221
|
+
If the output is image-based video, score across 6 dimensions:
|
|
222
|
+
- Motion variety (camera moves, parallax, Ken Burns)
|
|
223
|
+
- Transition diversity (not all cuts)
|
|
224
|
+
- Animation layer count (particles, overlays, text motion)
|
|
225
|
+
- Audio-visual sync
|
|
226
|
+
- Pacing variation
|
|
227
|
+
- Visual grammar complexity
|
|
228
|
+
|
|
229
|
+
A score below 60% triggers a warning and requires explicit user approval to proceed.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 8. Budget Governance
|
|
234
|
+
|
|
235
|
+
- Estimate costs before execution
|
|
236
|
+
- Reserve budget before each provider call
|
|
237
|
+
- Reconcile actual spend after each call
|
|
238
|
+
- Default per-action approval threshold: $0.50
|
|
239
|
+
- Default total budget cap: $10
|
|
240
|
+
- CMS node costs flow through GrowthHub billing (no separate tracking needed)
|
|
241
|
+
- Always present cost summary before starting generation
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 9. Handoff Standards
|
|
246
|
+
|
|
247
|
+
Every handoff document must include:
|
|
248
|
+
- Execution mode (local-fork / agent-only / hybrid)
|
|
249
|
+
- Complete asset manifest with URLs or file paths
|
|
250
|
+
- Provider/CMS node execution instructions
|
|
251
|
+
- Post-production steps (composition, audio, subtitles, color grade)
|
|
252
|
+
- Render profile (resolution, aspect ratio, codec, target platform)
|
|
253
|
+
- Estimated total cost and actual spend
|
|
254
|
+
- Known limitations or manual steps required
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Asset Tracking
|
|
2
|
+
|
|
3
|
+
## Project Reference
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Client | `<client-name>` |
|
|
8
|
+
| Project | `<project-name>` |
|
|
9
|
+
| Date | `YYYY-MM-DD` |
|
|
10
|
+
|
|
11
|
+
## Generated Assets
|
|
12
|
+
|
|
13
|
+
| ID | Scene | Type | Provider / CMS Node | Status | URL / Path | Cost | Notes |
|
|
14
|
+
|---|---|---|---|---|---|---|---|
|
|
15
|
+
| A-001 | 1 | image | | `<pending / generating / ready / failed>` | | | |
|
|
16
|
+
| A-002 | 2 | image | | | | | |
|
|
17
|
+
| A-003 | 1 | video | | | | | |
|
|
18
|
+
| A-004 | — | narration | | | | | |
|
|
19
|
+
| A-005 | — | music | | | | | |
|
|
20
|
+
|
|
21
|
+
## Reuse Inventory
|
|
22
|
+
|
|
23
|
+
<!-- Assets from previous sessions or existing brand kit that can be reused. -->
|
|
24
|
+
|
|
25
|
+
| Asset | Source | Reusable For | Notes |
|
|
26
|
+
|---|---|---|---|
|
|
27
|
+
| | | | |
|
|
28
|
+
|
|
29
|
+
## CMS Node Outputs
|
|
30
|
+
|
|
31
|
+
<!-- Track assets generated through GrowthHub CMS nodes separately for billing clarity. -->
|
|
32
|
+
|
|
33
|
+
| CMS Node Slug | Execution ID | Output Type | URL | Status |
|
|
34
|
+
|---|---|---|---|---|
|
|
35
|
+
| | | | | |
|
|
36
|
+
|
|
37
|
+
## Cost Ledger
|
|
38
|
+
|
|
39
|
+
| Category | Budgeted | Actual | Delta |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| Images | | | |
|
|
42
|
+
| Video | | | |
|
|
43
|
+
| Audio | | | |
|
|
44
|
+
| Music | | | |
|
|
45
|
+
| CMS nodes | — | — | — |
|
|
46
|
+
| **Total** | **$—** | **$—** | **$—** |
|
package/assets/worker-kits/growthub-open-montage-studio-v1/templates/cms-node-pipeline-mapping.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# CMS Node → OpenMontage Pipeline Mapping
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This template documents how GrowthHub CMS node outputs integrate into the selected OpenMontage pipeline. Fill this out when the production plan uses CMS nodes for any generation step.
|
|
6
|
+
|
|
7
|
+
## Project Reference
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Client | `<client-name>` |
|
|
12
|
+
| Project | `<project-name>` |
|
|
13
|
+
| Pipeline | `<selected-pipeline>` |
|
|
14
|
+
| Date | `YYYY-MM-DD` |
|
|
15
|
+
|
|
16
|
+
## CMS Nodes in Use
|
|
17
|
+
|
|
18
|
+
| CMS Node Slug | Family | Execution Kind | Role in Pipeline |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| | `video` / `image` / `text` | `hosted-execute` | |
|
|
21
|
+
|
|
22
|
+
## Mapping: CMS Output → OpenMontage Input
|
|
23
|
+
|
|
24
|
+
| CMS Node | Output Type | Output Format | OpenMontage Stage | OpenMontage Tool Category | Integration Method |
|
|
25
|
+
|---|---|---|---|---|---|
|
|
26
|
+
| | Video URL | mp4 | `assets` | `tools/video/` | Download URL → source clip |
|
|
27
|
+
| | Image URL | png/jpg | `assets` | `tools/graphics/` | Download URL → scene image |
|
|
28
|
+
| | Audio URL | mp3/wav | `edit` | `tools/audio/` | Download URL → narration track |
|
|
29
|
+
| | Text | string | `script` | — | Direct script content |
|
|
30
|
+
|
|
31
|
+
## Execution Flow
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
1. Agent identifies required CMS nodes from the scene plan
|
|
35
|
+
2. Agent prepares input bindings for each CMS node
|
|
36
|
+
3. CMS nodes execute via hosted execution client
|
|
37
|
+
4. Agent collects output URLs from execution results
|
|
38
|
+
5. Output URLs feed into OpenMontage pipeline at the appropriate stage
|
|
39
|
+
6. OpenMontage handles composition and post-production
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Input Bindings Per Node
|
|
43
|
+
|
|
44
|
+
### CMS Node: `<slug>`
|
|
45
|
+
|
|
46
|
+
| Input Key | Type | Value | Source |
|
|
47
|
+
|---|---|---|---|
|
|
48
|
+
| | | | `<from scene plan / user input / previous node output>` |
|
|
49
|
+
|
|
50
|
+
## Output Routing
|
|
51
|
+
|
|
52
|
+
### CMS Node: `<slug>`
|
|
53
|
+
|
|
54
|
+
| Output Key | Type | Routes To | OpenMontage Asset ID |
|
|
55
|
+
|---|---|---|---|
|
|
56
|
+
| | | Scene `<N>` source clip / image | `A-<NNN>` |
|
|
57
|
+
|
|
58
|
+
## Fallback Plan
|
|
59
|
+
|
|
60
|
+
If a CMS node execution fails:
|
|
61
|
+
|
|
62
|
+
| CMS Node | Fallback Provider | Fallback Tool | Cost Impact |
|
|
63
|
+
|---|---|---|---|
|
|
64
|
+
| | | | |
|