hahadu4520/vlog-cut/narration-cut
Claude Code and agent skill by hahadu4520/vlog-cut
- community
Checking that the SKILL.md file is still in the repository.
Use when narration audio (timing.json + narration.wav) and an indexed asset pool (assets_index.json) exist, and the user wants a rough cut. Three sub-tools — plan (draft a timeline), validate (check it before render), render (cut + concat + mux into mp4). Triggers on "对齐镜头 / 排时间线 / 出粗剪 / cut to narration / build timeline". Plan is a deterministic baseline; Claude usually rewrites timeline.json by hand before render.
Install
npx vskill@latest install hahadu4520/vlog-cut/narration-cutSKILL.md
narration-cut
Three CLIs, used in sequence. Each is also fine to call alone.
| step | CLI | what it does | |
|---|---|---|---|
| plan | vlog-cut-plan | timing + assets → draft timeline.json (algorithmic) | |
| validate | vlog-cut-validate | structural + temporal sanity check on timeline.json | |
| render | vlog-cut-render | timeline + narration → rough_cut.mp4 |
When to use
Trigger on:
- "对齐镜头 / 排时间线 / 出粗剪"
- "cut to narration / build timeline / render the rough cut"
- the user has both
timing.jsonandassets_index.jsonand wants a video
Skip when:
- either timing or assets index is missing — go back to
tts-from-scriptorvideo-asset-index - the user wants subtitles only — that's
burn-subtitles-cn(v0.2)
Step 1 — plan (draft a timeline)
The algorithm scores clips by chapters match, tag overlap with the section, highlight bonus, and a "already used" penalty for variety. It's a starting point, not a final answer.
The expected workflow is: Claude reads timeline.json, opens the relevant sheets/<stem>.jpg for any shot it's unsure about, then rewrites timeline.json by hand to swap in better picks. This is a checkpoint — don't render until the user has signed off.
Step 2 — validate (before you render)
Catches:
- missing source clips
in + durexceeding source duration- shots not covering line audio (video would end first)
- duplicate / mismatched line ids
Exit code: 0 = clean, 1 = warnings only, 2 = errors. Don't render on exit 2.
Step 3 — render (make the mp4)
Optional:
--size 1920x1080— override timeline.size--fps 30— override timeline.fps--name xxx.mp4— output filename
Outputs:
The render absorbs gap silences into the last shot of each line: if the source has room, dur is extended; otherwise the last frame is held (tpad). Result: the video stays populated through every silence.
Idempotency
segs/<idx>_<lid>_<stem>.mp4 is reused if it exists. To force a re-render of a single shot, delete that file. To force the whole video, delete segs/.
Checkpoint (when called from vlog-cut-pipeline)
Two checkpoints land in this skill:
- after plan —
timeline_drafted→ ask the user to approve the picks (or let Claude refine first, then approve) - after render —
rough_cut_rendered→ ask the user to watchrough_cut.mp4
Don't proceed until both are approved.
Dependencies
ffmpeg/ffprobeon PATH- no Python deps beyond stdlib
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/narration_cut/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/hahadu4520/vlog-cut/narration-cut)