Releases: lucyfengcl-art/video-prep
Release list
v0.5.0 - safer subtitles and flexible styling
What’s new
This release hardens subtitle generation against the real failure modes found in multi-clip Mandarin edits.
- Enables Whisper VAD and anti-hallucination decoding while preserving confidence metadata.
- Drops or clamps subtitle cues that extend beyond their source media.
- Prevents malformed per-clip subtitles from spilling into the next clip during merge.
- Writes
NN.subtitle-warnings.jsonwhen suspicious cues are corrected or need review. - Makes the per-clip cache aware of source identity and processing options.
- Adds ASS-based preview styling with bold text, normalized vertical position, global backgrounds, and black backgrounds for selected source clips.
- Adds regression coverage for the observed repeated-tail and long end-of-clip hallucinations.
New styling options
video-prep-edit ./raw \
--subtitle-font-size 11 \
--subtitle-bold \
--subtitle-y 0.75 \
--box-clips 2Package version: 0.5.0. Skill version: 2.1.0.
Verification: 55 tests pass, including real subtitle-boundary regression cases and ASS styling tests.
v0.4.0 — skill renamed to /video-prep for consistent naming
What's new
The skill and the plugin now share one name: video-prep. Previously the plugin was video-prep but the skill invoked as /prep-clips, which was confusing.
- Skill renamed
prep-clips→video-prep. Invoke it as/video-prep(fully qualified:video-prep:video-prep). skills/prep-clips/→skills/video-prep/; all references updated across README (EN + zh), AGENTS.md, BLOCKS.md, and the plugin/marketplace manifests.
⚠️ Breaking
The invocation changed from /prep-clips to /video-prep. If you referenced /prep-clips in your own notes or workflows, update them. Re-install/update the plugin and start a fresh session to pick up the new name.
Naming/docs only — no code or dependency changes. Skill version 2.0.0; plugin/package 0.4.0.
v0.3.4 — first-contact intro speaks the user's language
What's new
Builds on v0.3.3's first-contact intro: the intro now answers in whatever language the user writes in as an explicit rule (Chinese in → Chinese intro, English in → English, and so on), rather than relying on the model's default instinct. The English template in the skill is a reference for what to say — the agent translates it instead of echoing English. Folder names (./raw) and CLI flags are kept verbatim.
Docs/behavior only — no code or dependency changes. Skill version 1.2.1; plugin/package 0.3.4.
v0.3.3 — skill introduces itself on first contact
What's new
The /prep-clips skill now introduces itself when a user invokes it without a concrete task.
- First-contact intro — a bare
/prep-clips, a greeting, or "what can this do?" now triggers a short capability overview and a menu of example prompts, instead of silently waiting for clips. New users discover what the tool does and how to ask for each part. - Capability → how-to-invoke map — a table routing what a user wants ("cut the ums", "I have 20 clips", "bigger subtitles") to the trigger phrases and the section that handles it.
- After running a capability, the agent now surfaces the other things the skill can do, so the full toolkit is discovered over time.
Docs/behavior only — no code or dependency changes. Skill version 1.2.0; plugin/package 0.3.3.
v0.3.2 — Platform-neutral skill invocation
Rewrites the prep-clips SKILL.md invocation so it works in any skill-aware agent (Codex, etc.), not just Claude Code: bare console-script names when the CLI is on PATH, or the bundled self-locating launcher otherwise, with the skill dir resolved from whatever env var the host exposes. Docs only; no code changes.
v0.3.1 — Docs synced to 0.3.0 behavior
Documentation-only release: AGENTS.md, README (EN + 中文), SKILL.md, and BLOCKS.md updated to match the 0.3.0 feature set (natural ordering, multilingual --language/auto + language-aware subtitle wrapping, -j parallel processing, and the suggest-don't-cut filler workflow). No code changes.
v0.3.0 — Multilingual, filler suggestions, parallel processing
Multilingual
- Any Whisper language via
--language(e.g.en) or--language autoto detect (default stayszh). - Language-aware subtitle wrapping: English wraps on whole words (cap 42), Chinese by character (cap 20);
--max-chars -1= auto,0disables. Fixes mid-word English wrapping.
Filler words: suggest, don't auto-cut
- Built-in per-language filler lists (
zh,en);--wordoptional. - Case-insensitive matching; multi-token words supported (于是, "you know").
- Suggest-by-default — lists matches with context and cuts nothing without
--indices;--jsonfor tool/agent-driven selection.
Speed
video-prep-edit -j Nparallelizes uncached clips (~1.4×); ordering, caching, single-pass merge preserved.
41 tests pass.
v0.2.0 — Robustness & speed fixes
Hardening pass from a real 13-clip edit that surfaced several silent failures, plus a transcription speedup. 32 tests pass.
Correctness
- Ordering: natural-sort directory inputs so
1,2,…,10,13merge in numeric order without zero-padding (was lexical1,10,11,2,…). - Concat: always re-encode via the concat filter with per-input normalization (scale/pad, fps, SAR, yuv420p, 48k, mono). The old stream-copy demuxer could exit 0 while producing frozen video / drifting audio / clicks on mixed time bases, resolutions, and mono-vs-stereo inputs.
- A/V sync: lock each clip's audio to its frame-aligned video length (
apad+-shortest) and force true 30fps CFR, so per-clip gaps no longer accumulate into audible drift.
Subtitles
- Split over-long Whisper cues at punctuation with proportional timing (
--max-chars, default 20) so burned-in subtitles no longer wall the frame.
Speed
- Default model
large-v3-turbo(~2× faster on CPU, negligible quality loss);--model large-v3for maximum accuracy.
Docs
- READMEs (EN + 中文): natural ordering, new model,
--max-chars, and a "speeding up a multi-clip edit" note (use the mtime cache; never pairwise-merge).
v0.1.1
Fixes
- All-black video on iPhone
.MOVclips. auto-editor v29 renders all-black video when a file's audio stream precedes its video stream (the iPhone ordering). The cleanup step now remuxes such inputs video-first (lossless stream copy) before editing, so the picture is preserved. If you hit black output on v0.1.0, upgrade to this release.
Clean up raw video clips before editing: cut silence, transcribe subtitles (any language, Mandarin by default), normalize speed, stitch in filename order, and optionally burn subtitles. Outputs clean per-clip .mp4 + .srt ready to drop into any editor.
Install / upgrade
Claude Code
```
/plugin marketplace update video-prep
/plugin install video-prep
```
Codex / CLI
```sh
uv tool upgrade video-prep # or: uv tool install git+https://github.com/lucyfengcl-art/video-prep
```
Requires `uv` and `ffmpeg` (+ `ffmpeg-full` and a CJK font to burn subtitles).
v0.1.0
First release of video-prep — a cross-platform tool that does the tedious cleanup pass on raw video clips before editing: cut silence, transcribe subtitles (any language, Mandarin by default), normalize speed, stitch in filename order, and optionally burn subtitles. Outputs clean per-clip .mp4 + .srt ready to drop into any editor.
Install
Claude Code
```
/plugin marketplace add lucyfengcl-art/video-prep
/plugin install video-prep
```
Codex / CLI
```sh
uv tool install git+https://github.com/lucyfengcl-art/video-prep
```
Requires `uv` and `ffmpeg` (+ `ffmpeg-full` and a CJK font to burn subtitles). Transcription runs on CPU on any OS, or a CUDA GPU automatically if present.
Highlights
- `faster-whisper` transcription (macOS/Windows/Linux, Intel/ARM)
- Ships as a Claude Code plugin with the `/video-prep:prep-clips` skill + self-locating `uv` launcher
- `AGENTS.md` for Codex / shell-driven agents
- Filler-word removal and subtitle-burning helpers