Karaoke Captions
AI-Builder-Club/skills
Generate TikTok/Shorts-style karaoke captions using MLX Whisper, ASS subtitles, and FFmpeg libass.
Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step…
$ npx skills add gug007/lpm --skill short -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gug007/lpm short --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/short .claude/skills/short && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .claude/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gug007/lpm/tree/main/.claude/skills/shortType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gug007/lpm --skill short -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gug007/lpm short --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/short .agents/skills/short && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .agents/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gug007/lpm --skill short -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gug007/lpm short --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/short .cursor/skills/short && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .cursor/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gug007/lpm.git --path .claude/skills/short--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gug007/lpm --skill short -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gug007/lpm short --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/short .gemini/skills/short && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .gemini/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gug007/lpm shortInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gug007/lpm --skill short -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/short .github/skills/short && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .github/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gug007/lpm --skill short -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gug007/lpm short --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gug007/lpm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/short .opencode/skills/short && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "short" agent skill from https://github.com/gug007/lpm/tree/main/.claude/skills/short into .opencode/skills/short/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "short", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
shortMake a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step…
Short is an agent skill from gug007/lpm. Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step stickers, jump cuts over waiting, recorded from the real desktop app. Topic in, 1080x1920 MP4 + cover + post caption out. Use when the user asks for a TikTok, a Reel, a Short, or any vertical or short-form video about lpm.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts (for example `scripts/camera.js`, `scripts/edit.js` and `scripts/kit.js`).
It sits in Media & Creative, covering Social media graphics and Video production. It works with TikTok. The repository describes itself as: Start, stop, and duplicate dev projects with one click. The best workspace for running Claude Code, Codex, and other AI agents alongside your services. The licence is MIT.
Read from SKILL.md and the folder at commit 764e997. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 12 files in scripts/ (JavaScript and Shell), which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Short loads about 3.3k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 1,871 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from gug007/lpm at commit 764e997, republished under its MIT licence (© gug007). 1,871 words, ~3,293 tokens.
.claude/skills/short/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Make a vertical lesson video from a topic and optional notes. It is not a trimmed YouTube lesson: the script, the pacing and the picture are built for a phone held upright with the sound possibly off.
The recorder, the voice and the mix are the lesson skill's (../lesson/scripts). Everything that skill's SKILL.md says about driving the app still holds and is not repeated here: the pristine ~/.lpm-lessons data dir, /Users/Shared/lpm-lessons workspace, the lesson control socket, real pointer and keys (s.keys("return"), never cliclick kp:), agent trust, waitFor/click/type selectors, foreground takes, the OpenAI key in the Keychain, the preflight and lint that check the Mac and the script before every take, the take folders (_takes/), the guarded agent settings and the checks after the mux (qa/report.json; the screen is read on the take's clock). The beat API is in lesson/reference/beats-api.md.
"window" in lesson.json). The window floats on a dark canvas with cyan, pink and violet glows. A virtual camera cuts a 9:16 crop from it that eases between a wide shot (the whole window width) and push-ins that follow the action."open": 2, about 4–5 s): the hook, then a line that gives a reason to keep watching.*word* in cyan. They are timed from the voice clip's own transcript."label" puts "① Open Settings" at the top of the frame until the next one.s.skip(). The voice is quick and upbeat (DEFAULT_STYLE in scripts/make.js, sped up 1.08x with pitch kept; "tempo" in lesson.json).lpm.cx end sticker. No outro card, no "follow for part 2", no next-lesson teaser (user rule: every video stands alone).~/Movies/lpm-lessons/tiktok/<slug>/lesson.json (LPM_TIKTOK_DIR for another root):
{
"title": "Claude Code statusline: see your usage limits live",
"window": { "w": 860, "h": 1040 },
"narration": [
{ "id": "hook", "text": "Stop guessing your Claude Code limits.", "headline": "Claude Code limits, right under your prompt 👀" },
{ "id": "settings", "text": "In lpm, open More and pick Settings.", "label": "Open Settings" },
{ "id": "pick", "text": "Pick *Clean*. Context left, plus your *5-hour* and *weekly* limits.", "label": "Pick Clean" },
{ "id": "wrap", "text": "Now you'll see a limit coming before you hit it." }
],
"post": { "caption": "…", "hashtags": ["claudecode", "aicoding", "devtools", "lpm"] }
}*…*; the asterisks are never read aloud. Digits read well ("5-hour") and show as digits in the captions.open is how many lines play over the payoff (default 1). With 2 or more, only the last opening line may do slow setup in its beat; a wait in an earlier one plays as silence over the payoff (the cut logs it). The payoff shot must last as long as the opening (the opening on the payoff log line), so mark it early enough in the last lines.headline (on the first line, or top-level) is the cover text: 4–8 words, with at most one emoji. Lead with the words people search for (below). cta changes the end sticker (default lpm.cx; false for none).slam ({ "a": "Fable 5.1", "b": "Opus 5.5" }, optional "colors") opens on two names slammed in big over the dimmed payoff: a in cyan from the left, a VS, b in pink from the right. After 1.5 s the stack shrinks away and the headline pops in at 1.65 s (left out when the opening has under 0.6 s left). The cover is then the frame at 1.2 s, with all three lines on screen and no headline. Names are sized to fit 820 px, so long ones shrink.post.caption goes into post.txt for TikTok: one or two search-friendly sentences (people search TikTok like Google), then at most 5 hashtags (TikTok's cap: a 6th loses its #), lpm among them. Keep the brand lowercase lpm.settings in lesson.json seeds the app's settings.json (for example terminalFontSize); "limits": false leaves the sidebar meters out.beats.js exports setup and one beat per line id, exactly like lesson. The shared helpers are in lesson/scripts/kit.js: writeProject (a seeded folder, git, its lpm config), neutralShell (a plain prompt, plus a claude/codex wrapper that records the folder trust), openAgent, claudeDone/codexDone, until, clickUntil, typeInto, waitGone, scrollTo, tagByPosition, focusLeft, park. A lesson requires it by absolute path: const kit = require("<repo>/.claude/skills/lesson/scripts/kit") (the older short/scripts/kit path still works). Beats add these calls:
s.focus(sel, { scale, at, ms, cue }): push the camera in on an element; it lands 36% down the frame, above the captions and the button column. Use 1.4–1.6 for a whole terminal line or a settings preview, and 1.8–2.2 for a button, a tab or a row. A pushed-in camera pans after the pointer when it leaves the shot. s.zoom is the same call.s.wide({ ms, cue }): back to the whole window. Go wide when a new screen opens. s.zoomOut is the same call.s.label(text, { cue }): a step sticker mid-line; null clears it. { plain: true } leaves the step number off, and a plain label that follows another changes in place without the pop, so calling it once a second makes a running clock.s.payoff({ cue }): marks the shot the video opens on. Put it on the final result and hold that shot for at least the hook line's length; the last line usually does. Hide the drawn cursor first (s.hideCursor()) unless it points at something.await s.skip(() => work, { keepMs }): starts work at once (typing a prompt, waiting for an agent) and cuts everything from the end of this line's narration until work is done.s.card(): a vertical lesson has stickers, not topic cards.A cue is the spoken word an action lands on, as in lesson. Aim for a camera change or a click every 1.5–3 s. Make every push-in land on its cue word.
Every lesson folder has a take.sh, which runs this skill's scripts/take.sh (lesson's runner with this skill's make.js): the preflight first, then make.js on an empty clipboard under caffeinate, with the clipboard and the user's agent settings put back afterwards. The plain one is:
#!/bin/sh
exec "<repo>/.claude/skills/short/scripts/take.sh" "$(dirname "$0")" "$@"<slug>/take.sh --no-audio # dry run: raw window frames in frames/
<slug>/take.sh # voice → take → cut → MP4 + cover + sheet + post + checks
<slug>/take.sh --mux-only # re-cut the last take (camera, stickers, captions, music)Flags: --respeak, --keep-state, --lpm-dir <dir>, --dom-mouse, --voice <name>, --style "…", --music <file> / --no-music (the default bed is lesson/music/bed.mp3, which the preflight downloads; 11 LU under the voice, full level from frame 0). --no-qa skips the checks. node scripts/make.js <slug or folder path> … runs the same pipeline without the preflight, the clipboard swap and the settings guard; a path is used as it is (a scratch copy never touches the lesson in ~/Movies).
Output in the lesson folder: <slug>.mp4 (H.264 High, 30 fps, AAC 48 kHz), cover.jpg (the opening frame, or the slam at 1.2 s), post.txt (caption and hashtags), sheet.jpg (a frame every 1.5 s with TikTok's UI zones in red), cut.json (the edit, the camera keys, the text track), timeline.json, record.mkv, overlay/ (rendered text frames, reused by --mux-only), audio/, qa/report.json, and _takes/ (every take's log and script; earlier takes' recordings).
Before a take, close tauri dev and keep the lid open. The recording app is the debug build and loads its UI from Vite on :9245. When nothing serves that port, the launcher starts its own server that doesn't watch files (lesson/scripts/vite.lesson.config.mjs) and warms it. A running tauri dev server does watch them, so an edit under desktop/frontend/src (another agent in the same worktree) reloads the app mid-take and closes any open dialog, and a Rust edit restarts tauri dev's own app, which takes keyboard focus while the take is typing. The launcher logs which server it used. Closing the lid sleeps the Mac and ends the take; caffeinate only keeps the display awake through long waits.
The runner already saves and restores the agents' model, effort and status-line settings (lesson/scripts/guard.js). A take that changes anything else in the user's real config backs that file up in its take.sh, sets trap restore EXIT, and then calls "<repo>/.claude/skills/short/scripts/take.sh" "$DIR" "$@" without exec, so the restore runs after the take. short-race's new.js still writes one around claude-default.js, which is harmless next to the guard.
Open sheet.jpg and cover.jpg and check:
<name>'s AirPods Connected", "Pasting from <name>'s iPhone…"). Retake if one appears."window" or lower the push-in scale.audio hook: log line) and the whole video is 45 s or less (the muxed log line). scripts/rehook.sh <slug> re-speaks an edited hook line and re-cuts without a retake.scripts/scan.sh <slug> [out-dir] makes a one-frame-per-second contact sheet of the MP4 for spotting popups.
Then watch the MP4 once with the sound off: the captions alone should carry the lesson.
When the video is done, end the reply with the rendered MP4's full absolute path (~/Movies/lpm-lessons/tiktok/<slug>/<slug>.mp4), not just the slug or a relative path.
© gug007, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 12 other files (scripts) in .claude/skills/short of gug007/lpm.
Open the folder on GitHubat commit 764e997
Short next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Short this skillgug007/lpm | 152 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Karaoke CaptionsAI-Builder-Club/skills | 1.3k | — | ~850 | Automated safety check: Pass | None | |
| Taisly Social Media Postingtaisly/agent | 217 | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Viral Captions And Ctasvyralcontent/content-skills | 133 | 1 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Viral Hooksvyralcontent/content-skills | 133 | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Net New Video Editorericosiu/ai-marketing-skills | 3.6k | — | ~1.1k | Automated safety check: Pass | MIT |
AI-Builder-Club/skills
Generate TikTok/Shorts-style karaoke captions using MLX Whisper, ASS subtitles, and FFmpeg libass.
taisly/agent
Free AI-first short-form video publishing to TikTok, Instagram Reels, YouTube Shorts, X, and Facebook from AI agents through Taisly.
vyralcontent/content-skills
Write captions, on-screen text, hashtags, and CTAs for short-form video that earn saves and sends without tripping engagement-bait penalties.
vyralcontent/content-skills
Write and critique viral hooks for short-form video: the opening 1 to 3 seconds that decide whether anything else gets seen.
ericosiu/ai-marketing-skills
Turn newly recorded talking-head footage into review-ready vertical video drafts with an explicit edit plan, deterministic FFmpeg rendering, captions, hook cards, audio normalization, and visual QA.
hassancs91/claude-youtube-editor
Dedicated YouTube thumbnail generator — interviews you for exactly the style elements you want (environment, text budget, extras, accent color), then renders high-contrast, vibrant, face-consistent…
gug007/lpm
Make a short vertical (9:16) video where two AI models build the same self-playing game in lpm, side by side, and both games then play live in lpm's browser.
gug007/lpm
Make a short vertical (9:16) video that races two AI models on the same prompt in lpm, side by side: Run in duplicates puts each model in its own copy of the project, shown as side-by-side columns…
gug007/lpm
Create and edit lpm YAML configs for projects, duplicates, worktree metadata, services, actions, header and footer button zones and zone layers, terminals, profiles, SSH projects, and shared config…
gug007/lpm
Make the App Store screenshots for lpm Link (iPhone 6.3" 1206x2622 and iPad 13" 2064x2752) from the current mobile/ source: a screenshot build of the app opens each screen straight into Demo Mode…
gug007/lpm
Post a finished vertical lesson from ~/Movies/lpm-lessons/tiktok/<slug/ to YouTube Shorts (LPM channel, through Chrome) and TikTok (@lpm06557, from the user's iPhone through iPhone Mirroring) in…
gug007/lpm
Record the App Store review demo video for lpm Link: the lpm desktop app and lpm Link on a physical iPhone (live through iPhone Mirroring) side by side, pairing and then controlling the Mac from the…
Works with
Categories
Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step…. Short is an agent skill from gug007/lpm. Make a short vertical (9:16) lpm lesson that feels native to TikTok, Reels and Shorts: a payoff-first hook, fast push-ins that follow the action, word-by-word burned-in captions, numbered step stickers, jump cuts over waiting, recorded from the real desktop app.
Short fits situations like: the user asks for a TikTok; short-form video about lpm.
Run `npx skills add gug007/lpm --skill short -a claude-code`. Or copy the skill folder (.claude/skills/short in gug007/lpm) into .claude/skills/short in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gug007/lpm --skill short -a codex`. Or copy the skill folder (.claude/skills/short in gug007/lpm) into .agents/skills/short in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gug007/lpm --skill short -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/short, .gemini/skills/short, .github/skills/short and .opencode/skills/short in your project.
Going by SKILL.md and its folder, Short needs JavaScript and a shell for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Short is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Short: Karaoke Captions (AI-Builder-Club/skills, 1.3k stars), Taisly Social Media Posting (taisly/agent, 217 stars), Viral Captions And Ctas (vyralcontent/content-skills, 133 stars) and Viral Hooks (vyralcontent/content-skills, 133 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gug007 (a GitHub user) maintains it in gug007/lpm, which has 152 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 9, 2026.
Source: gug007/lpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.