Claude Skill

render-narrated-ugc-wardrobe-stitch

Assemble 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

LLM Mart · 0 points · 4 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download gooseworks-ai-goose-skills-skills_ads_capabilities_render-narrated-ugc-wardrobe-stitch-e1592ee.zip · 12 KB
Part of gooseworks-ai/goose-skills — 44 skills

Install

skills CLI npx skills add https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/capabilities/render-narrated-ugc-wardrobe-stitch
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install gooseworks-ai-goose-skills@llmmart
Git git clone https://github.com/gooseworks-ai/goose-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole gooseworks-ai/goose-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

render-narrated-ugc-wardrobe-stitch

Assemble a narrated-UGC "stitch reply" ad from a config: a fast-cut vertical testimonial where a single spoken VO carries a verbatim ~13-sentence reversal-hook monologue over ONE creator across ~5 wardrobe changes in ~3 micro-worlds, interspersed with product B-roll (capsule macro, unboxing, a landing-page scroll), ~30 hard cuts on the VO cadence, closing on a brand end card. This capability is the FREE, deterministic assembly — trim-to-EDL, hard-concat, the VO+music mix, the karaoke-pop caption burn, the landing-page zoompan, and the end-card append.

scripts/config.example.json is the worked example (Bioma "Do NOT buy Bioma Probiotics", ~37s 1080×1920 9:16, ~30 body cuts + a ~2s end card); 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 spoken VO (create-vo-elevenlabs) Whisper-aligned so the WORD BOUNDARIES set the cut grid; one locked creator (create-image-gpt-image-fal anchor + ~5 wardrobe edits chained off the anchor) + 3 world wides + per-cut start-frames (create-image-fal product composites); and one Veo/Seedance i2v clip per cut (create-video-fal). Given the VO + vo-final.words.json + edl.json + one clip per cut + a Playwright landing-page PNG + the brand end-card PNG, render-narrated-ugc-wardrobe-stitch trims each clip to its EDL window, hard-concats on the VO cadence, mixes the VO over the ducked bed, burns the karaoke-pop captions, appends the end card → the master. Re-cuts reuse the existing VO / start-frames / clips and cost $0.

Contract (the free assembly)

  • The spoken VO carries the narrative — lock it FIRST. The VO IS the narration bed; the whole ad is cut to it. Never plan the cut grid before the VO is locked and Whisper-aligned.
  • Build the EDL from the VO's Whisper word boundaries. ~30 role-tagged cuts (hook, feature, reaction-insert, payoff-hold, b-roll-insert, landing-page); snap every cut window to the word boundaries. The payoff line gets a HELD payoff-hold beat (~3× mean shot length).
  • Hard cuts via filter_complex concat, not the demuxer. Trim each clip to its EDL window and hard-concat with filter_complex concat — the -f concat demuxer drops the audio when a drawtext/scale step shaves a clip a few ms below its window. No dissolves.
  • Karaoke-pop captions on every word, throughout. From the VO's vo-final.words.json (VEED Whisper preset, bold yellow), on every word; re-spell brand tokens Whisper mishears against the locked script ("synbiotic" over "symbiotic"; keep "I'ma" verbatim) — never edit the script to match Whisper. Captions are suppressed over the end card. If VEED mis-captions a brand token, hand-patch that sentence with local ASS karaoke.
  • Product B-roll breaks up the talking head. Capsule macro, unboxing, and a landing-page scroll are interspersed with the creator cuts. The landing-page scroll is FFmpeg zoompan over a Playwright-rendered PNG — not an i2v clip (i2v hallucinates the UI).
  • VO over a ducked bed. Mix the optional instrumental bed sidechain-ducked UNDER the VO (−20dB, 20:1) so the VO stays clearly on top; the bed can drop in on the payoff beat.
  • End card via the brand's real PNG — never AI-render brand text. Append the brand's real end-card PNG (~2s) on the tail, captions suppressed. A diffusion model garbles a wordmark.
  • FFmpeg composite, deterministic, FREE. Trim-to-EDL, filter_complex concat, VO+music mix, caption burn, landing-page zoompan, end-card append, loudnorm I=-14 → a 1080×1920 h264+aac master (~37s). No paid calls, no keys.
Files (goose-skills)
  • scripts
    • config.example.json 11.6 KB
      {
        "_comment": "Bioma 'Do NOT buy Bioma Probiotics' narrated-ugc-wardrobe-stitch — THE WORKED EXAMPLE. Copy to config.json and edit. A ~37s (34.8s body + ~2s end card) fast-cut narrated UGC 'stitch reply' where a single synthetic VO carries a verbatim ~13-sentence testimonial (the 'don't buy X... here's why you SHOULD' reversal hook) across ONE creator in 5 wardrobes + ~3 rooms, interspersed with product B-roll (capsule macro, unboxing, landing-page scroll). Pipeline: (1) lock the VO FIRST (ElevenLabs v3 + Whisper word-align — the word boundaries set the cut grid); (2) build a ~30-cut role-tagged EDL from the word boundaries; (3) lock the creator (gpt-image-2 anchor + 5 wardrobe edits chained off the anchor) + 3 world wides; (4) one start-frame per cut (gpt-image-2 creator + product composites + a Playwright landing-page); (5) one Veo 3.1 i2v clip per cut (verb-led, ~4s); (6) trim + filter_complex concat, VO+music sidechain-ducked mix, karaoke-pop captions throughout, brand end-card append. Master 1080x1920 h264+aac, ~36.8s. See scripts/PIPELINE.md for the source scripts.",
        "brand_name": "Bioma",
        "campaign": "Do NOT buy (recreation)",
        "title": "Do NOT buy Bioma Probiotics",
        "width": 1080,
        "height": 1920,
        "fps": 30,
        "aspect_ratio": "9:16",
        "duration_sec": 36.8,
        "body_end_s": 34.8,
        "end_card_hold_s": 2.0,
        "vo": {
          "_comment": "Locked FIRST — the VO + its Whisper WORD BOUNDARIES set the cut grid. Verbatim Whisper transcript of source/source-ad.mp4, locked 2026-06-02. ElevenLabs v3 (Professional Speaker) reads slow; atempo ~1.24x clamps to ~32s. Kept 'I'ma' verbatim (creator-native); locked 'synbiotic' over Whisper's 'symbiotic' homophone. Payoff line 'and just look at my belly.' lands the payoff-hold beat.",
          "provider": "elevenlabs",
          "model": "eleven_v3",
          "voice_id": "Fc5CaIGWKvLHapoOSM2K",
          "script_md": "script/script-locked.md",
          "hook_line": "Do not buy Bioma Probiotics.",
          "payoff_line": "and just look at my belly.",
          "target_duration_s": 30,
          "target_wpm": 180,
          "atempo_expected": 1.24,
          "settings": { "stability": 0.35, "similarity_boost": 0.75, "style": 0.55, "use_speaker_boost": true },
          "outputs": {
            "audio": "audio/vo-final.mp3",
            "word_timings": "audio/vo-final.words.json"
          },
          "sentences": [
            { "n": "S01", "t_in": 0.0, "t_out": 1.8, "role": "hook · pattern-interrupt", "text": "Do not buy Bioma Probiotics." },
            { "n": "S02", "t_in": 1.8, "t_out": 4.8, "role": "feature", "text": "They said it would reduce bloating and improve digestion." },
            { "n": "S03", "t_in": 4.8, "t_out": 7.4, "role": "feature", "text": "Okay, but they did not warn me how fast it would work." },
            { "n": "S04", "t_in": 7.4, "t_out": 10.5, "role": "feature · b-roll-insert", "text": "I've been taking these little capsules daily for only one week," },
            { "n": "S05", "t_in": 10.5, "t_out": 12.8, "role": "payoff-hold", "text": "and just look at my belly." },
            { "n": "S06", "t_in": 12.8, "t_out": 14.8, "role": "reaction-insert", "text": "Plus the puffiness in my face is gone." },
            { "n": "S07", "t_in": 14.8, "t_out": 18.0, "role": "feature · b-roll-insert", "text": "The targeted synbiotic formula in here works like magic." },
            { "n": "S08", "t_in": 18.0, "t_out": 20.5, "role": "feature", "text": "And I thought it was going to take at least three months," },
            { "n": "S09", "t_in": 20.5, "t_out": 22.5, "role": "feature", "text": "but I started seeing changes after week one." },
            { "n": "S10", "t_in": 22.5, "t_out": 25.5, "role": "reaction-insert", "text": "Y'all keep doing your crunches," },
            { "n": "S11", "t_in": 25.5, "t_out": 26.5, "role": "feature", "text": "I'ma keep taking my Bioma." },
            { "n": "S12", "t_in": 26.5, "t_out": 30.0, "role": "b-roll-insert · landing-page", "text": "Oh, and they're running a huge sale with free shipping and free gifts with your first order." },
            { "n": "S13", "t_in": 30.0, "t_out": 32.5, "role": "feature · multi-bottle unboxing", "text": "I put the link below — go grab yours now before they're sold out again." }
          ]
        },
        "character": {
          "_comment": "ONE recurring UGC creator, locked once. `descriptor` threads VERBATIM (byte-identical block) into every creator start-frame; the anchor is passed as the ref (--anchor) on EVERY wardrobe/pose edit so identity holds across all 5 wardrobe changes. Chain every wardrobe off the CLEAN anchor.",
          "name": "hailey",
          "method": "anchor-ref",
          "max_drift": 0.05,
          "descriptor": "28-year-old white-European woman, fit athletic build, 5'6, long blonde beach-wave hair center-parted at mid-back length, natural un-retouched skin with visible pores and subtle freckling, slightly asymmetrical features, natural full brows, minimal makeup. Small turquoise athletic wristband on right wrist.",
          "framing": "iPhone 14 front-cam selfie video still, slightly grainy and slightly soft, handheld with slight natural motion blur, real iPhone color science, slight wide-angle edge distortion, warm natural light, NOT sharp NOT studio NOT glam, photojournalistic UGC.",
          "anchor": "generated/character-lock/anchor-portrait.png",
          "wardrobes": [
            "generated/character-lock/wardrobes/w1.png",
            "generated/character-lock/wardrobes/w2.png",
            "generated/character-lock/wardrobes/w3.png",
            "generated/character-lock/wardrobes/w4.png",
            "generated/character-lock/wardrobes/w5.png"
          ],
          "wardrobe_count": 5,
          "_note_w2": "W2 (gray tee + sweats, midriff MS, hem-lift pose) is the payoff-hold belly-reveal wardrobe (cut s11)."
        },
        "worlds": {
          "_comment": "3 world wides, NO creator — the establishing rooms the creator start-frames composite into.",
          "count": 3,
          "briefs": ["bedroom / mirror room", "kitchen counter", "bathroom / vanity"],
          "outputs": [
            "generated/world-lock/world1/world1-1-establishing.png",
            "generated/world-lock/world2/world2-1-establishing.png",
            "generated/world-lock/world3/world3-1-establishing.png"
          ]
        },
        "product": {
          "_comment": "The real Bioma bottle hero drives the B-roll composites (capsule pile macro, single-capsule, label, unboxing flatlay). Ground on the real hero — never an AI-hallucinated bottle.",
          "hero_png": "../../brand-assets/product-photos/bioma-probiotics-bottle.png",
          "unboxing_ref": "../../brand-assets/product-photos/bioma-multi-bottle-unboxing.png"
        },
        "landing_page": {
          "_comment": "The sale/CTA scroll cuts (s24-s26) are a Playwright render of the real Bioma landing page (2160x3840 @ 2x DSR) -> FFmpeg zoompan. NOT i2v. Zoom targets: wide -> Best Value $26.14 card -> Order-now button.",
          "url": "https://www.bioma.health/",
          "render_png": "assets/overlays/landing-page.png",
          "method": "playwright + ffmpeg-zoompan"
        },
        "keyframe_engine": {
          "creator_model": "gpt-image-2",
          "broll_model": "nano-banana",
          "provider": "fal",
          "aspect_ratio": "9:16",
          "batch_size": 3,
          "character_ref": "pass the locked anchor + the matching wardrobe as media refs on every creator start-frame"
        },
        "clip_engine": {
          "provider": "fal",
          "model": "veo3_1",
          "alternative": "seedance_2_0",
          "duration_sec": 4,
          "resolution": "1080p",
          "batch_size": 3,
          "motion_opener": "VERB-LED (never camera-led): the creator/product does a specific action, THEN any secondary motion. Stable start pose, action in the prompt. NO camera 'slow push-in' opener (reads static), NO morphing, single person only.",
          "_note": "Veo 3.1 via FAL @1080p, ~4s/clip. Cuts 24-26 (landing-page scroll) are FFmpeg zoompan, not i2v. gen_veo_retries.sh re-rolls any drifted clip off its clean start-frame."
        },
        "edl": {
          "_comment": "30 role-tagged cuts built from the VO word boundaries (build_edl.py -> edl.json). archetype reaction-montage-explainer, caption_family karaoke-pop, pacing_profile front-load-hold-decelerate. The payoff-hold (s11) is the held reveal beat (~3x mean shot length). A representative subset is inlined here; the full 30-cut grid is edl.json.",
          "schema_version": "1.0",
          "cut_count": 30,
          "hook_type": "claim-caption",
          "caption_family": "karaoke-pop",
          "pacing_profile": "front-load-hold-decelerate",
          "payoff_hold_id": "s11-payoff-belly-reveal",
          "source": "edl.json",
          "timeline_sample": [
            { "id": "s01-hook-bottle-mcu", "role": "hook", "t_in": 0.03, "t_out": 0.39, "source": "generate", "image_refs": ["anchor", "world1-establishing", "product-hero"] },
            { "id": "s02-hook-hand-bottle-ecu", "role": "hook", "t_in": 0.39, "t_out": 2.27, "source": "generate", "image_refs": ["product-hero"] },
            { "id": "s05-they-said-w4-hands", "role": "feature", "t_in": 3.99, "t_out": 5.29, "source": "generate", "image_refs": ["anchor", "w4", "world2-establishing"] },
            { "id": "s08-capsule-pile-ecu", "role": "b-roll-insert", "t_in": 10.73, "t_out": 11.37, "source": "generate", "image_refs": ["product-hero"] },
            { "id": "s11-payoff-belly-reveal", "role": "payoff-hold", "t_in": 14.21, "t_out": 15.65, "source": "generate", "image_refs": ["anchor", "w2", "world1-establishing"] },
            { "id": "s21-changes-mirror-3q", "role": "feature", "t_in": 25.95, "t_out": 28.27, "source": "generate", "image_refs": ["anchor", "w3", "world1-establishing"] },
            { "id": "s24-sale-landingpage-ws", "role": "landing-page", "t_in": 31.49, "t_out": 33.03, "source": "landing-page", "image_refs": ["landing-page-png"] },
            { "id": "s25-sale-bestvalue-zoom", "role": "landing-page", "t_in": 33.03, "t_out": 34.69, "source": "landing-page", "image_refs": ["landing-page-png"] },
            { "id": "s27-link-unboxing-flatlay", "role": "b-roll-insert", "t_in": 36.81, "t_out": 37.53, "source": "generate", "image_refs": ["unboxing-ref"] }
          ]
        },
        "captions": {
          "_comment": "Karaoke-pop captions on EVERY word, throughout (VEED Whisper preset, bold yellow). Built from vo-final.words.json. Re-spell brand tokens Whisper mishears against the locked script: 'synbiotic' (not 'symbiotic'/'cymbiotic'); keep 'I'ma' verbatim. If VEED falls back to a wrong spelling on S07, hand-patch that sentence with local ASS karaoke.",
          "style": "karaoke-pop",
          "preset": "veed-whisper",
          "position": "center",
          "base_color": "#FFFFFF",
          "accent_color": "#FFE800",
          "font": "bold",
          "source": "audio/vo-final.words.json",
          "on_every_word": true,
          "throughout": true,
          "respell_tokens": { "symbiotic": "synbiotic", "cymbiotic": "synbiotic" }
        },
        "audio_mix": {
          "_comment": "The VO is the narration bed; the whole ad is cut to it. An instrumental music bed is sidechain-ducked UNDER the VO (-20dB, 20:1), dropping in at 14.21s (the payoff-hold). VO stays clearly on top. End card appended after the body.",
          "vo": "audio/vo-final.mp3",
          "music": "audio/music/bed.mp3",
          "music_optional": true,
          "ducking": "sidechain-20:1",
          "music_gain_db": -20,
          "music_drop_s": 14.21,
          "loudness_lufs": -14
        },
        "end_card": {
          "_comment": "The real Bioma end-card PNG appended ~2s on the tail — NEVER AI-rendered text. Captions suppressed over the card.",
          "brand_png": "../../brand-assets/bioma-end-card.png",
          "hold_sec": 2.0,
          "suppress_captions": true
        },
        "post_production": {
          "vo": { "default": "on", "note": "the synthetic VO IS the narration; the whole ad is cut to its word timings" },
          "music": { "default": "on", "note": "instrumental bed sidechain-ducked under the VO (-20dB, 20:1), VO clearly on top" },
          "captions": { "default": "on", "note": "karaoke-pop captions on every word, throughout, re-spelled against the locked script" },
          "end_card": { "default": "on", "note": "the real Bioma end-card PNG appended ~2s on the tail, captions suppressed, never AI-rendered" }
        }
      }
      
    • PIPELINE.md 6.1 KB
      # Pipeline — narrated-ugc-wardrobe-stitch
      
      How `config.example.json` maps to the real production steps. This capability is the FREE assembly;
      the worked example (Bioma "Do NOT buy Bioma Probiotics") was produced by the video-orchestrator's
      per-state steps plus per-project drivers that live in
      `clients/bioma/ad-runs/run-12-narrated-do-not-buy-recreation/working/` (`render_and_align_vo.sh`,
      `build_edl.py`, `gen_anchors_and_worlds.sh`, `gen_wardrobe_variants.sh`, `gen_startframes_*.sh`,
      `gen_veo_*.sh`, `stitch_full_master.sh`). Reference those directly, or drive the whole run via
      `video-orchestrator-with-control-plane`.
      
      The seven steps run **in order** because each depends on the last: the VO sets the timeline (via
      its Whisper word boundaries), the word boundaries build the EDL, the EDL drives the cut count, the
      locked creator + worlds drive the wardrobe edits, the wardrobes + worlds seed the per-cut
      start-frames, the start-frames seed the i2v clips, and assembly stitches all of it with the VO,
      captions, and end card.
      
      ## Field → source-script map
      
      | Config field | Phase | Source step / script (in the run) | Paid? |
      |---|---|---|---|
      | `vo.script_md`, `vo.voice_id`, `vo.settings`, `vo.model` | 1 VO | ElevenLabs v3 render of the locked testimonial | **PAID** |
      | `vo.outputs.word_timings` | 1 VO | Whisper word-align (`transcribe-audio-fal`) → `audio/vo-final.words.json` | ~$0.10 (Whisper) |
      | `edl.*`, `edl.timeline[].t_in/t_out/role/source` | 2 EDL | `working/build_edl.py` from the VO word boundaries → `edl.json` (~30 cuts) | free |
      | `character.descriptor`, `character.anchor`, `worlds[]` | 3 Creator/Worlds | `working/gen_anchors_and_worlds.sh` → gpt-image-2 anchor + 3 world wides | **PAID** |
      | `character.wardrobes` | 3 Creator | `working/gen_wardrobe_variants.sh` → 5 wardrobe edits chained off the anchor | **PAID** |
      | `edl.timeline[].source` start-frames, `keyframe_engine` | 4 Start-frames | `working/gen_startframes_*.sh` → gpt-image-2 (creator) + product composites | **PAID** |
      | `landing_page.render_png`, `landing_page.method` | 4 Start-frames | Playwright render of the real page → `assets/overlays/landing-page.png` | free (no gen atom) |
      | `clip_engine` | 5 Clips | `working/gen_veo_*.sh` → Veo 3.1 i2v @1080p → `clips/scene-NN.mp4` | **PAID** |
      | `captions` | 6 Captions | karaoke-pop from `vo-final.words.json` (VEED Whisper preset), re-spelled against the locked script | free (paid VEED burn) |
      | `landing_page` scroll cuts | 6 Assembly | `working/stitch_full_master.sh` FFmpeg zoompan over `landing-page.png` (NOT i2v) | free |
      | `audio_mix`, `end_card`, `edl.timeline[].t_in/t_out` | 6 Assembly | `working/stitch_full_master.sh` (trim + `filter_complex concat`, VO+music mix, caption burn, end-card append) → `edits/master-final-v4.mp4` | free |
      
      ## 1. VO → ElevenLabs v3 + Whisper word-align  (config: `vo`)  [PAID]
      
      **Lock the VO FIRST — it sets the timeline.** Render the verbatim ~13-sentence testimonial with
      ElevenLabs v3 (`vo.voice_id` + `vo.settings`), atempo-clamp to the target pace (~1.24× → ~30–32s),
      then Whisper word-align → `audio/vo-final.mp3` + `audio/vo-final.words.json`. The word boundaries
      set the cut grid. Keep the testimonial verbatim ("I'ma" kept; "synbiotic" locked over Whisper's
      "symbiotic").
      
      ## 2. EDL → `working/build_edl.py`  (config: `edl`)  [FREE]
      
      From the VO word boundaries, build ~30 role-tagged cuts → `edl.json` (`hook`, `feature`,
      `reaction-insert`, `payoff-hold`, `b-roll-insert`, `landing-page`). The payoff line gets a HELD
      `payoff-hold` beat. Each cut binds its start-frame `source` + `image_refs`.
      
      ## 3. Creator + worlds → gpt-image-2 anchor + wardrobes + world wides  (config: `character`, `worlds`)  [PAID]
      
      `gen_anchors_and_worlds.sh` fires the gpt-image-2 anchor with the verbatim `character.descriptor` +
      3 world wides (no creator). `gen_wardrobe_variants.sh` chains 5 wardrobe edits off the anchor
      (`--anchor` on every call so identity locks). Re-roll off the CLEAN anchor on any drift.
      
      ## 4. Per-cut start-frames → gpt-image-2 + product composites + Playwright  (config: `edl.timeline[].source`, `keyframe_engine`, `landing_page`)  [PAID]
      
      Per cut, one start-frame. Creator cuts = gpt-image-2/edit off the matching wardrobe + world wide.
      Product B-roll = capsule/unboxing composites grounded on the real `product.hero_png`. Landing-page
      cuts = a Playwright render → `assets/overlays/landing-page.png` (the scroll is FFmpeg zoompan in
      assembly — NOT i2v). Review before step 5.
      
      ## 5. Clips → Veo 3.1 i2v  (config: `clip_engine`)  [PAID]
      
      Per start-frame, prompt = `clip_engine.motion_opener` + the cut's action; Veo 3.1 via FAL i2v, ~4s,
      9:16, 1080p, off the clean start-frame → `clips/scene-NN.mp4`. **Lead with the VERB, not the
      camera** — camera-led openers read static; use STABLE-POSE start-frames + put the action in the
      prompt (mid-action keyframes freeze). The landing-page-scroll cuts are FFmpeg zoompan, NOT i2v.
      
      ## 6. Captions + end card + assembly → `working/stitch_full_master.sh`  (config: `captions`, `audio_mix`, `end_card`)
      
      - Captions — karaoke-pop from `vo-final.words.json` (VEED Whisper preset, bold yellow), on every
        word, throughout. Re-spell brand tokens Whisper mishears against the locked script; suppress over
        the end card. If the host ffmpeg lacks libass, render the cues as timed PIL PNG overlays composited
        with ffmpeg `overlay=…:enable='between(t,st,en)'` — same placement, no libass dependency.
      - Assembly (`stitch_full_master.sh`) — trim each clip to its EDL window, build the landing-page
        scroll cuts via FFmpeg zoompan over `landing-page.png`, **`filter_complex concat`** all ~30
        trimmed cuts (NOT the demuxer — it drops audio on a duration mismatch), mix the VO with an
        optional sidechain-ducked instrumental bed (−20dB, 20:1, `music_drop_s` 14.21) so the VO stays on
        top, burn the caption ASS, append the brand's real end-card PNG (~2s), `loudnorm I=-14` →
        `edits/master-final.mp4` (1080×1920, 30fps, h264+aac, ~36.8s).
      
      Re-cuts (new caption timing, re-timed windows, an end-card swap) reuse the existing
      VO/start-frames/clips and cost **$0** — only steps 1, 3, 4, 5 spend.
      
    • README.md 3.8 KB
      # render-narrated-ugc-wardrobe-stitch scripts — the FREE assembly
      
      `render-narrated-ugc-wardrobe-stitch` is the **deterministic, $0 assembly stage** of the
      narrated-UGC "stitch reply" format. The paid stages (the spoken VO, the creator lock, the ~5
      wardrobe edits + 3 world wides, the ~30 per-cut start-frames, the ~30 Veo/Seedance i2v clips) are
      separate capabilities — `create-vo-elevenlabs`, `create-image-gpt-image-fal`, `create-image-fal`,
      `create-video-fal`. This capability spends nothing — it takes the VO + `vo-final.words.json` +
      `edl.json` + one clip per cut + a Playwright landing-page PNG + the brand end-card PNG and stitches
      the finished master. Re-cuts (new caption timing, re-timed windows, an end-card swap) reuse the
      existing VO / start-frames / clips and cost **$0**.
      
      `config.example.json` is the worked example (Bioma "Do NOT buy Bioma Probiotics", ~37s 1080×1920).
      `PIPELINE.md` maps every config block to its source step. This README documents the FREE assembly
      pieces that `render-narrated-ugc-wardrobe-stitch` owns.
      
      ## 1. Build the EDL from the VO's word boundaries
      
      The VO is Whisper word-aligned (`vo-final.words.json`), and `build_edl.py` builds ~30 role-tagged
      cuts from those word boundaries → `edl.json`. Roles — `hook`, `feature`, `reaction-insert`,
      `payoff-hold`, `b-roll-insert`, `landing-page`. The payoff line gets a HELD `payoff-hold` beat
      (~3× mean shot length). One shot per cut; snap every cut window to the word boundaries so every
      hard cut lands on the narration cadence.
      
      ## 2. Trim-to-EDL + hard-concat via `filter_complex concat`
      
      Assembly trims each body clip to its EDL window and hard-concats **on the VO cadence** with
      `filter_complex concat` — **never the `-f concat` demuxer**, which drops the audio when a
      drawtext/scale step shaves a clip a few ms below its window. No dissolves. The payoff clip is timed
      so the payoff line lands on the held reveal beat.
      
      ## 3. Product B-roll — landing-page scroll is zoompan, not i2v
      
      Capsule macro, unboxing, and a landing-page scroll break up the talking-head cuts the way a real
      stitch reply does. The landing-page scroll is FFmpeg **zoompan** over a Playwright-rendered PNG (the
      Bioma run rendered `landing-page.png` at 2160×3840 and zoomed wide → best-value card → order button)
      — it is **not** an i2v clip, because i2v hallucinates the UI. The capsule/unboxing composites come
      from the paid start-frame stage grounded on the real product hero.
      
      ## 4. Karaoke-pop captions — from the VO word timings, re-spelled against the locked script
      
      Captions come from the VO's `vo-final.words.json` (VEED Whisper preset, bold yellow), on every word,
      throughout. Re-spell brand tokens Whisper mishears against the locked script ("synbiotic" over
      "symbiotic"; keep "I'ma" verbatim) — never edit the script to match Whisper. Captions are suppressed
      over the end card. If the host ffmpeg lacks libass (no `subtitles`/`ass` filter), render the cues as
      timed PIL PNG overlays composited with ffmpeg `overlay=…:enable='between(t,st,en)'` instead — same
      placement, no libass dependency.
      
      ## 5. VO + music mix + end card + composite
      
      - **Audio:** the VO IS the narration bed (the whole ad is cut to it). Mix the VO over an optional
        instrumental bed sidechain-ducked UNDER the VO (−20dB, 20:1) so the VO stays clearly on top; the
        bed can drop in on the payoff beat.
      - **End card:** append the brand's real end-card PNG (~2s) on the tail, captions suppressed. The
        brand text is **never** AI-rendered — a diffusion model garbles a wordmark.
      - **Composite:** FFmpeg trims each cut to its window, builds the landing-page zoompan cuts,
        `filter_complex concat`s all ~30 cuts, mixes the VO + bed, burns the caption ASS, appends the end
        card, and `loudnorm I=-14` → a 1080×1920 h264 + aac master (~37s). Deterministic, no paid calls,
        no keys.
      
  • tests
    • smoke-test.md 1.6 KB
      # Smoke Test
      
      Given the spoken VO (mp3 + Whisper word timings), a ~30-cut role-tagged EDL built from those word
      boundaries, one i2v clip per cut (ONE recurring locked creator across ~5 wardrobes in ~3 worlds,
      plus product B-roll), a Playwright landing-page PNG, and the brand end-card PNG,
      `render-narrated-ugc-wardrobe-stitch` assembles the master: trim each clip to its EDL window,
      hard-concat on the VO cadence via `filter_complex concat`, burn karaoke-pop captions, mix the VO
      over the ducked bed, close on the brand end-card PNG → 1080×1920 h264+aac (~37s).
      
      Pass when the assembly runs to a valid MP4 and:
      - one shot per EDL cut, hard-cut on the VO cadence via `filter_complex concat` (no crossfades, no
        demuxer — the demuxer drops audio on a duration mismatch); the ONE locked creator holds across
        all ~5 wardrobes;
      - the payoff line lands on the held `payoff-hold` beat;
      - captions are karaoke-pop on every word, throughout, re-spelled against the locked script
        ("synbiotic" over "symbiotic"), suppressed over the end card;
      - the product B-roll reads — capsule macro, unboxing, and a landing-page scroll rendered as FFmpeg
        zoompan over the Playwright PNG (not i2v);
      - the VO plays clearly on top of the optional sidechain-ducked instrumental bed (−20dB, 20:1) — VO
        not buried;
      - the end card is the brand's real PNG (never AI-rendered text), song/VO carrying to the tail with
        no silent tail;
      - **no paid call is made** — the VO, creator, start-frames, and clips come from the paid
        capabilities (create-vo-elevenlabs / create-image-gpt-image-fal / create-image-fal /
        create-video-fal); this assembly is $0 and a re-cut reuses the existing assets.
      
  • SKILL.md 4.9 KB
    ---
    name: render-narrated-ugc-wardrobe-stitch
    description: Assemble 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 boundaries and hard-concatenated via filter_complex concat (never the demuxer, which drops audio on a duration mismatch), the VO mixed over an optional sidechain-ducked instrumental bed (−20dB, 20 to 1) so the VO stays on top, karaoke-pop captions burned on every word throughout (VEED Whisper preset, re-spelled against the locked script), a landing-page scroll rendered as FFmpeg zoompan over a Playwright PNG (not i2v), and closed on the brand's real end-card PNG — never AI-rendered text. This is the FREE deterministic assembly stage (trim-to-EDL + filter_complex concat + VO and music mix + karaoke captions + landing-page zoompan + end-card append); the VO, creator, start-frames, and clips come from create-vo-elevenlabs / create-image-gpt-image-fal / create-image-fal / create-video-fal. Use for the narrated-ugc-wardrobe-stitch format.
    status: active
    ---
    
    # render-narrated-ugc-wardrobe-stitch
    
    Assemble a **narrated-UGC "stitch reply"** ad from a config: a fast-cut vertical testimonial
    where a single spoken VO carries a verbatim ~13-sentence reversal-hook monologue over ONE creator
    across ~5 wardrobe changes in ~3 micro-worlds, interspersed with product B-roll (capsule macro,
    unboxing, a landing-page scroll), ~30 hard cuts on the VO cadence, closing on a brand end card.
    This capability is the **FREE, deterministic assembly** — trim-to-EDL, hard-concat, the VO+music
    mix, the karaoke-pop caption burn, the landing-page zoompan, and the end-card append.
    
    `scripts/config.example.json` is the worked example (Bioma "Do NOT buy Bioma Probiotics", ~37s
    1080×1920 9:16, ~30 body cuts + a ~2s end card); `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 spoken VO (`create-vo-elevenlabs`) Whisper-aligned so the WORD
    BOUNDARIES set the cut grid; one locked creator (`create-image-gpt-image-fal` anchor + ~5 wardrobe
    edits chained off the anchor) + 3 world wides + per-cut start-frames (`create-image-fal` product
    composites); and one Veo/Seedance i2v clip per cut (`create-video-fal`). Given the VO +
    `vo-final.words.json` + `edl.json` + one clip per cut + a Playwright landing-page PNG + the brand
    end-card PNG, `render-narrated-ugc-wardrobe-stitch` trims each clip to its EDL window, hard-concats
    on the VO cadence, mixes the VO over the ducked bed, burns the karaoke-pop captions, appends the
    end card → the master. Re-cuts reuse the existing VO / start-frames / clips and cost **$0**.
    
    ## Contract (the free assembly)
    
    - **The spoken VO carries the narrative — lock it FIRST.** The VO IS the narration bed; the whole
      ad is cut to it. Never plan the cut grid before the VO is locked and Whisper-aligned.
    - **Build the EDL from the VO's Whisper word boundaries.** ~30 role-tagged cuts (`hook`, `feature`,
      `reaction-insert`, `payoff-hold`, `b-roll-insert`, `landing-page`); snap every cut window to the
      word boundaries. The payoff line gets a HELD `payoff-hold` beat (~3× mean shot length).
    - **Hard cuts via `filter_complex concat`, not the demuxer.** Trim each clip to its EDL window and
      hard-concat with `filter_complex concat` — the `-f concat` demuxer drops the audio when a
      drawtext/scale step shaves a clip a few ms below its window. No dissolves.
    - **Karaoke-pop captions on every word, throughout.** From the VO's `vo-final.words.json` (VEED
      Whisper preset, bold yellow), on every word; re-spell brand tokens Whisper mishears against the
      locked script ("synbiotic" over "symbiotic"; keep "I'ma" verbatim) — never edit the script to
      match Whisper. Captions are suppressed over the end card. If VEED mis-captions a brand token,
      hand-patch that sentence with local ASS karaoke.
    - **Product B-roll breaks up the talking head.** Capsule macro, unboxing, and a landing-page
      scroll are interspersed with the creator cuts. The landing-page scroll is FFmpeg **zoompan** over
      a Playwright-rendered PNG — **not** an i2v clip (i2v hallucinates the UI).
    - **VO over a ducked bed.** Mix the optional instrumental bed sidechain-ducked UNDER the VO
      (−20dB, 20:1) so the VO stays clearly on top; the bed can drop in on the payoff beat.
    - **End card via the brand's real PNG — never AI-render brand text.** Append the brand's real
      end-card PNG (~2s) on the tail, captions suppressed. A diffusion model garbles a wordmark.
    - **FFmpeg composite, deterministic, FREE.** Trim-to-EDL, `filter_complex concat`, VO+music mix,
      caption burn, landing-page zoompan, end-card append, `loudnorm I=-14` → a 1080×1920 h264+aac
      master (~37s). No paid calls, no keys.
    
  • skill.meta.json 347 B
    {
      "slug": "render-narrated-ugc-wardrobe-stitch",
      "category": "capabilities",
      "domain": "ads",
      "tags": [
        "ads"
      ],
      "installation": {
        "base_command": "npx goose-skills install render-narrated-ugc-wardrobe-stitch",
        "supports": [
          "claude",
          "cursor",
          "codex"
        ]
      },
      "requires_skills": [
        "watch"
      ]
    }
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related