@growthub/cli 0.7.7 → 0.7.9
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-video-use-studio-v1/.env.example +13 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/QUICKSTART.md +47 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/brands/NEW-CLIENT.md +3 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/brands/_template/brand-kit.md +7 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/brands/growthub/brand-kit.md +6 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/bundles/growthub-video-use-studio-v1.json +49 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/docs/provider-adapter-layer.md +15 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/docs/video-use-discovery-path.md +13 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/docs/video-use-fork-integration.md +35 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/examples/video-brief-sample.md +11 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/growthub-meta/README.md +3 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/growthub-meta/kit-standard.md +6 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/kit.json +100 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/output/README.md +9 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/output-standards.md +19 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/runtime-assumptions.md +9 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/setup/check-deps.sh +21 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/setup/clone-fork.sh +18 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/setup/install-skill.sh +23 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/setup/verify-env.mjs +23 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/skills.md +21 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/edit-decision-list.md +17 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/edit-strategy.md +11 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/qa-checklist.md +21 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/render-plan.md +40 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/templates/video-brief.md +11 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/validation-checklist.md +11 -0
- package/assets/worker-kits/growthub-video-use-studio-v1/workers/video-use-studio-operator/CLAUDE.md +71 -0
- package/dist/index.js +13 -1
- package/package.json +2 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Growthub Video Use Studio — Environment Config
|
|
2
|
+
# Copy this file to .env and fill in your local values.
|
|
3
|
+
# Never commit .env to version control.
|
|
4
|
+
|
|
5
|
+
# Absolute path to your local video-use clone.
|
|
6
|
+
# Canonical env var: VIDEO_USE_HOME (uniform pattern across all worker kits)
|
|
7
|
+
# Legacy alias: VIDEO_USE_FORK_PATH (still accepted by setup scripts)
|
|
8
|
+
# Default when unset: $HOME/video-use
|
|
9
|
+
VIDEO_USE_HOME=$HOME/video-use
|
|
10
|
+
|
|
11
|
+
# ElevenLabs Scribe key — required for transcript generation.
|
|
12
|
+
# Get one at https://elevenlabs.io/app/settings/api-keys
|
|
13
|
+
ELEVENLABS_API_KEY=your_elevenlabs_key_here
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Video Use Studio Quickstart
|
|
2
|
+
|
|
3
|
+
## 1) Prepare environment
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
cp .env.example .env
|
|
7
|
+
bash setup/check-deps.sh
|
|
8
|
+
node setup/verify-env.mjs
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Required in `.env`:
|
|
12
|
+
|
|
13
|
+
- `VIDEO_USE_HOME` — absolute path to your local video-use clone (default `$HOME/video-use`)
|
|
14
|
+
- `ELEVENLABS_API_KEY` — ElevenLabs Scribe key for transcript generation
|
|
15
|
+
|
|
16
|
+
## 2) Clone the video-use upstream
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
bash setup/clone-fork.sh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Clones [`browser-use/video-use`](https://github.com/browser-use/video-use) into `${VIDEO_USE_HOME:-$HOME/video-use}` and runs `pip install -e .`.
|
|
23
|
+
|
|
24
|
+
## 3) Register as a Claude Code skill
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bash setup/install-skill.sh
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Symlinks the fork into `~/.claude/skills/video-use` per the upstream contract, so Claude Code can load the conversational edit pipeline from any working directory.
|
|
31
|
+
|
|
32
|
+
## 4) Start work
|
|
33
|
+
|
|
34
|
+
- Point your agent Working Directory to this exported folder.
|
|
35
|
+
- Follow `workers/video-use-studio-operator/CLAUDE.md`.
|
|
36
|
+
- Place raw footage in `${VIDEO_USE_HOME}/<project>/` and open Claude Code from that directory.
|
|
37
|
+
- Write planning outputs to `output/<client-slug>/<project-slug>/`.
|
|
38
|
+
- Rendered video lands at `${VIDEO_USE_HOME}/<project>/edit/final.mp4` per the upstream contract.
|
|
39
|
+
|
|
40
|
+
## Execution modes
|
|
41
|
+
|
|
42
|
+
| Mode | When to use |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `claude-code-skill` | Conversational editing through Claude Code with video-use symlinked as a skill |
|
|
45
|
+
| `local-cli` | Direct Python pipeline runs inside the fork (inventory → transcribe → pack → render) |
|
|
46
|
+
|
|
47
|
+
See `docs/video-use-fork-integration.md` for the upstream pipeline contract.
|
package/assets/worker-kits/growthub-video-use-studio-v1/bundles/growthub-video-use-studio-v1.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"bundle": {
|
|
4
|
+
"id": "growthub-video-use-studio-v1",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"kitId": "growthub-video-use-studio-v1",
|
|
7
|
+
"workerId": "video-use-studio-operator"
|
|
8
|
+
},
|
|
9
|
+
"briefType": "video-use-conversational-edit",
|
|
10
|
+
"publicExampleBrandPaths": [
|
|
11
|
+
"brands/growthub/brand-kit.md"
|
|
12
|
+
],
|
|
13
|
+
"requiredFrozenAssets": [
|
|
14
|
+
"QUICKSTART.md",
|
|
15
|
+
".env.example",
|
|
16
|
+
"skills.md",
|
|
17
|
+
"output-standards.md",
|
|
18
|
+
"runtime-assumptions.md",
|
|
19
|
+
"validation-checklist.md",
|
|
20
|
+
"workers/video-use-studio-operator/CLAUDE.md",
|
|
21
|
+
"brands/_template/brand-kit.md",
|
|
22
|
+
"brands/growthub/brand-kit.md",
|
|
23
|
+
"brands/NEW-CLIENT.md",
|
|
24
|
+
"setup/clone-fork.sh",
|
|
25
|
+
"setup/install-skill.sh",
|
|
26
|
+
"setup/verify-env.mjs",
|
|
27
|
+
"setup/check-deps.sh",
|
|
28
|
+
"output/README.md",
|
|
29
|
+
"templates/video-brief.md",
|
|
30
|
+
"templates/edit-strategy.md",
|
|
31
|
+
"templates/edit-decision-list.md",
|
|
32
|
+
"templates/render-plan.md",
|
|
33
|
+
"templates/qa-checklist.md",
|
|
34
|
+
"examples/video-brief-sample.md",
|
|
35
|
+
"docs/video-use-fork-integration.md",
|
|
36
|
+
"docs/provider-adapter-layer.md",
|
|
37
|
+
"docs/video-use-discovery-path.md",
|
|
38
|
+
"growthub-meta/README.md",
|
|
39
|
+
"growthub-meta/kit-standard.md"
|
|
40
|
+
],
|
|
41
|
+
"optionalPresets": [],
|
|
42
|
+
"export": {
|
|
43
|
+
"folderName": "growthub-agent-worker-kit-video-use-studio-v1",
|
|
44
|
+
"zipFileName": "growthub-agent-worker-kit-video-use-studio-v1.zip"
|
|
45
|
+
},
|
|
46
|
+
"activationModes": [
|
|
47
|
+
"export"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Provider Adapter Layer
|
|
2
|
+
|
|
3
|
+
This kit is a custom workspace package and does not add a new server adapter or agent harness.
|
|
4
|
+
|
|
5
|
+
It relies on:
|
|
6
|
+
|
|
7
|
+
- Worker kit export contract
|
|
8
|
+
- Working Directory execution
|
|
9
|
+
- Upstream `browser-use/video-use` fork
|
|
10
|
+
- ElevenLabs Scribe (transcription) via `ELEVENLABS_API_KEY`
|
|
11
|
+
- Local FFmpeg for render
|
|
12
|
+
- Optional `yt-dlp` for pulling online sources
|
|
13
|
+
- Claude Code skill loader at `~/.claude/skills/video-use`
|
|
14
|
+
|
|
15
|
+
No credentials are stored in this repo. All secrets live in the per-export `.env`.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Video Use Discovery Path
|
|
2
|
+
|
|
3
|
+
Discovery path:
|
|
4
|
+
|
|
5
|
+
- `growthub discover` → `Worker Kits` → `Custom Workspaces`
|
|
6
|
+
- `growthub kit list --family studio`
|
|
7
|
+
- `growthub kit download video-use`
|
|
8
|
+
|
|
9
|
+
Feature branch demo checks:
|
|
10
|
+
|
|
11
|
+
- `bash scripts/demo-cli.sh cli kit list --family studio`
|
|
12
|
+
- `bash scripts/demo-cli.sh cli kit inspect video-use`
|
|
13
|
+
- `bash scripts/demo-cli.sh cli kit download video-use`
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Video Use Fork Integration
|
|
2
|
+
|
|
3
|
+
Upstream repository:
|
|
4
|
+
|
|
5
|
+
- `https://github.com/browser-use/video-use`
|
|
6
|
+
|
|
7
|
+
Primary execution flow:
|
|
8
|
+
|
|
9
|
+
1. Clone + install with `setup/clone-fork.sh` (runs `pip install -e .` inside the fork).
|
|
10
|
+
2. Register as a Claude Code skill with `setup/install-skill.sh` (symlinks the fork into `~/.claude/skills/video-use`).
|
|
11
|
+
3. Stage raw footage under `${VIDEO_USE_HOME}/<project>/`.
|
|
12
|
+
4. Launch `claude` from the project directory and start the conversational edit loop.
|
|
13
|
+
|
|
14
|
+
Pipeline contract (upstream):
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
inventory → transcribe (ElevenLabs Scribe) → pack phrase-level transcript
|
|
18
|
+
→ converse + propose strategy (4–8 sentences)
|
|
19
|
+
→ user confirmation
|
|
20
|
+
→ EDL generation (word-boundary cuts)
|
|
21
|
+
→ render (FFmpeg + Manim / Remotion / PIL overlays)
|
|
22
|
+
→ self-evaluation (up to 3 iterations)
|
|
23
|
+
→ final.mp4 at <project>/edit/final.mp4
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Session persistence:
|
|
27
|
+
|
|
28
|
+
- Every confirmed decision is appended to `project.md` inside the source video directory.
|
|
29
|
+
|
|
30
|
+
Two-layer architecture:
|
|
31
|
+
|
|
32
|
+
- Layer 1 — ElevenLabs Scribe transcript (word-level, speaker-tagged, audio-event markers). The packed transcript is the editor's primary reading view (≈12 KB text + occasional PNGs).
|
|
33
|
+
- Layer 2 — Visual composites (filmstrip / waveform / word labels) generated on-demand for ambiguous decision points only.
|
|
34
|
+
|
|
35
|
+
Token budget: orders of magnitude lower than raw frame processing.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Sample Video Brief
|
|
2
|
+
|
|
3
|
+
- Goal: Cut founder interview into a 60-second launch teaser
|
|
4
|
+
- Audience: prospective operators browsing the landing page
|
|
5
|
+
- Source footage directory: `${VIDEO_USE_HOME}/launch-teaser/raw/`
|
|
6
|
+
- Duration target: 00:60
|
|
7
|
+
- Aspect ratio: 9:16 (vertical)
|
|
8
|
+
- Delivery format: MP4 (h264 / aac)
|
|
9
|
+
- Aesthetic direction: high-contrast, minimal overlays, captions on every beat
|
|
10
|
+
- Speakers / on-camera subjects: 1 (founder)
|
|
11
|
+
- External sources to pull via `yt-dlp`: none
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"kit": {
|
|
4
|
+
"id": "growthub-video-use-studio-v1",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"name": "Growthub Agent Worker Kit — Video Use Studio",
|
|
7
|
+
"description": "Self-contained local execution environment for conversational video editing with browser-use/video-use. Produces implementation-ready video briefs, transcript-driven edit strategies, edit decision lists, render plans, and QA handoff artifacts for ElevenLabs Scribe + FFmpeg workflows.",
|
|
8
|
+
"type": "worker",
|
|
9
|
+
"visibility": "public-open-source",
|
|
10
|
+
"sourceRepo": "growthub-local",
|
|
11
|
+
"family": "studio"
|
|
12
|
+
},
|
|
13
|
+
"entrypoint": {
|
|
14
|
+
"workerId": "video-use-studio-operator",
|
|
15
|
+
"path": "workers/video-use-studio-operator/CLAUDE.md"
|
|
16
|
+
},
|
|
17
|
+
"workerIds": [
|
|
18
|
+
"video-use-studio-operator"
|
|
19
|
+
],
|
|
20
|
+
"agentContractPath": "workers/video-use-studio-operator/CLAUDE.md",
|
|
21
|
+
"brandTemplatePath": "brands/_template/brand-kit.md",
|
|
22
|
+
"publicExampleBrandPaths": [
|
|
23
|
+
"brands/growthub/brand-kit.md"
|
|
24
|
+
],
|
|
25
|
+
"frozenAssetPaths": [
|
|
26
|
+
"QUICKSTART.md",
|
|
27
|
+
".env.example",
|
|
28
|
+
"skills.md",
|
|
29
|
+
"output-standards.md",
|
|
30
|
+
"runtime-assumptions.md",
|
|
31
|
+
"validation-checklist.md",
|
|
32
|
+
"workers/video-use-studio-operator/CLAUDE.md",
|
|
33
|
+
"brands/_template/brand-kit.md",
|
|
34
|
+
"brands/growthub/brand-kit.md",
|
|
35
|
+
"brands/NEW-CLIENT.md",
|
|
36
|
+
"setup/clone-fork.sh",
|
|
37
|
+
"setup/install-skill.sh",
|
|
38
|
+
"setup/verify-env.mjs",
|
|
39
|
+
"setup/check-deps.sh",
|
|
40
|
+
"output/README.md",
|
|
41
|
+
"templates/video-brief.md",
|
|
42
|
+
"templates/edit-strategy.md",
|
|
43
|
+
"templates/edit-decision-list.md",
|
|
44
|
+
"templates/render-plan.md",
|
|
45
|
+
"templates/qa-checklist.md",
|
|
46
|
+
"examples/video-brief-sample.md",
|
|
47
|
+
"docs/video-use-fork-integration.md",
|
|
48
|
+
"docs/provider-adapter-layer.md",
|
|
49
|
+
"docs/video-use-discovery-path.md",
|
|
50
|
+
"growthub-meta/README.md",
|
|
51
|
+
"growthub-meta/kit-standard.md"
|
|
52
|
+
],
|
|
53
|
+
"setupPaths": {
|
|
54
|
+
"quickstart": "QUICKSTART.md",
|
|
55
|
+
"envExample": ".env.example",
|
|
56
|
+
"setupDir": "setup/",
|
|
57
|
+
"outputDir": "output/"
|
|
58
|
+
},
|
|
59
|
+
"outputStandard": {
|
|
60
|
+
"type": "working-directory",
|
|
61
|
+
"description": "Exported folder is intended to be pointed at directly by the agent Working Directory. All planning outputs are markdown files written to output/<client-slug>/<project-slug>/. Rendered video artifacts land at ${VIDEO_USE_HOME}/<videos_dir>/edit/final.mp4 per the upstream video-use contract.",
|
|
62
|
+
"requiredPaths": [
|
|
63
|
+
"QUICKSTART.md",
|
|
64
|
+
".env.example",
|
|
65
|
+
"kit.json",
|
|
66
|
+
"bundles/growthub-video-use-studio-v1.json",
|
|
67
|
+
"skills.md",
|
|
68
|
+
"workers/video-use-studio-operator/CLAUDE.md",
|
|
69
|
+
"brands/_template/brand-kit.md",
|
|
70
|
+
"brands/growthub/brand-kit.md",
|
|
71
|
+
"brands/NEW-CLIENT.md",
|
|
72
|
+
"setup/clone-fork.sh",
|
|
73
|
+
"setup/install-skill.sh",
|
|
74
|
+
"setup/verify-env.mjs",
|
|
75
|
+
"setup/check-deps.sh",
|
|
76
|
+
"output/README.md",
|
|
77
|
+
"templates",
|
|
78
|
+
"docs",
|
|
79
|
+
"growthub-meta"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"bundles": [
|
|
83
|
+
{
|
|
84
|
+
"id": "growthub-video-use-studio-v1",
|
|
85
|
+
"version": "1.0.0",
|
|
86
|
+
"path": "bundles/growthub-video-use-studio-v1.json"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"executionMode": "export",
|
|
90
|
+
"activationModes": [
|
|
91
|
+
"export"
|
|
92
|
+
],
|
|
93
|
+
"compatibility": {
|
|
94
|
+
"cliMinVersion": "0.4.3"
|
|
95
|
+
},
|
|
96
|
+
"provenance": {
|
|
97
|
+
"sourceRepo": "growthub-local",
|
|
98
|
+
"frozenAt": "2026-04-23T00:00:00.000Z"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Output Standards
|
|
2
|
+
|
|
3
|
+
Planning deliverables — write to:
|
|
4
|
+
|
|
5
|
+
- `output/<client-slug>/<project-slug>/`
|
|
6
|
+
|
|
7
|
+
Minimum required planning artifacts:
|
|
8
|
+
|
|
9
|
+
- `video-brief.md`
|
|
10
|
+
- `edit-strategy.md`
|
|
11
|
+
- `edit-decision-list.md`
|
|
12
|
+
- `render-plan.md`
|
|
13
|
+
- `qa-checklist.md`
|
|
14
|
+
|
|
15
|
+
Rendered video artifact — produced by the upstream pipeline:
|
|
16
|
+
|
|
17
|
+
- `${VIDEO_USE_HOME}/<project>/edit/final.mp4`
|
|
18
|
+
|
|
19
|
+
Every decision appended to `project.md` inside the source video directory per the upstream video-use session-persistence contract.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Runtime Assumptions
|
|
2
|
+
|
|
3
|
+
- Upstream project: `https://github.com/browser-use/video-use`
|
|
4
|
+
- Python `>=3.11` with `pip` available
|
|
5
|
+
- `ffmpeg` available in PATH (required)
|
|
6
|
+
- `yt-dlp` available in PATH (optional — only for downloading online sources)
|
|
7
|
+
- `ELEVENLABS_API_KEY` set in `.env` — required for transcript generation via ElevenLabs Scribe
|
|
8
|
+
- `~/.claude/skills/video-use` symlink present — set up by `setup/install-skill.sh`
|
|
9
|
+
- Commands run from an exported working directory; raw footage lives under `${VIDEO_USE_HOME}/<project>/`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
need_cmd() {
|
|
5
|
+
command -v "$1" >/dev/null 2>&1 || {
|
|
6
|
+
echo "Missing dependency: $1" >&2
|
|
7
|
+
exit 1
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
optional_cmd() {
|
|
12
|
+
if ! command -v "$1" >/dev/null 2>&1; then
|
|
13
|
+
echo "Optional dependency not found: $1 (only needed for downloading online sources)" >&2
|
|
14
|
+
fi
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
need_cmd python3
|
|
18
|
+
need_cmd pip3
|
|
19
|
+
need_cmd git
|
|
20
|
+
need_cmd ffmpeg
|
|
21
|
+
optional_cmd yt-dlp
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
REPO_URL="${VIDEO_USE_REPO_URL:-https://github.com/browser-use/video-use}"
|
|
5
|
+
# Canonical: VIDEO_USE_HOME. Legacy alias: VIDEO_USE_FORK_PATH.
|
|
6
|
+
LOCAL_PATH="${VIDEO_USE_HOME:-${VIDEO_USE_FORK_PATH:-$HOME/video-use}}"
|
|
7
|
+
|
|
8
|
+
if [ -d "${LOCAL_PATH}/.git" ]; then
|
|
9
|
+
git -C "${LOCAL_PATH}" fetch origin
|
|
10
|
+
git -C "${LOCAL_PATH}" pull --ff-only
|
|
11
|
+
else
|
|
12
|
+
git clone "${REPO_URL}" "${LOCAL_PATH}"
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
# Install the upstream package in editable mode so the CLI + skill resolve correctly.
|
|
16
|
+
if command -v pip3 >/dev/null 2>&1; then
|
|
17
|
+
(cd "${LOCAL_PATH}" && pip3 install -e .)
|
|
18
|
+
fi
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Register the video-use fork as a Claude Code skill per the upstream README contract.
|
|
5
|
+
# Canonical: VIDEO_USE_HOME. Legacy alias: VIDEO_USE_FORK_PATH.
|
|
6
|
+
LOCAL_PATH="${VIDEO_USE_HOME:-${VIDEO_USE_FORK_PATH:-$HOME/video-use}}"
|
|
7
|
+
SKILLS_DIR="${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}"
|
|
8
|
+
LINK_PATH="${SKILLS_DIR}/video-use"
|
|
9
|
+
|
|
10
|
+
if [ ! -d "${LOCAL_PATH}" ]; then
|
|
11
|
+
echo "video-use fork not found at ${LOCAL_PATH}. Run setup/clone-fork.sh first." >&2
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
mkdir -p "${SKILLS_DIR}"
|
|
16
|
+
|
|
17
|
+
if [ -L "${LINK_PATH}" ] || [ -e "${LINK_PATH}" ]; then
|
|
18
|
+
echo "Skill entry already present at ${LINK_PATH}. Leaving as-is." >&2
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
ln -s "${LOCAL_PATH}" "${LINK_PATH}"
|
|
23
|
+
echo "Linked ${LOCAL_PATH} -> ${LINK_PATH}"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const envPath = path.resolve(process.cwd(), ".env");
|
|
5
|
+
if (!fs.existsSync(envPath)) {
|
|
6
|
+
console.error(".env not found. Run: cp .env.example .env");
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const raw = fs.readFileSync(envPath, "utf8");
|
|
11
|
+
|
|
12
|
+
// Canonical: VIDEO_USE_HOME. Legacy alias: VIDEO_USE_FORK_PATH.
|
|
13
|
+
if (!raw.includes("VIDEO_USE_HOME=") && !raw.includes("VIDEO_USE_FORK_PATH=")) {
|
|
14
|
+
console.error("VIDEO_USE_HOME (or legacy VIDEO_USE_FORK_PATH) is required in .env");
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (!/ELEVENLABS_API_KEY=\S/.test(raw) || /ELEVENLABS_API_KEY=your_elevenlabs_key_here/.test(raw)) {
|
|
19
|
+
console.error("ELEVENLABS_API_KEY is required in .env (for ElevenLabs Scribe transcription)");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log("Environment check passed.");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Video Use Studio Skills
|
|
2
|
+
|
|
3
|
+
1. Read `runtime-assumptions.md`.
|
|
4
|
+
2. Read `docs/video-use-fork-integration.md`.
|
|
5
|
+
3. Confirm target format: content type, target length, aesthetic direction.
|
|
6
|
+
4. Produce, in order:
|
|
7
|
+
- `templates/video-brief.md` — source inventory, goal, audience, duration
|
|
8
|
+
- `templates/edit-strategy.md` — 4–8 sentence proposed approach, wait for confirmation
|
|
9
|
+
- `templates/edit-decision-list.md` — transcript-anchored EDL with word-boundary cuts
|
|
10
|
+
- `templates/render-plan.md` — FFmpeg commands, overlay tool choice (Manim / Remotion / PIL)
|
|
11
|
+
- `templates/qa-checklist.md` — twelve production rules pass, subtitles-last validation
|
|
12
|
+
|
|
13
|
+
Non-negotiable rules enforced by this kit:
|
|
14
|
+
|
|
15
|
+
- Subtitles are applied last, after all overlays.
|
|
16
|
+
- 30 ms audio fades at every segment boundary.
|
|
17
|
+
- Word-boundary snapping for every cut; never cut inside a word.
|
|
18
|
+
- Overlays use `setpts=PTS-STARTPTS+T/TB` for timing.
|
|
19
|
+
- Cached transcripts are reused; never re-transcribe a source twice.
|
|
20
|
+
|
|
21
|
+
Use deterministic command paths. Resolve workspace with `${VIDEO_USE_HOME:-$HOME/video-use}`. Never expose `ELEVENLABS_API_KEY` in output artifacts.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Edit Decision List
|
|
2
|
+
|
|
3
|
+
Every cut is snapped to a word boundary from the packed transcript. Timestamps are source-relative (HH:MM:SS.mmm). Never cut inside a word.
|
|
4
|
+
|
|
5
|
+
| # | Source file | In (word-boundary) | Out (word-boundary) | Pad (ms) | Overlay | Notes |
|
|
6
|
+
|---|---|---|---|---|---|---|
|
|
7
|
+
| | | | | | | |
|
|
8
|
+
|
|
9
|
+
## Overlay references
|
|
10
|
+
|
|
11
|
+
- Overlay tool (Manim / Remotion / PIL):
|
|
12
|
+
- Timing shift formula: `setpts=PTS-STARTPTS+T/TB`
|
|
13
|
+
|
|
14
|
+
## Caption strategy
|
|
15
|
+
|
|
16
|
+
- Packed phrase-level transcript path:
|
|
17
|
+
- Subtitles applied last, after all overlays.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Edit Strategy
|
|
2
|
+
|
|
3
|
+
4–8 sentences describing the proposed edit approach. The user must confirm this document in plain English before an EDL is generated.
|
|
4
|
+
|
|
5
|
+
- Opening hook:
|
|
6
|
+
- Core through-line:
|
|
7
|
+
- Pacing bias (tight / breathing / mixed):
|
|
8
|
+
- Aesthetic direction (grade, overlay tool, typography):
|
|
9
|
+
- Captions strategy:
|
|
10
|
+
- Target length + rationale:
|
|
11
|
+
- Risks to surface during self-evaluation:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# QA Checklist — Twelve Production Rules
|
|
2
|
+
|
|
3
|
+
- [ ] Subtitles applied last, after every overlay
|
|
4
|
+
- [ ] 30 ms audio fade at every segment boundary
|
|
5
|
+
- [ ] Overlays shifted with `setpts=PTS-STARTPTS+T/TB`
|
|
6
|
+
- [ ] Every cut snapped to a word boundary
|
|
7
|
+
- [ ] Cut edges padded 30–200 ms
|
|
8
|
+
- [ ] No cut inside a word
|
|
9
|
+
- [ ] No re-transcription of a cached source
|
|
10
|
+
- [ ] Caption alignment matches the packed phrase-level transcript
|
|
11
|
+
- [ ] 30 ms fade-out on every overlay exit
|
|
12
|
+
- [ ] Subtitle sequencing respects speaker turns
|
|
13
|
+
- [ ] Output validated (duration, codec, resolution) before handoff
|
|
14
|
+
- [ ] Every destructive edit decision appended to `project.md`
|
|
15
|
+
|
|
16
|
+
## Delivery checks
|
|
17
|
+
|
|
18
|
+
- [ ] Duration matches brief (± 500 ms)
|
|
19
|
+
- [ ] Aspect ratio correct
|
|
20
|
+
- [ ] Audio sync verified
|
|
21
|
+
- [ ] `${VIDEO_USE_HOME}/<project>/edit/final.mp4` exists and plays end-to-end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Render Plan
|
|
2
|
+
|
|
3
|
+
## Source resolution
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
WORKSPACE="${VIDEO_USE_HOME:-${VIDEO_USE_FORK_PATH:-$HOME/video-use}}"
|
|
7
|
+
PROJECT_DIR="${WORKSPACE}/<project>"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Transcription (idempotent — never re-transcribe a cached source)
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
cd "${PROJECT_DIR}"
|
|
14
|
+
# ElevenLabs Scribe, keyed by ELEVENLABS_API_KEY from .env
|
|
15
|
+
python -m video_use.transcribe --source <input.mp4>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Render
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd "${PROJECT_DIR}"
|
|
22
|
+
python -m video_use.render \
|
|
23
|
+
--edl ../output/<client-slug>/<project-slug>/edit-decision-list.md \
|
|
24
|
+
--overlay <manim|remotion|pil> \
|
|
25
|
+
--out edit/final.mp4
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## FFmpeg hard constraints
|
|
29
|
+
|
|
30
|
+
- 30 ms audio fade at every segment boundary.
|
|
31
|
+
- Word-boundary snapping for all cuts; pad edges 30–200 ms.
|
|
32
|
+
- Overlays shifted with `setpts=PTS-STARTPTS+T/TB`.
|
|
33
|
+
- Subtitles are applied last.
|
|
34
|
+
|
|
35
|
+
## Checks
|
|
36
|
+
|
|
37
|
+
- Output path: `${PROJECT_DIR}/edit/final.mp4`
|
|
38
|
+
- Duration matches brief (± 500 ms)
|
|
39
|
+
- Codec: h264, audio: aac
|
|
40
|
+
- Self-evaluation loop runs up to 3 times before surfacing output
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Video Brief
|
|
2
|
+
|
|
3
|
+
- Goal:
|
|
4
|
+
- Audience:
|
|
5
|
+
- Source footage directory (`${VIDEO_USE_HOME}/<project>/`):
|
|
6
|
+
- Duration target:
|
|
7
|
+
- Aspect ratio:
|
|
8
|
+
- Delivery format: MP4 (h264)
|
|
9
|
+
- Aesthetic direction:
|
|
10
|
+
- Speakers / on-camera subjects:
|
|
11
|
+
- External sources to pull via `yt-dlp` (optional):
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Validation Checklist
|
|
2
|
+
|
|
3
|
+
- [ ] `bash setup/check-deps.sh` — Python, pip, git, ffmpeg present
|
|
4
|
+
- [ ] `node setup/verify-env.mjs` — `VIDEO_USE_HOME` and `ELEVENLABS_API_KEY` set
|
|
5
|
+
- [ ] `bash setup/clone-fork.sh` — video-use cloned and `pip install -e .` succeeded
|
|
6
|
+
- [ ] `bash setup/install-skill.sh` — `~/.claude/skills/video-use` symlink in place
|
|
7
|
+
- [ ] Source footage staged under `${VIDEO_USE_HOME}/<project>/`
|
|
8
|
+
- [ ] Planning artifacts written to `output/<client-slug>/<project-slug>/`
|
|
9
|
+
- [ ] `edit-strategy.md` confirmed before EDL generation
|
|
10
|
+
- [ ] Twelve production rules checklist passes in `qa-checklist.md`
|
|
11
|
+
- [ ] Final render exists at `${VIDEO_USE_HOME}/<project>/edit/final.mp4`
|
package/assets/worker-kits/growthub-video-use-studio-v1/workers/video-use-studio-operator/CLAUDE.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Video Use Studio Operator
|
|
2
|
+
|
|
3
|
+
**Kit:** `growthub-video-use-studio-v1`
|
|
4
|
+
**Worker ID:** `video-use-studio-operator`
|
|
5
|
+
**Version:** `1.0.0`
|
|
6
|
+
|
|
7
|
+
## Role
|
|
8
|
+
|
|
9
|
+
You convert raw footage and edit intent into implementation-ready video-use artifacts: a brief, a confirmed edit strategy, a transcript-anchored EDL, a render plan, and a QA pass. You operate the upstream [browser-use/video-use](https://github.com/browser-use/video-use) pipeline (transcription → packing → LLM reasoning → EDL → render → self-eval) from an exported working directory.
|
|
10
|
+
|
|
11
|
+
## Required startup
|
|
12
|
+
|
|
13
|
+
1. Read `skills.md`.
|
|
14
|
+
2. Read `runtime-assumptions.md`.
|
|
15
|
+
3. Read `docs/video-use-fork-integration.md`.
|
|
16
|
+
4. Resolve `WORKSPACE="${VIDEO_USE_HOME:-${VIDEO_USE_FORK_PATH:-$HOME/video-use}}"`.
|
|
17
|
+
5. Verify environment with `node setup/verify-env.mjs`.
|
|
18
|
+
|
|
19
|
+
If setup checks fail, stop and return remediation only. Do not invent API keys or hardcode machine paths.
|
|
20
|
+
|
|
21
|
+
## Input contract
|
|
22
|
+
|
|
23
|
+
- Raw footage already staged under `${VIDEO_USE_HOME}/<project>/`.
|
|
24
|
+
- Brand kit at `brands/<client>/brand-kit.md` (copied from `brands/_template/`).
|
|
25
|
+
- User-supplied goal, target length, aesthetic direction.
|
|
26
|
+
|
|
27
|
+
## Output artifacts
|
|
28
|
+
|
|
29
|
+
Write every planning deliverable to `output/<client-slug>/<project-slug>/`:
|
|
30
|
+
|
|
31
|
+
- `video-brief.md` — goal, audience, duration, ratio, delivery format
|
|
32
|
+
- `edit-strategy.md` — 4–8 sentence proposed approach, wait for explicit user confirmation before proceeding
|
|
33
|
+
- `edit-decision-list.md` — transcript-anchored cut list with word-boundary timestamps and overlay markers
|
|
34
|
+
- `render-plan.md` — FFmpeg filter graph, overlay tool choice, caption sequencing
|
|
35
|
+
- `qa-checklist.md` — twelve production rules pass
|
|
36
|
+
|
|
37
|
+
Rendered output is the upstream pipeline's responsibility:
|
|
38
|
+
|
|
39
|
+
- `${VIDEO_USE_HOME}/<project>/edit/final.mp4`
|
|
40
|
+
|
|
41
|
+
## Fork integration
|
|
42
|
+
|
|
43
|
+
- Upstream contract: conversational edits via Claude Code skill at `~/.claude/skills/video-use`.
|
|
44
|
+
- Transcription: ElevenLabs Scribe (word-level, speaker-tagged, audio-event markers).
|
|
45
|
+
- Overlays: Manim / Remotion / PIL — operator chooses per project aesthetic.
|
|
46
|
+
- Session persistence: append each decision to `project.md` inside the source video directory.
|
|
47
|
+
- Self-evaluation loop: up to three iterative fixes before surfacing output to the user.
|
|
48
|
+
|
|
49
|
+
## Non-negotiable production rules
|
|
50
|
+
|
|
51
|
+
1. Subtitles last — applied after every overlay.
|
|
52
|
+
2. 30 ms audio fade at every segment boundary.
|
|
53
|
+
3. Overlays shifted with `setpts=PTS-STARTPTS+T/TB`.
|
|
54
|
+
4. Word-boundary snapping for every cut.
|
|
55
|
+
5. Pad cut edges with a 30–200 ms working window.
|
|
56
|
+
6. Never cut inside a word.
|
|
57
|
+
7. Never re-transcribe a cached source.
|
|
58
|
+
8. Caption alignment matches the packed phrase-level transcript.
|
|
59
|
+
9. 30 ms fade-out on every overlay exit.
|
|
60
|
+
10. Subtitle sequencing respects speaker turns.
|
|
61
|
+
11. Output is validated (duration, codec, resolution) before user handoff.
|
|
62
|
+
12. Every destructive edit decision is logged to `project.md`.
|
|
63
|
+
|
|
64
|
+
## Troubleshooting
|
|
65
|
+
|
|
66
|
+
- Missing `ELEVENLABS_API_KEY` → re-run `node setup/verify-env.mjs`.
|
|
67
|
+
- CORS / network failures on transcription → check the ElevenLabs key is active.
|
|
68
|
+
- `~/.claude/skills/video-use` missing → re-run `bash setup/install-skill.sh`.
|
|
69
|
+
- `ffmpeg`/`yt-dlp` not found → re-run `bash setup/check-deps.sh`.
|
|
70
|
+
|
|
71
|
+
Never write `.env` secrets into any output artifact. Never hardcode absolute user paths; always resolve through `${VIDEO_USE_HOME}` with a `$HOME/video-use` fallback.
|
package/dist/index.js
CHANGED
|
@@ -8563,6 +8563,15 @@ var init_catalog = __esm({
|
|
|
8563
8563
|
executionMode: "export",
|
|
8564
8564
|
activationModes: ["export"],
|
|
8565
8565
|
family: "studio"
|
|
8566
|
+
},
|
|
8567
|
+
{
|
|
8568
|
+
id: "growthub-video-use-studio-v1",
|
|
8569
|
+
packageDirName: "growthub-video-use-studio-v1",
|
|
8570
|
+
defaultBundleId: "growthub-video-use-studio-v1",
|
|
8571
|
+
type: "worker",
|
|
8572
|
+
executionMode: "export",
|
|
8573
|
+
activationModes: ["export"],
|
|
8574
|
+
family: "studio"
|
|
8566
8575
|
}
|
|
8567
8576
|
];
|
|
8568
8577
|
}
|
|
@@ -21389,10 +21398,13 @@ Examples:
|
|
|
21389
21398
|
$ growthub kit list --json # machine-readable output
|
|
21390
21399
|
$ growthub kit download higgsfield # fuzzy slug \u2014 resolves automatically
|
|
21391
21400
|
$ growthub kit download hyperframes # Hyperframes custom workspace
|
|
21401
|
+
$ growthub kit download video-use # browser-use/video-use custom workspace
|
|
21392
21402
|
$ growthub kit download growthub-open-higgsfield-studio-v1
|
|
21393
21403
|
$ growthub kit download growthub-hyperframes-studio-v1
|
|
21404
|
+
$ growthub kit download growthub-video-use-studio-v1
|
|
21394
21405
|
$ growthub kit inspect higgsfield-studio-v1
|
|
21395
21406
|
$ growthub kit inspect hyperframes
|
|
21407
|
+
$ growthub kit inspect video-use
|
|
21396
21408
|
$ growthub kit families # show family taxonomy
|
|
21397
21409
|
|
|
21398
21410
|
Fork Sync Agent:
|
|
@@ -21521,7 +21533,7 @@ Examples:
|
|
|
21521
21533
|
});
|
|
21522
21534
|
kit.command("families").description("Show the kit family taxonomy with descriptions and examples").action(() => {
|
|
21523
21535
|
const defs = [
|
|
21524
|
-
{ family: "studio", tagline: "AI generation studio backed by a local fork", surfaces: "local-fork, browser-hosted, desktop-app", example: "growthub-open-higgsfield-studio-v1, growthub-hyperframes-studio-v1, growthub-zernio-social-v1" },
|
|
21536
|
+
{ family: "studio", tagline: "AI generation studio backed by a local fork", surfaces: "local-fork, browser-hosted, desktop-app", example: "growthub-open-higgsfield-studio-v1, growthub-hyperframes-studio-v1, growthub-video-use-studio-v1, growthub-zernio-social-v1" },
|
|
21525
21537
|
{ family: "workflow", tagline: "Multi-step pipeline operator across tools or APIs", surfaces: "browser-hosted (primary)", example: "creative-strategist-v1" },
|
|
21526
21538
|
{ family: "operator", tagline: "Domain vertical specialist \u2014 one provider, structured deliverables", surfaces: "browser-hosted", example: "growthub-email-marketing-v1" },
|
|
21527
21539
|
{ family: "ops", tagline: "Infrastructure / toolchain operator (provider optional)", surfaces: "local-fork (primary)", example: "(coming soon)" }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@growthub/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.9",
|
|
4
4
|
"description": "Growthub Local is a control plane for forked worker kits. The CLI is the executor, the hosted app is the identity authority, the worker kit is the unit of portable agent infrastructure, and the fork is the operator's personal branch of that infrastructure — policy-governed, trace-backed, and self-healing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@aws-sdk/client-s3": "^3.888.0",
|
|
44
44
|
"@clack/prompts": "^0.10.0",
|
|
45
|
-
"@growthub/api-contract": "
|
|
45
|
+
"@growthub/api-contract": "1.0.0-alpha.1",
|
|
46
46
|
"ajv": "^8.18.0",
|
|
47
47
|
"ajv-formats": "^3.0.1",
|
|
48
48
|
"better-auth": "1.4.18",
|