Skip to content

/karaoke-captions

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.

From plugin
ai-builder-club-skills
1.3k11 skills
Install
$ npx -y skills add AI-Builder-Club/skills --skill karaoke-captions --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/karaoke-captions

Context preview

The summary Claude sees to decide when to auto-load this skill.

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.

SKILL.md

karaoke-captions.SKILL.md
name: karaoke-captions
description: >
  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.
user_invocable: true

Karaoke Captions Skill

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](https://ffmpeg.org/) 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](./references/style-guide.md).

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

  • [Style Guide](./references/style-guide.md)
  • Presets:
  • [presets/style.json](./presets/style.json)
  • [presets/yellow.json](./presets/yellow.json)
  • Scripts:
  • [scripts/extract_words.py](./scripts/extract_words.py)
  • [scripts/match_style_from_image.py](./scripts/match_style_from_image.py)
  • [scripts/gen_ass.py](./scripts/gen_ass.py)
  • [scripts/render.sh](./scripts/render.sh)
Read more
Ships withai-builder-club-skills

A Claude Code plugin marketplace of the skills we share at for building loop engineers: agents that get triggered on their own, pick up work, ship it, verify it, and log what they learned, so the work compounds without you prompting every step.

Get the whole plugin, auto-invoked
Stats
1,253
Stars
158
Forks
Maintained
Maintenance
Python
Language
1mo ago
Last commit
3mo ago
Created

Repo: AI-Builder-Club/skills

Other skills on ai-builder-club-skills.