agentleFS
vargHQvargHQ/skills/caption-styles/SKILL.md

caption-styles

Skill23 starsChanged 8 months agoMITView on GitHub

Seventeen animated caption looks for talking heads, podcasts, ads, lyric and short-form videos (karaoke fill, active-word pop and colour, sliding pill, word tiles, frosted glass, neon, serif italic, white card, bounce and tilted word cards and more), each with presets in exact numbers: font (OFL), size per format, words per screen, active-word timing 1-2 frames before the voice, 9:16 safe box, contrast, padding and easing. The rules come from the Netflix and BBC subtitle guides, the DCMP Captioning Key, ITU sync tolerances, eye-tracking research and short-form editors. Use when someone asks for TikTok, Reels or Shorts captions, word-by-word or highlighted subtitles, karaoke captions, or 'captions like Hormozi / MrBeast / podcasts'. NOT for transcription itself (use WhisperX or ElevenLabs speech-to-text first), translation, or plain SRT delivery without styling.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Readable on a phone: Keep text inside the 9:16 safe box and at 4.5:1 contrast against what sits behind it.

    line 36
  2. Distinctive:

    Free fonts only: Every font in the presets is OFL or Apache.

    line 38
  3. Very specific:

    Seek-safe: Every value is a function of timeline time.

    line 39
  4. Very specific:

    Read references/_shared-caption-craft.md first: it holds the numbers every template here shares.

    line 46
  5. Very specific:

    Every rule in the references cites its source by number.

    line 92

≈ “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

Caption styles: 17 looks, built the way the pros set subtitles

Seventeen caption looks with presets you can apply as numbers, not adjectives. Pick how the words are chunked first (a phrase, a group of words or one word at a time), then the look. Every look ships with a plain version that is accessible, since styled word-tracking captions trade some comprehension for attention.

Gates

  • Word timings first. Build from word-level timestamps (WhisperX, ElevenLabs Scribe, a forced aligner on the script). Never estimate word times from text length.
  • Chunking before look. Phrase captions by default; one word at a time only for hooks, punchlines and clips of 20 s or less.
  • Readable on a phone. Keep text inside the 9:16 safe box and at 4.5:1 contrast against what sits behind it; the shared file has the numbers.
  • Accessible deliverable. Offer a plain phrase SRT/VTT next to the styled render.
  • Free fonts only. Every font in the presets is OFL or Apache. Swap in the person's brand font only if they have a license for video.
  • Seek-safe. Every value is a function of timeline time; randomness is seeded by frame. No Date.now(), requestAnimationFrame or unseeded Math.random().
  • No credits here. These templates render locally for free. Generated footage, voice or music is the varg-ai skill: call estimate_cost and wait for the person's approval before any generation.

Pick a template

17 templates, 52 presets. Each reference file has the same sections: how the pros do it (every rule cited), presets, timing and numbers, how to build it, mistakes that look amateur, sources. Each JSON file holds the same presets as machine-readable values.

Read references/_shared-caption-craft.md first: it holds the numbers every template here shares.

TemplateUse it forPresetsFiles
Active word colour captionsWhite outlined text, a few words at a time, where only the colour of the spoken word changes: no scale, no box.Blue outline, Yellow outline, Calm phrase (accessible)active-word-color-captions.md · json
Active word pop captionsWhite outlined words where the word being spoken turns blue and pops a little larger, then settles back.Blue pop, Subtle pop, Spring popactive-word-pop-captions.md · json
Bouncing single-word pillOne uppercase word at a time bounces up inside a coloured pill (purple by default) near the centre of the frame.Purple spring, Lime spring, Soft rise (no overshoot)bounce-word-pill.md · json
Frosted panel captionsWhite text on a blurred, frosted-glass panel; inactive words are dimmed and the spoken word is full white.Clear glass with dim, Thick glass for bright footage, Light glassfrosted-panel-captions.md · json
Gradient-fill word captionsThe spoken word fills with a two-colour gradient (blue to pink by default) inside a dark rounded box while the other words stay white.Blue to pink on dark box, Sunset, Sweep fillgradient-word-captions.md · json
Grow-in highlight box captionsWhite words inside a dark rounded box; the spoken word turns yellow and grows into place while the box adjusts its width.Yellow grow, Green grow, Reveal growgrow-highlight-captions.md · json
Karaoke fill captionsEach word fills with yellow as it is sung or spoken, with a short bar under the current word.Classic yellow sweep, Two-line preview, Speech (instant fill)karaoke-fill-captions.md · json
Line-hugging rounded box captionsBold dark text on a white box whose rounded corners follow each line's own width, the native look of in-app text on vertical platforms.White box classic, Black box inverse, Navy pill rise, Brand tintline-hug-box-captions.md · json
Neon tube captionsWords glow like neon tubes (hot pink by default) inside a dark box with a glowing border.Hot pink, Cyan ice, Pulse only (no flicker)neon-tube-captions.md · json
Outlined spring-word captionsWhite words with a thick black outline; the spoken word turns cyan and springs up a few pixels, then settles.Cyan spring, Gaming condensed, Clean outlineoutline-spring-captions.md · json
Serif italic emphasis captionsLarge serif text with a soft shadow and no box; the spoken word flips to italic.Instrument italic, Playfair warm, Fraunces softserif-italic-captions.md · json
Shadow-only minimal captionsWhite text with a soft shadow and no box; the spoken word is just a little brighter than the rest.Soft shadow, Cinema lower, Bright-footage guardshadow-minimal-captions.md · json
Sliding pill word trackerA coloured pill slides from word to word behind white outlined text, marking the word being spoken while the text stays still.Electric blue, Brand pill, Soft pillsliding-pill-captions.md · json
Tilted card word popsOne uppercase word at a time springs in on a slightly rotated sticker-like card, alternating white and lime.White / lime alternating, Sticker with hard shadow, Calm tilttilted-card-word-pop.md · json
Translucent box subtitlesPlain white sentence-case text on a semi-transparent dark box, one phrase or sentence at a time, cut on and cut off with no motion.Broadcast 16:9, Vertical 9:16, Soft off-blacktranslucent-box-subtitles.md · json
White card captionsDark text on a clean white card with a soft shadow; the spoken word turns a strong blue.Corporate blue, Warm paper, Vertical cardwhite-card-captions.md · json
Word tile captionsEvery word sits on its own dark rounded tile; the spoken word's tile turns orange.Orange active, Stagger in, Mono tilesword-tile-captions.md · json

Workflow

  1. Match the request to a template and one or two presets from the table. Say which and why in one line, and show the person the preset names with their one-line looks before building anything.
  2. Read the reference for that template, after the shared file, and load its JSON. Take values from the JSON; do not re-guess them.
  3. Build it the way the reference's "Build it" section says, starting from the named HyperFrames blocks or varg components where it names them. Drive every value from timeline time so any frame renders the same on a re-render.
  4. Fit it to the brand: swap in the person's colors and fonts only where the reference allows, then re-check contrast and safe zones with the numbers in "Timing and numbers".
  5. Check a draft: render stills at the key moments (entrance, hold, exit), go through "Mistakes that look amateur", and fix before the final render.

Rules that hold for every template

  1. Choose chunking first: phrase (5–12 words), group (2–5), single word only for hooks/punchlines/≤20 s clips (word-for-word: ~90% gaze on text, lower comprehension — Romero-Fresco; Meryl Evans).
  2. Active word switches 1–2 frames before audio onset (late noticed from ~45 ms, early unnoticed to ~125 ms — ITU-R BT.1359). Karaoke: line leads 10–20 f (≤1.5 s), fill follows voice (\kf).
  3. Per-word motion done within ~6 f at 30 fps; scale via transforms, never font-size.
  4. 9:16 safe box: top 288, bottom 672, left 120, right 192 px on 1080x1920; max width 696 px, block centre ~60% height.
  5. Contrast ≥4.5:1 against what is behind; black box ≥60% opacity on white footage.
  6. Netflix/BBC/DCMP line breaks; 42 cpl 16:9; 2 lines (3 in 9:16); 160–180 wpm; 0.83–7 s per caption; 2-frame gaps.
  7. Sentence case; caps only for single-word cards; OFL faces only.
  8. Ship a plain phrase version as the accessible deliverable.

Built from

BBC Subtitle Guidelines; Netflix Timed Text Style Guide; Meryl K. Evans (@merylkevans); DCMP Captioning Key; ITU-R BT.1359; Romero-Fresco; WCAG; X: @wayofzorro, @finnardley, @mws, @yt_igm, @tigerjvideo.

Every rule in the references cites its source by number. The full list, with links and what was taken from each, is in references/sources.md. Values marked as house defaults in a reference are our own starting points where no expert published a number.

Related skills

  • remotion-captions, iart-caption-animation, cinematic-caption-audrey on varg how to: caption engines these presets can drive.
  • short-form-ffmpeg-cookbook: burn SRT/ASS with ffmpeg.
  • HyperFrames registry (npx hyperframes catalog --query "…"): about 450 ready-made blocks; the references name the ones to start from.
  • varg-video-edit-library: 206 named edits for existing footage (cuts, transitions, headlines, UI, numbers).

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.