Assemble an iMessage chat-reveal video ad from a thread JSON — one continuous Playwright recording of the conversation animating in (typing dots, composer typing, bubble pops, auto-scroll) crossfaded into a designed end card, with iMessage send/receive SFX and an optional ducked music bed. FREE assembly (Playwright + ffmpeg); the recipe supplies the per-brand thread + product + end-card config and gates the paid product-image/music calls to their own capabilities. Use for the imessage-chat format.
The free renderer for the imessage-chat video ad format — a texting-thread reveal where a friend-to-friend conversation animates in on a phone (typing indicators, composer typing, bubble pops, smooth auto-scroll) and lands on a designed brand end card. Deterministic Playwright + ffmpeg assembly; no generative video of the UI, so bubble text and the wordmark stay pixel-crisp.
This capability is the generic assembler — the template recipe (DB) supplies the
per-brand thread, product image, and end_card config, and gates the paid
calls (product image → create-image-fal, music bed → create-music-elevenlabs) to
their own capabilities. It bundles the iMessage-mockup HTML generator + the
send/receive SFX so a chat render is self-contained and $0.
.attachment-meta).
The fix is baked into record-chat.js's injected style, theme-aware.spec
lines in config.example.json). The renderer honors the thread it's given.render-end-card.js + end-card.template.html), not a bare logo.cd scripts && npm install # once — installs Playwright for the recorders
node record-chat.js --config config.json --out-dir <work> # → master-chat.mp4 + .sfx.json
node render-end-card.js --config config.json --out-dir <work> # → scene-end-endcard.mp4
bash stitch.sh --chat <work>/master-chat.mp4 --end <work>/scene-end-endcard.mp4 \
--sfx <work>/master-chat.sfx.json --out <work>/master-final.mp4 \
[--music <work>/music-bed.mp3] [--also-1x1]record-chat.js — reads config.json (thread + theme + geometry +
optional background_image), derives a believable per-message timeline
(received bubbles pop after an optional …; sent bubbles are typed out in the
composer then popped + Delivered; attachments dwell so a rich link lands),
records it as one continuous MP4, and emits a deterministic SFX cue list.render-end-card.js — fills end-card.template.html from config.end_card
(wordmark/logo_svg, stars, proof text, trust trio, CTA, colors) → still MP4.stitch.sh — crossfades chat → end card, layers the send/receive SFX (from
the cue list; the mp3s ship in assets/sfx), optionally ducks a music bed
under it, and optionally derives a 1:1 variant. All FREE ffmpeg.thread (kept short — split
long lines), the product image bound into the attachment, the end_card
(prefer a real logo_svg wordmark), theme (dark default), and an optional
background_image (a flat-lay behind the phone) + optional music bed.create-image-fal /
create-music-elevenlabs (paid, proxy-routed, billed to the Ads agent). Pass
the resulting files into the config / stitch.sh --music.create-image-fal and point background_image
at it.npx playwright install chromium) — gooseworks doctor checks both.8866b2a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.