agentleFS
jsathjsath/claude-skills/skills/video/reel-captions/SKILL.md

reel-captions

Skill14 starsChanged 34 days agoMITView on GitHub

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.

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Only promise a keyword your DM automation actually answers.

    line 35
  2. Very specific:

    Read captions.srt. The hook = the first spoken line, nearly verbatim.

    line 47
  3. Very specific:

    Read CAPTION.md if present.

    line 48
  4. Very specific:

    Check every number against the video or the editor's QA claims list.

    line 51
  5. Very specific:

    Run python3 scripts/check_captions.py <reel>/CAPTIONS-PLATFORMS.md.

    line 53
  6. Very specific:

    No keyword on this reel?: Write keyword: none and either an engagement question as cta: ("which one would you use?") or cta: none.

    line 103

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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.

Dual endings (recommended for keyword reels)

Comment-keyword DM tools usually only work on Instagram. If your edit exports two endings (final.mp4 with "comment KEYWORD" for Instagram, final-bio.mp4 with "link in my bio" for the rest, see edit-style), start from config.dual.example.json: cta_platforms is Instagram only, bio_cta is the exact bio line, and bio_platforms must carry it and must never say "comment" or the keyword. A bio: header line overrides it per reel. Worked example: examples/CAPTIONS-PLATFORMS.dual.md (passes the checker with the dual config).

Rules

  • CTA everywhere except X (single-ending reels; with dual endings the non-Instagram platforms get the bio line instead). 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.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.