К основному содержанию
скилл CX Codex

scenario-caption-studio — скилл для Claude Code: субтитры и SRT

Скилл для работы с субтитрами через Scenario по MCP: транскрипция, вжигание стилизованных подписей, SRT-файл, перевод.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add scenario-labs/skills --skill scenario-caption-studio -a claude-code
Открыть на GitHub

Что делает scenario-caption-studio

Скилл вызывает один инструмент — model_scenario-caption-studio. На вход идёт видео, речь распознаёт Whisper либо подставляется готовый SRT, на выходе — стилизованные подписи, вжжённые в картинку или отданные отдельной дорожкой плюс файл .srt. Перевод идёт на 18 языков.

Работает это через MCP, поэтому сначала нужно подключение к Scenario — про саму связку рассказано в скилле scenario. Схему инструмента скилл запрашивает сразу, без поиска: id уже известен. Доступность инструмента зависит от команды, и если его нет, скилл советует сообщить об этом, а не подменять чем-то другим.

Субтитры — финальный проход по готовому монтажу. Сначала сборка (scenario-video-assembly), потом одна обработка мастера. Текст, который должен стоять на экране дословно, но не произносится — цены, CTA, юридические пометки — это уже scenario-text-overlay. Если соседнего скилла нет, попросите поставить его отдельно.

Какие задачи решает

  • распознать речь в клипе и получить текст
  • вжечь стилизованные подписи в вертикальный ролик
  • сделать SRT-файл для загрузки в YouTube
  • перевести субтитры на другой язык
  • переоформить и поправить готовую транскрипцию

Примеры запросов агенту

  • сделай вжжённые субтитры для этого вертикального ролика
  • выгрузи SRT из этого видео
  • переведи подписи на испанский и собери ролик заново

Как установить scenario-caption-studio

1Через Skills CLI (Vercel)

npx skills add scenario-labs/skills --skill scenario-caption-studio -a claude-code

2Вручную: положить файлы

~/.claude/skills/scenario-caption-studio/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/scenario-caption-studio/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о scenario-caption-studio

Как установить scenario-caption-studio в Claude?

Выполните npx skills add scenario-labs/skills --skill scenario-caption-studio -a claude-code. Скилл окажется в ~/.claude/skills/scenario-caption-studio/SKILL.md.

Что делает scenario-caption-studio?

Прогоняет видео через один инструмент Scenario: распознаёт речь или берёт готовый SRT, оформляет подписи и отдаёт их вжжёнными в картинку либо отдельной дорожкой с файлом .srt.

Что нужно, чтобы скилл заработал?

Подключение к Scenario по MCP — про него рассказано в скилле scenario. Сам инструмент model_scenario-caption-studio доступен не каждой команде, и если его нет, скилл советует отметить это, а не искать замену.

Исходный текст

SKILL.md · MIT
---
name: 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.
- `transcriptionPrompt` is 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 with `large-v3` or a sharper hint.
- `modelSize` trades accuracy for speed and cost (`cost_impact`): the `medium` default is fine for
  clean voiceover; step up to `large-v3` for noisy audio, accents, or dense terminology; `.en`
  variants 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 `subtitles` input, whose contract is inline content, not a
  reference (authoring-time): pass the SRT text itself, base64-encoded, as the value. An `asset_...`
  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: 0` in the job record is
  the tell). Reuse is therefore: `outputSrt: true` returns the transcript as an asset,
  `asset_download` it, correct spellings locally if needed, and feed the edited text back
  base64-encoded, which also covers `upload_asset` having 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 a `subtitles` run on job status alone:
  sweep the output as the worked example reviews it, and when captions are missing, `asset_get` the
  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
  alongside `subtitles`.

## Worked example: a vertical social short, then a Spanish variant

1. `asset_get` the assembled master: confirm duration and that it is the finished cut, since the
   price tracks the footage (`video` carries `cost_impact`; trim first, `scenario-video-editing`).
2. `model_schema_get` on `model_scenario-caption-studio`.
3. Price it: `model_run` with `dry_run: true` and
   `parameters={"video": "<asset_id>", "stylePreset": "tiktok-bouncy", "maxSegmentWords": 4, "textPosition": "middle", "transcriptionPrompt": "Scenario, LoRA, Flux", "outputSrt": true}`.
   Re-estimate after changing `targetLanguage`, `modelSize`, `stylePrompt`, or `outputSubtitles`:
   all carry `cost_impact`.
4. Run it with `wait: false`, then `jobs_wait` with the `job_id`; on timeout re-call with the
   returned `pending_job_ids`, never `job_get` in a loop.
5. Review before deriving, since a successful job proves nothing about what rendered: download the
   SRT sidecar with `asset_download` (no `format`: it converts images only; a run that returns both
   video and SRT lists the two asset ids in no fixed order, and `asset_get` tells them apart by
   `mimeType`) 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 an `fps=2` sweep. 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.
6. Spanish variant: add `targetLanguage: "es"` to the same parameters, `transcriptionPrompt`
   included, and `dry_run` again (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, Japanese, or Korean (streaming style guides run them at a third of the characters per
   line), so revisit `maxSegmentChars` per target language.
7. File the master, variants, and SRT assets in a collection (`scenario` skill) so the delivery set
   stays findable.

## Common mistakes

- Captioning each clip before assembly: caption the finished master once, or cues drift across cuts
  and every edit orphans its captions.
- Expecting the preset look on the soft track: `video_data` renders as plain text the viewer
  toggles; styling survives only when burned in.
- Styling legal lines or CTAs as captions: disclosures carry locked wording, size, and dwell time
  that caption logic would re-chunk and retime, and a toggleable track fails "visible without viewer
  action" rules outright; exact unspoken text is a `scenario-text-overlay` card composited in
  assembly.
- Setting `maxSegmentWords: 1` without a karaoke or pop preset: one-word cues flash as a slideshow
  unless the style animates them. With a pop preset (the ones that reveal words inside a cue:
  `tiktok-bouncy`, `word-pop`, and the karaoke pair at authoring time), never end a cue on a
  one-letter word: pop-in timing follows character count, so a trailing "I" or "a" showed for about
  70 ms at authoring time. Re-chunking a supplied SRT means owning its timings too: a supplied SRT
  carries cue times only, so a pop preset spreads its words evenly across each cue and the highlight
  drifts from the voice wherever a cue outlasts the speech; keep each cue's end on the spoken span,
  and extend only the last cue to the clip's end.
- Treating a `jobs_wait` timeout as failure: re-call with `pending_job_ids`; video tool jobs outlast
  the wait window routinely.

© scenario-labs · MIT · scenario-labs/skills

Похожие скиллы

Всё по теме «ИИ и ML» →
caption-animation iart-ai Скилл для пословной анимации субтитров: слово появляется на своём слоге, активное подсвечивается, текст держится в безопасной зоне 9:16. CX Codex +1 2 000установок ig-caption Jakeschincariol Пишет подпись к посту в Instagram: первую строку до «... more», тело, один призыв, поисковые фразы и хештеги. Потом проверяет черновик линтером. CX Codex +1 497установок speech-to-text elevenlabs Отдаёт агенту ElevenLabs Scribe v2: отправляет аудио или видео на распознавание и возвращает текст, метку языка и таймстемпы по словам. CX Codex +1 11 800установок video-use browser-use Скилл монтирует видео через диалог: расшифровывает речь, режет материал, добавляет субтитры и графические оверлеи. Подходит для роликов, интервью и уроков. CX Codex +1 5 100установок Transcription Automation Claude Office Skills Скилл для автоматической расшифровки аудио и видео: встречи, субтитры, шоу-ноты подкастов. Работает через MCP-сервер media-mcp. CX Codex +1 4 800установок faster-whisper ThePlasmak Локальная расшифровка аудио и видео на базе CTranslate2 без расходов на API. Распознаёт речь, определяет спикеров и создаёт субтитры. CX Codex +1 1 800установок

Из того же набора68

scenario-grok-imagine-video Скилл для генерации и редактирования видео моделями Grok Imagine на платформе Scenario через MCP. Пригодится, когда нужен текст-в-видео, анимация кадра или продолжение клипа. CX Codex +1 372установок scenario-orbit-views Генерирует ракурсы объекта из одной картинки через 3D-меш в Blender и перерисовку в Scenario MCP. Помогает избежать искажения пропорций при смене камеры. CX Codex +1 365установок scenario-wan Скилл для генерации и правки видео на моделях Wan через MCP Scenario: текст в видео, оживление кадра, монтаж по инструкции, смена пропорций. CX Codex +1 370установок scenario-blender-hard-surface Скилл для моделирования твёрдых поверхностей в Blender: булевы вырезы, фаски, weighted normals и subdivision. Помогает, когда шейдинг ломается или фаска исчезает после булевой операции. CX Codex +1 371установок scenario-vidu Помогает генерировать видео через модели Vidu на платформе Scenario по протоколу MCP. Настраивает режимы T2V, I2V, интерполяцию двух кадров и сохранение объектов по референсам. CX Codex +1 359установок scenario-fan-cam Скилл собирает кадр с фанатской камеры: вставляет человека с фото в толпу на стадионе, а потом оживляет кадр в видео. CX Codex +1 363установок scenario-model-comparison Прогоняет один и тот же бриф через несколько моделей Scenario и сводит цену, время и качество в одну таблицу. Пригодится, когда выбираете модель по умолчанию. CX Codex +1 361установок scenario-ugc Скилл маршрутизирует создание UGC-видео для соцсетей через Scenario. Помогает собрать ролик с говорящей головой, распаковкой или закадровым голосом в формате 9:16. CX Codex +1 353установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой