$npx -y skills add gooseworks-ai/goose-skills --skill render-narrated-ugc-wardrobe-stitchAssemble a narrated-UGC "stitch reply" ad from a config — a single spoken VO carries a verbatim testimonial while ~30 per-cut i2v clips (one creator across ~5 wardrobes in ~3 worlds, plus product B-roll) are each trimmed to their EDL window built from the VO's Whisper word bounda
| 1 | # render-narrated-ugc-wardrobe-stitch |
| 2 | |
| 3 | Assemble a **narrated-UGC "stitch reply"** ad from a config: a fast-cut vertical testimonial |
| 4 | where a single spoken VO carries a verbatim ~13-sentence reversal-hook monologue over ONE creator |
| 5 | across ~5 wardrobe changes in ~3 micro-worlds, interspersed with product B-roll (capsule macro, |
| 6 | unboxing, a landing-page scroll), ~30 hard cuts on the VO cadence, closing on a brand end card. |
| 7 | This capability is the **FREE, deterministic assembly** — trim-to-EDL, hard-concat, the VO+music |
| 8 | mix, the karaoke-pop caption burn, the landing-page zoompan, and the end-card append. |
| 9 | |
| 10 | `scripts/config.example.json` is the worked example (Bioma "Do NOT buy Bioma Probiotics", ~37s |
| 11 | 1080×1920 9:16, ~30 body cuts + a ~2s end card); `scripts/PIPELINE.md` maps every config block to |
| 12 | its source step and `scripts/README.md` documents the free assembly. |
| 13 | |
| 14 | ## Run |
| 15 | |
| 16 | This is the **FREE, deterministic** assembly stage — it spends nothing. The paid inputs are |
| 17 | separate capabilities — the spoken VO (`create-vo-elevenlabs`) Whisper-aligned so the WORD |
| 18 | BOUNDARIES set the cut grid; one locked creator (`create-image-gpt-image-fal` anchor + ~5 wardrobe |
| 19 | edits chained off the anchor) + 3 world wides + per-cut start-frames (`create-image-fal` product |
| 20 | composites); and one Veo/Seedance i2v clip per cut (`create-video-fal`). Given the VO + |
| 21 | `vo-final.words.json` + `edl.json` + one clip per cut + a Playwright landing-page PNG + the brand |
| 22 | end-card PNG, `render-narrated-ugc-wardrobe-stitch` trims each clip to its EDL window, hard-concats |
| 23 | on the VO cadence, mixes the VO over the ducked bed, burns the karaoke-pop captions, appends the |
| 24 | end card → the master. Re-cuts reuse the existing VO / start-frames / clips and cost **$0**. |
| 25 | |
| 26 | ## Contract (the free assembly) |
| 27 | |
| 28 | - **The spoken VO carries the narrative — lock it FIRST.** The VO IS the narration bed; the whole |
| 29 | ad is cut to it. Never plan the cut grid before the VO is locked and Whisper-aligned. |
| 30 | - **Build the EDL from the VO's Whisper word boundaries.** ~30 role-tagged cuts (`hook`, `feature`, |
| 31 | `reaction-insert`, `payoff-hold`, `b-roll-insert`, `landing-page`); snap every cut window to the |
| 32 | word boundaries. The payoff line gets a HELD `payoff-hold` beat (~3× mean shot length). |
| 33 | - **Hard cuts via `filter_complex concat`, not the demuxer.** Trim each clip to its EDL window and |
| 34 | hard-concat with `filter_complex concat` — the `-f concat` demuxer drops the audio when a |
| 35 | drawtext/scale step shaves a clip a few ms below its window. No dissolves. |
| 36 | - **Karaoke-pop captions on every word, throughout.** From the VO's `vo-final.words.json` (VEED |
| 37 | Whisper preset, bold yellow), on every word; re-spell brand tokens Whisper mishears against the |
| 38 | locked script ("synbiotic" over "symbiotic"; keep "I'ma" verbatim) — never edit the script to |
| 39 | match Whisper. Captions are suppressed over the end card. If VEED mis-captions a brand token, |
| 40 | hand-patch that sentence with local ASS karaoke. |
| 41 | - **Product B-roll breaks up the talking head.** Capsule macro, unboxing, and a landing-page |
| 42 | scroll are interspersed with the creator cuts. The landing-page scroll is FFmpeg **zoompan** over |
| 43 | a Playwright-rendered PNG — **not** an i2v clip (i2v hallucinates the UI). |
| 44 | - **VO over a ducked bed.** Mix the optional instrumental bed sidechain-ducked UNDER the VO |
| 45 | (−20dB, 20:1) so the VO stays clearly on top; the bed can drop in on the payoff beat. |
| 46 | - **End card via the brand's real PNG — never AI-render brand text.** Append the brand's real |
| 47 | end-card PNG (~2s) on the tail, captions suppressed. A diffusion model garbles a wordmark. |
| 48 | - **FFmpeg composite, deterministic, FREE.** Trim-to-EDL, `filter_complex concat`, VO+music mix, |
| 49 | caption burn, landing-page zoompan, end-card append, `loudnorm I=-14` → a 1080×1920 h264+aac |
| 50 | master (~37s). No paid c |