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). FirePOST /content/create, poll/tasks/runs?runId=every ~10s until terminal, readoutput.{videoSourceUrl,captionText}. The async path is agent-safe (sync/content/videotimes out). - lyric — transcribe for word-level timings (
POST /content/transcribe,audio_urlsarray →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-lastwith 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