scenario-caption-studio
Use when a video needs its spoken words on screen through Scenario via MCP: burned-in styled captions for a TikTok, Reels, or Shorts cut, ad captions for sound-off feeds, YouTube subtitles, an SRT sidecar, transcription of a clip's audio, captions translated into another language, karaoke or word-by…
Install / Use
npx skills add scenario-labs/skills --skill scenario-caption-studioInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of scenario-caption-studio
scenario-caption-studio scores 84/100 on our quality scale, 2890th of 4,647 Development & Engineering skills we index.
Its SKILL.md is 13 KB long, split into 7 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 1,048 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 8 days ago, so scenario-caption-studio is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
scenario-caption-studio compared with similar skills
All 4 of these similar skills score higher than scenario-caption-studio; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| scenario-caption-studio (this skill)by scenario-labs | 84 | 1.0k | 8d ago | SKILL.md |
| headroomby headroomlabs-ai | 100 | 78.0k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 104.1k | 2d ago | MCP Server |
| Scraplingby D4Vinci | 100 | 89.9k | 1d ago | MCP Server |
| crawl4aiby unclecode | 100 | 86.4k | today | MCP Server |
Frequently asked questions
- How do I install scenario-caption-studio?
- Run
npx skills add scenario-labs/skills --skill scenario-caption-studio. The install tabs above show the steps for each supported agent. - Which AI agents does scenario-caption-studio work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is scenario-caption-studio safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is scenario-caption-studio still maintained?
- The repository was last updated 8 days ago, so scenario-caption-studio is actively maintained.
Skill content
View source on GitHubname: scenario-caption-studio description: "Use when a video needs its spoken words on screen through Scenario via MCP: burned-in styled captions for a TikTok, Reels, or Shorts cut, ad captions for sound-off feeds, YouTube subtitles, an SRT sidecar, transcription of a clip's audio, captions translated into another language, karaoke or word-by-word styles, or restyling and correcting an existing transcript. Keywords: captions, subtitles, SRT, transcribe, karaoke, word-by-word, burn in, closed captions, translate video, caption style." license: MIT
Scenario Caption Studio
Overview
Caption Studio is one tool model, model_scenario-caption-studio: a video in, its speech
transcribed (Whisper) or an existing SRT applied, styled captions out, burned into the picture or
delivered as a soft track and an .srt sidecar. It translates into 18 languages and styles captions
three ways. Running that one member is this skill's whole purpose, so the id is named rather than
discovered and model_schema_get starts the flow directly; availability differs per team, so a
member the team lacks is a gap to flag, not a cue to substitute. Connection and the core loop: see
the scenario skill.
Captioning is the last pass on a finished cut: assemble first (scenario-video-assembly), then
caption the master once. Captions carry the transcript only; text that must appear letter-perfect
without being spoken (CTAs, prices, legal supers) is scenario-text-overlay territory. If a sibling
skill named here is missing from your available skills, ask the user to install it
(npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and
flag the gap.
Ask once, then caption
The destination decides nearly every parameter, so collect one round of answers before touching the
schema: where the video ships (a sound-off mobile feed, a paid placement, a seated long-form
viewer), whether the spoken language stays or translates (targetLanguage, auto keeps it), brand
colors if any, and which deliverable the platform wants. The deliverable is three switches:
burned-in pixels are outputSubtitles: "video_image" (the default), the toggleable track is
"video_data", the sidecar file is outputSrt: true, and an SRT-only pass is that plus
outputVideo: false, the first pass when the words must be letter-perfect: it priced the same as a
burn-in at authoring time, so it buys certainty rather than savings, proving the words before any
pixels are paid for. Then map the answers:
| Destination | Style | Segmentation | Position | Output |
| ---------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Social mobile short (9:16 Shorts, Reels) | tiktok-bouncy or word-pop; karaoke-fill when music drives | maxSegmentWords 3 to 5; 1 with a karaoke preset | middle: platform UI and native auto-captions own the bottom | Burn in |
| Ad short, performance cut | modern-chip or minimal-underline, accents set to brand color | 3 to 7 words per cue | bottom, or top when an end card or overlay sits below | Burn in for sound-off feeds; add outputSrt for the platform's caption upload |
| YouTube long-form, tutorial, interview | Default look or cinematic-fade; restraint reads as professionalism | maxLines 2, maxSegmentChars 84 (two 42-character lines, the broadcast convention) | bottom | outputSrt for the platform's closed captions; burn in only for re-embeds |
| Cinematic piece, trailer, festival cut | cinematic-fade | Sentence-length cues, maxSegmentDuration about 6 | bottom | Burn in |
Rows are authoring-time starting points to confirm with the user, not platform contracts;
unattended, the task's own instructions answer the interview and the matching row's defaults fill
what they leave unsaid. The per-placement safe zones behind the position column live in
scenario-formats. middle renders at frame center, which on a centered talking head is the mouth:
caption a selfie cut only once its face sits in the upper third (reframe in assembly), because the
schema offers no lower-third position. An uploaded track beats burn-in for long-form because viewers
toggle and restyle it, assistive tech reads it, and platforms index it for search; burn-in wins
wherever the style is the point or a track cannot travel with the file.
The style ladder
Three tiers: stylePreset picks a ready-made look (7 presets, empty for the default); stylePrompt
describes a look in plain words and builds a matching style (it carries cost_impact); themeTsx
supplies a full custom theme that replaces the preset, with stylePrompt then refining that theme.
There is no font parameter: type rides inside the tiers, and it is the strongest signal a style
sends, so when the type itself must carry the mood or the brand, put the intent into stylePrompt
in plain words (the weight, the letterform class, the feeling: "heavy condensed sans, high-energy",
"light geometric sans, quiet and premium"); an exact brand face is themeTsx territory, and
scenario-text-overlay chooses faces by meaning for the text cards around the captions. Presets
also restyle the words themselves: an authoring-time run of tiktok-bouncy uppercased every
caption, and the other presets are unverified for casing, so when exact casing matters (a product
name, "LoRA") steer with stylePrompt or themeTsx and verify a frame before delivering.
fontColor sets the body text (contrast beats aesthetics: white body text survives every backdrop
the presets put behind it), and accentColorStart/accentColorEnd drive the highlight animation
(karaoke fills, pops): spend the accent on one thing, usually the brand color, with equal values for
a solid and different values for a gradient. Auto sizing (fontSizePx empty) rendered words about
30 pixels tall on a 1080x1920 frame at authoring time, unreadable on a phone feed: for vertical
social set fontSizePx explicitly (60 to 90 on a 1920-tall frame is the authoring-time starting
point) and judge a frame at phone scale. outputTsx: true returns the theme a run used, so a look
that landed can be replayed exactly on the next video.
Getting the words right
- When narration was authored, retain that script as the wording reference. Compare the transcript against it for missing, repeated or altered words before burning; a spelling hint is not that comparison. Derive cue times from the actual recording, not word count or the planned shot duration. Correct the SRT through the supported input below; do not invent a script-alignment parameter.
transcriptionPromptis a spelling hint, not a style field: list the names, brands, and jargon the audio contains. The hint raises the odds without guaranteeing them (an authoring-time run misspelled a hinted name twice), so check the transcript for every required name before trusting a burn-in, and on a miss retry withlarge-v3or a sharper hint.modelSizetrades accuracy for speed and cost (cost_impact): themediumdefault is fine for clean voiceover; step up tolarge-v3for noisy audio, accents, or dense terminology;.envariants are English-only.- The model transcribes whatever audio the master carries, so balance the music bed against dialogue
before captioning (
scenario-video-assembly), never after. - Corrections and restyles ride the
subtitlesinput, whose contract is inline content, not a reference (authoring-time): pass the SRT text itself, base64-encoded, as the value. Anasset_...id is not dereferenced there; the id string is base64-decoded as if it were content, and the run still reports success, bills, and renders zero captions (segment_count: 0in the job record is the tell). Reuse is therefore:outputSrt: truereturns the transcript as an asset,asset_downloadit, correct spellings locally if needed, and feed the edited text back base64-encoded, which also coversupload_assethaving no text kind (authoring-time fact). The SRT inherits the run's segmentation (a karaoke run returns word-per-cue), so re-chunk it locally before an ads upload or a calmer restyle. Never deliver asubtitlesrun on job status alone: sweep the output as the worked example reviews it, and when captions are missing,asset_getthe subtitles asset the job consumed to see what it received. The schema does not say whether segmentation caps re-chunk a supplied SRT, so set segmentation when transcribing and omit the caps alongsidesubtitles.
Worked example: a vertical social short, then a Spanish variant
asset_getthe assembled master: confirm duration and that it is the finished cut, since the price tracks the footage (videocarriescost_impact; trim first,scenario-video-editing).model_schema_getonmodel_scenario-caption-studio.- Price it:
model_runwithdry_run: trueandparameters={"video": "<asset_id>", "stylePreset": "tiktok-bouncy", "maxSegmentWords": 4, "textPosition": "middle", "transcriptionPrompt": "Scenario, LoRA, Flux", "outputSrt": true}. Re-estimate after changingtargetLanguage,modelSize,stylePrompt, oroutputSubtitles: all carrycost_impact. - Run it with
wait: false, thenjobs_waitwith thejob_id; on timeout re-call with the returnedpending_job_ids, neverjob_getin a loop. - Review before deriving, since a successful job proves nothing about what rendered: download the
SRT sidecar with
asset_download(noformat: it converts images only; a run that returns both video and SRT lists the two asset ids in no fixed order, andasset_gettells them apart bymimeType) and check its text against the authored script and required names; then download the video and sweep it into contact sheets (ffmpeg -vf "fps=2"), reading the burned captions for spelling, casing, and placement. Inspect at the intended display size, including backing panels: keep faces, hands, demonstrated actions and essential UI clear, and keep placement stable within a cue. Listen against cue starts and ends; a correct transcript does not prove synchronization. Sample frames immediately before and after cue boundaries as well as within them: reveals and fades can exceed supplied SRT times, and a flash under 100 ms survives anfps=2sweep. If strict boundaries are required, verify the actual theme or report the limitation; a correct sidecar alone is not a pass. Check the final spoken word survives, comparing audio and video streams separately; a shorter audio stream containing the complete narration may simply omit trailing silence. - Spanish variant: add
targetLanguage: "es"to the same parameters,transcriptionPromptincluded, anddry_runagain (it moves the price) before running. Translation happens inside the run, so one master yields a variant per market. Latin-script segmentation caps do not transfer to Chinese,
Truncated for display — read the full file on GitHub.
Related Skills
headroom
78.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Agent-Reach
104.1kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Scrapling
89.9k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
crawl4ai
86.4kOpen-source web crawler and scraper for LLMs and AI agents: any website into clean, LLM-ready Markdown. Run it yourself, or use Crawl4AI Cloud with one key. Join our Discord https://discord.gg/VuxzM8mtf
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
