render-creator-pip-listicle · git:20260718.49347ab · 2026-07-18 · sha256 bcaa7f94c84820d0

render-creator-pip-listicle git:20260718.49347abA

Immutable. This exact content is served forever at /api/v1/blob/bcaa7f94c84820d0.

---
name: render-creator-pip-listicle
description: Assemble a creator picture-in-picture product-listicle ad from a config — per-beat native talking-head clips (voice plus lips generated together, no separate VO) are each cut into TWO shots (creator plus a real-brand UGC clip picture-in-picture top-right plus a bottom product card for ~60%, then a hard switch to a full-frame Ken-Burns product cutaway or a branded PIL text card for ~40%), the creator beat's native audio muxed continuous under both shots while the PiP audio is muted, a persistent title pill (opt-in) plus a counting rank badge burned on the creator shots, all beats hard-concatenated at 30fps, and white 2-ish-word captions in the lower third with a brand-color accent burned last over the stitched master. This is the FREE deterministic assembly stage (Ken-Burns macros plus product cards plus 2-shot PiP composite plus stitch plus captions); the creator anchor and the N native talking clips come from create-image-gpt-image-fal and create-video-fal. Use for the creator-pip-listicle format.
status: active
---

# render-creator-pip-listicle

Assemble a **creator picture-in-picture product listicle** ad from a config: an AI creator counts
down N products in the brand's own voice, and every product beat is a two-shot micro-cut — the
creator on camera with a real-brand UGC clip picture-in-picture top-right + a product card pinned
bottom, then a hard switch to a full-frame product cutaway (a Ken-Burns macro of the real product
photo, or a branded PIL text card). The creator's voice + lips are generated **together, natively**
per beat — there is no separate voiceover. This capability is the **FREE, deterministic assembly** —
the Ken-Burns macros, the product cards, the two-shot PiP composite, the stitch, and the caption
burn.

`scripts/config.example.json` is the worked example (DIBS Beauty "5 products that replaced my whole
makeup bag", ~46s 1080×1920 9:16, a hook + 5 product beats + a CTA); `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 beyond the optional caption
burn. The paid inputs are separate capabilities — the creator anchor (`create-image-gpt-image-fal`,
gpt-image-2 iPhone-candid) and one native Seedance talking clip per beat (`create-video-fal`,
`generate_audio=ON`, the SAME seed across beats so the face holds). Given those native clips + the
brand's real UGC PiP clips + the real product photos + the brand palette,
`render-creator-pip-listicle` builds the Ken-Burns product macros + the product cards, cuts each
product beat into its two shots (creator + PiP + card, then full-frame cutaway), muxes the creator
beat's native audio continuous under both shots, hard-concats all the beats, and burns the captions
last → the master. Re-cuts reuse the existing native clips + overlays and cost **$0**.

## Contract (the free assembly)

- **Native creator audio carries the reel — no separate VO.** Each beat's voice + lips come from
  ONE Seedance take (`generate_audio=ON`); this stage never adds a VO or a lip-sync pass. The
  creator beat's native audio plays **continuous under both shots** of the beat; the b-roll shot is
  silent video and the **PiP audio is muted** (else the voice doubles).
- **Two shots per product beat.** Cut each product beat into (a) creator + PiP top-right + product
  card bottom for ~60% and (b) a full-frame Ken-Burns product cutaway (or PIL text card) + card for
  ~40%, then hard-concat on the cut (targets ≥4 cuts/10s, ≤50% direct-face share). The hook
  front-loads a ~1.6s swipe macro; the CTA is a single creator shot.
- **PiP is the brand's REAL UGC, muted, top-right.** Scale the real UGC clip to ~0.42×0.32 of the
  frame, overlay top-right with a hairline white border, and **strip its audio**. Never
  AI-regenerate the PiP clip.
- **Products are REAL photos — never AI-render the product.** Ken-Burns macros (push-in on the real
  product photo on a soft brand-gradient canvas) + bottom-pinned product cards come from the brand's
  real product photos; a product with no clean photo falls back to a branded PIL text card, never an
  AI product render (i2v mangles the label).
- **Title pill opt-in, rank badge on product beats.** The persistent title pill is opt-in per beat
  (`show_title`, default off); a counting rank badge rides the PiP on product beats.
- **Captions burned LAST, brand-accent.** White 2-ish-word chunks in the lower third with a
  brand-color accent, from the native audio's word timings — the on-screen safety net for brand
  tokens the model may mis-voice. This is the only stage that may spend (~$1). If the host ffmpeg
  lacks libass, render the cues as timed PIL PNG overlays at the same lower-third placement.
- **FFmpeg composite, deterministic, FREE.** Build the Ken-Burns macros + product cards (PIL +
  ffmpeg), overlay the PiP + card + title pill + rank badge, cut each beat into two shots, mux the
  native audio continuous, hard-concat all beats with the concat demuxer @ 30fps / yuv420p → a
  1080×1920 h264+aac master. No paid calls in the composite/stitch, no keys.