caption-videolisted
Install: claude install-skill novoads/claude-code-ads
# Caption a finished video
Takes a finished MP4 with speech and returns the same video with timed captions
burned in. Nothing is regenerated: the source pixels and the source audio pass
through untouched, and the captions are composited on top.
**This skill makes no API calls.** It is ffmpeg + Whisper + HyperFrames on a
local file, so it costs no credits and needs no API key.
## Check the API path first
`POST /v1/captions` is the default, and it is one call against a finished asset
with a set of preset styles and no local toolchain at all. Read the
`novoads-api` skill's SKILL.md (*Burned-in captions*) for the call, and
[prompting/guide.md](prompting/guide.md) here for the full side by side. **Offer
both paths rather than picking silently**, because the API costs credits and this
skill costs a first-time setup.
> **REST key required. A Novoads MCP connector is not a substitute.** If
> `NOVOADS_API_KEY` is missing or still the placeholder, stop before any
> generation work and tell the user: "Before continuing, create an API key at
> <https://novoads.ai/dashboard/settings?tab=api> and paste it into `.env`."
> That holds even when `mcp__novoads__*` tools are connected and authenticated in
> the session. Never call `mcp__novoads__*` tools from this repo's workflows: they
> are a different surface with different behavior, including the units they quote
> costs in. Repo installs verify with `./scripts/check-novoads-env.sh`; a solo
> install checks `NOVOADS_API_KEY` in the envi