align-captions
Generate karaoke-style word-level timestamps by aligning script text to audio using Qwen3-ForcedAligner + jieba for Chinese word segmentation.
Skill by Nuva-Lab
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/nuva-lab-align-captions
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/align-captions
What's inside
- Skill name
align-captions- Description
- Generate karaoke-style word-level timestamps by aligning script text to audio using Qwen3-ForcedAligner + jieba for Chinese word segmentation. Use when the user says 'align captions', 'karaoke timestamps', 'word timestamps', 'caption alignment', 'sync text to audio'.
- License
- Apache-2.0
- Instructions
- 90 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (2)
- SKILL.md
- align.py
SKILL.md (first lines)
# align-captions
Align existing script text to audio for karaoke-style captions. Uses Qwen3-ForcedAligner-0.6B (~30ms precision) and jieba for Chinese word segmentation (groups characters into natural words).
## Pipeline
```
Script + Audio
↓
Qwen3-ForcedAligner (character-level timestamps)
↓
Jieba word segmentation (characters → Chinese words)
↓
Position-based phrase matching (words → phrases)
↓
Output: phrases with embedded word timestamps
```
## Usage
```bash
# Align script to audio (phrase-level output with word timestamps)
python skills/align-captions/align.py voiceover.wav --script "当全世界都在追AI的时候..."
# Save to file
python skills/align-captions/align.py voiceover.wav --script "..." --output captions.json
# Word-level only (no phrase grouping)
python skills/align-captions/align.py voiceover.wav --script "..." --word-level
```
## Output Format
Designed for Remotion karaoke rendering:
```json
{
"segments": [
{
"text": "当全世界...",
"startMs": 240, "endMs": 2080,
"words": [
{"text": "当", "startMs": 240, "endMs": 400},
{"text": "全世界", "startMs": 400, "endMs": 880}
]
}
],
"word_segments": [...],
"language": "Chinese",
"model": "Qwen3-ForcedAligner-0.6B"
}
```
## Programmatic Usage
```python
from align import align_captions
# Get phrases with embedded word timestamps
result = align_captions(
"voiceover.wav",
script="当全世界都在追AI的时候...",
language="Chinese"
)
# Each phrase has a 'words' array for karaoke highlighting
for phrase in result["segments"]:
print(f"{phrase['text']}: {len(phrase['words'])} words")
```
## Integration with make-video
The `make_video.py` script automatically uses align-captions when:
1. A voiceover file exists
2. A script is provided in project.json
3. `caption_mode` is "auto" or "asr"
The output is passed to Remotion's `RollingCaption` component for karaoke rendering.
## Error Recovery
- **Audio file not found**: Verify the path exists before calling. The script will raise `FileNotFoundError` -- check `project.json` for the correct voiceover path.
- **Model download fails**: Qwen3-ForcedAligner (~1GB) downloads on first run. If it fails (network/disk), retry or manually download to the HuggingFace cache (`~/.cache/huggingface/`).
- **jieba not installed**: Run `pip install jieba`. Without it, Chinese text falls back to character-level timestamps (no word grouping).
## Notes
- Supports 11 languages: Chinese, English, Cantonese, French, German, Italian, Japanese, Korean, Portuguese, Russian, SpanishFrom Nuva-Lab/vibecut, Apache-2.0.
More from Nuva-Lab/vibecut
- 0.461score
audio-process
Nuva-Lab
Audio processing utilities - noise reduction, normalization, enhancement
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
extract-clip
Nuva-Lab
Extract a video segment using FFmpeg with precise start/end times
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
find-golden-segments
Nuva-Lab
Find naturally clean, coherent video segments worth keeping (selection over repair)
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
transcribe-audio
Nuva-Lab
ASR with ~30ms timestamp precision using Qwen3-ASR + ForcedAligner
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
transcribe-clip
Nuva-Lab
Transcribe a video clip using Gemini to get timestamped segments for captions
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
analyze-video
Nuva-Lab
Analyze raw video content using Gemini to identify speakers, topics, key moments, and potential clip opportunities
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
separate-audio
Nuva-Lab
Text-guided audio source separation using SAM-Audio via mlx-audio
SkillDFreshness: D★ 6Claude Code +9 - 0.458score
voice-clone
Nuva-Lab
Clone a voice using qwen3-tts and generate speech from text
SkillDFreshness: D★ 6Claude Code +9 - 0.458score
write-script
Nuva-Lab
Generate voiceover scripts in Joyce's style for video clips
SkillDFreshness: D★ 6Claude Code +9 - 0.246score
inspect-video
Nuva-Lab
No description from the publisher yet.
SkillDFreshness: D★ 6Claude Code +9 - 0.246score
make-video
Nuva-Lab
No description from the publisher yet.
SkillDFreshness: D★ 6Claude Code +9 - 0.246score
validate-media
Nuva-Lab
No description from the publisher yet.
SkillDFreshness: D★ 6Claude Code +9
Signals
- Stars
- 6
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Apr 3, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/Nuva-Lab/vibecut
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Nuva-Lab
- 0.461score
separate-audio
Nuva-Lab
Text-guided audio source separation using SAM-Audio via mlx-audio
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
extract-clip
Nuva-Lab
Extract a video segment using FFmpeg with precise start/end times
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
find-golden-segments
Nuva-Lab
Find naturally clean, coherent video segments worth keeping (selection over repair)
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
transcribe-audio
Nuva-Lab
ASR with ~30ms timestamp precision using Qwen3-ASR + ForcedAligner
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
transcribe-clip
Nuva-Lab
Transcribe a video clip using Gemini to get timestamped segments for captions
SkillDFreshness: D★ 6Claude Code +9 - 0.461score
analyze-video
Nuva-Lab
Analyze raw video content using Gemini to identify speakers, topics, key moments, and potential clip opportunities
SkillDFreshness: D★ 6Claude Code +9
Cite this page
align-captions skill. Agent Mart. https://agentmart.dev/skills/nuva-lab-align-captions (last updated 2026-10-24)