Karaoke Captions Skill
SkillMediaLets your agent add word-by-word highlighted karaoke captions to a video, matching a style from a screenshot if you have one.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Karaoke Captions Skill skill
About this capability
Generate TikTok/Shorts-style karaoke captions using MLX Whisper, ASS subtitles, and FFmpeg libass. Use when burning word-level highlight captions into a video, matching caption style from a screenshot, rendering ASS karaoke subtitles, or when the user runs /karaoke-captions.
What this skill tells your AI
The instructions your AI receives, as published by ai-builder-club/skills in skills/karaoke-captions/SKILL.md and read by ahel’s review.
Generate dynamic, TikTok/Shorts-style karaoke captions with word-level highlight sweeps using ASS subtitles and FFmpeg libass. Supports style matching from a reference screenshot.
Scripts, presets, and references live next to this skill. Run the commands from the skill directory (or pass absolute paths).
Requirements
- macOS with Apple Silicon (MLX Whisper)
- Python 3.10+
- FFmpeg with
libass(brew install ffmpeg)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
reference.png --------(match_style_from_image.py)--------> style.json --+
+--(gen_ass.py)--> captions.ass --(render.sh)--> output.mp4
input.mp4 ---------------------------------->(extract_words.py)--> words.json --+
File Architecture
| File | Purpose | Role |
|---|---|---|
input.mp4 | Source video | Input |
reference.png | Style reference image (optional) | Visual Prompt |
words.json | Word-level timestamps [{"word": ..., "start": ..., "end": ...}] | Persistent Raw Data |
style.json | Font, size, highlight color, outline, soft shadow, margin, words per line | Style Config |
captions.ass | ASS subtitle script with two-layer blurred drop shadow and inline color overrides | Generated Intermediate |
output.mp4 | Final video with burned-in subtitles | Output Deliverable |
Standard Workflow
Step 1. Extract Word Timestamps
python scripts/extract_words.py \
input.mp4 words.json \
--model mlx-community/whisper-large-v3-turbo
(For Chinese videos, add --language zh).
Step 2. Select Style or Auto-match from Reference Image
- From Reference Image:
python scripts/match_style_from_image.py \ reference.png style.json --video input.mp4 - From Presets:
presets/style.json: Default neon green highlight (#00FF00), Arial Black, all-caps, 4 words/line.presets/yellow.json: Yellow highlight (#FFFF00), Arial Black, all-caps.
To adjust appearance manually, see Style Guide.
Step 3. Generate ASS Subtitles
python scripts/gen_ass.py \
words.json style.json captions.ass --video input.mp4
Step 4. Render Preview & Visual Check
# Preview segment:
scripts/render.sh input.mp4 captions.ass preview.mp4 3 8
# Frame snapshot:
scripts/render.sh frame input.mp4 captions.ass preview_frame.png 4.5
Step 5. Render Final Video
scripts/render.sh input.mp4 captions.ass output.mp4
References & Presets
Signals
- GitHub stars
- 1k
- Forks
- 158
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packagesK1binfo
installs-packages (in scripts/extract_words.py)K1binfo
installs-packages (in README.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
karaoke-captions- Source
- github.com/ai-builder-club/skills