$npx -y skills add gooseworks-ai/goose-skills --skill render-split-screen-creatorAssemble a split-screen creator ad from a config — a two-zone vertical composite where a supplied AI-creator lip-sync take fills the BOTTOM ~48% while real 16:9 product/demo clips run uncropped in the TOP ~52%, each top clip contain-fit with a darkened blurred cover-scale fill of
| 1 | # render-split-screen-creator |
| 2 | |
| 3 | Assemble a **split-screen creator** ad from a config: a two-zone vertical |
| 4 | (1080×1920, 9:16, ~40s) format where an **AI creator talking-head** anchors the |
| 5 | BOTTOM ~48% of the frame and **real 16:9 product/demo clips** run uncropped in |
| 6 | the TOP ~52%, a 3px brand-color divider between the zones. The creator delivers |
| 7 | the whole VO cold-to-camera and each top clip proves the claim its VO line makes. |
| 8 | This capability is the **FREE, deterministic assembly + captions** — the two-zone |
| 9 | composite (contain-fit + blurred-cover fill + divider + creator slice), the |
| 10 | hard-concat, the end card, and the word-level caption burn from the assembled cut. |
| 11 | |
| 12 | `scripts/config.example.json` is the worked example (Perplexity concept-10 |
| 13 | "Bloomberg terminal", ~40s 1080×1920 9:16, 6 scenes + an end card); |
| 14 | `scripts/PIPELINE.md` maps every config block to its source step and |
| 15 | `scripts/README.md` documents the free assembly. |
| 16 | |
| 17 | ## Run |
| 18 | |
| 19 | This is the **FREE, deterministic** assembly + captions stage — it spends |
| 20 | nothing. The paid inputs are separate steps — the VO (`create-vo-elevenlabs`, |
| 21 | ElevenLabs `eleven_v3` with-timestamps, sliced into per-scene windows), the |
| 22 | **photoreal MEDIUM chest-up** AI-creator anchor (`create-image-gpt-image-fal`, |
| 23 | `gpt-image-2`) — shot at a natural webcam distance (headroom + shoulders, real |
| 24 | room), **not** a plain-background close-up headshot (see the anchor note below), and |
| 25 | the whole-VO lip-sync (a **paid VEED Fabric 1.0 @ 720p take — a no-atom step**, |
| 26 | `image_url` = the anchor, `audio_url` = the vo mp3, ~$0.15/sec, ~$5.90 for a 39s |
| 27 | VO; run its calls sequentially, `veed/fabric-1.0` storage-auths 403 under |
| 28 | parallel load). Given the creator lip-sync take + the per-scene VO timing + one |
| 29 | 16:9 top clip per scene + the scene-1 hook graphic + the end-card clip, |
| 30 | `render-split-screen-creator` composites the two zones, hard-concats the scenes, |
| 31 | appends the end card, transcribes the assembled cut, and burns the captions → the |
| 32 | master. Re-cuts reuse the existing VO / lip-sync / clips and cost **$0**. |
| 33 | |
| 34 | ## Contract (the free assembly) |
| 35 | |
| 36 | - **Two-zone split, top ~52% / creator ~48%.** The TOP zone runs the real 16:9 |
| 37 | product/demo clip **contain-fit** (uncropped), the BOTTOM zone is the creator |
| 38 | lip-sync framed **head-to-shoulders**: scale-to-width × a small **ZOOM** (~1.15–1.2) |
| 39 | then crop the zone with a **downward offset** so the face sits upper-middle and the |
| 40 | shoulders enter the bottom. (A plain cover + crop-toward-top shows only the head and |
| 41 | cuts the shoulders — and it can't rescue an anchor that was shot too close; fix the |
| 42 | anchor distance first.) Tune zoom/offset visually against the source video's creator |
| 43 | framing — it's a FREE re-assemble, no VEED re-run. A 3px brand-color divider separates |
| 44 | the zones. Canvas 1080×1920, `top_height` ~998. **Keep every stacked height EVEN** |
| 45 | (998 + 4 divider + 918 = 1920) — libx264 rejects odd dimensions. |
| 46 | - **Anchor = photoreal MEDIUM shot, not a studio headshot.** The lip-sync only looks as |
| 47 | good as the anchor. It must be photoreal/candid (real lived-in room, natural skin |
| 48 | cues), framed chest-up at a natural webcam distance (headroom + shoulders), **not** a |
| 49 | plain-background close-up and **not** a phone-selfie pose copied from another format |
| 50 | (e.g. `ugc-walk-and-talk`). VEED Fabric handles photoreal fine (unlike Seedance). |
| 51 | - **Blurred-cover fill, never black bars.** The top clip's letterbox margins are |
| 52 | filled with a darkened **blurred cover-scale of the same clip** — a flat |
| 53 | charcoal/black bar reads cheap. |
| 54 | - **One claim per scene, shown as it's said.** Each top clip is windowed |
| 55 | (`top_start`/`top_end`) to the on-message segment that proves its VO line. |
| 56 | **Never loop a short clip** — set the window and the assembler speed-fits it to |
| 57 | the scene (looping replays into a sparse/black tail). |
| 58 | - **The creator VO is the entire audio bed — no separate musi |