Communitygithub.com

jsath/claude-skills

Write CAPTIONS-PLATFORMS.md for one finished short video: a per-platform post caption for Instagram, TikTok, YouTube Shorts (title + description), Facebook, Threads, Bluesky and X, each within that platform's limits, with your comment-keyword CTA on the platforms where it belongs and never on X. Keyword, CTA, platforms, hashtags and limits come from a config file; a checker script fails the file on any miss. Use after an edit is finished, when asked to 'write the captions', 'caption this reel for every platform', or before scheduling.

Qu'est-ce que claude-skills ?

claude-skills is a Claude Code agent skill that write CAPTIONS-PLATFORMS.md for one finished short video: a per-platform post caption for Instagram, TikTok, YouTube Shorts (title + description), Facebook, Threads, Bluesky and X, each within that platform's limits, with your comment-keyword CTA on the platforms where it belongs and never on X. Keyword, CTA, platforms, hashtags and limits come from a config file; a checker script fails the file on any miss. Use after an edit is finished, when asked to 'write the captions', 'caption this reel for every platform', or before scheduling.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jsath/claude-skills/tree/HEAD/skills/reel-captions

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Reel captions

One finished reel in, one CAPTIONS-PLATFORMS.md out, validated by scripts/check_captions.py. This skill writes text only: it never posts or schedules. Pipeline position: after edit-style (or longform-edit for long-form), before your scheduler.

Setup (once)

cp config.example.json config.json

Edit config.json:

keymeaningexample
keyworddefault comment keyword your DM automation answersGUIDE
ctathe EXACT CTA line, used verbatimcomment "GUIDE" & i'll send you the link
cta_platformswhere the CTA line must appearinstagram, tiktok, facebook, threads, bluesky, youtube_description
no_cta_platformswhere the CTA, the keyword and the word "comment" are bannedtwitter
skip_platformsnever write theselinkedin
limitsmax characters per platformbluesky 300, threads 500, X 280
hashtags[min, max] per platform, default for the restinstagram [4, 7]
core_hashtagsyour always-on tags#yourniche
bancharacters or phrases never allowedem dash, en dash

Only promise a keyword your DM automation actually answers. If unsure, ask the user before writing it into the captions.

Inputs

  • The reel folder: final.mp4, captions.srt (transcript of the FINAL render), and optionally the editor's CAPTION.md (draft caption and title). Never edit CAPTION.md.
  • A per-reel keyword if the video says a different one out loud. The keyword in the caption must be the one SPOKEN in the video.

Steps

  1. Read captions.srt. The hook = the first spoken line, nearly verbatim.
  2. Read CAPTION.md if present; reuse its title and phrasing.
  3. Fill the format below. Write the CTA line first, then fit the body around it. When over a limit, shorten the body, never the CTA.
  4. Check every number against the video or the editor's QA claims list. If they differ, keep the measured number and add a # OPEN: comment line.
  5. Run python3 scripts/check_captions.py <reel>/CAPTIONS-PLATFORMS.md. Fix every FAIL and re-run until PASS.

Format

# <reel> per-platform captions. Source: CAPTION.md + captions.srt
keyword: <KEYWORD or none>
cta: <exact CTA line or none>
## instagram
<CTA line>

<hook>

<2 to 5 short paragraphs>

<CTA line again>

<core + 1 to 2 topic hashtags, one line>
## short
<CTA line>

<hook>

<1 to 2 sentences that carry the point>
## twitter
<hook + one line, one paragraph, no CTA, no hashtags, aim for 130 to 200 chars>
## bluesky
<CTA line>

<hook + one line; whole text within the limit INCLUDING the CTA>
## youtube_title
<one line, 40 to 60 chars ideal, max 100, no emoji>

short feeds TikTok, Facebook, Threads and the YouTube description. Add ## tiktok, ## facebook, ## threads or ## youtube_description only to override it.

Rules

  • CTA everywhere except X. X is a short description, not a funnel: a comment-gate line there reads as spam. The checker refuses an X text with the CTA, the keyword, or the word "comment".
  • No keyword on this reel? Write keyword: none and either an engagement question as cta: ("which one would you use?") or cta: none.
  • Instagram: CTA, hook, short paragraphs, CTA again, one line of lowercase hashtags. No @mentions, no links (they do not click on IG). Turn emoji bullets into plain "- " lines.
  • Short platforms: CTA, hook, 1 to 2 sentences, no hashtags.
  • YouTube title: a claim or an outcome ("This free tool replaces a $50/month app"), not a label ("Tool review").
  • Voice: contractions, plain declaratives, "&" is fine. No em or en dashes, no "Not X. Y." lines, no "game-changer", no rhetorical-question openers.
  • Never: first comments, collaborator tags, LinkedIn text, music notes, private data (revenue, client names, account ids).

Worked example

Config keyword GUIDE, video says "comment GUIDE". Full passing file: examples/CAPTIONS-PLATFORMS.md. Its X section:

## twitter
this free tool replaces a $50/month app. it runs on your own laptop, no account, no upload & the code is public.

Checker output:

  bluesky                126 chars
  instagram              333 chars
  twitter                112 chars
  youtube_title           39 chars
PASS

Failure handling

problemdo
no captions.srttranscribe final.mp4 with the use-local-whisper skill first
no config.jsonthe checker exits and says so: copy the example and fill it
the spoken keyword differs from the configuse the spoken one in the header (keyword: / cta: lines override the config) and flag it with # OPEN:
a platform limit cannot fit the CTA plus a hookcut the body to the hook alone; if still over, report it, do not drop the CTA
Claude.ai without a shellwrite the file, then check limits by hand with the table above and say the checker was not run

Hand-off

Report: the file path, the keyword and CTA used, the checker result, and every # OPEN: line.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

jsath/claude-skills

Writes captions for a finished video from its transcript: pulls the line worth repeating, writes first-line options, writes per-platform versions (Instagram, TikTok, YouTube title and description, others on request), keeps the creator's voice using their best past captions, and checks the call to action matches what the video actually says. Use when a creator asks for captions, a caption hook, a YouTube title and description, or a CTA check. Drafts only; never posts or schedules.

jsath/claude-skills

Transcribe audio or video on your own machine with Whisper (mlx-whisper, faster-whisper or whisper.cpp) and get word-level timestamps as words.json, a plain .txt and an .srt. No API key, nothing uploaded. This is the transcription step the editing skills (edit-style, longform-edit, reel-captions) depend on. Use when asked to transcribe a take, get word timings, make an SRT, re-transcribe a final render for a caption sync check, or 'run whisper locally'.

jsath/claude-skills

Runs five agents that keep a YouTube channel's titles and descriptions matched to what people search for now: a Channel Reader that pulls the user's own video list and stats with their YouTube Data API key, YouTube Analytics OAuth or a pasted YouTube Studio export, a Niche Watcher that finds what is working right now for similar-size channels from public search results the API returns or the user provides, a Title Writer that drafts titles, descriptions and chapters for new videos, a Back Catalogue agent that picks old videos worth a refresh and drafts new versions, and a Change Tracker that records every change the user makes and compares before and after on matched windows. Use when a creator asks for YouTube SEO, better titles or descriptions, what is working in their niche, a back catalogue refresh, or says \"seo run\". Never invents search volumes or stats and never changes a video; drafts only.

Skills associés