--- name: render-cinematic-music-video description: Assemble a cinematic live-action-style music-video ad from a config — an original sung anthem carries the whole narrative while N 35mm-film-look i2v clips are each cut to their lyric window and hard-concatenated on the beat as a 3-act arc, the anthem muxed at loudnorm I=-14, cinematic lower-third serif captions built from the song's OWN word timings (never Whisper) with the hook line landing on the chorus drop, and closed on a brand end card composited from the real asset — never AI-rendered text. This is the FREE deterministic assembly stage (cut-to-window + hard concat + anthem mux + captions + end card); the anthem, keyframes, and clips come from create-music-elevenlabs / create-image-gpt-image-fal / create-video-fal. Use for the cinematic-music-video format. status: active --- # render-cinematic-music-video Assemble a **cinematic music-video** ad from a config: a live-action-STYLE short film where an original sung anthem is the score and every visual beat is a shot-on-film tableau (Kodak Portra grain, light leaks, natural light, handheld imperfection) timed to the lyrics, arranged as a 3-act arc (its shape is the user's `story_arc` choice) with the hook line on the chorus drop. This capability is the **FREE, deterministic assembly** — cut-to-window, hard-concat, anthem mux, caption burn, and the brand end card. `scripts/config.example.json` is the worked example (Hype and Vice "Game Day Girls", ~28s 1080×1920 9:16, 14 tableaux) — copy its structure, never its creative values; `scripts/PIPELINE.md` maps every config block to its source step and `scripts/README.md` documents the free assembly. ## Run This is the **FREE, deterministic** assembly stage — it spends nothing. The paid inputs are separate capabilities: the sung anthem (`create-music-elevenlabs`, `force_instrumental` false — the lyrics ARE the script, returns mp3 + `words_timestamps`); one 35mm-film keyframe per beat in one look pack (`create-image-gpt-image-fal`); and one Kling 3.0 i2v clip per beat (`create-video-fal`). Given the delivered anthem + `words.json` + one clip per beat + the brand end-card asset, `render-cinematic-music-video` cuts each clip to its lyric window, hard-concats on the beat, muxes the anthem, burns the cinematic lower-third captions, and overlays the end card → the master. Re-cuts reuse the existing anthem / keyframes / clips and cost **$0**. ## Choices The creative content this stage assembles is decided upstream by the format's `choices`, asked of the user before any paid step. The worked example's values are examples, never defaults: - **song_style** — the anthem's genre, mood, BPM and arrangement. The demo used a triumphant 120-BPM indie-pop cinematic anthem. - **vocalist** — who sings it. The demo used a confident-but-warm female lead. - **cast** — who is on screen in the tableaux. The demo used four young college women. - **setting** — place + time of day (drives the look pack's light and palette). The demo used an American college town on game day, autumn, golden hour. - **story_arc** — the 3-act shape of the tableaux and lyrics. The demo used one game day, morning → stadium peak → twilight, with an origin-story wink. This assembly reads them only through the config (`tableaux[]` windows + captions, the anthem, `captions.accent_words`, `end_card.*`); it hardcodes none of them. ## Contract (the free assembly) - **The sung anthem carries the story — 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 bed. - **Plan the timeline AROUND the delivered anthem.** The anthem is generated first and reshapes/overshoots length; snap every tableau boundary to the lyric-phrase edges in the returned word timings — never trim the anthem to a pre-planned grid. - **Captions from the anthem's OWN word timings, not Whisper.** Derive `words.json` from the music model's `words_timestamps`, chunk ~4 words at lyric boundaries, and burn cinematic lower-third serif captions (`--placement low`) with the hook line accent-treated (bold-italic). Whisper on sung audio returns "🎵 Music Playing 🎵". - **Land the hook on the chorus drop.** The hero tableau (`is_hook`) is timed so the load-bearing line sits on the chorus drop; accent that line in the captions. - **One cinematic look pack + hard cuts on the beat.** The look pack (named film stock + grain + flares + handheld) plus a continuity anchor holds every clip together; cut each clip to its lyric window and hard-concat (one optional match-cut into the hero reveal) — no dissolves. - **End card from the real brand asset — never AI-render the wordmark as diffusion text.** Composite the lockup (PIL/ffmpeg) from the real asset or use a designed keyframe base; diffusion garbles a wordmark. - **FFmpeg composite, deterministic, FREE.** Normalize each clip to its beat-locked window, hard-concat, mux the anthem (`afade` in/out + `loudnorm I=-14`), burn the caption ASS, overlay the end card → a 1080×1920 h264+aac master. No paid calls, no keys.