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
skills
1.3k11 skills

Claude Code

$ npx -y skills add AI-Builder-Club/skills --skill karaoke-captions --agent claude-code

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
@ai-builder-club
Ships withskills

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.

Stars on GitHub

Momentum

stars in total
1.3k
Star history of AI-Builder-Club/skills on GitHub, a chart by star-history.com

Other skills on skills.

agent-context-audit
Auto-invoked

agent-context-audit

Audit a repo's agent context — CLAUDE.md files, codebase docs, skills, and tool/MCP designs — against Anthropic's Claude 5…

crabbox-setup
Auto-invoked

crabbox-setup

Scaffold an isolated CLOUD dev box per agent (via crabbox + Daytona) for any codebase — the parallel-safe counterpart to…

dev-local-setup
Auto-invoked

dev-local-setup

Scaffold a one-command `dev-local` launcher for ANY codebase. Investigates the repo to find its services, ports, and infra…

e2e-setup
Auto-invoked

e2e-setup

Set up an end-to-end test suite in any repo, following practices that make e2e a reliable per-PR gate: real flows over bypass,…

new-loop
Auto-invoked

new-loop

Spin up a new loop (domain) in a file-based knowledge base — bootstrap the substrate if it's missing, gather the loop's charter,…

open-agent-teams
Auto-invoked

open-agent-teams

Delegate tasks to ANY CLI agent (claude, codex, aider, ...) running in a detached tmux session, with a race-safe done-signal…

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n2w209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about karaoke-captions.

Which coding agents can use karaoke-captions?
karaoke-captions installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.