Render Song Mv
ASecurityAssemble a song-driven music-video ad from a config — a generated sung track carries the whole narration across N tableaux (one keyframe -> one i2v clip per lyric beat) with NO separate voiceover, captions synced to the song's OWN word timings (script-window, never Whisper) and the hook word landing on the chorus drop, closed on a PIL brand end card. This is the FREE deterministic assembly stage (clip cut-to-timeline + captions + end card + FFmpeg composite); the song, keyframes, and clips co...
- 1,232 stars
- 0 votes
- 0 copies
- 1 view
- Added September 4, 2026
Works with
Security analysis
100/100Pro scans all 6 files and shows the line behind each finding
npx -y skills add gooseworks-ai/goose-skills --skill render-song-mv --agent claude-codeAre you the author of Render Song Mv?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/gooseworks-ai-render-song-mv)---
name: render-song-mv
description: Assemble a song-driven music-video ad from a config — a generated sung track carries the whole narration across N tableaux (one keyframe -> one i2v clip per lyric beat) with NO separate voiceover, captions synced to the song's OWN word timings (script-window, never Whisper) and the hook word landing on the chorus drop, closed on a PIL brand end card. This is the FREE deterministic assembly stage (clip cut-to-timeline + captions + end card + FFmpeg composite); the song, keyframes, and clips come from create-music-elevenlabs / create-image-fal / create-video-fal. Use for the song-driven-music-video format.
status: active
---
# render-song-mv
Assemble a song-driven music-video ad from a config: a purpose-written, **sung** song is
the entire narration (no separate voiceover), and every visual beat is timed to the lyrics.
The delivered song sets the timeline; N tableaux (one keyframe → one image-to-video clip per
lyric beat, all in a single look pack) are cut to their lyric windows and hard-concatenated
on the beat, captions are built from the song's OWN word timings with the hook line landing
on the chorus drop, and the spot closes on a PIL brand end card. It reads like a tiny animated
music video, not a demo. `scripts/config.example.json` is one worked example (Loóna "Fall In
Love With Sleep Again", 28s paper-craft 9:16) — its style, song, vocalist, mood, protagonist and
setting are that demo's answers, not defaults; `scripts/PIPELINE.md` maps every config block
to its step and `scripts/README.md` documents the free assembly.
## Choices
The creative calls are made upstream by the user (the recipe's `choices`) and arrive in the config;
this assembly never picks them.
- **visual_style** → `look_pack`, `clip_engine.motion_opener`. The demo used a paper-craft diorama
at night.
- **song_genre** → `song.prompt` / `song.bpm`. The demo used a dreamy synth lullaby at ~80 BPM.
- **vocalist** → `song.prompt`. The demo used a soft breathy female lead.
- **mood** → `song.prompt`, the lyrics, `tableaux`. The demo went calm/dreamy.
- **protagonist** → `look_pack.style_opener`. The demo used a young-woman paper-doll.
- **setting** → `tableaux[].keyframe_prompt`. The demo went bedroom at night → moonlit paper village.
## Run
This is the **FREE, deterministic** assembly stage — it spends nothing. The three paid
inputs are separate capabilities: the sung song (`create-music-elevenlabs`, music_v1,
force_instrumental FALSE — the lyrics ARE the script, returns mp3 + `words.json`), one
keyframe per tableau (`create-image-fal`), and one Kling 3.0 i2v clip per tableau
(`create-video-fal`). Given the delivered song + `words.json` + one clip per beat,
`render-song-mv` cuts each clip to its lyric window, hard-concats on the beat, builds the
lyric-synced captions, composites the PIL end card, and muxes → the master. Re-cuts reuse
the existing song / keyframes / clips and cost **$0**.
## Contract (the free assembly)
- **The sung song carries the narration — no separate VO.** The generated ElevenLabs track
IS the bed and the script (`force_instrumental` false); do not add a spoken voiceover or a
second music bed.
- **Plan the timeline AROUND the delivered song.** The song is generated first and reshapes/
overshoots length; snap every tableau boundary to the lyric-phrase edges in the returned
word timings (`timeline.json`) — never trim the song to a pre-planned grid.
- **Captions from the song's OWN word timings, not Whisper (script-window).** Chunk
`audio/words.json` (~3 words at lyric boundaries); accent words get `captions.accent_color`.
Whisper on sung audio returns "🎵 Music Playing 🎵", so it can't caption lyrics.
- **Land the hook on the chorus drop.** Exactly ONE hero tableau (`is_hook`) is timed so the
payoff word (`song.hook_word`) sits on the chorus drop; accent that word in the captions.
- **One look pack for consistency.** A single `style_opener` + `negative_tail` + palette drives
every keyframe so N beats read as one film; no morph within a clip.
- **Hard cuts on the beat.** Cut each clip to its lyric window and hard-concat — no dissolves
(one optional match-cut into the hero reveal).
- **PIL end card from the brand's real asset (e.g. the app icon) — never AI-render brand text.** The lockup is
composited deterministically (brand gradient + circular app icon + wordmark + tagline + CTA)
from the brand's real asset; a diffusion model garbles a wordmark.
- **FFmpeg composite, deterministic, FREE.** Burn the caption ASS, overlay the end-card PNG on
the final window, mux the song, boost the climax beat (`audio_mix.climax_beat_id` — set it to
this run's hook tableau; the demo's `T08` is example-only), loudnorm to −14 LUFS → 1080×1920
h264+aac. No paid calls, no keys.
Files in this skill
- SKILL.md
- scripts/PIPELINE.md
- scripts/README.md
- scripts/config.example.json
- skill.meta.json
- tests/smoke-test.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.