# Recoup Content Make Video

> Make finished short-form video for an artist — a 9:16 TikTok/Reel/Short of the artist + song, a lyric video, a no-text visualizer/Spotify Canvas, or per-platform reformats of existing footage. Use for "make a TikTok/Reel/Short", "lyric video", "visualizer/Canvas", or "reformat this for TikTok". Modes: short, lyric, visualizer, reformat. Verifies the render before claiming done; stops at the asset. For the clip-worthy moment first, use recoup-song-find-hook.

- Skill: `recoupable-skills/recoup-content-make-video` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds add recoupable-skills/recoup-content-make-video`
- Raw SKILL.md: https://api.skillmd.com/api/skills/recoupable-skills/recoup-content-make-video/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: recoupable (https://skillmd.com/u/recoupable-skills)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/recoupable-skills/recoup-content-make-video

---


# Recoup Content — Make Video

Every motion job, one skill. Read the bundled references first:
`references/workspace-context.md`, `references/account-resolver.md`,
`references/research-context.md`, `references/content-api.md` (the video modes +
async create→poll), `references/song-sourcing.md` (real audio, no placeholders),
`references/analyze-gate.md` (verify before claiming done).

## Backbone

Resolve the artist (use the **`account_id`**, not row `id` — wrong one 404s), read
context first, layer live signals, generate, **analyze-gate** (you can't see motion —
analyze and regenerate on failure), persist + commit. Real audio only.

## Modes

- **short** — finished 9:16 of the artist + song. The look is a **template**
  (bedroom/stage/outside/album-record-store; default `artist-caption-bedroom`; list
  via `/content/templates`). Fire `POST /content/create`, poll `/tasks/runs?runId=`
  every ~10s until terminal, read `output.{videoSourceUrl,captionText}`. The async
  path is agent-safe (sync `/content/video` times out).
- **lyric** — transcribe for word-level timings (`POST /content/transcribe`,
  `audio_urls` array → `segments:[{start,end,text}]`), generate/use an on-brand
  background, **burn in synced lyrics**, mux full-length. Don't reproduce third-party
  lyrics.
- **visualizer** — seamless loop, **no text/logos** (Spotify rejects them), 9:16,
  3–8s; use `first-last` with identical start/end frames; analyze-gate the seam.
- **reformat** — edit, don't generate: master → genuinely distinct per-platform cuts
  (never identical re-uploads — platforms suppress them). Lead 9:16 with the hook
  (use recoup-song-find-hook for the in-point); captions clear of UI safe zones.

## Guardrails

- **Verify before delivery** — analyze-gate every render; never claim an unverified
  asset is done.
- **Real audio only** (`references/song-sourcing.md`).
- **Stop at the asset** — no posting.

## References

- `references/workspace-context.md` · `references/account-resolver.md` ·
  `references/research-context.md` · `references/content-api.md` ·
  `references/song-sourcing.md` · `references/analyze-gate.md`

