$npx -y skills add gooseworks-ai/goose-skills --skill render-multiworldAssemble a silent, music-led 3-world product-tour ad — trim and hard-cut-concat the per-world WIDE-arrival + top-down-macro clips, composite the HTML/Playwright brand end card ("FIND YOUR DAILY." + handwritten scent labels + arrows) over an AI flat-lay background, and mux one mus
| 1 | # render-multiworld |
| 2 | |
| 3 | Assemble a silent, music-led "multi-world product tour" ad (≈27s, 9:16) — a tour of three |
| 4 | distinct "third-place" worlds, one per product/scent, that lands on a Pinterest-style brand |
| 5 | end card. Each world is a **two-shot pair**: a ~4.5s WIDE kinetic-calm ARRIVAL (the |
| 6 | environment dominates, the bottle stays small) hard-cutting to a ~3.5s top-down MACRO |
| 7 | product MOMENT (the sealed bottle nested with its botanical companion). Scent identity is |
| 8 | carried by the **world + botanical companion**, not by bottle color. No VO, no captions in |
| 9 | the scenes — one music bed carries the whole thing. |
| 10 | |
| 11 | This capability is the **FREE, deterministic assembler**. The paid steps — the six |
| 12 | per-world clips, the AI flat-lay end-card background, the ElevenLabs music bed — are |
| 13 | separate capabilities (see the gap below for the clips); the recipe orchestrates and gates |
| 14 | them. |
| 15 | |
| 16 | ## Run |
| 17 | 1. **Trim clips (FFmpeg, FREE)** — trim each per-world clip to its `scene_grid[].duration_sec` |
| 18 | (arrival 4.5 / macro 3.5), re-encode to the master spec (720×1280, 24fps, yuv420p, |
| 19 | scale+pad, audio stripped). Trimming the macro so the top-down portion dominates also |
| 20 | hides any label misrender at the clip's upright tilt extreme. |
| 21 | 2. **End card (Playwright/HTML, FREE)** — screenshot `end_card.html` over the AI flat-lay |
| 22 | BACKGROUND, then FFmpeg-encode to a `dwell_sec` (3.0s) static clip. Headline |
| 23 | ("FIND YOUR DAILY.", Inter 900), one handwritten Caveat scent label + hand-drawn SVG |
| 24 | arrow per bottle, Playfair wordmark + URL. **End-card text is HTML, NEVER AI-rendered** — |
| 25 | the AI step produces the background only. |
| 26 | 3. **Hard-cut concat (FFmpeg, FREE)** — concat the six trimmed clips in scene order |
| 27 | (S01 arrival → S02 macro → … → S06 macro) + the end-card clip. Hard cuts (no dissolves), |
| 28 | normalized to one fps/codec first so concat-copy is safe. |
| 29 | 4. **Music mux + web encode (FFmpeg, FREE)** — mux the single instrumental bed onto the |
| 30 | silent concat with `afade` in/out + `loudnorm I=-16:TP=-1.5:LRA=11`, AAC 192k, clamped to |
| 31 | 27.0s, explicit single-audio map so no silent scene-track leaks in → the H.264 (+ AAC) |
| 32 | 720×1280 master. |
| 33 | |
| 34 | ## Contract |
| 35 | - Deterministic + FREE (Playwright + PIL/HTML + FFmpeg); no paid calls, no AI-rendered |
| 36 | end-card text. Iterate the cut for free by re-running the assembly. |
| 37 | - **Silent, music-led** — no VO, no captions during the scenes; on-screen text appears |
| 38 | ONLY on the end card, HTML-composited. |
| 39 | - Per world = WIDE arrival (bottle small, environment dominant) → top-down macro (product + |
| 40 | botanical, no hands). Hard cuts between scenes; end card is a static hold with legible |
| 41 | HTML text; music starts at t=0 and fades the tail. |
| 42 | - **Sealed-bottle rule** is enforced at QC — trim/concat can't fix an open-cap or spraying |
| 43 | clip; that's a re-roll (paid), not an assembly fix. Identity via world + botanical, never |
| 44 | bottle color. |
| 45 | - The template recipe (DB) supplies the per-brand config (worlds, palettes, botanicals, |
| 46 | prompts, end-card copy, music mood); this capability is the generic assembler. |
| 47 | |
| 48 | ## Gaps / routing notes |
| 49 | - **The six per-world clips need a Higgsfield-proxy capability that does not exist.** The |
| 50 | source molecule fires them through **Higgsfield Marketing Studio** |
| 51 | (`marketing_studio_video/product_showcase`) grounded on imported product UUIDs, with the |
| 52 | sealed-bottle safety block front-loaded on every prompt. `create-video-fal` is a FAL i2v |
| 53 | proxy — a different provider and job shape — so it cannot serve this step. Wiring the clip |
| 54 | step to templates-as-data requires a **`create-video-higgsfield`** proxy (Marketing Studio |
| 55 | `product_showcase`, imported-product grounding, per-prompt safety block) that **does not |
| 56 | exist yet**. Until it lands, the clips are generated via the Higgsfield Marketing Studio |
| 57 | path directly (CLI/MCP) and that step is **not a fetchable capability**. |
| 58 | - **The end-card background** is an AI flat-lay render (text-free, all three sealed bottles + |
| 59 | botanicals) that in prod routes through **create-image-fal** (NB2); only the HTML text |
| 60 | overlay + encode run locally as FREE assembly. |
| 61 | - **The music** is a paid ElevenLabs call that in prod routes through |
| 62 | **create-music-elevenlabs**; only the loudnorm + fade + mux run locally as FREE assembly. |
| 63 | |
| 64 | See `scripts/PIPELINE.md` for the full config-field → source-step map and `scripts/README.md` |
| 65 | for the FREE-assembly detail. |