@remixmate/cli 0.1.0 → 0.1.1
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/README.md +100 -83
- package/README.zh-CN.md +183 -0
- package/dist/handlers/gen-digital-human.d.ts +12 -0
- package/dist/handlers/gen-digital-human.js +157 -0
- package/dist/handlers/gen-image.js +5 -41
- package/dist/handlers/gen-video.d.ts +18 -0
- package/dist/handlers/gen-video.js +153 -0
- package/dist/handlers/gen-voice.js +2 -12
- package/dist/handlers/index.js +4 -2
- package/dist/handlers/shared.d.ts +26 -0
- package/dist/handlers/shared.js +66 -0
- package/dist/http.d.ts +4 -2
- package/dist/http.js +5 -3
- package/dist/manifest.json +27 -24
- package/dist/registry.d.ts +5 -16
- package/dist/registry.js +11 -17
- package/dist/skill-schema.d.ts +47 -0
- package/dist/skill-schema.js +49 -0
- package/package.json +5 -4
- package/skills/export-jianying/scripts/gen_jianying_draft.py +4 -4
- package/skills/gen-digital-human/SKILL.md +23 -46
- package/skills/gen-digital-human/skill.json +3 -2
- package/skills/gen-digital-human/version.json +1 -1
- package/skills/gen-image/SKILL.md +2 -2
- package/skills/gen-image/skill.json +2 -1
- package/skills/gen-image/version.json +1 -1
- package/skills/gen-script/SKILL.md +13 -13
- package/skills/gen-script/scripts/gen_script.py +11 -12
- package/skills/gen-video/SKILL.md +22 -33
- package/skills/gen-video/skill.json +3 -2
- package/skills/gen-video/version.json +1 -1
- package/skills/gen-voice/SKILL.md +1 -1
- package/skills/gen-voice/version.json +1 -1
- package/skills/prepare-video-assets/SKILL.md +2 -2
- package/skills/prepare-video-assets/skill.json +1 -1
- package/skills/render-video/scripts/render_video.py +8 -8
- package/skills/{template-bind → template-registry}/README.md +4 -4
- package/skills/{template-bind → template-registry}/SKILL.md +14 -12
- package/skills/template-registry/scripts/list_templates.py +129 -0
- package/skills/{template-bind → template-registry}/scripts/match_template.py +4 -3
- package/skills/{template-bind → template-registry}/scripts/registry_loader.py +1 -1
- package/skills/{template-bind → template-registry}/scripts/template_paths.py +7 -7
- package/skills/{template-bind → template-registry}/skill.json +6 -5
- package/skills/template-registry/version.json +7 -0
- package/skills/{template-bind → template-registry}/video_dsl/README.md +2 -2
- package/skills/{template-bind → template-registry}/video_dsl/runtime/__init__.py +1 -1
- package/skills/video-parser/SKILL.md +47 -160
- package/skills/video-parser/skill.json +3 -4
- package/skills/video-parser/version.json +1 -1
- package/skills/web-capture/SKILL.md +407 -116
- package/skills/web-capture/scripts/_media_screenshot/__init__.py +21 -0
- package/skills/web-capture/scripts/_media_screenshot/bootstrap.py +34 -0
- package/skills/web-capture/scripts/_media_screenshot/browser.py +86 -0
- package/skills/web-capture/scripts/_media_screenshot/cli_args.py +111 -0
- package/skills/web-capture/scripts/_media_screenshot/js/arrow.js +86 -0
- package/skills/web-capture/scripts/_media_screenshot/js/caption.js +27 -0
- package/skills/web-capture/scripts/_media_screenshot/js/clear_overlay.js +5 -0
- package/skills/web-capture/scripts/_media_screenshot/js/cursor_bootstrap.js +26 -0
- package/skills/web-capture/scripts/_media_screenshot/js/cursor_hide.js +6 -0
- package/skills/web-capture/scripts/_media_screenshot/js/cursor_move.js +12 -0
- package/skills/web-capture/scripts/_media_screenshot/js/cursor_ripple.js +25 -0
- package/skills/web-capture/scripts/_media_screenshot/js/element_zoom.js +72 -0
- package/skills/web-capture/scripts/_media_screenshot/js/element_zoom_restore.js +21 -0
- package/skills/web-capture/scripts/_media_screenshot/js/fade_out_overlays.js +10 -0
- package/skills/web-capture/scripts/_media_screenshot/js/focus.js +38 -0
- package/skills/web-capture/scripts/_media_screenshot/js/highlight.js +97 -0
- package/skills/web-capture/scripts/_media_screenshot/js/overlay_bootstrap.js +19 -0
- package/skills/web-capture/scripts/_media_screenshot/js/page_zoom_in.js +54 -0
- package/skills/web-capture/scripts/_media_screenshot/js/page_zoom_out.js +11 -0
- package/skills/web-capture/scripts/_media_screenshot/js/page_zoom_restore.js +13 -0
- package/skills/web-capture/scripts/_media_screenshot/js/redact.js +33 -0
- package/skills/web-capture/scripts/_media_screenshot/js/scroll.js +26 -0
- package/skills/web-capture/scripts/_media_screenshot/js/scroll_through.js +18 -0
- package/skills/web-capture/scripts/_media_screenshot/js/sequence.js +76 -0
- package/skills/web-capture/scripts/_media_screenshot/js/settled_check.js +15 -0
- package/skills/web-capture/scripts/_media_screenshot/js/title_card.js +71 -0
- package/skills/web-capture/scripts/_media_screenshot/js_loader.py +14 -0
- package/skills/web-capture/scripts/_media_screenshot/overlay.py +17 -0
- package/skills/web-capture/scripts/_media_screenshot/recording.py +100 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/__init__.py +39 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/arrow.py +50 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/caption.py +20 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/click.py +35 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/code_lines.py +54 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/focus.py +24 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/highlight.py +54 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/hover.py +28 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/redact.py +32 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/scroll.py +32 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/sequence.py +43 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/title_card.py +20 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/type.py +42 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/wait.py +9 -0
- package/skills/web-capture/scripts/_media_screenshot/scenes/zoom.py +72 -0
- package/skills/web-capture/scripts/_media_screenshot/screenshot.py +166 -0
- package/skills/web-capture/scripts/_media_screenshot/storyboard.py +88 -0
- package/skills/web-capture/scripts/_media_screenshot/template.py +119 -0
- package/skills/web-capture/scripts/_media_screenshot/trim.py +82 -0
- package/skills/web-capture/scripts/record.py +186 -0
- package/skills/web-capture/scripts/screenshot.py +94 -0
- package/skills/web-capture/skill.json +14 -14
- package/skills/web-capture/templates/github-code-tour.json +59 -0
- package/skills/web-capture/templates/github-readme-tour.json +77 -0
- package/skills/web-capture/templates/github-repo-intro.json +74 -0
- package/skills/web-capture/version.json +2 -2
- package/dist/handlers/template-bind.d.ts +0 -15
- package/dist/handlers/template-bind.js +0 -149
- package/skills/gen-digital-human/scripts/gen_digital_human_video.py +0 -574
- package/skills/gen-video/scripts/gen_video.py +0 -591
- package/skills/template-bind/version.json +0 -7
- package/skills/web-capture/scripts/web_capture.py +0 -461
- /package/skills/{template-bind → template-registry}/scripts/check_contracts.py +0 -0
- /package/skills/{template-bind → template-registry}/scripts/render_job_client.py +0 -0
- /package/skills/{template-bind → template-registry}/scripts/sync_registry.py +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/runtime/dsl_validator.py +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/runtime/prompt_enhancer.py +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/runtime/template_binder.py +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/runtime/timeline_compiler.py +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/schema/render-plan-v1alpha1.json +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/schema/template-binding-v1alpha1.json +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/schema/template-definition-v1alpha1.json +0 -0
- /package/skills/{template-bind → template-registry}/video_dsl/schema/video-dsl-v1alpha1.json +0 -0
|
@@ -17,222 +17,109 @@ triggers:
|
|
|
17
17
|
|
|
18
18
|
# Video Deconstruction Skill
|
|
19
19
|
|
|
20
|
-
Splits a video into reusable content assets — audio, ASR transcript (with per-word timestamps), scene cuts, keyframe images
|
|
20
|
+
Splits a video into reusable content assets — audio, ASR transcript (with per-word timestamps), scene cuts, keyframe images — and returns a structured asset-manifest JSON.
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- **ffmpeg**: must be installed locally (`brew install ffmpeg`) — used for audio extraction, scene-change detection, and keyframe capture.
|
|
25
|
-
- **Python 3**: standard library only, no third-party dependencies.
|
|
22
|
+
The skill entry (`scripts/parse_via_render.py`) runs the deconstruction **through the ab-render HTTP service** (`POST /parse` → poll `POST /parseStatus`). It needs **no local ffmpeg** — the heavy lifting happens server-side and the manifest (with cloud-hosted asset URLs) comes back as JSON on stdout.
|
|
26
23
|
|
|
27
24
|
## Authentication & environment
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
No skill-local env file — the executing process inherits the system environment.
|
|
30
27
|
|
|
31
|
-
- **Enterprise OpenClaw**: auth
|
|
32
|
-
- **Other environments**:
|
|
28
|
+
- **Enterprise OpenClaw**: auth + service address are injected; nothing to configure.
|
|
29
|
+
- **Other environments**: set `RENDER_API_URL` (the ab-render service) and `PRIV_TOKEN`. Without them the run fails fast with an actionable message.
|
|
33
30
|
|
|
34
31
|
| Env var | Description | Default |
|
|
35
32
|
|---------|-------------|---------|
|
|
36
|
-
| `
|
|
37
|
-
| `
|
|
38
|
-
| `
|
|
33
|
+
| `RENDER_API_URL` | ab-render service base URL (e.g. `http://localhost:3000`). Required. | (none) |
|
|
34
|
+
| `PRIV_TOKEN` | Tianyan token, sent as `X-Priv-Token`. | (none) |
|
|
35
|
+
| `CONVERSATION_ID` | Optional, sent as `x-conversation-id` for file association. | (none) |
|
|
39
36
|
|
|
40
37
|
## Steps
|
|
41
38
|
|
|
42
|
-
1. **Script path**: read the system-injected `Base directory for this skill: <path>` as `<SkillDir>`.
|
|
43
|
-
2. **
|
|
44
|
-
3. **
|
|
45
|
-
4. **
|
|
46
|
-
5. **Inspect the result**: check `deconstruction.json`, `audio.mp3`, and the `keyframes/` directory in the output folder.
|
|
39
|
+
1. **Script path**: read the system-injected `Base directory for this skill: <path>` as `<SkillDir>`. The entry is always `<SkillDir>/scripts/parse_via_render.py`; never hard-code paths.
|
|
40
|
+
2. **Provide a direct video URL** (`--url`). Page links (Douyin / Xiaohongshu share pages) are not supported — pass a direct video file URL.
|
|
41
|
+
3. **Run and wait**: the script submits the task and polls until it finishes (up to ~10 minutes), printing progress lines.
|
|
42
|
+
4. **Consume the result**: a JSON asset-manifest is printed to stdout (audio / ASR / scenes / keyframes, with cloud URLs). Save or pipe it as needed.
|
|
47
43
|
|
|
48
|
-
### Deconstruct
|
|
44
|
+
### Deconstruct a video
|
|
49
45
|
|
|
50
46
|
```bash
|
|
51
|
-
python3 <SkillDir>/scripts/
|
|
52
|
-
--url "https://example.com/video.mp4"
|
|
53
|
-
--output-dir ./output_deconstructed
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Deconstruct from a local file
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
python3 <SkillDir>/scripts/deconstruct_video.py \
|
|
60
|
-
--local /path/to/video.mp4 \
|
|
61
|
-
--output-dir ./output_deconstructed
|
|
47
|
+
python3 <SkillDir>/scripts/parse_via_render.py \
|
|
48
|
+
--url "https://example.com/video.mp4"
|
|
62
49
|
```
|
|
63
50
|
|
|
64
51
|
### Custom scene-change threshold
|
|
65
52
|
|
|
66
53
|
```bash
|
|
67
|
-
python3 <SkillDir>/scripts/
|
|
54
|
+
python3 <SkillDir>/scripts/parse_via_render.py \
|
|
68
55
|
--url "https://example.com/video.mp4" \
|
|
69
56
|
--scene-threshold 0.4
|
|
70
57
|
```
|
|
71
58
|
|
|
72
|
-
Lower values are more sensitive (more cuts), higher values
|
|
59
|
+
Lower values are more sensitive (more cuts), higher values looser (fewer cuts). Default `0.3`.
|
|
73
60
|
|
|
74
|
-
###
|
|
61
|
+
### Skip ASR or keyframes
|
|
75
62
|
|
|
76
63
|
```bash
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
--skip-keyframes
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Keyframes only (skip ASR)
|
|
64
|
+
# audio + scenes only (skip keyframes)
|
|
65
|
+
python3 <SkillDir>/scripts/parse_via_render.py --url "https://example.com/video.mp4" --skip-keyframes
|
|
83
66
|
|
|
84
|
-
|
|
85
|
-
python3 <SkillDir>/scripts/
|
|
86
|
-
--url "https://example.com/video.mp4" \
|
|
87
|
-
--skip-asr
|
|
67
|
+
# keyframes + scenes only (skip ASR)
|
|
68
|
+
python3 <SkillDir>/scripts/parse_via_render.py --url "https://example.com/video.mp4" --skip-asr
|
|
88
69
|
```
|
|
89
70
|
|
|
90
71
|
### JSON pipeline mode
|
|
91
72
|
|
|
92
73
|
```bash
|
|
93
|
-
python3 <SkillDir>/scripts/
|
|
74
|
+
python3 <SkillDir>/scripts/parse_via_render.py \
|
|
94
75
|
--url "https://example.com/video.mp4" \
|
|
95
76
|
--json-output
|
|
96
77
|
```
|
|
97
78
|
|
|
98
|
-
Prints only the final
|
|
99
|
-
|
|
100
|
-
See every option: `python3 <SkillDir>/scripts/deconstruct_video.py --help`.
|
|
79
|
+
Prints only the final manifest JSON to stdout — no progress lines — suitable for piping into downstream tools.
|
|
101
80
|
|
|
102
81
|
## Common CLI flags
|
|
103
82
|
|
|
104
83
|
| Flag | Description | Default |
|
|
105
84
|
|------|-------------|---------|
|
|
106
|
-
| `--url` |
|
|
107
|
-
| `--
|
|
108
|
-
| `-o` / `--output-dir` | Output directory. | `./deconstructed_<timestamp>` |
|
|
109
|
-
| `--scene-threshold` | Scene-change threshold 0.0–1.0. | `0.3` |
|
|
110
|
-
| `--private-token` | Override `privateToken`. | env var |
|
|
111
|
-
| `--json-output` | Pipeline mode — JSON-only stdout. | off |
|
|
85
|
+
| `--url` | Direct remote video URL (required). | — |
|
|
86
|
+
| `--scene-threshold` | Scene-change sensitivity 0.0–1.0. | `0.3` |
|
|
112
87
|
| `--skip-asr` | Skip the ASR step. | off |
|
|
113
88
|
| `--skip-keyframes` | Skip the keyframe-extraction step. | off |
|
|
89
|
+
| `--json-output` | Pipeline mode — JSON-only stdout. | off |
|
|
114
90
|
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
The script writes the following under `--output-dir`:
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
<output-dir>/
|
|
121
|
-
├── audio.mp3 # Extracted audio file
|
|
122
|
-
├── deconstruction.json # Asset-manifest JSON
|
|
123
|
-
└── keyframes/ # Keyframe images
|
|
124
|
-
├── frame_001.jpg
|
|
125
|
-
├── frame_002.jpg
|
|
126
|
-
└── ...
|
|
127
|
-
```
|
|
91
|
+
## Result manifest shape
|
|
128
92
|
|
|
129
|
-
|
|
93
|
+
`parse_via_render.py` prints the service's `result` payload — a structured manifest whose top-level fields are:
|
|
130
94
|
|
|
131
95
|
```json
|
|
132
96
|
{
|
|
133
|
-
"source":
|
|
134
|
-
"url": "
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
"audio": {
|
|
139
|
-
"localPath": "output_dir/audio.mp3",
|
|
140
|
-
"url": "uploaded OSS URL"
|
|
141
|
-
},
|
|
142
|
-
"asr": {
|
|
143
|
-
"text": "full recognized transcript",
|
|
144
|
-
"duration": 3816,
|
|
145
|
-
"utterances": [
|
|
146
|
-
{
|
|
147
|
-
"text": "per-utterance text",
|
|
148
|
-
"startTime": 0,
|
|
149
|
-
"endTime": 1000,
|
|
150
|
-
"words": [...]
|
|
151
|
-
}
|
|
152
|
-
]
|
|
153
|
-
},
|
|
154
|
-
"scenes": [
|
|
155
|
-
{
|
|
156
|
-
"index": 0,
|
|
157
|
-
"startTimeSec": 0.0,
|
|
158
|
-
"endTimeSec": 3.5,
|
|
159
|
-
"keyframe": "keyframes/frame_001.jpg"
|
|
160
|
-
}
|
|
161
|
-
],
|
|
162
|
-
"keyframes": [
|
|
163
|
-
{
|
|
164
|
-
"index": 0,
|
|
165
|
-
"timestampSec": 0.0,
|
|
166
|
-
"localPath": "keyframes/frame_001.jpg"
|
|
167
|
-
}
|
|
168
|
-
]
|
|
97
|
+
"source": { "url": "original URL", "durationMs": 12345 },
|
|
98
|
+
"audio": { "url": "cloud audio URL" },
|
|
99
|
+
"asr": { "text": "full transcript", "utterances": [ { "text": "...", "startTime": 0, "endTime": 1000, "words": [] } ] },
|
|
100
|
+
"scenes": [ { "index": 0, "startTimeSec": 0.0, "endTimeSec": 3.5, "keyframe": "cloud keyframe URL" } ],
|
|
101
|
+
"keyframes":[ { "index": 0, "timestampSec": 0.0, "url": "cloud keyframe URL" } ]
|
|
169
102
|
}
|
|
170
103
|
```
|
|
171
104
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
Reads the deconstruction artifacts and extracts hook, narrative structure, copy pacing, scene composition, etc., emitting a structured analysis report. Script path: `<SkillDir>/scripts/analyze_video.py`.
|
|
175
|
-
|
|
176
|
-
The analysis report can be used to:
|
|
177
|
-
- Feed an AI to write a new script with the same structure.
|
|
178
|
-
- Guide a human re-creator to replicate the video's rhythm.
|
|
179
|
-
- Inform downstream template development.
|
|
105
|
+
(Exact fields are defined by the ab-render service; treat the above as representative.)
|
|
180
106
|
|
|
181
|
-
|
|
107
|
+
## Optional local tools (not the skill entry)
|
|
182
108
|
|
|
183
|
-
|
|
184
|
-
python3 <SkillDir>/scripts/analyze_video.py \
|
|
185
|
-
-i ./output/deconstructed_xxx/deconstruction.json
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Specify the output directory
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
python3 <SkillDir>/scripts/analyze_video.py \
|
|
192
|
-
-i ./output/deconstructed_xxx/ \
|
|
193
|
-
-o ./reports/
|
|
194
|
-
```
|
|
109
|
+
Two extra scripts ship alongside the entry for local / offline use. They are **not** invoked by the `video_parser` tool and are **not** the skill entry — call them directly with `python3` only when you specifically need local processing:
|
|
195
110
|
|
|
196
|
-
|
|
111
|
+
- **`scripts/deconstruct_video.py`** — a fully local deconstruction alternative that **requires ffmpeg** (`brew install ffmpeg`) and writes `audio.mp3` + `keyframes/` + `deconstruction.json` to an `--output-dir`. Use when there is no ab-render service available. Flags: `--url` / `--local`, `-o/--output-dir`, `--scene-threshold`, `--skip-asr`, `--skip-keyframes`, `--json-output`.
|
|
112
|
+
- **`scripts/analyze_video.py`** — a second stage that reads a `deconstruction.json` (or the manifest above saved to disk) and emits a structural-analysis report (hook, narrative structure, pacing, CTA, …). Flags: `-i/--input`, `-o/--output-dir`, `--json-output`.
|
|
197
113
|
|
|
198
|
-
```bash
|
|
199
|
-
python3 <SkillDir>/scripts/analyze_video.py
|
|
200
|
-
|
|
201
|
-
--json-output
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
Prints only the `analysis.json` payload to stdout, no progress text, suitable for piping.
|
|
205
|
-
|
|
206
|
-
### analyze_video.py flags
|
|
207
|
-
|
|
208
|
-
| Flag | Description | Default |
|
|
209
|
-
|------|-------------|---------|
|
|
210
|
-
| `-i` / `--input` | Path to `deconstruction.json` or its parent directory. | required |
|
|
211
|
-
| `-o` / `--output-dir` | Output directory. | same as input |
|
|
212
|
-
| `--json-output` | Pipeline mode (JSON-only stdout). | off |
|
|
213
|
-
|
|
214
|
-
### Output files
|
|
215
|
-
|
|
216
|
-
`analysis.json`: the structured analysis report. Covers the following dimensions:
|
|
217
|
-
|
|
218
|
-
| Field | Description |
|
|
219
|
-
|-------|-------------|
|
|
220
|
-
| `source` | Original video information (URL, duration). |
|
|
221
|
-
| `overview` | Language, scene count, copy length, asset types. |
|
|
222
|
-
| `hook` | Opening-hook text, duration, strategy classification. |
|
|
223
|
-
| `narrativeStructure` | Per-scene narrative structure (role, duration share, text density). |
|
|
224
|
-
| `pacing` | Pacing analysis (scene-duration distribution, rhythm type). |
|
|
225
|
-
| `textStructure` | Copy structure (speaking rate, silent gaps, keywords). |
|
|
226
|
-
| `audioPattern` | Audio pattern (speech vs. silence ratio). |
|
|
227
|
-
| `cta` | CTA detection (closing copy, whether an explicit CTA exists). |
|
|
228
|
-
| `assets` | Asset manifest (audio, keyframes). |
|
|
114
|
+
```bash
|
|
115
|
+
python3 <SkillDir>/scripts/analyze_video.py -i ./deconstruction.json
|
|
116
|
+
```
|
|
229
117
|
|
|
230
118
|
## Error handling
|
|
231
119
|
|
|
232
|
-
-
|
|
233
|
-
- **401 / token missing** (non-OpenClaw):
|
|
120
|
+
- **`RENDER_API_URL` not configured**: the script exits with a clear message; set the ab-render service URL.
|
|
121
|
+
- **401 / token missing** (non-OpenClaw): set `PRIV_TOKEN`.
|
|
234
122
|
- **Business `code != 0`**: read the `msg` printed on stderr.
|
|
235
|
-
- **Video download failed**: confirm the URL is a direct video link (page links
|
|
236
|
-
- **
|
|
237
|
-
- **No scene change detected**: too-high threshold
|
|
238
|
-
- **Network**: check connectivity and `MM_API_BASE_URL`.
|
|
123
|
+
- **Video download failed**: confirm the URL is a direct video link (share/page links are not supported).
|
|
124
|
+
- **Timeout**: very long videos may exceed the ~10-minute poll window; retry or pre-trim.
|
|
125
|
+
- **No scene change detected**: a too-high threshold yields zero cuts — lower `--scene-threshold`.
|
|
@@ -4,18 +4,17 @@
|
|
|
4
4
|
"tier": "tool",
|
|
5
5
|
"title": "Video Deconstruction",
|
|
6
6
|
"description": "Video deconstruction: split a video into reusable assets (audio extraction, ASR transcript, keyframe extraction, scene segmentation).",
|
|
7
|
-
"envVars": ["
|
|
7
|
+
"envVars": ["RENDER_API_URL", "PRIV_TOKEN", "CONVERSATION_ID"],
|
|
8
8
|
"scriptPath": "scripts/parse_via_render.py",
|
|
9
9
|
"parameters": {
|
|
10
10
|
"type": "object",
|
|
11
11
|
"properties": {
|
|
12
|
-
"url": { "type": "string", "description": "
|
|
13
|
-
"local": { "type": "string", "description": "Local video path (or use url)" },
|
|
12
|
+
"url": { "type": "string", "description": "Direct remote video URL (required). Share/page links are not supported." },
|
|
14
13
|
"scene_threshold": { "type": "number", "description": "Scene-cut detection threshold 0.0-1.0 (default 0.3)" },
|
|
15
14
|
"skip_asr": { "type": "boolean", "description": "Skip the ASR step" },
|
|
16
15
|
"skip_keyframes": { "type": "boolean", "description": "Skip the keyframe-extraction step" },
|
|
17
16
|
"json_output": { "type": "boolean", "description": "Pipeline mode — emit JSON only on stdout" }
|
|
18
17
|
},
|
|
19
|
-
"required": []
|
|
18
|
+
"required": ["url"]
|
|
20
19
|
}
|
|
21
20
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"skillName": "video-parser",
|
|
3
3
|
"repoName": "agent-skill-media-maker",
|
|
4
4
|
"skillId": "553",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "V2",
|
|
6
6
|
"skillDescription": "视频解构技能,将视频拆解为可复用的内容资产(音频、ASR 文本、关键帧、场景分段)。\n\n当用户提到以下任何需求时,立即使用本 skill:\n- 视频解构、视频拆解、视频分析、解析视频\n- 提取关键帧、提取视频文案、视频转文字\n- 视频内容资产、视频素材提取\n\n即使用户没有明确说「解构」,只要他们想要从视频中提取文案、关键帧或结构化信息,也要使用本 skill。"
|
|
7
7
|
}
|