create-image-fal
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
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
$ npx -y skills add gooseworks-ai/goose-skills --skill render-imessage-chat --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/render-imessage-chatContext preview
The summary Claude sees to decide when to auto-load this skill.
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
name: render-imessage-chat description: 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. status: active
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.
1. **Rich-link attachment** — a product/link renders as a REAL iMessage URL preview: the image (top-rounded corners) flush against a gray meta card with a bold title + domain subtitle + chevron. NOT a bare image with a distorted caption floating centered below it (the mockup's default `.attachment-meta`). The fix is baked into `record-chat.js`'s injected style, theme-aware. 2. **No text bleed** — every bubble fits. This is an AUTHORING rule the recipe enforces: split any long line into multiple short bubbles (see the two `spec` lines in `config.example.json`). The renderer honors the thread it's given. 3. **A designed end card** — wordmark + ⭐ proof row + trust trio + CTA pill (`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]1. **`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. 2. **`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. 3. **`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.
AI-rendered text — the bubbles, rich-link title/domain, and end-card copy are all real HTML/PIL, never invented by a model.
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.
not generated here — the recipe gates them to `create-image-fal` / `create-music-elevenlabs` (paid, proxy-routed, billed to the Ads agent). Pass the resulting files into the config / `stitch.sh --music`.
the phone, or generate one via `create-image-fal` and point `background_image` at it.
install chromium`) — `gooseworks doctor` checks both.
Put your AI agent on the growth team. Research customers and competitors, analyze what is working, create the next campaign, and learn from the result.
Repo: gooseworks-ai/goose-skills
Generate or edit an image via any FAL image model (nano-banana edit, gpt-image, flux, ...), ROUTED THROUGH THE fal-proxy so it bills the Ads agent. image_urls…
Generate a single photoreal or designed image with OpenAI gpt-image via fal.ai. Supports gpt-image-1 (default, fixed sizes — the FAL fallback for Higgsfield's…
Generate an instrumental music bed via ElevenLabs Music, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Trims any sparse intro, loudnorm, fades…
Image-to-video (or text-to-video) via any FAL video model (Kling, Seedance, Veo), ROUTED THROUGH THE GooseWorks fal-proxy so the call bills the Ads agent. The…
Generate a voiceover (VO) clip via ElevenLabs text-to-speech, ROUTED THROUGH THE elevenlabs-proxy so it bills the Ads agent. Voice id + script text come from…
Scrape competitor ads from Google Ads by domain. Returns ad creatives, formats, and campaign details. Use for competitive ad research and messaging analysis.